- 4e-configLP - Page 1
###############################################################################
# #
# IAR Assembler V5.30.1.50284/W32 for MSP430 20/Dec/2013 02:05:26 #
# Copyright 1996-2011 IAR Systems AB. #
# #
# Target option = MSP430 #
# Source file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-configLP.s43#
# List file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\4e-configLP.lst#
# Object file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\4e-configLP.r43#
# Command line = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-configLP.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 ; configure 4e4th for MSP430-LaunchPad
===================================
2 000000
3 000000 RSEG CODE ; place
program in 'CODE' segment
4 000000
5 000000 link SET 0 ; initial dictionary
link
6 000000
7 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
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__)
- 4e-configLP - Page 2
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__)
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__)
- 4e-configLP - Page 3
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__)
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__)
- 4e-configLP - Page 4
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__)
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__)
- 4e-configLP - Page 5
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__)
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__)
- 4e-configLP - Page 6
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__)
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__)
- 4e-configLP - Page 7
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__)
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__)
- 4e-configLP - Page 8
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__)
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__)
- 4e-configLP - Page 9
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__)
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
- 4e-configLP - Page 10
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;
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
- 4e-configLP - Page 11
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
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.
- 4e-configLP - Page 12
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__ /*
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
- 4e-configLP - Page 13
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- */
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) /*
- 4e-configLP - Page 14
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) /*
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 */
- 4e-configLP - Page 15
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) /*
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
- 4e-configLP - Page 16
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 */
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
- 4e-configLP - Page 17
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
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
- 4e-configLP - Page 18
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
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
- 4e-configLP - Page 19
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__ /*
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_)
- 4e-configLP - Page 20
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_)
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_)
- 4e-configLP - Page 21
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
*/
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
- 4e-configLP - Page 22
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) /*
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 */
- 4e-configLP - Page 23
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 /***********************************************
*************
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 */
- 4e-configLP - Page 24
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 */
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_)
- 4e-configLP - Page 25
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 */
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 */
- 4e-configLP - Page 26
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
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 */
- 4e-configLP - Page 27
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) /*
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
- 4e-configLP - Page 28
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 */
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
- 4e-configLP - Page 29
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
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 "
- 4e-configLP - Page 30
*/
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 */
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
- 4e-configLP - Page 31
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
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
8 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.
- 4e-configLP - Page 32
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 // D800-FDFF
34 000000 #define ISRSTART (0xFE00)
35 000000 #define ISREND (0xFFDF)
36 000000 #define MAINSEG (512) // wozu ?? mk
37 000000 #define INFOSEG (128) // ?? mk
38 000000
39 000000 // ; FORTH REGISTER USAGE
40 000000
41 000000 // ; Forth virtual machine
42 000000 // PC = R00
43 000000 #define RSP SP // R01
44 000000 // R02 = SR statusregister
45 000000 // R03 = CG constantgenerator
46 000000 #define PSP R4
47 000000 #define IP R5
48 000000 #define W R6
49 000000 #define TOS R7
50 000000
51 000000 // ; Loop parameters in registers
52 000000 #define INDEX R8
53 000000 #define LIMIT R9
54 000000
55 000000 // ; Scratch registers
56 000000 #define X R10
57 000000 #define Y R11
58 000000 #define Q R12
59 000000 #define T R13
60 000000 // nc R14
61 000000 // nc R15
62 000000
63 000000
64 000000 // ; T.I. Integer Subroutines Definitions
65 000000 #define IROP1 TOS
66 000000 #define IROP2L R10
67 000000 #define IROP2M R11
68 000000 #define IRACL R12
69 000000 #define IRACM R13
70 000000 #define IRBT W
71 000000
72 000000 // ; INDIRECT-THREADED NEXT
73 000000
78 000000
79 000000 // ; BRANCH DESTINATION (RELATIVE BRANCH)
80 000000 // ; For relative branch addresses, i.e., a
branch is ADD @IP,IP
81 000000
85 000000
86 000000 // ; HEADER CONSTRUCTION MACROS
87 000000
- 4e-configLP - Page 33
102 000000
111 000000
126 000000
9 000000
10 000000
11 000000 ; production fuse bits
12 000000 FFFF PROFUSE: DW 0xFFFF ; burn fuse to prohibit
WIPE
13 000002
14 000002
15 000002 1D version: DB (verend-ver0)
16 000003 204D53503433*ver0: DB ' MSP430G2553 4e4th LaunchPad '
17 000020 EVEN 0x20 ; use blank as padding
byte
18 000020 verend:
19 000020
20 000020 16 stamp: DB (stampend-stamp0)
21 000021 446563203230*stamp0: DB __date__,' ',__time__
22 000037 stampend:
23 000037
24 000037
25 000037 ; We #include the following source files, rather
than compiling them
26 000037 ; separately, so that they can inherit the value
of 'link'.
27 000037
28 000037 #include "4e-core430.s43"
1 000037 ; ----------------------------------------------
------------------------
2 000037 ; 4e4th is a Forth based on CamelForth
3 000037 ; for the Texas Instruments MSP430
4 000037 ;
5 000037 ; This program is free software; you can
redistribute it and/or modify
6 000037 ; it under the terms of the GNU General Public
License as published by
7 000037 ; the Free Software Foundation; either version 3
of the License, or
8 000037 ; (at your option) any later version.
9 000037 ;
10 000037 ; This program is distributed in the hope that
it will be useful,
11 000037 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 000037 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 000037 ; GNU General Public License for more details.
14 000037 ;
15 000037 ; You should have received a copy of the GNU
General Public License
16 000037 ; along with this program. If not, see
.
17 000037 ;
18 000037 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 000037
20 000037 ; ----------------------------------------------
------------------------
21 000037 ; 4e-core430.s43 - Machine Language Primitives
22 000037 ; ----------------------------------------------
------------------------
23 000037
24 000037 ; Revision History
25 000037 ; 1 mar 09 bjr - changed Flash write and erase
primitives to correctly
26 000037 ; write RAM outside Info Flash and Main
Flash address limits.
27 000037
28 000037
29 000000 EXTERN UP,UAREA,PADAREA,LSTACK,PSTACK,R
STACK
30 000000 EXTERN TIBAREA,RAMDICT,ROMDICT
31 000000 EXTERN TIB_SIZE,UAREA_SIZE,VARAREA,VAR_
SIZE,nullirq
32 000037
- 4e-configLP - Page 34
33 000037
34 000037
35 000037 ; ----------------------------------------------
------------------------
36 000037 ; INTERPRETER LOGIC
37 000037 ; ITC NEXT is defined as
38 000037 ; MOV @IP+,W ; 2 fetch word address
into W
39 000037 ; MOV @W+,PC ; 2 fetch code address
into PC, W=PFA
40 000037
41 000037 ;C EXECUTE i*x xt -- j*x execute Forth word
at 'xt'
42 000037 HEADER EXECUTE,7,'EXECUTE',DOCODE
42.1 000000 PUBLIC EXECUTE
42.2 000037 0000 DW link
42.3 000039 FF DB 0FFh ; not immediate
42.4 00003A link SET $
42.5 00003A 07 DB 7
42.6 00003B 455845435554* DB 'EXECUTE'
42.7 000042 EVEN
42.8 000042 IF 'DOCODE'='DOCODE'
42.9 000042 .... EXECUTE: DW $+2
42.10 000044 ELSE
42.11 000044 EXECUTE: DW DOCODE
42.12 000044 ENDIF
42.13 000044 ENDM
43 000044 0647 MOV TOS,W ; 1 put word address
into W
44 000046 3744 MOV @PSP+,TOS ; 2 fetch new TOS
45 000048 3046 MOV @W+,PC ; 2 fetch code address
into PC, W=PFA
46 00004A
47 00004A ;Z lit -- x fetch inline literal to
stack
48 00004A ; This is the primtive compiled by LITERAL.
49 00004A HEADER lit,3,'lit',DOCODE
49.1 000000 PUBLIC lit
49.2 00004A .... DW link
49.3 00004C FF DB 0FFh ; not immediate
49.4 00004D link SET $
49.5 00004D 03 DB 3
49.6 00004E 6C6974 DB 'lit'
49.7 000051 00 EVEN
49.8 000052 IF 'DOCODE'='DOCODE'
49.9 000052 .... lit: DW $+2
49.10 000054 ELSE
49.11 000054 lit: DW DOCODE
49.12 000054 ENDIF
49.13 000054 ENDM
50 000054 2483 SUB #2,PSP ; 1 push old TOS..
51 000056 84470000 MOV TOS,0(PSP) ; 4 ..onto stack
52 00005A 3745 MOV @IP+,TOS ; 2 fetch new TOS
value
53 00005C NEXT ; 4
53.1 00005C 3645 MOV @IP+,W // ; fetch word address
into W
53.2 00005E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
53.3 000060 ENDM
54 000060
55 000060 ;C EXIT -- exit a colon
definition
56 000060 HEADER EXIT,4,'EXIT',DOCODE
56.1 000000 PUBLIC EXIT
56.2 000060 .... DW link
56.3 000062 FF DB 0FFh ; not immediate
56.4 000063 link SET $
56.5 000063 04 DB 4
56.6 000064 45584954 DB 'EXIT'
56.7 000068 EVEN
56.8 000068 IF 'DOCODE'='DOCODE'
56.9 000068 .... EXIT: DW $+2
56.10 00006A ELSE
56.11 00006A EXIT: DW DOCODE
56.12 00006A ENDIF
56.13 00006A ENDM
57 00006A 3541 MOV @RSP+,IP ; 2 pop old IP from
- 4e-configLP - Page 35
return stack
58 00006C NEXT ; 4
58.1 00006C 3645 MOV @IP+,W // ; fetch word address
into W
58.2 00006E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
58.3 000070 ENDM
59 000070
60 000070 ; ----------------------------------------------
------------------------
61 000070 ; DEFINING WORDS - ROMable ITC model
62 000070
63 000070 ; DOCOLON enters a new high-level thread (colon
definition.)
64 000070 ; (internal code fragment, not a Forth
word)
65 000000 PUBLIC DOCOLON
66 000070 DOCOLON:
67 000070 0512 PUSH IP ; 3 save old IP on
return stack
68 000072 0546 MOV W,IP ; 1 set new IP to
PFA
69 000074 NEXT ; 4
69.1 000074 3645 MOV @IP+,W // ; fetch word address
into W
69.2 000076 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
69.3 000078 ENDM
70 000078
71 000078 ;C VARIABLE -- define a Forth
VARIABLE
72 000078 ; CREATE CELL ALLOT ;
73 000078 ; Action of ROMable variable is the same as
CREATE; it builds a
74 000078 ; constant holding the RAM address. See CREATE
in hilvl430.s43.
75 000078 HEADER VARIABLE,8,'VARIABLE',DOCOLON
75.1 000000 PUBLIC VARIABLE
75.2 000078 .... DW link
75.3 00007A FF DB 0FFh ; not immediate
75.4 00007B link SET $
75.5 00007B 08 DB 8
75.6 00007C 564152494142* DB 'VARIABLE'
75.7 000084 EVEN
75.8 000084 IF 'DOCOLON'='DOCODE'
75.9 000084 VARIABLE: DW $+2
75.10 000084 ELSE
75.11 000084 .... VARIABLE: DW DOCOLON
75.12 000086 ENDIF
75.13 000086 ENDM
76 000086 ............* DW CREATE,CELL,ALLOT,EXIT
77 00008E
78 00008E ;C CONSTANT -- define a Forth
constant
79 00008E ; (machine code fragment)
81 00008E ; Note that the constant is stored in Code
space.
82 00008E HEADER CONSTANT,8,'CONSTANT',DOCOLON
82.1 000000 PUBLIC CONSTANT
82.2 00008E .... DW link
82.3 000090 FF DB 0FFh ; not immediate
82.4 000091 link SET $
82.5 000091 08 DB 8
82.6 000092 434F4E535441* DB 'CONSTANT'
82.7 00009A EVEN
82.8 00009A IF 'DOCOLON'='DOCODE'
82.9 00009A CONSTANT: DW $+2
82.10 00009A ELSE
82.11 00009A .... CONSTANT: DW DOCOLON
82.12 00009C ENDIF
82.13 00009C ENDM
83 00009C ............ DW BUILDS,ICOMMA,XDOES
84 0000A2 ; DOCON, code action of CONSTANT,
85 0000A2 ; entered with W=Parameter Field Adrs
86 0000A2 ; This is also the action of VARIABLE (Harvard
model)
87 0000A2 ; This is also the action of CREATE (Harvard
- 4e-configLP - Page 36
model)
88 000000 PUBLIC DOCON
89 000000 PUBLIC docreate
90 000000 PUBLIC DOVAR
91 0000A2 docreate: ; -- a-addr ; ROMable CREATE fetches
address from PFA
92 0000A2 DOVAR: ; -- a-addr ; ROMable VARIABLE
fetches address from PFA
93 0000A2 DOCON: ; -- x ; CONSTANT fetches cell
from PFA to TOS
94 0000A2 2483 SUB #2,PSP ; make room on
stack
95 0000A4 84470000 MOV TOS,0(PSP)
96 0000A8 2746 MOV @W,TOS ; fetch from parameter
field to TOS
97 0000AA NEXT
97.1 0000AA 3645 MOV @IP+,W // ; fetch word address
into W
97.2 0000AC 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
97.3 0000AE ENDM
98 0000AE
99 0000AE ; DOCREATE's action is for a table in RAM.
100 0000AE ; DOROM is the code action for a table in
ROM;
101 0000AE ; it returns the address of the parameter
field.
102 000000 PUBLIC DOROM
103 0000AE DOROM: ; -- a-addr ; Table in ROM: get PFA
into TOS
104 0000AE 2483 SUB #2,PSP
105 0000B0 84470000 MOV TOS,0(PSP)
106 0000B4 0746 MOV W,TOS
107 0000B6 NEXT
107.1 0000B6 3645 MOV @IP+,W // ; fetch word address
into W
107.2 0000B8 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
107.3 0000BA ENDM
108 0000BA
109 0000BA ;Z USER n -- define user variable
'n'
110 0000BA ; (machine code fragment)
Flashable model
111 0000BA HEADER USER,4,'USER',DOCOLON
111.1 000000 PUBLIC USER
111.2 0000BA .... DW link
111.3 0000BC FF DB 0FFh ; not immediate
111.4 0000BD link SET $
111.5 0000BD 04 DB 4
111.6 0000BE 55534552 DB 'USER'
111.7 0000C2 EVEN
111.8 0000C2 IF 'DOCOLON'='DOCODE'
111.9 0000C2 USER: DW $+2
111.10 0000C2 ELSE
111.11 0000C2 .... USER: DW DOCOLON
111.12 0000C4 ENDIF
111.13 0000C4 ENDM
112 0000C4 ............ DW BUILDS,ICOMMA,XDOES
113 000000 PUBLIC DOUSER
114 0000CA DOUSER: ; -- a-addr ; add constant to User
Pointer, result in TOS
115 0000CA 2483 SUB #2,PSP
116 0000CC 84470000 MOV TOS,0(PSP)
117 0000D0 2746 MOV @W,TOS
118 0000D2 1752.... ADD &UP,TOS
119 0000D6 NEXT
119.1 0000D6 3645 MOV @IP+,W // ; fetch word address
into W
119.2 0000D8 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
119.3 0000DA ENDM
120 0000DA
121 0000DA ; DOALIAS used to build a word which performs
the action of
122 0000DA ; another word. Its action is to fetch the
"alias" CFA from
123 0000DA ; the parameter field, and execute that, e.g.
- 4e-configLP - Page 37
DOES> I@ EXECUTE ;
124 0000DA ; This is currently used only within the Forth
kernel.
125 000000 PUBLIC DOALIAS
126 0000DA DOALIAS: ; -- ; fetch CFA of word to
execute
127 0000DA 2646 MOV @W,W ; 2 fetch from parameter
field to W
128 0000DC 3046 MOV @W+,PC ; 2 fetch code address
into PC, W=PFA
129 0000DE
130 0000DE ; DODOES is the code action of a DOES> clause.
For ITC Forth:
131 0000DE ; defined word: CFA: doescode
132 0000DE ; PFA: parameter field
133 0000DE ;
134 0000DE ; doescode: MOV #DODOES,PC ; 16-bit direct
jump, in two cells
135 0000DE ; high-level thread
136 0000DE ;
137 0000DE ; Note that we use JMP DODOES instead of CALL
#DODOES because we can
138 0000DE ; efficiently obtain the thread address. DODOES
is entered with W=PFA.
139 0000DE ; It enters the high-level thread with the
address of the parameter
140 0000DE ; field on top of stack.
141 0000DE
142 000000 PUBLIC dodoes
143 0000DE dodoes: ; -- a-addr ; 3 for MOV #DODOES,PC
144 0000DE 2483 SUB #2,PSP ; 1 make room on
stack
145 0000E0 84470000 MOV TOS,0(PSP) ; 4
146 0000E4 0746 MOV W,TOS ; 1 put defined word's
PFA in TOS
147 0000E6 0512 PUSH IP ; 3 save old IP on
return stack
148 0000E8 1546FEFF MOV -2(W),IP ; 3 fetch adrs of
doescode from defined
word
149 0000EC 2552 ADD #4,IP ; 1 skip MOV instruction
to get thread
adrs
150 0000EE NEXT ; 4
150.1 0000EE 3645 MOV @IP+,W // ; fetch word address
into W
150.2 0000F0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
150.3 0000F2 ENDM
151 0000F2
152 0000F2 ; OPTION 1 ; OPTION 2
153 0000F2 ; MOV #DODOES,PC 3 ; CALL #DODOES
5
154 0000F2 ; ... ; ...
155 0000F2 ; PUSH IP 3 ; POP W
2
156 0000F2 ; MOVE -2(W),IP 3 ; PUSH IP
3
157 0000F2 ; ADD #4,IP 1 ; MOV W,IP
1
158 0000F2
159 0000F2
160 0000F2 ; ----------------------------------------------
------------------------
161 0000F2 ; STACK OPERATIONS
162 0000F2
163 0000F2 ;C DUP x -- x x duplicate top of
stack
164 0000F2 HEADER DUP,3,'DUP',DOCODE
164.1 000000 PUBLIC DUP
164.2 0000F2 .... DW link
164.3 0000F4 FF DB 0FFh ; not immediate
164.4 0000F5 link SET $
164.5 0000F5 03 DB 3
164.6 0000F6 445550 DB 'DUP'
164.7 0000F9 00 EVEN
164.8 0000FA IF 'DOCODE'='DOCODE'
164.9 0000FA .... DUP: DW $+2
- 4e-configLP - Page 38
164.10 0000FC ELSE
164.11 0000FC DUP: DW DOCODE
164.12 0000FC ENDIF
164.13 0000FC ENDM
165 0000FC 2483 PUSHTOS: SUB #2,PSP ; 1 push old
TOS..
166 0000FE 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
167 000102 NEXT ; 4
167.1 000102 3645 MOV @IP+,W // ; fetch word address
into
W
167.2 000104 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
167.3 000106 ENDM
168 000106
169 000106 ;C ?DUP x -- 0 | x x DUP if nonzero
170 000106 HEADER QDUP,4,'?DUP',DOCODE
170.1 000000 PUBLIC QDUP
170.2 000106 .... DW link
170.3 000108 FF DB 0FFh ; not immediate
170.4 000109 link SET $
170.5 000109 04 DB 4
170.6 00010A 3F445550 DB '?DUP'
170.7 00010E EVEN
170.8 00010E IF 'DOCODE'='DOCODE'
170.9 00010E .... QDUP: DW $+2
170.10 000110 ELSE
170.11 000110 QDUP: DW DOCODE
170.12 000110 ENDIF
170.13 000110 ENDM
171 000110 0793 CMP #0,TOS ; 1 test for
TOS nonzero
172 000112 F423 JNZ PUSHTOS ; 2
173 000114 NODUP: NEXT ; 4
173.1 000114 3645 MOV @IP+,W // ; fetch word address
into
W
173.2 000116 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
173.3 000118 ENDM
174 000118
175 000118 ;C DROP x -- drop top of stack
176 000118 HEADER DROP,4,'DROP',DOCODE
176.1 000000 PUBLIC DROP
176.2 000118 .... DW link
176.3 00011A FF DB 0FFh ; not immediate
176.4 00011B link SET $
176.5 00011B 04 DB 4
176.6 00011C 44524F50 DB 'DROP'
176.7 000120 EVEN
176.8 000120 IF 'DOCODE'='DOCODE'
176.9 000120 .... DROP: DW $+2
176.10 000122 ELSE
176.11 000122 DROP: DW DOCODE
176.12 000122 ENDIF
176.13 000122 ENDM
177 000122 3744 MOV @PSP+,TOS ; 2
178 000124 NEXT ; 4
178.1 000124 3645 MOV @IP+,W // ; fetch word address
into
W
178.2 000126 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
178.3 000128 ENDM
179 000128
180 000128 ;C SWAP x1 x2 -- x2 x1 swap top two
items
181 000128 HEADER SWAP,4,'SWAP',DOCODE
181.1 000000 PUBLIC SWAP
181.2 000128 .... DW link
181.3 00012A FF DB 0FFh ; not immediate
181.4 00012B link SET $
181.5 00012B 04 DB 4
181.6 00012C 53574150 DB 'SWAP'
- 4e-configLP - Page 39
181.7 000130 EVEN
181.8 000130 IF 'DOCODE'='DOCODE'
181.9 000130 .... SWAP: DW $+2
181.10 000132 ELSE
181.11 000132 SWAP: DW DOCODE
181.12 000132 ENDIF
181.13 000132 ENDM
182 000132 2644 MOV @PSP,W ; 2
183 000134 84470000 MOV TOS,0(PSP) ; 4
184 000138 0746 MOV W,TOS ; 1
185 00013A NEXT ; 4
185.1 00013A 3645 MOV @IP+,W // ; fetch word address
into
W
185.2 00013C 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
185.3 00013E ENDM
186 00013E
187 00013E ;C OVER x1 x2 -- x1 x2 x1 per stack
diagram
188 00013E HEADER OVER,4,'OVER',DOCODE
188.1 000000 PUBLIC OVER
188.2 00013E .... DW link
188.3 000140 FF DB 0FFh ; not immediate
188.4 000141 link SET $
188.5 000141 04 DB 4
188.6 000142 4F564552 DB 'OVER'
188.7 000146 EVEN
188.8 000146 IF 'DOCODE'='DOCODE'
188.9 000146 .... OVER: DW $+2
188.10 000148 ELSE
188.11 000148 OVER: DW DOCODE
188.12 000148 ENDIF
188.13 000148 ENDM
189 000148 2644 MOV @PSP,W ; 2
190 00014A 2483 SUB #2,PSP ; 2
191 00014C 84470000 MOV TOS,0(PSP) ; 4
192 000150 0746 MOV W,TOS ; 1
193 000152 NEXT ; 4
193.1 000152 3645 MOV @IP+,W // ; fetch word address
into
W
193.2 000154 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
193.3 000156 ENDM
194 000156
195 000156 ;C ROT x1 x2 x3 -- x2 x3 x1 per stack
diagram
196 000156 HEADER ROT,3,'ROT',DOCODE
196.1 000000 PUBLIC ROT
196.2 000156 .... DW link
196.3 000158 FF DB 0FFh ; not immediate
196.4 000159 link SET $
196.5 000159 03 DB 3
196.6 00015A 524F54 DB 'ROT'
196.7 00015D 00 EVEN
196.8 00015E IF 'DOCODE'='DOCODE'
196.9 00015E .... ROT: DW $+2
196.10 000160 ELSE
196.11 000160 ROT: DW DOCODE
196.12 000160 ENDIF
196.13 000160 ENDM
197 000160 2644 MOV @PSP,W ; 2 fetch
x2
198 000162 84470000 MOV TOS,0(PSP) ; 4 store
x3
199 000166 17440200 MOV 2(PSP),TOS ; 3 fetch
x1
200 00016A 84460200 MOV W,2(PSP) ; 4 store
x2
201 00016E NEXT ; 4
201.1 00016E 3645 MOV @IP+,W // ; fetch word address
into
W
201.2 000170 3046 MOV @W+,PC // ; fetch code address
into PC,
- 4e-configLP - Page 40
W=PFA
201.3 000172 ENDM
202 000172
203 000172 ;X NIP x1 x2 -- x2 per stack
diagram
204 000172 HEADER NIP,3,'NIP',DOCODE
204.1 000000 PUBLIC NIP
204.2 000172 .... DW link
204.3 000174 FF DB 0FFh ; not immediate
204.4 000175 link SET $
204.5 000175 03 DB 3
204.6 000176 4E4950 DB 'NIP'
204.7 000179 00 EVEN
204.8 00017A IF 'DOCODE'='DOCODE'
204.9 00017A .... NIP: DW $+2
204.10 00017C ELSE
204.11 00017C NIP: DW DOCODE
204.12 00017C ENDIF
204.13 00017C ENDM
205 00017C 2453 ADD #2,PSP ; 1
206 00017E NEXT ; 4
206.1 00017E 3645 MOV @IP+,W // ; fetch word address
into
W
206.2 000180 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
206.3 000182 ENDM
207 000182 ; Das funktioniert, weil TOS im Register
ist.
208 000182 ; TOS beleibt dort unverändert, derweil der PSP
um eins erhöht wird.
209 000182 ; Das entspricht einem DROP ohne den TOS neu zu
laden.
210 000182 ; cool. mk
211 000182
212 000182 ;C >R x -- R: -- x push to return
stack
213 000182 HEADER TOR,2,'>R',DOCODE
213.1 000000 PUBLIC TOR
213.2 000182 .... DW link
213.3 000184 FF DB 0FFh ; not immediate
213.4 000185 link SET $
213.5 000185 02 DB 2
213.6 000186 3E52 DB '>R'
213.7 000188 EVEN
213.8 000188 IF 'DOCODE'='DOCODE'
213.9 000188 .... TOR: DW $+2
213.10 00018A ELSE
213.11 00018A TOR: DW DOCODE
213.12 00018A ENDIF
213.13 00018A ENDM
214 00018A 0712 PUSH TOS
215 00018C 3744 MOV @PSP+,TOS
216 00018E NEXT
216.1 00018E 3645 MOV @IP+,W // ; fetch word address
into W
216.2 000190 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
216.3 000192 ENDM
217 000192
218 000192 ;C R> -- x R: x -- pop from return
stack
219 000192 HEADER RFROM,2,'R>',DOCODE
219.1 000000 PUBLIC RFROM
219.2 000192 .... DW link
219.3 000194 FF DB 0FFh ; not immediate
219.4 000195 link SET $
219.5 000195 02 DB 2
219.6 000196 523E DB 'R>'
219.7 000198 EVEN
219.8 000198 IF 'DOCODE'='DOCODE'
219.9 000198 .... RFROM: DW $+2
219.10 00019A ELSE
219.11 00019A RFROM: DW DOCODE
219.12 00019A ENDIF
219.13 00019A ENDM
220 00019A 2483 SUB #2,PSP ; 2
- 4e-configLP - Page 41
221 00019C 84470000 MOV TOS,0(PSP) ; 4
222 0001A0 3741 MOV @RSP+,TOS
223 0001A2 NEXT
223.1 0001A2 3645 MOV @IP+,W // ; fetch word address
into W
223.2 0001A4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
223.3 0001A6 ENDM
224 0001A6
225 0001A6 ;C R@ -- x R: x -- x fetch from rtn
stk
226 0001A6 HEADER RFETCH,2,'R@',DOCODE
226.1 000000 PUBLIC RFETCH
226.2 0001A6 .... DW link
226.3 0001A8 FF DB 0FFh ; not immediate
226.4 0001A9 link SET $
226.5 0001A9 02 DB 2
226.6 0001AA 5240 DB 'R@'
226.7 0001AC EVEN
226.8 0001AC IF 'DOCODE'='DOCODE'
226.9 0001AC .... RFETCH: DW $+2
226.10 0001AE ELSE
226.11 0001AE RFETCH: DW DOCODE
226.12 0001AE ENDIF
226.13 0001AE ENDM
227 0001AE 2483 SUB #2,PSP
228 0001B0 84470000 MOV TOS,0(PSP)
229 0001B4 2741 MOV @RSP,TOS
230 0001B6 NEXT
230.1 0001B6 3645 MOV @IP+,W // ; fetch word address
into W
230.2 0001B8 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
230.3 0001BA ENDM
231 0001BA
232 0001BA ;Z SP@ -- a-addr get data stack
pointer
233 0001BA HEADER SPFETCH,3,'SP@',DOCODE
233.1 000000 PUBLIC SPFETCH
233.2 0001BA .... DW link
233.3 0001BC FF DB 0FFh ; not immediate
233.4 0001BD link SET $
233.5 0001BD 03 DB 3
233.6 0001BE 535040 DB 'SP@'
233.7 0001C1 00 EVEN
233.8 0001C2 IF 'DOCODE'='DOCODE'
233.9 0001C2 .... SPFETCH: DW $+2
233.10 0001C4 ELSE
233.11 0001C4 SPFETCH: DW DOCODE
233.12 0001C4 ENDIF
233.13 0001C4 ENDM
234 0001C4 2483 SUB #2,PSP
235 0001C6 84470000 MOV TOS,0(PSP)
236 0001CA 0744 MOV PSP,TOS
237 0001CC NEXT
237.1 0001CC 3645 MOV @IP+,W // ; fetch word address
into W
237.2 0001CE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
237.3 0001D0 ENDM
238 0001D0
239 0001D0 ;Z SP! a-addr -- set data stack
pointer
240 0001D0 HEADER SPSTORE,3,'SP!',DOCODE
240.1 000000 PUBLIC SPSTORE
240.2 0001D0 .... DW link
240.3 0001D2 FF DB 0FFh ; not immediate
240.4 0001D3 link SET $
240.5 0001D3 03 DB 3
240.6 0001D4 535021 DB 'SP!'
240.7 0001D7 00 EVEN
240.8 0001D8 IF 'DOCODE'='DOCODE'
240.9 0001D8 .... SPSTORE: DW $+2
240.10 0001DA ELSE
240.11 0001DA SPSTORE: DW DOCODE
240.12 0001DA ENDIF
240.13 0001DA ENDM
241 0001DA 0447 MOV TOS,PSP
- 4e-configLP - Page 42
242 0001DC 3744 MOV @PSP+,TOS ; 2
243 0001DE NEXT
243.1 0001DE 3645 MOV @IP+,W // ; fetch word address
into W
243.2 0001E0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
243.3 0001E2 ENDM
244 0001E2
245 0001E2 ;Z RP@ -- a-addr get return stack
pointer
246 0001E2 HEADER RPFETCH,3,'RP@',DOCODE
246.1 000000 PUBLIC RPFETCH
246.2 0001E2 .... DW link
246.3 0001E4 FF DB 0FFh ; not immediate
246.4 0001E5 link SET $
246.5 0001E5 03 DB 3
246.6 0001E6 525040 DB 'RP@'
246.7 0001E9 00 EVEN
246.8 0001EA IF 'DOCODE'='DOCODE'
246.9 0001EA .... RPFETCH: DW $+2
246.10 0001EC ELSE
246.11 0001EC RPFETCH: DW DOCODE
246.12 0001EC ENDIF
246.13 0001EC ENDM
247 0001EC 2483 SUB #2,PSP
248 0001EE 84470000 MOV TOS,0(PSP)
249 0001F2 0741 MOV RSP,TOS
250 0001F4 NEXT
250.1 0001F4 3645 MOV @IP+,W // ; fetch word address
into W
250.2 0001F6 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
250.3 0001F8 ENDM
251 0001F8
252 0001F8 ;Z RP! a-addr -- set return stack
pointer
253 0001F8 HEADER RPSTORE,3,'RP!',DOCODE
253.1 000000 PUBLIC RPSTORE
253.2 0001F8 .... DW link
253.3 0001FA FF DB 0FFh ; not immediate
253.4 0001FB link SET $
253.5 0001FB 03 DB 3
253.6 0001FC 525021 DB 'RP!'
253.7 0001FF 00 EVEN
253.8 000200 IF 'DOCODE'='DOCODE'
253.9 000200 .... RPSTORE: DW $+2
253.10 000202 ELSE
253.11 000202 RPSTORE: DW DOCODE
253.12 000202 ENDIF
253.13 000202 ENDM
254 000202 0147 MOV TOS,RSP
255 000204 3744 MOV @PSP+,TOS ; 2
256 000206 NEXT
256.1 000206 3645 MOV @IP+,W // ; fetch word address
into W
256.2 000208 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
256.3 00020A ENDM
257 00020A
258 00020A ;X TUCK x1 x2 -- x2 x1 x2 per stack
diagram
259 00020A HEADER TUCK,4,'TUCK',DOCOLON
259.1 000000 PUBLIC TUCK
259.2 00020A .... DW link
259.3 00020C FF DB 0FFh ; not immediate
259.4 00020D link SET $
259.5 00020D 04 DB 4
259.6 00020E 5455434B DB 'TUCK'
259.7 000212 EVEN
259.8 000212 IF 'DOCOLON'='DOCODE'
259.9 000212 TUCK: DW $+2
259.10 000212 ELSE
259.11 000212 .... TUCK: DW DOCOLON
259.12 000214 ENDIF
259.13 000214 ENDM
260 000214 ............ DC16 SWAP,OVER,EXIT
261 00021A
262 00021A ; ----------------------------------------------
- 4e-configLP - Page 43
------------------------
263 00021A ; MEMORY OPERATIONS
264 00021A
265 00021A ;C @ a-addr -- x fetch cell from
memory
266 00021A HEADER FETCH,1,'@',DOCODE
266.1 000000 PUBLIC FETCH
266.2 00021A .... DW link
266.3 00021C FF DB 0FFh ; not immediate
266.4 00021D link SET $
266.5 00021D 01 DB 1
266.6 00021E 40 DB '@'
266.7 00021F 00 EVEN
266.8 000220 IF 'DOCODE'='DOCODE'
266.9 000220 .... FETCH: DW $+2
266.10 000222 ELSE
266.11 000222 FETCH: DW DOCODE
266.12 000222 ENDIF
266.13 000222 ENDM
267 000222 2747 MOV @TOS,TOS
268 000224 NEXT
268.1 000224 3645 MOV @IP+,W // ; fetch word address
into W
268.2 000226 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
268.3 000228 ENDM
269 000228
270 000228 ;C ! x a-addr -- store cell in
memory
271 000228 HEADER STORE,1,'!',DOCODE
271.1 000000 PUBLIC STORE
271.2 000228 .... DW link
271.3 00022A FF DB 0FFh ; not immediate
271.4 00022B link SET $
271.5 00022B 01 DB 1
271.6 00022C 21 DB '!'
271.7 00022D 00 EVEN
271.8 00022E IF 'DOCODE'='DOCODE'
271.9 00022E .... STORE: DW $+2
271.10 000230 ELSE
271.11 000230 STORE: DW DOCODE
271.12 000230 ENDIF
271.13 000230 ENDM
272 000230 B7440000 MOV @PSP+,0(TOS)
273 000234 3744 MOV @PSP+,TOS
274 000236 NEXT
274.1 000236 3645 MOV @IP+,W // ; fetch word address
into W
274.2 000238 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
274.3 00023A ENDM
275 00023A
276 00023A ;C C@ c-addr -- char fetch char from
memory
277 00023A HEADER CFETCH,2,'C@',DOCODE
277.1 000000 PUBLIC CFETCH
277.2 00023A .... DW link
277.3 00023C FF DB 0FFh ; not immediate
277.4 00023D link SET $
277.5 00023D 02 DB 2
277.6 00023E 4340 DB 'C@'
277.7 000240 EVEN
277.8 000240 IF 'DOCODE'='DOCODE'
277.9 000240 .... CFETCH: DW $+2
277.10 000242 ELSE
277.11 000242 CFETCH: DW DOCODE
277.12 000242 ENDIF
277.13 000242 ENDM
278 000242 6747 MOV.B @TOS,TOS
279 000244 NEXT
279.1 000244 3645 MOV @IP+,W // ; fetch word address
into W
279.2 000246 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
279.3 000248 ENDM
280 000248
281 000248 ;C C! char c-addr -- store char in
memory
- 4e-configLP - Page 44
282 000248 HEADER CSTORE,2,'C!',DOCODE
282.1 000000 PUBLIC CSTORE
282.2 000248 .... DW link
282.3 00024A FF DB 0FFh ; not immediate
282.4 00024B link SET $
282.5 00024B 02 DB 2
282.6 00024C 4321 DB 'C!'
282.7 00024E EVEN
282.8 00024E IF 'DOCODE'='DOCODE'
282.9 00024E .... CSTORE: DW $+2
282.10 000250 ELSE
282.11 000250 CSTORE: DW DOCODE
282.12 000250 ENDIF
282.13 000250 ENDM
283 000250 3644 MOV @PSP+,W
284 000252 C7460000 MOV.B W,0(TOS)
285 000256 3744 MOV @PSP+,TOS
286 000258 NEXT
286.1 000258 3645 MOV @IP+,W // ; fetch word address
into W
286.2 00025A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
286.3 00025C ENDM
287 00025C
288 00025C ; FLASH MEMORY OPERATIONS
289 00025C ; Note that an I! or IC! to a RAM address
>FLASHSTART will work -- it
290 00025C ; will enable the flash, write the RAM, and then
disable the flash.
291 00025C ; An FLERASE to a RAM address will merely clear
that one RAM cell.
292 00025C
293 00025C ;Z FLERASE a-addr n -- erase n bytes of
flash, full segment sizes.
294 00025C HEADER FLERASE,7,'FLERASE',DOCODE
294.1 000000 PUBLIC FLERASE
294.2 00025C .... DW link
294.3 00025E FF DB 0FFh ; not immediate
294.4 00025F link SET $
294.5 00025F 07 DB 7
294.6 000260 464C45524153* DB 'FLERASE'
294.7 000267 00 EVEN
294.8 000268 IF 'DOCODE'='DOCODE'
294.9 000268 .... FLERASE: DW $+2
294.10 00026A ELSE
294.11 00026A FLERASE: DW DOCODE
294.12 00026A ENDIF
294.13 00026A ENDM
295 00026A 3644 MOV @PSP+,W ; get address in
W
296 00026C 0756 ADD W,TOS ; TOS=end adrs
(first unerased
adrs)
297 00026E FLE_1:
298 00026E 0697 CMP TOS,W ; adr-end
299 000270 2E2C JC FLE_X ; if no borrow,
adr>=end, do
not erase
300 000272 ; is it within Main flash?
301 000272 369000C0 CMP #USERFLASHSTART,W ; flash
start
302 000276 0328 JNC FLE_VEC ; if borrow,
adrend, check
if vec
305 00027E
306 00027E FLE_VEC
307 00027E ; danger!! only for MSPG2553 apps
308 00027E ; is it within interrupt vector
flash?
309 00027E 369000FE CMP #ISRSTART,W ; flash
start
310 000282 0328 JNC FLE_INFO ; if borrow,
adrend, check
if Info
313 00028A ; /danger
314 00028A
315 00028A FLE_INFO: ; is it within Info flash?
316 00028A 36900010 CMP #INFOSTART,W
317 00028E 1F28 JNC FLE_X ; if borrow,
adrend, do not
erase
320 000296 FLE_OK: ; Address is either in Main flash, or in
Info flash.
321 000296 ; Segment Erase from flash.
322 000296 ; Assumes ACCVIE = NMIIE = OFIE = 0,
watchdog disabled.
323 000296 ; Per section 5.3.2 of MSP430 Family
User's Guide
324 000296 0212 PUSH sr
325 000298 32C2 DINT ; Disable
interrupts
326 00029A B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
327 0002A0 B24002A52801 MOV #FWKEY+ERASE,&FCTL1 ; Enable segment
erase
328 0002A6 B6430000 MOV #-1,0(W) ; Dummy write in
segment to
erase
329 0002AA B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
erase
command.
330 0002B0 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Done, set
LOCK
331 0002B6 ; EINT ; Enable
interrupts
332 0002B6 3241 POP sr
333 0002B8 ; Advance flash pointer by 512 bytes or
128 bytes
334 0002B8 ; is it within Main flash?
335 0002B8 369000C0 CMP #USERFLASHSTART,W
336 0002BC 0528 JNC FL_INFO ; if borrow,
adrend, must
be Info
339 0002C4 36508001 ADD #(MAINSEG-INFOSEG),W
340 0002C8 36508000 FL_INFO: ADD #INFOSEG,W
341 0002CC D03F JMP FLE_1 ; continue till
past end or
outside
limits
342 0002CE 3744 FLE_X: MOV @PSP+,TOS
343 0002D0 NEXT
343.1 0002D0 3645 MOV @IP+,W // ; fetch word address
into W
343.2 0002D2 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
343.3 0002D4 ENDM
344 0002D4
345 0002D4 ; Program Space (Flash) operators
346 0002D4
347 0002D4 ;Z I! x a-addr -- store cell in
Instruction memory
348 0002D4 HEADER ISTORE,2,'I!',DOCODE
348.1 000000 PUBLIC ISTORE
348.2 0002D4 .... DW link
348.3 0002D6 FF DB 0FFh ; not immediate
348.4 0002D7 link SET $
348.5 0002D7 02 DB 2
- 4e-configLP - Page 46
348.6 0002D8 4921 DB 'I!'
348.7 0002DA EVEN
348.8 0002DA IF 'DOCODE'='DOCODE'
348.9 0002DA .... ISTORE: DW $+2
348.10 0002DC ELSE
348.11 0002DC ISTORE: DW DOCODE
348.12 0002DC ENDIF
348.13 0002DC ENDM
349 0002DC 3644 MOV @PSP+,W ; get data to
write
350 0002DE 17B3 BIT #1,TOS
351 0002E0 1F20 JNZ IST_X ; if not even
address, do not
write
352 0002E2 2697 CMP @TOS,W
353 0002E4 1D24 JZ IST_X ; if memory is
desired value,
do not
write
354 0002E6 ; is it within Main flash?
355 0002E6 379000C0 CMP #USERFLASHSTART,TOS
356 0002EA 0328 JNC IST_INFO ; if borrow,
adrend, check
if Info
359 0002F2 IST_INFO: ; is it within Info flash?
360 0002F2 37900010 CMP #INFOSTART,TOS
361 0002F6 0B28 JNC IST_RAM ; if borrow,
adrend, assume
it's RAM
364 0002FE IST_OK: ; Address is either in Main flash, or in
Info flash.
365 0002FE ; Byte/word write from flash.
366 0002FE ; Assumes location to write is already
erased
367 0002FE ; Assumes ACCVIE = NMIIE = OFIE = 0,
watchdog disabled.
368 0002FE ; Per section 5.3.3 of MSP430 Family
User's Guide
369 0002FE 0212 PUSH sr
370 000300 32C2 DINT ; Disable
interrupts
371 000302 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
372 000308 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
373 00030E IST_RAM: ; If RAM, jump here to write.
FCTL1,FCTL3,EINT are superfluous
374 00030E 87460000 MOV W,0(TOS) ; Write word to
flash
location
375 000312 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
376 000318 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
377 00031E ; EINT ; Enable
interrupts
378 00031E 3241 POP sr
379 000320 3744 IST_X: MOV @PSP+,TOS ; pop new
TOS
380 000322 NEXT
380.1 000322 3645 MOV @IP+,W // ; fetch word address
into W
380.2 000324 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
380.3 000326 ENDM
381 000326
382 000326 ; write vector area - or any flash location. !!
dangerous!!
383 000326 ;Z VEC! x adr -- store x to top most
- 4e-configLP - Page 47
segment
384 000326 HEADER VECSTORE,4,'VEC!',DOCODE
384.1 000000 PUBLIC VECSTORE
384.2 000326 .... DW link
384.3 000328 FF DB 0FFh ; not immediate
384.4 000329 link SET $
384.5 000329 04 DB 4
384.6 00032A 56454321 DB 'VEC!'
384.7 00032E EVEN
384.8 00032E IF 'DOCODE'='DOCODE'
384.9 00032E .... VECSTORE: DW $+2
384.10 000330 ELSE
384.11 000330 VECSTORE: DW DOCODE
384.12 000330 ENDIF
384.13 000330 ENDM
385 000330 3644 MOV @PSP+,W ; get data to
write
386 000332 17B3 BIT #1,TOS
387 000334 F523 JNZ IST_X ; if not even
address, do not
write
388 000336 2697 CMP @TOS,W
389 000338 1124 JZ IST_X2 ; if memory is
desired value,
do not
write
390 00033A 0212 PUSH sr
391 00033C 32C2 DINT ; Disable
interrupts
392 00033E B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
393 000344 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
394 00034A 87460000 MOV W,0(TOS) ; Write word to
flash
location
395 00034E B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
396 000354 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
397 00035A ; EINT ; Enable
interrupts
398 00035A 3241 POP sr
399 00035C 3744 IST_X2: MOV @PSP+,TOS ; pop new
TOS
400 00035E NEXT
400.1 00035E 3645 MOV @IP+,W // ; fetch word address
into W
400.2 000360 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
400.3 000362 ENDM
401 000362
402 000362
403 000362
404 000362 ;Z IC! x a-addr -- store char in
Instruction memory
405 000362 HEADER ICSTORE,3,'IC!',DOCODE
405.1 000000 PUBLIC ICSTORE
405.2 000362 .... DW link
405.3 000364 FF DB 0FFh ; not immediate
405.4 000365 link SET $
405.5 000365 03 DB 3
405.6 000366 494321 DB 'IC!'
405.7 000369 00 EVEN
405.8 00036A IF 'DOCODE'='DOCODE'
405.9 00036A .... ICSTORE: DW $+2
405.10 00036C ELSE
405.11 00036C ICSTORE: DW DOCODE
405.12 00036C ENDIF
405.13 00036C ENDM
406 00036C 3644 MOV @PSP+,W ; get data to
write
407 00036E 6697 CMP.B @TOS,W
408 000370 D727 JZ IST_X ; if memory is
desired value,
do not
write
409 000372 ; is it within Main flash?
410 000372 379000C0 CMP #USERFLASHSTART,TOS
- 4e-configLP - Page 48
411 000376 0328 JNC ICST_INFO ; if borrow,
adrend, check
if Info
414 00037E ICST_INFO: ; is it within Info flash?
415 00037E 37900010 CMP #INFOSTART,TOS
416 000382 0B28 JNC ICST_RAM ; if borrow,
adrend, assume
it's RAM
419 00038A ICST_OK: ; Address is either in Main flash, or
in Info flash.
420 00038A ; Byte/word write from flash.
421 00038A ; Assumes location to write is already
erased
422 00038A ; Assumes ACCVIE = NMIIE = OFIE = 0,
watchdog disabled.
423 00038A ; Per section 5.3.3 of MSP430 Family
User's Guide
424 00038A 0212 PUSH sr
425 00038C 32C2 DINT ; Disable
interrupts
426 00038E B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
427 000394 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
428 00039A ICST_RAM: ; If RAM, jump here to write.
FCTL1,FCTL3,EINT are superfluous
429 00039A C7460000 MOV.B W,0(TOS) ; Write byte to
flash
location
430 00039E B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
431 0003A4 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
432 0003AA ; EINT ; Enable
interrupts
433 0003AA 3241 POP sr
434 0003AC B93F JMP IST_X
435 0003AE
436 0003AE /*
437 0003AE ;Z I@ a-addr -- x fetch cell from
Instruction memory
438 0003AE HEADER IFETCH,2,'I@',FETCH+2
439 0003AE
440 0003AE ;Z IC@ a-addr -- x fetch char from
Instruction memory
441 0003AE HEADER ICFETCH,3,'IC@',CFETCH+2
442 0003AE */
443 0003AE #define IFETCH FETCH
444 0003AE #define ICFETCH CFETCH
445 0003AE
446 0003AE
447 0003AE
448 0003AE ;Z D->I c-addr1 c-addr2 u -- move
Data->Code
449 0003AE ; Block move from Data space to Code space.
Flashable.
450 0003AE ; For the MSP430, this uses a "smart" algorithm
that uses word writes,
451 0003AE ; rather than byte writes, whenever possible.
Note that byte reads
452 0003AE ; are used for the source, so it need not be
aligned.
453 0003AE HEADER DTOI,4,'D->I',DOCODE
453.1 000000 PUBLIC DTOI
453.2 0003AE .... DW link
453.3 0003B0 FF DB 0FFh ; not immediate
453.4 0003B1 link SET $
453.5 0003B1 04 DB 4
453.6 0003B2 442D3E49 DB 'D->I'
- 4e-configLP - Page 49
453.7 0003B6 EVEN
453.8 0003B6 IF 'DOCODE'='DOCODE'
453.9 0003B6 .... DTOI: DW $+2
453.10 0003B8 ELSE
453.11 0003B8 DTOI: DW DOCODE
453.12 0003B8 ENDIF
453.13 0003B8 ENDM
454 0003B8 3644 MOV @PSP+,W ; dest adrs
455 0003BA 3A44 MOV @PSP+,X ; src adrs
456 0003BC 0793 CMP #0,TOS
457 0003BE 2124 JZ DTOI_X
458 0003C0 DTOI_LOOP: ; Begin flash write sequence
459 0003C0 0212 PUSH sr
460 0003C2 32C2 DINT ; Disable
interrupts
461 0003C4 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
462 0003CA B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
463 0003D0 ; If length is 1, or dest. address is
odd, do a byte write.
464 0003D0 ; Else, do a word write.
465 0003D0 1793 CMP #1,TOS
466 0003D2 0B24 JZ DTOI_BYTE
467 0003D4 16B3 BIT #1,W
468 0003D6 0920 JNZ DTOI_BYTE
469 0003D8 7B4A DTOI_WORD: MOV.B @X+,Y ; get low byte
of word
470 0003DA 7C4A MOV.B @X+,Q ; get high byte
of word
471 0003DC 8C10 SWPB Q
472 0003DE 0BDC BIS Q,Y ; merge
bytes
473 0003E0 864B0000 MOV.W Y,0(W) ; write byte to
dest
474 0003E4 2653 ADD #2,W
475 0003E6 1783 SUB #1,TOS ; another 1 will
be subtracted
below
476 0003E8 033C JMP DTOI_END
477 0003EA F64A0000 DTOI_BYTE: MOV.B @X+,0(W) ; copy byte from
src to
dest
478 0003EE 1653 ADD #1,W
479 0003F0 DTOI_END: ; End flash write sequence
480 0003F0 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
481 0003F6 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
482 0003FC ; EINT ; Enable
interrupts
483 0003FC 3241 POP sr
484 0003FE 1783 SUB #1,TOS
485 000400 DF23 JNZ DTOI_LOOP
486 000402 3744 DTOI_X: MOV @PSP+,TOS ; pop new
TOS
487 000404 NEXT
487.1 000404 3645 MOV @IP+,W // ; fetch word address
into W
487.2 000406 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
487.3 000408 ENDM
488 000408
489 000408 ; ----------------------------------------------
------------------------
490 000408 ; ARITHMETIC OPERATIONS
491 000408
492 000408 ;C + n1/u1 n2/u2 -- n3/u3 add
n1+n2
493 000408 HEADER PLUS,1,'+',DOCODE
493.1 000000 PUBLIC PLUS
493.2 000408 .... DW link
493.3 00040A FF DB 0FFh ; not immediate
493.4 00040B link SET $
493.5 00040B 01 DB 1
493.6 00040C 2B DB '+'
493.7 00040D 00 EVEN
493.8 00040E IF 'DOCODE'='DOCODE'
493.9 00040E .... PLUS: DW $+2
- 4e-configLP - Page 50
493.10 000410 ELSE
493.11 000410 PLUS: DW DOCODE
493.12 000410 ENDIF
493.13 000410 ENDM
494 000410 3754 ADD @PSP+,TOS
495 000412 NEXT
495.1 000412 3645 MOV @IP+,W // ; fetch word address
into W
495.2 000414 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
495.3 000416 ENDM
496 000416
497 000416 ;C +! n/u a-addr -- add cell to
memory
498 000416 HEADER PLUSSTORE,2,'+!',DOCODE
498.1 000000 PUBLIC PLUSSTORE
498.2 000416 .... DW link
498.3 000418 FF DB 0FFh ; not immediate
498.4 000419 link SET $
498.5 000419 02 DB 2
498.6 00041A 2B21 DB '+!'
498.7 00041C EVEN
498.8 00041C IF 'DOCODE'='DOCODE'
498.9 00041C .... PLUSSTORE: DW $+2
498.10 00041E ELSE
498.11 00041E PLUSSTORE: DW DOCODE
498.12 00041E ENDIF
498.13 00041E ENDM
499 00041E B7540000 ADD @PSP+,0(TOS)
500 000422 3744 MOV @PSP+,TOS
501 000424 NEXT
501.1 000424 3645 MOV @IP+,W // ; fetch word address
into W
501.2 000426 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
501.3 000428 ENDM
502 000428
503 000428 ;X M+ d n -- d add single to
double
504 000428 HEADER MPLUS,2,'M+',DOCODE
504.1 000000 PUBLIC MPLUS
504.2 000428 .... DW link
504.3 00042A FF DB 0FFh ; not immediate
504.4 00042B link SET $
504.5 00042B 02 DB 2
504.6 00042C 4D2B DB 'M+'
504.7 00042E EVEN
504.8 00042E IF 'DOCODE'='DOCODE'
504.9 00042E .... MPLUS: DW $+2
504.10 000430 ELSE
504.11 000430 MPLUS: DW DOCODE
504.12 000430 ENDIF
504.13 000430 ENDM
505 000430 84570200 ADD TOS,2(PSP)
506 000434 84630000 ADDC #0,0(PSP)
507 000438 3744 MOV @PSP+,TOS
508 00043A NEXT
508.1 00043A 3645 MOV @IP+,W // ; fetch word address
into W
508.2 00043C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
508.3 00043E ENDM
509 00043E
510 00043E ;C - n1/u1 n2/u2 -- n3/u3 subtract
n1-n2
511 00043E HEADER MINUS,1,'-',DOCODE
511.1 000000 PUBLIC MINUS
511.2 00043E .... DW link
511.3 000440 FF DB 0FFh ; not immediate
511.4 000441 link SET $
511.5 000441 01 DB 1
511.6 000442 2D DB '-'
511.7 000443 00 EVEN
511.8 000444 IF 'DOCODE'='DOCODE'
511.9 000444 .... MINUS: DW $+2
511.10 000446 ELSE
511.11 000446 MINUS: DW DOCODE
511.12 000446 ENDIF
- 4e-configLP - Page 51
511.13 000446 ENDM
512 000446 3644 MOV @PSP+,W
513 000448 0687 SUB TOS,W
514 00044A 0746 MOV W,TOS
515 00044C NEXT
515.1 00044C 3645 MOV @IP+,W // ; fetch word address
into W
515.2 00044E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
515.3 000450 ENDM
516 000450
517 000450 ;C AND x1 x2 -- x3 logical
AND
518 000450 HEADER ANDD,3,'AND',DOCODE
518.1 000000 PUBLIC ANDD
518.2 000450 .... DW link
518.3 000452 FF DB 0FFh ; not immediate
518.4 000453 link SET $
518.5 000453 03 DB 3
518.6 000454 414E44 DB 'AND'
518.7 000457 00 EVEN
518.8 000458 IF 'DOCODE'='DOCODE'
518.9 000458 .... ANDD: DW $+2
518.10 00045A ELSE
518.11 00045A ANDD: DW DOCODE
518.12 00045A ENDIF
518.13 00045A ENDM
519 00045A 37F4 AND @PSP+,TOS
520 00045C NEXT
520.1 00045C 3645 MOV @IP+,W // ; fetch word address
into W
520.2 00045E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
520.3 000460 ENDM
521 000460
522 000460 ;C OR x1 x2 -- x3 logical
OR
523 000460 HEADER ORR,2,'OR',DOCODE
523.1 000000 PUBLIC ORR
523.2 000460 .... DW link
523.3 000462 FF DB 0FFh ; not immediate
523.4 000463 link SET $
523.5 000463 02 DB 2
523.6 000464 4F52 DB 'OR'
523.7 000466 EVEN
523.8 000466 IF 'DOCODE'='DOCODE'
523.9 000466 .... ORR: DW $+2
523.10 000468 ELSE
523.11 000468 ORR: DW DOCODE
523.12 000468 ENDIF
523.13 000468 ENDM
524 000468 37D4 BIS @PSP+,TOS
525 00046A NEXT
525.1 00046A 3645 MOV @IP+,W // ; fetch word address
into W
525.2 00046C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
525.3 00046E ENDM
526 00046E
527 00046E ;C XOR x1 x2 -- x3 logical
XOR
528 00046E HEADER XORR,3,'XOR',DOCODE
528.1 000000 PUBLIC XORR
528.2 00046E .... DW link
528.3 000470 FF DB 0FFh ; not immediate
528.4 000471 link SET $
528.5 000471 03 DB 3
528.6 000472 584F52 DB 'XOR'
528.7 000475 00 EVEN
528.8 000476 IF 'DOCODE'='DOCODE'
528.9 000476 .... XORR: DW $+2
528.10 000478 ELSE
528.11 000478 XORR: DW DOCODE
528.12 000478 ENDIF
528.13 000478 ENDM
529 000478 37E4 XOR @PSP+,TOS
530 00047A NEXT
530.1 00047A 3645 MOV @IP+,W // ; fetch word address
- 4e-configLP - Page 52
into W
530.2 00047C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
530.3 00047E ENDM
531 00047E
532 00047E ;C INVERT x1 -- x2 bitwise
inversion
533 00047E HEADER INVERT,6,'INVERT',DOCODE
533.1 000000 PUBLIC INVERT
533.2 00047E .... DW link
533.3 000480 FF DB 0FFh ; not immediate
533.4 000481 link SET $
533.5 000481 06 DB 6
533.6 000482 494E56455254 DB 'INVERT'
533.7 000488 EVEN
533.8 000488 IF 'DOCODE'='DOCODE'
533.9 000488 .... INVERT: DW $+2
533.10 00048A ELSE
533.11 00048A INVERT: DW DOCODE
533.12 00048A ENDIF
533.13 00048A ENDM
534 00048A 37E3 XOR #-1,TOS
535 00048C NEXT
535.1 00048C 3645 MOV @IP+,W // ; fetch word address
into W
535.2 00048E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
535.3 000490 ENDM
536 000490
537 000490 ;C NEGATE x1 -- x2 two's complement
538 000490 HEADER NEGATE,6,'NEGATE',DOCODE
538.1 000000 PUBLIC NEGATE
538.2 000490 .... DW link
538.3 000492 FF DB 0FFh ; not immediate
538.4 000493 link SET $
538.5 000493 06 DB 6
538.6 000494 4E4547415445 DB 'NEGATE'
538.7 00049A EVEN
538.8 00049A IF 'DOCODE'='DOCODE'
538.9 00049A .... NEGATE: DW $+2
538.10 00049C ELSE
538.11 00049C NEGATE: DW DOCODE
538.12 00049C ENDIF
538.13 00049C ENDM
539 00049C 37E3 XOR #-1,TOS
540 00049E 1753 ADD #1,TOS
541 0004A0 NEXT
541.1 0004A0 3645 MOV @IP+,W // ; fetch word address
into W
541.2 0004A2 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
541.3 0004A4 ENDM
542 0004A4
543 0004A4 ;C 1+ n1/u1 -- n2/u2 add 1 to
TOS
544 0004A4 HEADER ONEPLUS,2,'1+',DOCODE
544.1 000000 PUBLIC ONEPLUS
544.2 0004A4 .... DW link
544.3 0004A6 FF DB 0FFh ; not immediate
544.4 0004A7 link SET $
544.5 0004A7 02 DB 2
544.6 0004A8 312B DB '1+'
544.7 0004AA EVEN
544.8 0004AA IF 'DOCODE'='DOCODE'
544.9 0004AA .... ONEPLUS: DW $+2
544.10 0004AC ELSE
544.11 0004AC ONEPLUS: DW DOCODE
544.12 0004AC ENDIF
544.13 0004AC ENDM
545 0004AC 1753 ADD #1,TOS
546 0004AE NEXT
546.1 0004AE 3645 MOV @IP+,W // ; fetch word address
into W
546.2 0004B0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
546.3 0004B2 ENDM
547 0004B2
548 0004B2 ;C 1- n1/u1 -- n2/u2 subtract 1 from
- 4e-configLP - Page 53
TOS
549 0004B2 HEADER ONEMINUS,2,'1-',DOCODE
549.1 000000 PUBLIC ONEMINUS
549.2 0004B2 .... DW link
549.3 0004B4 FF DB 0FFh ; not immediate
549.4 0004B5 link SET $
549.5 0004B5 02 DB 2
549.6 0004B6 312D DB '1-'
549.7 0004B8 EVEN
549.8 0004B8 IF 'DOCODE'='DOCODE'
549.9 0004B8 .... ONEMINUS: DW $+2
549.10 0004BA ELSE
549.11 0004BA ONEMINUS: DW DOCODE
549.12 0004BA ENDIF
549.13 0004BA ENDM
550 0004BA 1783 SUB #1,TOS
551 0004BC NEXT
551.1 0004BC 3645 MOV @IP+,W // ; fetch word address
into W
551.2 0004BE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
551.3 0004C0 ENDM
552 0004C0
553 0004C0 ;Z >< x1 -- x2 swap bytes (not
ANSI)
554 0004C0 HEADER SWAPBYTES,2,'><',DOCODE
554.1 000000 PUBLIC SWAPBYTES
554.2 0004C0 .... DW link
554.3 0004C2 FF DB 0FFh ; not immediate
554.4 0004C3 link SET $
554.5 0004C3 02 DB 2
554.6 0004C4 3E3C DB '><'
554.7 0004C6 EVEN
554.8 0004C6 IF 'DOCODE'='DOCODE'
554.9 0004C6 .... SWAPBYTES: DW $+2
554.10 0004C8 ELSE
554.11 0004C8 SWAPBYTES: DW DOCODE
554.12 0004C8 ENDIF
554.13 0004C8 ENDM
555 0004C8 8710 SWPB TOS
556 0004CA NEXT
556.1 0004CA 3645 MOV @IP+,W // ; fetch word address
into W
556.2 0004CC 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
556.3 0004CE ENDM
557 0004CE
558 0004CE ;C 2* x1 -- x2 arithmetic left
shift
559 0004CE HEADER TWOSTAR,2,'2*',DOCODE
559.1 000000 PUBLIC TWOSTAR
559.2 0004CE .... DW link
559.3 0004D0 FF DB 0FFh ; not immediate
559.4 0004D1 link SET $
559.5 0004D1 02 DB 2
559.6 0004D2 322A DB '2*'
559.7 0004D4 EVEN
559.8 0004D4 IF 'DOCODE'='DOCODE'
559.9 0004D4 .... TWOSTAR: DW $+2
559.10 0004D6 ELSE
559.11 0004D6 TWOSTAR: DW DOCODE
559.12 0004D6 ENDIF
559.13 0004D6 ENDM
560 0004D6 0757 ADD TOS,TOS
561 0004D8 NEXT
561.1 0004D8 3645 MOV @IP+,W // ; fetch word address
into W
561.2 0004DA 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
561.3 0004DC ENDM
562 0004DC
563 0004DC ;C 2/ x1 -- x2 arithmetic right
shift
564 0004DC HEADER TWOSLASH,2,'2/',DOCODE
564.1 000000 PUBLIC TWOSLASH
564.2 0004DC .... DW link
564.3 0004DE FF DB 0FFh ; not immediate
564.4 0004DF link SET $
- 4e-configLP - Page 54
564.5 0004DF 02 DB 2
564.6 0004E0 322F DB '2/'
564.7 0004E2 EVEN
564.8 0004E2 IF 'DOCODE'='DOCODE'
564.9 0004E2 .... TWOSLASH: DW $+2
564.10 0004E4 ELSE
564.11 0004E4 TWOSLASH: DW DOCODE
564.12 0004E4 ENDIF
564.13 0004E4 ENDM
565 0004E4 0711 RRA TOS
566 0004E6 NEXT
566.1 0004E6 3645 MOV @IP+,W // ; fetch word address
into W
566.2 0004E8 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
566.3 0004EA ENDM
567 0004EA
568 0004EA ;C LSHIFT x1 u -- x2 logical L shift u
places
569 0004EA HEADER LSHIFT,6,'LSHIFT',DOCODE
569.1 000000 PUBLIC LSHIFT
569.2 0004EA .... DW link
569.3 0004EC FF DB 0FFh ; not immediate
569.4 0004ED link SET $
569.5 0004ED 06 DB 6
569.6 0004EE 4C5348494654 DB 'LSHIFT'
569.7 0004F4 EVEN
569.8 0004F4 IF 'DOCODE'='DOCODE'
569.9 0004F4 .... LSHIFT: DW $+2
569.10 0004F6 ELSE
569.11 0004F6 LSHIFT: DW DOCODE
569.12 0004F6 ENDIF
569.13 0004F6 ENDM
570 0004F6 3644 MOV @PSP+,W
571 0004F8 37F01F00 AND #1Fh,TOS ; no need to
shift more than
16
572 0004FC 0324 JZ LSH_X
573 0004FE 0656 LSH_1: ADD W,W
574 000500 1783 SUB #1,TOS
575 000502 FD23 JNZ LSH_1
576 000504 0746 LSH_X: MOV W,TOS
577 000506 NEXT
577.1 000506 3645 MOV @IP+,W // ; fetch word address
into W
577.2 000508 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
577.3 00050A ENDM
578 00050A
579 00050A ;C RSHIFT x1 u -- x2 logical R shift u
places
580 00050A HEADER RSHIFT,6,'RSHIFT',DOCODE
580.1 000000 PUBLIC RSHIFT
580.2 00050A .... DW link
580.3 00050C FF DB 0FFh ; not immediate
580.4 00050D link SET $
580.5 00050D 06 DB 6
580.6 00050E 525348494654 DB 'RSHIFT'
580.7 000514 EVEN
580.8 000514 IF 'DOCODE'='DOCODE'
580.9 000514 .... RSHIFT: DW $+2
580.10 000516 ELSE
580.11 000516 RSHIFT: DW DOCODE
580.12 000516 ENDIF
580.13 000516 ENDM
581 000516 3644 MOV @PSP+,W
582 000518 37F01F00 AND #1Fh,TOS ; no need to
shift more than
16
583 00051C 0424 JZ RSH_X
584 00051E 12C3 RSH_1: CLRC
585 000520 0610 RRC W
586 000522 1783 SUB #1,TOS
587 000524 FC23 JNZ RSH_1
588 000526 0746 RSH_X: MOV W,TOS
589 000528 NEXT
589.1 000528 3645 MOV @IP+,W // ; fetch word address
into W
- 4e-configLP - Page 55
589.2 00052A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
589.3 00052C ENDM
590 00052C
591 00052C ; ----------------------------------------------
------------------------
592 00052C ; COMPARISON OPERATIONS
593 00052C
594 00052C ;C 0= n/u -- flag return true if
TOS=0
595 00052C HEADER ZEROEQUAL,2,'0=',DOCODE
595.1 000000 PUBLIC ZEROEQUAL
595.2 00052C .... DW link
595.3 00052E FF DB 0FFh ; not immediate
595.4 00052F link SET $
595.5 00052F 02 DB 2
595.6 000530 303D DB '0='
595.7 000532 EVEN
595.8 000532 IF 'DOCODE'='DOCODE'
595.9 000532 .... ZEROEQUAL: DW $+2
595.10 000534 ELSE
595.11 000534 ZEROEQUAL: DW DOCODE
595.12 000534 ENDIF
595.13 000534 ENDM
596 000534 1783 SUB #1,TOS ; borrow (clear cy)
if TOS was
0
597 000536 0777 SUBC TOS,TOS ; TOS=-1 if borrow
was set
598 000538 NEXT
598.1 000538 3645 MOV @IP+,W // ; fetch word address
into W
598.2 00053A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
598.3 00053C ENDM
599 00053C
600 00053C ;C 0< n -- flag true if TOS negative
601 00053C HEADER ZEROLESS,2,'0<',DOCODE
601.1 000000 PUBLIC ZEROLESS
601.2 00053C .... DW link
601.3 00053E FF DB 0FFh ; not immediate
601.4 00053F link SET $
601.5 00053F 02 DB 2
601.6 000540 303C DB '0<'
601.7 000542 EVEN
601.8 000542 IF 'DOCODE'='DOCODE'
601.9 000542 .... ZEROLESS: DW $+2
601.10 000544 ELSE
601.11 000544 ZEROLESS: DW DOCODE
601.12 000544 ENDIF
601.13 000544 ENDM
602 000544 0757 ADD TOS,TOS ; set cy if TOS
negative
603 000546 0777 SUBC TOS,TOS ; TOS=-1 if carry
was clear
604 000548 37E3 XOR #-1,TOS ; TOS=-1 if carry
was set
605 00054A NEXT
605.1 00054A 3645 MOV @IP+,W // ; fetch word address
into W
605.2 00054C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
605.3 00054E ENDM
606 00054E
607 00054E ;C = x1 x2 -- flag test x1=x2
608 00054E HEADER EQUAL,1,'=',DOCODE
608.1 000000 PUBLIC EQUAL
608.2 00054E .... DW link
608.3 000550 FF DB 0FFh ; not immediate
608.4 000551 link SET $
608.5 000551 01 DB 1
608.6 000552 3D DB '='
608.7 000553 00 EVEN
608.8 000554 IF 'DOCODE'='DOCODE'
608.9 000554 .... EQUAL: DW $+2
608.10 000556 ELSE
608.11 000556 EQUAL: DW DOCODE
608.12 000556 ENDIF
- 4e-configLP - Page 56
608.13 000556 ENDM
609 000556 3644 MOV @PSP+,W
610 000558 0687 SUB TOS,W ; x1-x2 in W, flags
set
611 00055A 1124 JZ TOSTRUE
612 00055C 0743 TOSFALSE: MOV #0,TOS
613 00055E NEXT
613.1 00055E 3645 MOV @IP+,W // ; fetch word address
into W
613.2 000560 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
613.3 000562 ENDM
614 000562
615 000562 ;X <> x1 x2 -- flag test not eq (not
ANSI)
616 000562 HEADER NOTEQUAL,2,'<>',DOCOLON
616.1 000000 PUBLIC NOTEQUAL
616.2 000562 .... DW link
616.3 000564 FF DB 0FFh ; not immediate
616.4 000565 link SET $
616.5 000565 02 DB 2
616.6 000566 3C3E DB '<>'
616.7 000568 EVEN
616.8 000568 IF 'DOCOLON'='DOCODE'
616.9 000568 NOTEQUAL: DW $+2
616.10 000568 ELSE
616.11 000568 .... NOTEQUAL: DW DOCOLON
616.12 00056A ENDIF
616.13 00056A ENDM
617 00056A ............ DW EQUAL,ZEROEQUAL,EXIT
618 000570
619 000570 ;C < n1 n2 -- flag test n1 n1 n2 -- flag test n1>n2,
signed
628 000584 HEADER GREATER,1,'>',DOCOLON
628.1 000000 PUBLIC GREATER
628.2 000584 .... DW link
628.3 000586 FF DB 0FFh ; not immediate
628.4 000587 link SET $
628.5 000587 01 DB 1
628.6 000588 3E DB '>'
628.7 000589 00 EVEN
628.8 00058A IF 'DOCOLON'='DOCODE'
628.9 00058A GREATER: DW $+2
628.10 00058A ELSE
628.11 00058A .... GREATER: DW DOCOLON
628.12 00058C ENDIF
628.13 00058C ENDM
629 00058C ............ DW SWAP,LESS,EXIT
630 000592
631 000592 ;C U< u1 u2 -- flag test u1 u1 u2 -- flag u1>u2 unsgd (not
ANSI)
639 0005A2 HEADER UGREATER,2,'U>',DOCOLON
639.1 000000 PUBLIC UGREATER
639.2 0005A2 .... DW link
639.3 0005A4 FF DB 0FFh ; not immediate
639.4 0005A5 link SET $
639.5 0005A5 02 DB 2
639.6 0005A6 553E DB 'U>'
639.7 0005A8 EVEN
639.8 0005A8 IF 'DOCOLON'='DOCODE'
639.9 0005A8 UGREATER: DW $+2
639.10 0005A8 ELSE
639.11 0005A8 .... UGREATER: DW DOCOLON
639.12 0005AA ENDIF
639.13 0005AA ENDM
640 0005AA ............ DW SWAP,ULESS,EXIT
641 0005B0
642 0005B0 ;C RLA n1 -- n2 f rotate left through
carry, true if carry set
643 0005B0 HEADER RLAA,3,'RLA',DOCODE
643.1 000000 PUBLIC RLAA
643.2 0005B0 .... DW link
643.3 0005B2 FF DB 0FFh ; not immediate
643.4 0005B3 link SET $
643.5 0005B3 03 DB 3
643.6 0005B4 524C41 DB 'RLA'
643.7 0005B7 00 EVEN
643.8 0005B8 IF 'DOCODE'='DOCODE'
643.9 0005B8 .... RLAA: DW $+2
643.10 0005BA ELSE
643.11 0005BA RLAA: DW DOCODE
643.12 0005BA ENDIF
643.13 0005BA ENDM
644 0005BA 0757 RLA TOS ; shift left
645 0005BC 0212 PUSH SR
646 0005BE 2483 SUB #2,PSP ; 1 push old TOS..
647 0005C0 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
648 0005C4 3241 POP SR
649 0005C6 DB2F JC TOSTRUE
650 0005C8 C93F JMP TOSFALSE
651 0005CA
652 0005CA
653 0005CA
654 0005CA ; ----------------------------------------------
------------------------
655 0005CA ; LOOP AND BRANCH OPERATIONS
656 0005CA ; These use relative branch addresses: a branch
is ADD @IP,IP
657 0005CA
658 0005CA ;Z branch -- branch
always
659 0005CA HEADER bran,6,'branch',DOCODE
659.1 000000 PUBLIC bran
659.2 0005CA .... DW link
659.3 0005CC FF DB 0FFh ; not immediate
- 4e-configLP - Page 58
659.4 0005CD link SET $
659.5 0005CD 06 DB 6
659.6 0005CE 6272616E6368 DB 'branch'
659.7 0005D4 EVEN
659.8 0005D4 IF 'DOCODE'='DOCODE'
659.9 0005D4 .... bran: DW $+2
659.10 0005D6 ELSE
659.11 0005D6 bran: DW DOCODE
659.12 0005D6 ENDIF
659.13 0005D6 ENDM
660 0005D6 2555 dobran: ADD @IP,IP ; 2
661 0005D8 NEXT ; 4
661.1 0005D8 3645 MOV @IP+,W // ; fetch word address
into W
661.2 0005DA 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
661.3 0005DC ENDM
662 0005DC
663 0005DC ;Z ?branch x -- branch if TOS
zero
664 0005DC HEADER qbran,7,'?branch',DOCODE
664.1 000000 PUBLIC qbran
664.2 0005DC .... DW link
664.3 0005DE FF DB 0FFh ; not immediate
664.4 0005DF link SET $
664.5 0005DF 07 DB 7
664.6 0005E0 3F6272616E63* DB '?branch'
664.7 0005E7 00 EVEN
664.8 0005E8 IF 'DOCODE'='DOCODE'
664.9 0005E8 .... qbran: DW $+2
664.10 0005EA ELSE
664.11 0005EA qbran: DW DOCODE
664.12 0005EA ENDIF
664.13 0005EA ENDM
665 0005EA 0753 ADD #0,TOS ; 1 test TOS value
666 0005EC 3744 MOV @PSP+,TOS ; 2 pop new TOS value
(doesn't change
flags)
667 0005EE F327 JZ dobran ; 2 if TOS was zero, take
the branch
668 0005F0 2553 ADD #2,IP ; 1 else skip the
branch destination
669 0005F2 NEXT ; 4
669.1 0005F2 3645 MOV @IP+,W // ; fetch word address
into W
669.2 0005F4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
669.3 0005F6 ENDM
670 0005F6
671 0005F6 ;Z (do) n1|u1 n2|u2 -- R: -- sys1 sys2
run-time code for DO
672 0005F6 ; '83 and ANSI standard loops terminate when the
boundary of
673 0005F6 ; limit-1 and limit is crossed, in either
direction. This can
674 0005F6 ; be conveniently implemented by making the
limit 8000h, so that
675 0005F6 ; arithmetic overflow logic can detect crossing.
I learned this
676 0005F6 ; trick from Laxen & Perry F83.
677 0005F6 ; fudge factor = 8000h-limit, to be added to the
start value.
678 0005F6 HEADER xdo,4,'(do)',DOCODE
678.1 000000 PUBLIC xdo
678.2 0005F6 .... DW link
678.3 0005F8 FF DB 0FFh ; not immediate
678.4 0005F9 link SET $
678.5 0005F9 04 DB 4
678.6 0005FA 28646F29 DB '(do)'
678.7 0005FE EVEN
678.8 0005FE IF 'DOCODE'='DOCODE'
678.9 0005FE .... xdo: DW $+2
678.10 000600 ELSE
678.11 000600 xdo: DW DOCODE
678.12 000600 ENDIF
678.13 000600 ENDM
679 000600 2182 SUB #4,RSP ; push old loop
values on
- 4e-configLP - Page 59
return
stack
680 000602 81490200 MOV LIMIT,2(RSP)
681 000606 81480000 MOV INDEX,0(RSP)
682 00060A 39400080 MOV #8000h,LIMIT ; compute
8000h-limit
"fudge
factor"
683 00060E 3984 SUB @PSP+,LIMIT
684 000610 0847 MOV TOS,INDEX ; loop ctr =
index+fudge
685 000612 0859 ADD LIMIT,INDEX
686 000614 3744 MOV @PSP+,TOS ; pop new
TOS
687 000616 NEXT
687.1 000616 3645 MOV @IP+,W // ; fetch word address
into W
687.2 000618 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
687.3 00061A ENDM
688 00061A
689 00061A ;Z (loop) R: sys1 sys2 -- | sys1 sys2
run-time code for LOOP
690 00061A ; Add 1 to the loop index. If loop terminates,
clean up the
691 00061A ; return stack and skip the branch. Else take
the inline branch.
692 00061A ; Note that LOOP terminates when index=8000h.
693 00061A HEADER xloop,6,'(loop)',DOCODE
693.1 000000 PUBLIC xloop
693.2 00061A .... DW link
693.3 00061C FF DB 0FFh ; not immediate
693.4 00061D link SET $
693.5 00061D 06 DB 6
693.6 00061E 286C6F6F7029 DB '(loop)'
693.7 000624 EVEN
693.8 000624 IF 'DOCODE'='DOCODE'
693.9 000624 .... xloop: DW $+2
693.10 000626 ELSE
693.11 000626 xloop: DW DOCODE
693.12 000626 ENDIF
693.13 000626 ENDM
694 000626 1853 ADD #1,INDEX
695 000628 32B00001 BIT #100h,SR ; is overflow bit
set?
696 00062C D427 JZ dobran ; no overflow =
loop
697 00062E 2553 ADD #2,IP ; overflow = loop
done, skip branch
ofs
698 000630 3841 MOV @RSP+,INDEX ; restore old loop
values
699 000632 3941 MOV @RSP+,LIMIT
700 000634 NEXT
700.1 000634 3645 MOV @IP+,W // ; fetch word address
into W
700.2 000636 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
700.3 000638 ENDM
701 000638
702 000638 ;Z (+loop) n -- R: sys1 sys2 -- | sys1 sys2
run-time code for +LOOP
703 000638 ; Add n to the loop index. If loop terminates,
clean up the
704 000638 ; return stack and skip the branch. Else take
the inline branch.
705 000638 HEADER xplusloop,7,'(+loop)',DOCODE
705.1 000000 PUBLIC xplusloop
705.2 000638 .... DW link
705.3 00063A FF DB 0FFh ; not immediate
705.4 00063B link SET $
705.5 00063B 07 DB 7
705.6 00063C 282B6C6F6F70* DB '(+loop)'
705.7 000643 00 EVEN
705.8 000644 IF 'DOCODE'='DOCODE'
705.9 000644 .... xplusloop: DW $+2
705.10 000646 ELSE
705.11 000646 xplusloop: DW DOCODE
- 4e-configLP - Page 60
705.12 000646 ENDIF
705.13 000646 ENDM
706 000646 0857 ADD TOS,INDEX
707 000648 3744 MOV @PSP+,TOS ; get new TOS,
doesn't change
flags
708 00064A 32B00001 BIT #100h,SR ; is overflow bit
set?
709 00064E C327 JZ dobran ; no overflow =
loop
710 000650 2553 ADD #2,IP ; overflow = loop
done, skip branch
ofs
711 000652 3841 MOV @RSP+,INDEX ; restore old loop
values
712 000654 3941 MOV @RSP+,LIMIT
713 000656 NEXT
713.1 000656 3645 MOV @IP+,W // ; fetch word address
into W
713.2 000658 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
713.3 00065A ENDM
714 00065A
715 00065A ;C I -- n R: sys1 sys2 -- sys1 sys2
get the innermost loop index
716 00065A HEADER II,1,'I',DOCODE
716.1 000000 PUBLIC II
716.2 00065A .... DW link
716.3 00065C FF DB 0FFh ; not immediate
716.4 00065D link SET $
716.5 00065D 01 DB 1
716.6 00065E 49 DB 'I'
716.7 00065F 00 EVEN
716.8 000660 IF 'DOCODE'='DOCODE'
716.9 000660 .... II: DW $+2
716.10 000662 ELSE
716.11 000662 II: DW DOCODE
716.12 000662 ENDIF
716.13 000662 ENDM
717 000662 2483 SUB #2,PSP ; make room in
TOS
718 000664 84470000 MOV TOS,0(PSP)
719 000668 0748 MOV INDEX,TOS ; index =
loopctr -
fudge
720 00066A 0789 SUB LIMIT,TOS
721 00066C NEXT
721.1 00066C 3645 MOV @IP+,W // ; fetch word address
into W
721.2 00066E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
721.3 000670 ENDM
722 000670
723 000670 ;C J -- n R: 4*sys -- 4*sys
get the second loop index
724 000670 HEADER JJ,1,'J',DOCODE
724.1 000000 PUBLIC JJ
724.2 000670 .... DW link
724.3 000672 FF DB 0FFh ; not immediate
724.4 000673 link SET $
724.5 000673 01 DB 1
724.6 000674 4A DB 'J'
724.7 000675 00 EVEN
724.8 000676 IF 'DOCODE'='DOCODE'
724.9 000676 .... JJ: DW $+2
724.10 000678 ELSE
724.11 000678 JJ: DW DOCODE
724.12 000678 ENDIF
724.13 000678 ENDM
725 000678 2483 SUB #2,PSP ; make room in
TOS
726 00067A 84470000 MOV TOS,0(PSP)
727 00067E 2741 MOV @RSP,TOS ; index =
loopctr -
fudge
728 000680 17810200 SUB 2(RSP),TOS
729 000684 NEXT
729.1 000684 3645 MOV @IP+,W // ; fetch word address
- 4e-configLP - Page 61
into W
729.2 000686 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
729.3 000688 ENDM
730 000688
731 000688 ;C UNLOOP -- R: sys1 sys2 --
drop loop parms
732 000688 HEADER UNLOOP,6,'UNLOOP',DOCODE
732.1 000000 PUBLIC UNLOOP
732.2 000688 .... DW link
732.3 00068A FF DB 0FFh ; not immediate
732.4 00068B link SET $
732.5 00068B 06 DB 6
732.6 00068C 554E4C4F4F50 DB 'UNLOOP'
732.7 000692 EVEN
732.8 000692 IF 'DOCODE'='DOCODE'
732.9 000692 .... UNLOOP: DW $+2
732.10 000694 ELSE
732.11 000694 UNLOOP: DW DOCODE
732.12 000694 ENDIF
732.13 000694 ENDM
733 000694 3841 MOV @RSP+,INDEX ; restore old
loop values
734 000696 3941 MOV @RSP+,LIMIT
735 000698 NEXT
735.1 000698 3645 MOV @IP+,W // ; fetch word address
into W
735.2 00069A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
735.3 00069C ENDM
736 00069C
737 00069C ; ----------------------------------------------
------------------------
738 00069C ; MULTIPLY AND DIVIDE
739 00069C
740 00069C ;C UM* u1 u2 -- ud unsigned 16x16->32
mult.
741 00069C HEADER UMSTAR,3,'UM*',DOCODE
741.1 000000 PUBLIC UMSTAR
741.2 00069C .... DW link
741.3 00069E FF DB 0FFh ; not immediate
741.4 00069F link SET $
741.5 00069F 03 DB 3
741.6 0006A0 554D2A DB 'UM*'
741.7 0006A3 00 EVEN
741.8 0006A4 IF 'DOCODE'='DOCODE'
741.9 0006A4 .... UMSTAR: DW $+2
741.10 0006A6 ELSE
741.11 0006A6 UMSTAR: DW DOCODE
741.12 0006A6 ENDIF
741.13 0006A6 ENDM
742 0006A6 ; IROP1 = TOS register
743 0006A6 2A44 MOV @PSP,IROP2L ; get u1, leave
room on
stack
744 0006A8 ;
745 0006A8 ; T.I. SIGNED MULTIPLY SUBROUTINE: IROP1 x
IROP2L -> IRACM|IRACL
746 0006A8 0C43 MPYU: CLR IRACL ; 0 -> LSBs RESULT
747 0006AA 0D43 CLR IRACM ; 0 -> MSBs RESULT
748 0006AC ; UNSIGNED MULTIPLY AND ACCUMULATE SUBROUTINE:
749 0006AC ; (IROP1 x IROP2L) + IRACM|IRACL -> IRACM|IRACL
750 0006AC 0B43 MACU: CLR IROP2M ; MSBs MULTIPLIER
751 0006AE 1643 MOV #1,IRBT ; BIT TEST REGISTER
752 0006B0 07B6 L$002: BIT IRBT,IROP1 ; TEST ACTUAL BIT
753 0006B2 0224 JZ L$01 ; IF 0: DO NOTHING
754 0006B4 0C5A ADD IROP2L,IRACL ; IF 1: ADD MULTIPLIER
TO RESULT
755 0006B6 0D6B ADDC IROP2M,IRACM
756 0006B8 0A5A L$01: RLA IROP2L ; MULTIPLIER x 2
757 0006BA 0B6B RLC IROP2M
758 0006BC ;
759 0006BC 0656 RLA IRBT ; NEXT BIT TO TEST
760 0006BE F82B JNC L$002 ; IF BIT IN CARRY:
FINISHED
761 0006C0 ; END T.I. ROUTINE section 5.1.1 of MSP430
Family Application Reports
762 0006C0 844C0000 MOV IRACL,0(PSP) ; low result on
- 4e-configLP - Page 62
stack
763 0006C4 074D MOV IRACM,TOS ; high result in
TOS
764 0006C6 NEXT
764.1 0006C6 3645 MOV @IP+,W // ; fetch word address
into W
764.2 0006C8 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
764.3 0006CA ENDM
765 0006CA
766 0006CA ;C UM/MOD ud u1 -- u2 u3 unsigned 32/16->16
767 0006CA HEADER UMSLASHMOD,6,'UM/MOD',DOCODE
767.1 000000 PUBLIC UMSLASHMOD
767.2 0006CA .... DW link
767.3 0006CC FF DB 0FFh ; not immediate
767.4 0006CD link SET $
767.5 0006CD 06 DB 6
767.6 0006CE 554D2F4D4F44 DB 'UM/MOD'
767.7 0006D4 EVEN
767.8 0006D4 IF 'DOCODE'='DOCODE'
767.9 0006D4 .... UMSLASHMOD: DW $+2
767.10 0006D6 ELSE
767.11 0006D6 UMSLASHMOD: DW DOCODE
767.12 0006D6 ENDIF
767.13 0006D6 ENDM
768 0006D6 ; IROP1 = TOS register
769 0006D6 3B44 MOV @PSP+,IROP2M ; get ud
hi
770 0006D8 2A44 MOV @PSP,IROP2L ; get ud lo,
leave room on
stack
771 0006DA ;
772 0006DA ; T.I. UNSIGNED DIVISION SUBROUTINE 32-BIT BY
16-BIT
773 0006DA ; IROP2M|IROP2L : IROP1 -> IRACL REMAINDER IN
IROP2M
774 0006DA ; RETURN: CARRY = 0: OK CARRY = 1: QUOTIENT > 16
BITS
775 0006DA 0C43 DIVIDE: CLR IRACL ; CLEAR RESULT
776 0006DC 36401100 MOV #17,IRBT ; INITIALIZE LOOP
COUNTER
777 0006E0 0B97 DIV1: CMP IROP1,IROP2M ;
778 0006E2 0128 JLO DIV2
779 0006E4 0B87 SUB IROP1,IROP2M
780 0006E6 0C6C DIV2: RLC IRACL
781 0006E8 092C JC DIV4 ; Error: result > 16
bits
782 0006EA 1683 DEC IRBT ; Decrement loop counter
783 0006EC 0624 JZ DIV3 ; Is 0: terminate w/o
error
784 0006EE 0A5A RLA IROP2L
785 0006F0 0B6B RLC IROP2M
786 0006F2 F62B JNC DIV1
787 0006F4 0B87 SUB IROP1,IROP2M
788 0006F6 12D3 SETC
789 0006F8 F63F JMP DIV2
790 0006FA 12C3 DIV3: CLRC ; No error, C = 0
791 0006FC DIV4: ; Error indication in C
792 0006FC ; END T.I. ROUTINE Section 5.1.5 of MSP430
Family Application Reports
793 0006FC 844B0000 MOV IROP2M,0(PSP) ; remainder on
stack
794 000700 074C MOV IRACL,TOS ; quotient in
TOS
795 000702 NEXT
795.1 000702 3645 MOV @IP+,W // ; fetch word address
into W
795.2 000704 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
795.3 000706 ENDM
796 000706
797 000706 ; ----------------------------------------------
------------------------
798 000706 ; BLOCK AND STRING OPERATIONS
799 000706
800 000706 ;C FILL c-addr u char -- fill memory with
char
801 000706 HEADER FILL,4,'FILL',DOCODE
- 4e-configLP - Page 63
801.1 000000 PUBLIC FILL
801.2 000706 .... DW link
801.3 000708 FF DB 0FFh ; not immediate
801.4 000709 link SET $
801.5 000709 04 DB 4
801.6 00070A 46494C4C DB 'FILL'
801.7 00070E EVEN
801.8 00070E IF 'DOCODE'='DOCODE'
801.9 00070E .... FILL: DW $+2
801.10 000710 ELSE
801.11 000710 FILL: DW DOCODE
801.12 000710 ENDIF
801.13 000710 ENDM
802 000710 3A44 MOV @PSP+,X ; count
803 000712 3644 MOV @PSP+,W ; address
804 000714 0A93 CMP #0,X
805 000716 0524 JZ FILL_X
806 000718 C6470000 FILL_1: MOV.B TOS,0(W) ; store char in
memory
807 00071C 1653 ADD #1,W
808 00071E 1A83 SUB #1,X
809 000720 FB23 JNZ FILL_1
810 000722 3744 FILL_X: MOV @PSP+,TOS ; pop new TOS
811 000724 NEXT
811.1 000724 3645 MOV @IP+,W // ; fetch word address
into W
811.2 000726 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
811.3 000728 ENDM
812 000728
813 000728 ;X CMOVE c-addr1 c-addr2 u -- move from
bottom
814 000728 ; as defined in the ANSI optional String word
set
815 000728 ; On byte machines, CMOVE and CMOVE> are
logical
816 000728 ; factors of MOVE. They are easy to implement
on
817 000728 ; CPUs which have a block-move instruction.
818 000728 HEADER CMOVE,5,'CMOVE',DOCODE
818.1 000000 PUBLIC CMOVE
818.2 000728 .... DW link
818.3 00072A FF DB 0FFh ; not immediate
818.4 00072B link SET $
818.5 00072B 05 DB 5
818.6 00072C 434D4F5645 DB 'CMOVE'
818.7 000731 00 EVEN
818.8 000732 IF 'DOCODE'='DOCODE'
818.9 000732 .... CMOVE: DW $+2
818.10 000734 ELSE
818.11 000734 CMOVE: DW DOCODE
818.12 000734 ENDIF
818.13 000734 ENDM
819 000734 3644 MOV @PSP+,W ; dest adrs
820 000736 3A44 MOV @PSP+,X ; src adrs
821 000738 0793 CMP #0,TOS
822 00073A 0524 JZ CMOVE_X
823 00073C F64A0000 CMOVE_1: MOV.B @X+,0(W) ; copy byte
824 000740 1653 ADD #1,W
825 000742 1783 SUB #1,TOS
826 000744 FB23 JNZ CMOVE_1
827 000746 3744 CMOVE_X: MOV @PSP+,TOS ; pop new TOS
828 000748 NEXT
828.1 000748 3645 MOV @IP+,W // ; fetch word address
into W
828.2 00074A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
828.3 00074C ENDM
829 00074C
830 00074C ;X CMOVE> c-addr1 c-addr2 u -- move from
top
831 00074C ; as defined in the ANSI optional String word
set
832 00074C HEADER CMOVEUP,6,'CMOVE>',DOCODE
832.1 000000 PUBLIC CMOVEUP
832.2 00074C .... DW link
832.3 00074E FF DB 0FFh ; not immediate
832.4 00074F link SET $
- 4e-configLP - Page 64
832.5 00074F 06 DB 6
832.6 000750 434D4F56453E DB 'CMOVE>'
832.7 000756 EVEN
832.8 000756 IF 'DOCODE'='DOCODE'
832.9 000756 .... CMOVEUP: DW $+2
832.10 000758 ELSE
832.11 000758 CMOVEUP: DW DOCODE
832.12 000758 ENDIF
832.13 000758 ENDM
833 000758 3644 MOV @PSP+,W ; dest adrs
834 00075A 3A44 MOV @PSP+,X ; src adrs
835 00075C 0793 CMP #0,TOS
836 00075E 0824 JZ CMOVU_X
837 000760 0657 ADD TOS,W ; start at
end
838 000762 0A57 ADD TOS,X
839 000764 1A83 CMOVU_1: SUB #1,X
840 000766 1683 SUB #1,W
841 000768 E64A0000 MOV.B @X,0(W) ; copy byte
842 00076C 1783 SUB #1,TOS
843 00076E FA23 JNZ CMOVU_1
844 000770 3744 CMOVU_X: MOV @PSP+,TOS ; pop new TOS
845 000772 NEXT
845.1 000772 3645 MOV @IP+,W // ; fetch word address
into W
845.2 000774 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
845.3 000776 ENDM
846 000776
847 000776 ;Z I->D c-addr1 c-addr2 u -- move
Code->Data
848 000776 ; Block move from Code space to Data space.
849 000776 ; On the MSP430, this is the same as CMOVE.
850 000776 HEADER ITOD,4,'I->D',CMOVE+2
850.1 000000 PUBLIC ITOD
850.2 000776 .... DW link
850.3 000778 FF DB 0FFh ; not immediate
850.4 000779 link SET $
850.5 000779 04 DB 4
850.6 00077A 492D3E44 DB 'I->D'
850.7 00077E EVEN
850.8 00077E IF 'CMOVE+2'='DOCODE'
850.9 00077E ITOD: DW $+2
850.10 00077E ELSE
850.11 00077E .... ITOD: DW CMOVE+2
850.12 000780 ENDIF
850.13 000780 ENDM
851 000780
852 000780 ;Z SKIP c-addr u c -- c-addr' u'
skip matching chars
853 000780 ; Although SKIP, SCAN, and S= are perhaps not
the ideal factors
854 000780 ; of WORD and FIND, they closely follow the
string operations
855 000780 ; available on many CPUs, and so are easy to
implement and fast.
856 000780 HEADER SKIP,4,'SKIP',DOCODE
856.1 000000 PUBLIC SKIP
856.2 000780 .... DW link
856.3 000782 FF DB 0FFh ; not immediate
856.4 000783 link SET $
856.5 000783 04 DB 4
856.6 000784 534B4950 DB 'SKIP'
856.7 000788 EVEN
856.8 000788 IF 'DOCODE'='DOCODE'
856.9 000788 .... SKIP: DW $+2
856.10 00078A ELSE
856.11 00078A SKIP: DW DOCODE
856.12 00078A ENDIF
856.13 00078A ENDM
857 00078A 3A44 MOV @PSP+,X ; get count
858 00078C 2644 MOV @PSP,W ; get address, leave
space on stack
859 00078E 0A93 CMP #0,X
860 000790 0524 JZ SKIP_X
861 000792 6796 SKIP_1: CMP.B @W,TOS ; does character
match?
862 000794 0320 JNZ SKIP_X ; no, we are
- 4e-configLP - Page 65
done
863 000796 1653 ADD #1,W
864 000798 1A83 SUB #1,X
865 00079A FB23 JNZ SKIP_1
866 00079C 84460000 SKIP_X: MOV W,0(PSP) ; store updated
address on
stack
867 0007A0 074A MOV X,TOS ; updated count to
TOS
868 0007A2 NEXT
868.1 0007A2 3645 MOV @IP+,W // ; fetch word address
into W
868.2 0007A4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
868.3 0007A6 ENDM
869 0007A6
870 0007A6 ;Z SCAN c-addr u c -- c-addr' u'
find matching char
871 0007A6 HEADER SCAN,4,'SCAN',DOCODE
871.1 000000 PUBLIC SCAN
871.2 0007A6 .... DW link
871.3 0007A8 FF DB 0FFh ; not immediate
871.4 0007A9 link SET $
871.5 0007A9 04 DB 4
871.6 0007AA 5343414E DB 'SCAN'
871.7 0007AE EVEN
871.8 0007AE IF 'DOCODE'='DOCODE'
871.9 0007AE .... SCAN: DW $+2
871.10 0007B0 ELSE
871.11 0007B0 SCAN: DW DOCODE
871.12 0007B0 ENDIF
871.13 0007B0 ENDM
872 0007B0 3A44 MOV @PSP+,X ; get count
873 0007B2 2644 MOV @PSP,W ; get address, leave
space on stack
874 0007B4 0A93 CMP #0,X
875 0007B6 0524 JZ SCAN_X
876 0007B8 6796 SCAN_1: CMP.B @W,TOS ; does character
match?
877 0007BA 0324 JZ SCAN_X ; yes, we are
done
878 0007BC 1653 ADD #1,W
879 0007BE 1A83 SUB #1,X
880 0007C0 FB23 JNZ SCAN_1
881 0007C2 84460000 SCAN_X: MOV W,0(PSP) ; store updated
address on
stack
882 0007C6 074A MOV X,TOS ; updated count to
TOS
883 0007C8 NEXT
883.1 0007C8 3645 MOV @IP+,W // ; fetch word address
into W
883.2 0007CA 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
883.3 0007CC ENDM
884 0007CC
885 0007CC ;Z S= c-addr1 c-addr2 u -- n string
compare
886 0007CC ;Z S= n<0: s10: s1>s2
887 0007CC HEADER SEQUAL,2,'S=',DOCODE
887.1 000000 PUBLIC SEQUAL
887.2 0007CC .... DW link
887.3 0007CE FF DB 0FFh ; not immediate
887.4 0007CF link SET $
887.5 0007CF 02 DB 2
887.6 0007D0 533D DB 'S='
887.7 0007D2 EVEN
887.8 0007D2 IF 'DOCODE'='DOCODE'
887.9 0007D2 .... SEQUAL: DW $+2
887.10 0007D4 ELSE
887.11 0007D4 SEQUAL: DW DOCODE
887.12 0007D4 ENDIF
887.13 0007D4 ENDM
888 0007D4 3644 MOV @PSP+,W ; adrs2
889 0007D6 3A44 MOV @PSP+,X ; adrs1
890 0007D8 0793 CMP #0,TOS
891 0007DA 0A24 JZ SEQU_X
892 0007DC FA960000 SEQU_1: CMP.B @W+,0(X) ; compare char1-char
- 4e-configLP - Page 66
2
893 0007E0 0420 JNZ SMISMATCH
894 0007E2 1A53 ADD #1,X
895 0007E4 1783 SUB #1,TOS
896 0007E6 FA23 JNZ SEQU_1
897 0007E8 ; no mismatch found, strings are equal,
TOS=0
898 0007E8 033C JMP SEQU_X
899 0007EA ; mismatch found, CY clear if borrow set
(s10: s1>s2
907 0007F4 ; For Harvard model, c-addr1 is Data, c-addr2 is
Header.
908 0007F4 ; On MSP430, both use the same fetch instruction
, so N= is the same as S=.
909 0007F4 HEADER NEQUAL,2,'N=',SEQUAL+2
909.1 000000 PUBLIC NEQUAL
909.2 0007F4 .... DW link
909.3 0007F6 FF DB 0FFh ; not immediate
909.4 0007F7 link SET $
909.5 0007F7 02 DB 2
909.6 0007F8 4E3D DB 'N='
909.7 0007FA EVEN
909.8 0007FA IF 'SEQUAL+2'='DOCODE'
909.9 0007FA NEQUAL: DW $+2
909.10 0007FA ELSE
909.11 0007FA .... NEQUAL: DW SEQUAL+2
909.12 0007FC ENDIF
909.13 0007FC ENDM
910 0007FC
911 0007FC ; ----------------------------------------------
------------------------
912 0007FC ; TERMINAL I/O
913 0007FC
914 000000 PUBLIC DOKEY,DOEMIT
915 0007FC
916 0007FC /*
917 0007FC ;C EMIT c -- output character to console;
core routine
918 0007FC HEADER EMIT,4,'EMIT',DOCODE
919 0007FC EMITLOOP:
920 0007FC BIT.B #UCA0TXIFG,&IFG2
921 0007FC JZ EMITLOOP
922 0007FC MOV.B TOS,&UCA0TXBUF
923 0007FC MOV @PSP+,TOS
924 0007FC NEXT
925 0007FC
926 0007FC ;C KEY -- c get character from
keyboard; core routine
927 0007FC HEADER KEY,3,'KEY',DOCODE
928 0007FC KEYLOOP:
929 0007FC BIT.B #UCA0RXIFG,&IFG2
930 0007FC JZ KEYLOOP
931 0007FC SUB #2,PSP ; 1 push old
TOS..
932 0007FC MOV TOS,0(PSP) ; 4 ..onto
stack
933 0007FC MOV.B &UCA0RXBUF,TOS ; read
character into TOS
934 0007FC donoop1:
935 0007FC donext1: NEXT
936 0007FC */
- 4e-configLP - Page 67
937 0007FC
938 0007FC ;C (EMIT) c -- output character to
console; core routine
939 0007FC HEADER DOEMIT,6,'(EMIT)',DOCODE
939.1 0007FC PUBLIC DOEMIT
939.2 0007FC .... DW link
939.3 0007FE FF DB 0FFh ; not immediate
939.4 0007FF link SET $
939.5 0007FF 06 DB 6
939.6 000800 28454D495429 DB '(EMIT)'
939.7 000806 EVEN
939.8 000806 IF 'DOCODE'='DOCODE'
939.9 000806 .... DOEMIT: DW $+2
939.10 000808 ELSE
939.11 000808 DOEMIT: DW DOCODE
939.12 000808 ENDIF
939.13 000808 ENDM
940 000808 EMITLOOPx:
941 000808 E2B30300 BIT.B #UCA0TXIFG,&IFG2
942 00080C FD27 JZ EMITLOOPx
943 00080E C2476700 MOV.B TOS,&UCA0TXBUF
944 000812 3744 MOV @PSP+,TOS
945 000814 NEXT
945.1 000814 3645 MOV @IP+,W // ; fetch word address
into W
945.2 000816 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
945.3 000818 ENDM
946 000818
947 000818 ;C (KEY) -- c get character from
keyboard; core routine
948 000818 HEADER DOKEY,5,'(KEY)',DOCODE
948.1 000818 PUBLIC DOKEY
948.2 000818 .... DW link
948.3 00081A FF DB 0FFh ; not immediate
948.4 00081B link SET $
948.5 00081B 05 DB 5
948.6 00081C 284B455929 DB '(KEY)'
948.7 000821 00 EVEN
948.8 000822 IF 'DOCODE'='DOCODE'
948.9 000822 .... DOKEY: DW $+2
948.10 000824 ELSE
948.11 000824 DOKEY: DW DOCODE
948.12 000824 ENDIF
948.13 000824 ENDM
949 000824 KEYLOOPx:
950 000824 D2B30300 BIT.B #UCA0RXIFG,&IFG2
951 000828 FD27 JZ KEYLOOPx
952 00082A 2483 SUB #2,PSP ; 1 push old
TOS..
953 00082C 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
954 000830 57426600 MOV.B &UCA0RXBUF,TOS ; read
character
into
TOS
955 000834 donoop:
956 000834 donext: NEXT
956.1 000834 3645 MOV @IP+,W // ; fetch word address
into W
956.2 000836 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
956.3 000838 ENDM
957 000838
958 000838
959 000838 ;C KEY -- c get character from
keyboard; vectored
960 000838 HEADER KEY,3,'KEY',DOCOLON
960.1 000000 PUBLIC KEY
960.2 000838 .... DW link
960.3 00083A FF DB 0FFh ; not immediate
960.4 00083B link SET $
960.5 00083B 03 DB 3
960.6 00083C 4B4559 DB 'KEY'
960.7 00083F 00 EVEN
960.8 000840 IF 'DOCOLON'='DOCODE'
960.9 000840 KEY: DW $+2
960.10 000840 ELSE
- 4e-configLP - Page 68
960.11 000840 .... KEY: DW DOCOLON
960.12 000842 ENDIF
960.13 000842 ENDM
961 000842 ............* DW USERKEY,FETCH,EXECUTE,EXIT
962 00084A
963 00084A ;C EMIT c -- output character to
console; vectored
964 00084A HEADER EMIT,4,'EMIT',DOCOLON
964.1 000000 PUBLIC EMIT
964.2 00084A .... DW link
964.3 00084C FF DB 0FFh ; not immediate
964.4 00084D link SET $
964.5 00084D 04 DB 4
964.6 00084E 454D4954 DB 'EMIT'
964.7 000852 EVEN
964.8 000852 IF 'DOCOLON'='DOCODE'
964.9 000852 EMIT: DW $+2
964.10 000852 ELSE
964.11 000852 .... EMIT: DW DOCOLON
964.12 000854 ENDIF
964.13 000854 ENDM
965 000854 ............* DW USEREMIT,FETCH,EXECUTE,EXIT
966 00085C
967 00085C ;X KEY? -- f return true if char
waiting
968 00085C HEADER KEYQ,4,'KEY?',DOCODE
968.1 000000 PUBLIC KEYQ
968.2 00085C .... DW link
968.3 00085E FF DB 0FFh ; not immediate
968.4 00085F link SET $
968.5 00085F 04 DB 4
968.6 000860 4B45593F DB 'KEY?'
968.7 000864 EVEN
968.8 000864 IF 'DOCODE'='DOCODE'
968.9 000864 .... KEYQ: DW $+2
968.10 000866 ELSE
968.11 000866 KEYQ: DW DOCODE
968.12 000866 ENDIF
968.13 000866 ENDM
969 000866 2483 SUB #2,PSP ; 1 push old
TOS..
970 000868 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
971 00086C D2B30300 BIT.B #UCA0RXIFG,&IFG2
972 000870 8622 JNZ TOSTRUE
973 000872 743E JMP TOSFALSE
974 000874
975 000874 ;X ZERO -- 0 put zero on stack. Often
usesd word.
976 000874 HEADER ZERO,4,'ZERO',DOCON
976.1 000000 PUBLIC ZERO
976.2 000874 .... DW link
976.3 000876 FF DB 0FFh ; not immediate
976.4 000877 link SET $
976.5 000877 04 DB 4
976.6 000878 5A45524F DB 'ZERO'
976.7 00087C EVEN
976.8 00087C IF 'DOCON'='DOCODE'
976.9 00087C ZERO: DW $+2
976.10 00087C ELSE
976.11 00087C .... ZERO: DW DOCON
976.12 00087E ENDIF
976.13 00087E ENDM
977 00087E 0000 DW 0
978 000880
979 000880 ; ----------------------------------------------
------------------------
980 000880
981 000880 /*
982 000880 ; DEBUG FORTH EXECUTION
983 000880 ; debug serieal
984 000880 PUBLIC DEBUGIP
985 000880 DEBUGIP:
986 000880 ; DW DOTID
987 000880 DEBUG1:
988 000880 ; DW TASK
989 000880 DW KEY ; 1@A0 test 1=rot,@=grün,A=beide,0=a
us
- 4e-configLP - Page 69
990 000880 DW DUP ;,DOTS,CR
991 000880 DW STORELEDS
992 000880 ; DW COLD
993 000880 DW EMIT
994 000880 DW lit,0,qbran
995 000880 DW DEBUG1-$
996 000880 DW bran,-2
997 000880
998 000880 /*
999 000880 ; debugging only
1000 000880 HEADLESS CREATE,DOCOLON
1001 000880 HEADLESS ALLOT,DOCOLON
1002 000880 HEADLESS BUILDS,DOCOLON
1003 000880 HEADLESS ICOMMA,DOCOLON
1004 000880 HEADLESS XDOES,DOCOLON
1005 000880 HEADLESS IHERE,DOCOLON
1006 000880 HEADLESS IALLOT,DOCOLON
1007 000880 HEADLESS CELL,DOCOLON
1008 000880 HEADLESS PJOUT,DOCOLON
1009 000880 */
1010 000880
1011 000880
1012 000880 ; for debug map only:
1013 000880 CamelForthEnd:
29 000880 #include "4e-deps430.s43"
1 000880 ; ----------------------------------------------
------------------------
2 000880 ; 4e4th is a Forth based on CamelForth
3 000880 ; for the Texas Instruments MSP430
4 000880 ;
5 000880 ; This program is free software; you can
redistribute it and/or modify
6 000880 ; it under the terms of the GNU General Public
License as published by
7 000880 ; the Free Software Foundation; either version 3
of the License, or
8 000880 ; (at your option) any later version.
9 000880 ;
10 000880 ; This program is distributed in the hope that
it will be useful,
11 000880 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 000880 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 000880 ; GNU General Public License for more details.
14 000880 ;
15 000880 ; You should have received a copy of the GNU
General Public License
16 000880 ; along with this program. If not, see
.
17 000880 ;
18 000880 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 000880
20 000880 ; ----------------------------------------------
------------------------
21 000880 ; 4e-deps430.s43: CPU and Model Dependencies
22 000880 ; ----------------------------------------------
------------------------
23 000880
24 000880 ; Forth words are documented as follows:
25 000880 ;x NAME stack -- stack description
26 000880 ; where x=C for ANS Forth Core words, X for
ANS
27 000880 ; Extensions, Z for internal or private
words.
28 000880 ;
29 000880 ; Indirect-Threaded Forth model for T.I.
MSP430
30 000880 ; cell size is 16 bits (2 bytes)
31 000880 ; char size is 8 bits (1 byte)
32 000880 ; address unit is 8 bits (1 byte), i.e.,
addresses are byte-aligned.
33 000880 ; ----------------------------------------------
------------------------
34 000880
- 4e-configLP - Page 70
35 000880 ; ----------------------------------------------
------------------------
36 000880 ; ALIGNMENT AND PORTABILITY OPERATORS
37 000880 ; Many of these are synonyms for other
words,
38 000880 ; and so are defined as CODE words.
39 000880
40 000880 ;C ALIGN -- align
HERE
41 000880 ; IHERE 1 AND IALLOT ;
42 000880 HEADER ALIGNN,5,'ALIGN',DOCOLON
42.1 000000 PUBLIC ALIGNN
42.2 000880 .... DW link
42.3 000882 FF DB 0FFh ; not immediate
42.4 000883 link SET $
42.5 000883 05 DB 5
42.6 000884 414C49474E DB 'ALIGN'
42.7 000889 00 EVEN
42.8 00088A IF 'DOCOLON'='DOCODE'
42.9 00088A ALIGNN: DW $+2
42.10 00088A ELSE
42.11 00088A .... ALIGNN: DW DOCOLON
42.12 00088C ENDIF
42.13 00088C ENDM
43 00088C ........0100* DW IHERE,lit,1,ANDD,IALLOT,EXIT
44 000898
45 000898 ;C ALIGNED addr -- a-addr align given
addr
46 000898 ; DUP 1 AND + ;
47 000898 HEADER ALIGNED,7,'ALIGNED',DOCOLON
47.1 000000 PUBLIC ALIGNED
47.2 000898 .... DW link
47.3 00089A FF DB 0FFh ; not immediate
47.4 00089B link SET $
47.5 00089B 07 DB 7
47.6 00089C 414C49474E45* DB 'ALIGNED'
47.7 0008A3 00 EVEN
47.8 0008A4 IF 'DOCOLON'='DOCODE'
47.9 0008A4 ALIGNED: DW $+2
47.10 0008A4 ELSE
47.11 0008A4 .... ALIGNED: DW DOCOLON
47.12 0008A6 ENDIF
47.13 0008A6 ENDM
48 0008A6 ........0100* DW DUP,lit,1,ANDD,PLUS,EXIT
49 0008B2
50 0008B2 ;Z CELL -- n size of one
cell
51 0008B2 HEADER CELL,4,'CELL',DOCON
51.1 000000 PUBLIC CELL
51.2 0008B2 .... DW link
51.3 0008B4 FF DB 0FFh ; not immediate
51.4 0008B5 link SET $
51.5 0008B5 04 DB 4
51.6 0008B6 43454C4C DB 'CELL'
51.7 0008BA EVEN
51.8 0008BA IF 'DOCON'='DOCODE'
51.9 0008BA CELL: DW $+2
51.10 0008BA ELSE
51.11 0008BA .... CELL: DW DOCON
51.12 0008BC ENDIF
51.13 0008BC ENDM
52 0008BC 0200 dw 2
53 0008BE
54 0008BE ;C CELL+ a-addr1 -- a-addr2 add cell
size
55 0008BE ; 2 + ;
56 0008BE HEADER CELLPLUS,5,'CELL+',DOCODE
56.1 000000 PUBLIC CELLPLUS
56.2 0008BE .... DW link
56.3 0008C0 FF DB 0FFh ; not immediate
56.4 0008C1 link SET $
56.5 0008C1 05 DB 5
56.6 0008C2 43454C4C2B DB 'CELL+'
56.7 0008C7 00 EVEN
56.8 0008C8 IF 'DOCODE'='DOCODE'
56.9 0008C8 .... CELLPLUS: DW $+2
56.10 0008CA ELSE
56.11 0008CA CELLPLUS: DW DOCODE
- 4e-configLP - Page 71
56.12 0008CA ENDIF
56.13 0008CA ENDM
57 0008CA 2753 ADD #2,TOS
58 0008CC B33F JMP donext
59 0008CE
60 0008CE ;C CELLS n1 -- n2 cells->adrs
units
61 0008CE HEADER CELLS,5,'CELLS',TWOSTAR+2
61.1 000000 PUBLIC CELLS
61.2 0008CE .... DW link
61.3 0008D0 FF DB 0FFh ; not immediate
61.4 0008D1 link SET $
61.5 0008D1 05 DB 5
61.6 0008D2 43454C4C53 DB 'CELLS'
61.7 0008D7 00 EVEN
61.8 0008D8 IF 'TWOSTAR+2'='DOCODE'
61.9 0008D8 CELLS: DW $+2
61.10 0008D8 ELSE
61.11 0008D8 .... CELLS: DW TWOSTAR+2
61.12 0008DA ENDIF
61.13 0008DA ENDM
62 0008DA
63 0008DA ;C CHAR+ c-addr1 -- c-addr2 add char
size
64 0008DA HEADER CHARPLUS,5,'CHAR+',ONEPLUS+2
64.1 000000 PUBLIC CHARPLUS
64.2 0008DA .... DW link
64.3 0008DC FF DB 0FFh ; not immediate
64.4 0008DD link SET $
64.5 0008DD 05 DB 5
64.6 0008DE 434841522B DB 'CHAR+'
64.7 0008E3 00 EVEN
64.8 0008E4 IF 'ONEPLUS+2'='DOCODE'
64.9 0008E4 CHARPLUS: DW $+2
64.10 0008E4 ELSE
64.11 0008E4 .... CHARPLUS: DW ONEPLUS+2
64.12 0008E6 ENDIF
64.13 0008E6 ENDM
65 0008E6
66 0008E6 ;C CHARS n1 -- n2 chars->adrs
units
67 0008E6 HEADER CHARS,5,'CHARS',donoop
67.1 000000 PUBLIC CHARS
67.2 0008E6 .... DW link
67.3 0008E8 FF DB 0FFh ; not immediate
67.4 0008E9 link SET $
67.5 0008E9 05 DB 5
67.6 0008EA 4348415253 DB 'CHARS'
67.7 0008EF 00 EVEN
67.8 0008F0 IF 'donoop'='DOCODE'
67.9 0008F0 CHARS: DW $+2
67.10 0008F0 ELSE
67.11 0008F0 .... CHARS: DW donoop
67.12 0008F2 ENDIF
67.13 0008F2 ENDM
68 0008F2
69 0008F2 ;C >BODY xt -- a-addr adrs of CREATE
data
70 0008F2 ; 2+ ; 8086 (3 byte
CALL)
71 0008F2 HEADER TOBODY,5,'>BODY',CELLPLUS+2
71.1 000000 PUBLIC TOBODY
71.2 0008F2 .... DW link
71.3 0008F4 FF DB 0FFh ; not immediate
71.4 0008F5 link SET $
71.5 0008F5 05 DB 5
71.6 0008F6 3E424F4459 DB '>BODY'
71.7 0008FB 00 EVEN
71.8 0008FC IF 'CELLPLUS+2'='DOCODE'
71.9 0008FC TOBODY: DW $+2
71.10 0008FC ELSE
71.11 0008FC .... TOBODY: DW CELLPLUS+2
71.12 0008FE ENDIF
71.13 0008FE ENDM
72 0008FE
73 0008FE ;X COMPILE, xt -- append execution
token
74 0008FE ; I called this word ,XT before I discovered
- 4e-configLP - Page 72
that it is defined in the
75 0008FE ; ANSI standard as COMPILE,. On a DTC Forth this
simply appends xt
76 0008FE ; (like , ) but on an STC Forth this must append
'CALL xt'.
77 0008FE HEADER COMMAXT,8,'COMPILE,',DOALIAS
77.1 000000 PUBLIC COMMAXT
77.2 0008FE .... DW link
77.3 000900 FF DB 0FFh ; not immediate
77.4 000901 link SET $
77.5 000901 08 DB 8
77.6 000902 434F4D50494C* DB 'COMPILE,'
77.7 00090A EVEN
77.8 00090A IF 'DOALIAS'='DOCODE'
77.9 00090A COMMAXT: DW $+2
77.10 00090A ELSE
77.11 00090A .... COMMAXT: DW DOALIAS
77.12 00090C ENDIF
77.13 00090C ENDM
78 00090C .... DW ICOMMA
79 00090E
80 00090E ;Z !CF adrs cfa -- set code action of a
word
81 00090E ; I! ;
82 00090E ; Indirect threaded model just stores adrs in
cfa field.
83 00090E HEADER STORECF,3,'!CF',DOALIAS
83.1 000000 PUBLIC STORECF
83.2 00090E .... DW link
83.3 000910 FF DB 0FFh ; not immediate
83.4 000911 link SET $
83.5 000911 03 DB 3
83.6 000912 214346 DB '!CF'
83.7 000915 00 EVEN
83.8 000916 IF 'DOALIAS'='DOCODE'
83.9 000916 STORECF: DW $+2
83.10 000916 ELSE
83.11 000916 .... STORECF: DW DOALIAS
83.12 000918 ENDIF
83.13 000918 ENDM
84 000918 .... DW ISTORE
85 00091A
86 00091A ;Z ,CF adrs -- append a code field
87 00091A ; IHERE !CF 2 IALLOT ; MSP430 VERSION (2
bytes)
88 00091A HEADER COMMACF,3,',CF',DOCOLON
88.1 000000 PUBLIC COMMACF
88.2 00091A .... DW link
88.3 00091C FF DB 0FFh ; not immediate
88.4 00091D link SET $
88.5 00091D 03 DB 3
88.6 00091E 2C4346 DB ',CF'
88.7 000921 00 EVEN
88.8 000922 IF 'DOCOLON'='DOCODE'
88.9 000922 COMMACF: DW $+2
88.10 000922 ELSE
88.11 000922 .... COMMACF: DW DOCOLON
88.12 000924 ENDIF
88.13 000924 ENDM
89 000924 ............* DW IHERE,STORECF,lit,2,IALLOT,EXIT
90 000930
91 000930 ;Z ,CALL adrs -- append a subroutine
CALL
92 000930 ; MSP430: 128x is call, Ad=11, Dreg=0000 (PC)
thus append 12B0,adrs.
93 000930 HEADER COMMACALL,5,',CALL',DOCOLON
93.1 000000 PUBLIC COMMACALL
93.2 000930 .... DW link
93.3 000932 FF DB 0FFh ; not immediate
93.4 000933 link SET $
93.5 000933 05 DB 5
93.6 000934 2C43414C4C DB ',CALL'
93.7 000939 00 EVEN
93.8 00093A IF 'DOCOLON'='DOCODE'
93.9 00093A COMMACALL: DW $+2
93.10 00093A ELSE
93.11 00093A .... COMMACALL: DW DOCOLON
93.12 00093C ENDIF
- 4e-configLP - Page 73
93.13 00093C ENDM
94 00093C ....B012....* DW lit,12B0h,ICOMMA,ICOMMA,EXIT
95 000946
96 000946 ;Z ,JMP adrs -- append an absolute
16-bit JMP (MOV #xx,PC)
97 000946 ; MSP430: opcode 4, Sreg=0000, Ad=0, As=11
(immed), Dreg=0000 (PC)
98 000946 ; thus append 4030,adrs.
99 000946 HEADER COMMAJMP,4,',JMP',DOCOLON
99.1 000000 PUBLIC COMMAJMP
99.2 000946 .... DW link
99.3 000948 FF DB 0FFh ; not immediate
99.4 000949 link SET $
99.5 000949 04 DB 4
99.6 00094A 2C4A4D50 DB ',JMP'
99.7 00094E EVEN
99.8 00094E IF 'DOCOLON'='DOCODE'
99.9 00094E COMMAJMP: DW $+2
99.10 00094E ELSE
99.11 00094E .... COMMAJMP: DW DOCOLON
99.12 000950 ENDIF
99.13 000950 ENDM
100 000950 ....3040....* DW lit,4030h,ICOMMA,ICOMMA,EXIT
101 00095A
102 00095A ;Z !COLON -- change code field to
DOCOLON
103 00095A ; -2 IALLOT DOCOLON-adrs ,CF ;
104 00095A ; This should be used immediately after
CREATE.
105 00095A ; This is made a distinct word, because on an
STC
106 00095A ; Forth, colon definitions have no code
field.
107 00095A HEADER STORCOLON,6,'!COLON',DOCOLON
107.1 000000 PUBLIC STORCOLON
107.2 00095A .... DW link
107.3 00095C FF DB 0FFh ; not immediate
107.4 00095D link SET $
107.5 00095D 06 DB 6
107.6 00095E 21434F4C4F4E DB '!COLON'
107.7 000964 EVEN
107.8 000964 IF 'DOCOLON'='DOCODE'
107.9 000964 STORCOLON: DW $+2
107.10 000964 ELSE
107.11 000964 .... STORCOLON: DW DOCOLON
107.12 000966 ENDIF
107.13 000966 ENDM
108 000966 ....FEFF.... DW lit,-2,IALLOT
109 00096C ............* DW lit,DOCOLON,COMMACF,EXIT
110 000974
111 000974 ;Z ,EXIT -- append hi-level EXIT
action
112 000974 ; ['] EXIT ,XT ;
113 000974 ; This is made a distinct word, because on an
STC
114 000974 ; Forth, it appends a RET instruction, not an
xt.
115 000974 HEADER CEXIT,5,',EXIT',DOCOLON
115.1 000000 PUBLIC CEXIT
115.2 000974 .... DW link
115.3 000976 FF DB 0FFh ; not immediate
115.4 000977 link SET $
115.5 000977 05 DB 5
115.6 000978 2C45584954 DB ',EXIT'
115.7 00097D 00 EVEN
115.8 00097E IF 'DOCOLON'='DOCODE'
115.9 00097E CEXIT: DW $+2
115.10 00097E ELSE
115.11 00097E .... CEXIT: DW DOCOLON
115.12 000980 ENDIF
115.13 000980 ENDM
116 000980 ............* DW lit,EXIT,COMMAXT,EXIT
117 000988
118 000988 ; ----------------------------------------------
------------------------
119 000988 ; CONTROL STRUCTURES
120 000988 ; These words allow Forth control structure
words
- 4e-configLP - Page 74
121 000988 ; to be defined portably.
122 000988
123 000988 ;Z ,BRANCH xt -- append a branch instructio
n
124 000988 ; xt is the branch operator to use, e.g. qbranch
or (loop).
125 000988 ; It does NOT append the destination address.
126 000988 ; On the MSP430 this is equivalent to ,XT
(above).
127 000988 HEADER COMMABRANCH,7,',BRANCH',DOALIAS
127.1 000000 PUBLIC COMMABRANCH
127.2 000988 .... DW link
127.3 00098A FF DB 0FFh ; not immediate
127.4 00098B link SET $
127.5 00098B 07 DB 7
127.6 00098C 2C4252414E43* DB ',BRANCH'
127.7 000993 00 EVEN
127.8 000994 IF 'DOALIAS'='DOCODE'
127.9 000994 COMMABRANCH: DW $+2
127.10 000994 ELSE
127.11 000994 .... COMMABRANCH: DW DOALIAS
127.12 000996 ENDIF
127.13 000996 ENDM
128 000996 .... DW ICOMMA
129 000998
130 000998 ;Z ,DEST dest -- append a branch
address
131 000998 ; IHERE - , ;
132 000998 ; This appends the given destination address to
the branch instruction.
133 000998 ; The MSP430 uses relative addressing from the
location of the offset cell,
134 000998 ; i.e., to branch to FOO the offset cell at $
contains FOO-$.
135 000998 HEADER COMMADEST,5,',DEST',DOCOLON
135.1 000000 PUBLIC COMMADEST
135.2 000998 .... DW link
135.3 00099A FF DB 0FFh ; not immediate
135.4 00099B link SET $
135.5 00099B 05 DB 5
135.6 00099C 2C44455354 DB ',DEST'
135.7 0009A1 00 EVEN
135.8 0009A2 IF 'DOCOLON'='DOCODE'
135.9 0009A2 COMMADEST: DW $+2
135.10 0009A2 ELSE
135.11 0009A2 .... COMMADEST: DW DOCOLON
135.12 0009A4 ENDIF
135.13 0009A4 ENDM
136 0009A4 ............* DW IHERE,MINUS,ICOMMA,EXIT
137 0009AC
138 0009AC ;Z !DEST dest adrs -- change a branch
dest'n
139 0009AC ; TUCK - SWAP I! ;
140 0009AC ; Changes the destination address found at
'adrs' to the given 'dest'.
141 0009AC ; The MSP430 uses relative addressing from the
location of the offset cell,
142 0009AC ; i.e., to branch to FOO the offset cell at $
contains FOO-$.
143 0009AC HEADER STOREDEST,5,'!DEST',DOCOLON
143.1 000000 PUBLIC STOREDEST
143.2 0009AC .... DW link
143.3 0009AE FF DB 0FFh ; not immediate
143.4 0009AF link SET $
143.5 0009AF 05 DB 5
143.6 0009B0 2144455354 DB '!DEST'
143.7 0009B5 00 EVEN
143.8 0009B6 IF 'DOCOLON'='DOCODE'
143.9 0009B6 STOREDEST: DW $+2
143.10 0009B6 ELSE
143.11 0009B6 .... STOREDEST: DW DOCOLON
143.12 0009B8 ENDIF
143.13 0009B8 ENDM
144 0009B8 ............* DW TUCK,MINUS,SWAP,ISTORE,EXIT
145 0009C2
146 0009C2 ;Z ,NONE -- append a null
destination (Flashable)
- 4e-configLP - Page 75
147 0009C2 ; CELL IALLOT ;
148 0009C2 ; When compiling in Flash ROM a branch to be
resolved later, we must
149 0009C2 ; skip the cell so that it can be programmed at
a later time.
150 0009C2 ; In general Flash memory can only be written
once!
151 0009C2 ; ,NONE should be used wherever !DEST will
resolve the branch.
152 0009C2 HEADER COMMANONE,5,',NONE',DOCOLON
152.1 000000 PUBLIC COMMANONE
152.2 0009C2 .... DW link
152.3 0009C4 FF DB 0FFh ; not immediate
152.4 0009C5 link SET $
152.5 0009C5 05 DB 5
152.6 0009C6 2C4E4F4E45 DB ',NONE'
152.7 0009CB 00 EVEN
152.8 0009CC IF 'DOCOLON'='DOCODE'
152.9 0009CC COMMANONE: DW $+2
152.10 0009CC ELSE
152.11 0009CC .... COMMANONE: DW DOCOLON
152.12 0009CE ENDIF
152.13 0009CE ENDM
153 0009CE ............ DW CELL,IALLOT,EXIT
154 0009D4
155 0009D4 ; ----------------------------------------------
------------------------
156 0009D4 ; HEADER STRUCTURE
157 0009D4 ; The structure of the Forth dictionary headers
(name, link, immediate
158 0009D4 ; flag, and "smudge" bit) does not necessarily
differ across CPUs. This
159 0009D4 ; structure is not easily factored into distinct
"portable" words;
160 0009D4 ; instead, it is implicit in the definitions of
FIND and CREATE, and
161 0009D4 ; also in NFA>LFA, NFA>CFA, IMMED?, IMMEDIATE,
HIDE, and REVEAL.
162 0009D4 ; These words must be (substantially) rewritten
if either the header
163 0009D4 ; structure or its inherent assumptions are
changed.
164 0009D4 ; ----------------------------------------------
------------------------
165 0009D4
30 0009D4 #include "4e-hilvl430.s43"
1 0009D4 ; ----------------------------------------------
------------------------
2 0009D4 ; 4e4th is a Forth based on CamelForth
3 0009D4 ; for the Texas Instruments MSP430
4 0009D4 ;
5 0009D4 ; This program is free software; you can
redistribute it and/or modify
6 0009D4 ; it under the terms of the GNU General Public
License as published by
7 0009D4 ; the Free Software Foundation; either version 3
of the License, or
8 0009D4 ; (at your option) any later version.
9 0009D4 ;
10 0009D4 ; This program is distributed in the hope that
it will be useful,
11 0009D4 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 0009D4 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 0009D4 ; GNU General Public License for more details.
14 0009D4 ;
15 0009D4 ; You should have received a copy of the GNU
General Public License
16 0009D4 ; along with this program. If not, see
.
17 0009D4 ;
18 0009D4 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 0009D4
20 0009D4 ; ----------------------------------------------
------------------------
- 4e-configLP - Page 76
21 0009D4 ; 4e-hilvl430.s43 - High Level Words
22 0009D4 ; ----------------------------------------------
------------------------
23 0009D4
24 0009D4 ; Forth words are documented as follows:
25 0009D4 ;x NAME stack -- stack description
26 0009D4 ; where x=C for ANS Forth Core words, X for
ANS
27 0009D4 ; Extensions, Z for internal or private
words.
28 0009D4 ; ----------------------------------------------
------------------------
29 0009D4 ; REVISION HISTORY
30 0009D4
31 0009D4 ; 17 November 2013
32 0009D4 ; Comments about making ISR in 4e4th
33 0009D4 ; 05 June 2013
34 0009D4 ; WORDS can stop and go now.
35 0009D4 ; 11 Jan 2013 made comments, new features and
words:
36 0009D4 ; Indicate BASE in ok promt.
37 0009D4 ; 0U.R ( u n -- ) print u with n leading
zeros.
38 0009D4 ; (VECWIPE) ( -- ) erase ISR flash.
39 0009D4 ; VECWIPE ( -- ) do (VECWIPE) and set
default reset vector.
40 0009D4 ; cleaned up/added memory information words:
41 0009D4 ; RESETADR ( -- adr) reset vector
address
42 0009D4 ; MEMBOT ( -- adr) bottom of
USERflash
43 0009D4 ; MEMTOP ( -- adr) top of USERflash
44 0009D4 ; MEM ( -- u) unused bytes in
flash
45 0009D4 ; UNUSED ( -- u) unused bytes in
RAM
46 0009D4 ; VARBOT ( -- adr) bottom of variable
area
47 0009D4 ; TOPSEG ( -- adr) bottom of top most
flash segment
48 0009D4 ; VECBOT ( -- adr) bottom of
interrupt vectors
49 0009D4 ; ? ( adr -- u ) display content of
variable
50 0009D4 ; 08 Dez 2012 merged brads PARSE etc form
camelforth/340 V4.1
51 0009D4 ; which fixes the empty string bug.
52 0009D4 ; Dez 2012 Added some features:
53 0009D4 ; Save variables to info-c and restore from
there on COLD.
54 0009D4 ; Made upper most flash segment writable; you
may write vectors now.
55 0009D4 ; VEC! (x adr -- ) store x to adr in top
most segment
56 0009D4 ; VEC! will write _any_ flash location. !!
dangerous!!
57 0009D4 ; VECWIPE will erase flash but not kernel,
sets reset vector to boot 4e4th.
58 0009D4 ; Kernal is bigger now, user flash smaler;
59 0009D4 ; see: XLINK configuration file for
MSP430G2553 4e-lnk430G2553.xcl
60 0009D4 ; 30 Mar 2012 mk fixed FM/MOD
61 0009D4 ; 26 Feb 2012 mk - adopted to MSP430G2553
62 0009D4 ; MEM ( -- n ) n = bytes left in flash
63 0009D4 ; FLASHEND constant MEMTOP
64 0009D4 ; FLASHSTART constant MEMBOT
65 0009D4 ; kernel at $E000, IDP = FLASHSTART =
C000
66 0009D4 ; fixed backspace.
67 0009D4 ; ok promt at end of line.
68 0009D4 ; .S prints depth.
69 0009D4 ;
70 0009D4 ; 17 jan 09 bjr - changed label _DP to DDP for
compatibility with token
71 0009D4 ; naming convention. Now uses DEST macro to
compute branch offsets.
- 4e-configLP - Page 77
72 0009D4 ; 11 jan 09 bjr - modified QUIT for Xon/Xoff
flow control
73 0009D4 ; 4 jan 09 bjr - created from Camel86h.asm.
74 0009D4
75 0009D4 ; SYSTEM VARIABLES & CONSTANTS =================
=
76 0009D4
77 0009D4 ;Z u0 -- a-addr current user area
adrs
78 0009D4 ; 0 USER U0
79 0009D4 HEADER U0,2,'U0',DOUSER
79.1 000000 PUBLIC U0
79.2 0009D4 .... DW link
79.3 0009D6 FF DB 0FFh ; not immediate
79.4 0009D7 link SET $
79.5 0009D7 02 DB 2
79.6 0009D8 5530 DB 'U0'
79.7 0009DA EVEN
79.8 0009DA IF 'DOUSER'='DOCODE'
79.9 0009DA U0: DW $+2
79.10 0009DA ELSE
79.11 0009DA .... U0: DW DOUSER
79.12 0009DC ENDIF
79.13 0009DC ENDM
80 0009DC 0000 DW 0
81 0009DE
82 0009DE ;C >IN -- a-addr holds offset into
TIB
83 0009DE ; 2 USER >IN
84 0009DE HEADER TOIN,3,'>IN',DOUSER
84.1 000000 PUBLIC TOIN
84.2 0009DE .... DW link
84.3 0009E0 FF DB 0FFh ; not immediate
84.4 0009E1 link SET $
84.5 0009E1 03 DB 3
84.6 0009E2 3E494E DB '>IN'
84.7 0009E5 00 EVEN
84.8 0009E6 IF 'DOUSER'='DOCODE'
84.9 0009E6 TOIN: DW $+2
84.10 0009E6 ELSE
84.11 0009E6 .... TOIN: DW DOUSER
84.12 0009E8 ENDIF
84.13 0009E8 ENDM
85 0009E8 0200 DW 2
86 0009EA
87 0009EA ;C BASE -- a-addr holds conversion
radix
88 0009EA ; 4 USER BASE
89 0009EA HEADER BASE,4,'BASE',DOUSER
89.1 000000 PUBLIC BASE
89.2 0009EA .... DW link
89.3 0009EC FF DB 0FFh ; not immediate
89.4 0009ED link SET $
89.5 0009ED 04 DB 4
89.6 0009EE 42415345 DB 'BASE'
89.7 0009F2 EVEN
89.8 0009F2 IF 'DOUSER'='DOCODE'
89.9 0009F2 BASE: DW $+2
89.10 0009F2 ELSE
89.11 0009F2 .... BASE: DW DOUSER
89.12 0009F4 ENDIF
89.13 0009F4 ENDM
90 0009F4 0400 DW 4
91 0009F6
92 0009F6 ;C STATE -- a-addr holds compiler
state
93 0009F6 ; 6 USER STATE
94 0009F6 HEADER STATE,5,'STATE',DOUSER
94.1 000000 PUBLIC STATE
94.2 0009F6 .... DW link
94.3 0009F8 FF DB 0FFh ; not immediate
94.4 0009F9 link SET $
94.5 0009F9 05 DB 5
94.6 0009FA 5354415445 DB 'STATE'
94.7 0009FF 00 EVEN
94.8 000A00 IF 'DOUSER'='DOCODE'
94.9 000A00 STATE: DW $+2
94.10 000A00 ELSE
- 4e-configLP - Page 78
94.11 000A00 .... STATE: DW DOUSER
94.12 000A02 ENDIF
94.13 000A02 ENDM
95 000A02 0600 DW 6
96 000A04
97 000A04 ;Z dp -- a-addr holds dictionary
ptr
98 000A04 ; 8 USER DP
99 000A04 HEADER DDP,2,'DP',DOUSER
99.1 000000 PUBLIC DDP
99.2 000A04 .... DW link
99.3 000A06 FF DB 0FFh ; not immediate
99.4 000A07 link SET $
99.5 000A07 02 DB 2
99.6 000A08 4450 DB 'DP'
99.7 000A0A EVEN
99.8 000A0A IF 'DOUSER'='DOCODE'
99.9 000A0A DDP: DW $+2
99.10 000A0A ELSE
99.11 000A0A .... DDP: DW DOUSER
99.12 000A0C ENDIF
99.13 000A0C ENDM
100 000A0C 0800 DW 8
101 000A0E
102 000A0E ;Z 'source -- a-addr two cells: len,
adrs
103 000A0E ; 10 USER 'SOURCE
104 000A0E HEADER TICKSOURCE,7,'\'SOURCE',DOUSER
104.1 000000 PUBLIC TICKSOURCE
104.2 000A0E .... DW link
104.3 000A10 FF DB 0FFh ; not immediate
104.4 000A11 link SET $
104.5 000A11 07 DB 7
104.6 000A12 27534F555243* DB '\'SOURCE'
104.7 000A19 00 EVEN
104.8 000A1A IF 'DOUSER'='DOCODE'
104.9 000A1A TICKSOURCE: DW $+2
104.10 000A1A ELSE
104.11 000A1A .... TICKSOURCE: DW DOUSER
104.12 000A1C ENDIF
104.13 000A1C ENDM
105 000A1C 0A00 DW 10
106 000A1E
107 000A1E ;Z latest -- a-addr last word in
dict.
108 000A1E ; 14 USER LATEST
109 000A1E HEADER LATEST,6,'LATEST',DOUSER
109.1 000000 PUBLIC LATEST
109.2 000A1E .... DW link
109.3 000A20 FF DB 0FFh ; not immediate
109.4 000A21 link SET $
109.5 000A21 06 DB 6
109.6 000A22 4C4154455354 DB 'LATEST'
109.7 000A28 EVEN
109.8 000A28 IF 'DOUSER'='DOCODE'
109.9 000A28 LATEST: DW $+2
109.10 000A28 ELSE
109.11 000A28 .... LATEST: DW DOUSER
109.12 000A2A ENDIF
109.13 000A2A ENDM
110 000A2A 0E00 DW 14
111 000A2C
112 000A2C ;Z hp -- a-addr HOLD pointer
113 000A2C ; 16 USER HP
114 000A2C HEADER HP,2,'HP',DOUSER
114.1 000000 PUBLIC HP
114.2 000A2C .... DW link
114.3 000A2E FF DB 0FFh ; not immediate
114.4 000A2F link SET $
114.5 000A2F 02 DB 2
114.6 000A30 4850 DB 'HP'
114.7 000A32 EVEN
114.8 000A32 IF 'DOUSER'='DOCODE'
114.9 000A32 HP: DW $+2
114.10 000A32 ELSE
114.11 000A32 .... HP: DW DOUSER
114.12 000A34 ENDIF
114.13 000A34 ENDM
- 4e-configLP - Page 79
115 000A34 1000 DW 16
116 000A36
117 000A36 ;Z LP -- a-addr Leave-stack pointer
118 000A36 ; 18 USER LP
119 000A36 HEADER LP,2,'LP',DOUSER
119.1 000000 PUBLIC LP
119.2 000A36 .... DW link
119.3 000A38 FF DB 0FFh ; not immediate
119.4 000A39 link SET $
119.5 000A39 02 DB 2
119.6 000A3A 4C50 DB 'LP'
119.7 000A3C EVEN
119.8 000A3C IF 'DOUSER'='DOCODE'
119.9 000A3C LP: DW $+2
119.10 000A3C ELSE
119.11 000A3C .... LP: DW DOUSER
119.12 000A3E ENDIF
119.13 000A3E ENDM
120 000A3E 1200 DW 18
121 000A40
122 000A40 ;Z IDP -- a-addr ROM dictionary
pointer
123 000A40 ; 20 USER IDP
124 000A40 HEADER IDP,3,'IDP',DOUSER
124.1 000000 PUBLIC IDP
124.2 000A40 .... DW link
124.3 000A42 FF DB 0FFh ; not immediate
124.4 000A43 link SET $
124.5 000A43 03 DB 3
124.6 000A44 494450 DB 'IDP'
124.7 000A47 00 EVEN
124.8 000A48 IF 'DOUSER'='DOCODE'
124.9 000A48 IDP: DW $+2
124.10 000A48 ELSE
124.11 000A48 .... IDP: DW DOUSER
124.12 000A4A ENDIF
124.13 000A4A ENDM
125 000A4A 1400 DW 20
126 000A4C
127 000A4C ;Z NEWEST -- a-addr temporary LATEST
storage
128 000A4C ; 22 USER NEWEST
129 000A4C HEADER NEWEST,6,'NEWEST',DOUSER
129.1 000000 PUBLIC NEWEST
129.2 000A4C .... DW link
129.3 000A4E FF DB 0FFh ; not immediate
129.4 000A4F link SET $
129.5 000A4F 06 DB 6
129.6 000A50 4E4557455354 DB 'NEWEST'
129.7 000A56 EVEN
129.8 000A56 IF 'DOUSER'='DOCODE'
129.9 000A56 NEWEST: DW $+2
129.10 000A56 ELSE
129.11 000A56 .... NEWEST: DW DOUSER
129.12 000A58 ENDIF
129.13 000A58 ENDM
130 000A58 1600 DW 22
131 000A5A
132 000A5A ;Z APP -- a-addr app pointer ( was
TURNKEY)
133 000A5A ; 24 USER APP
134 000A5A HEADER APP,3,'APP',DOUSER
134.1 000000 PUBLIC APP
134.2 000A5A .... DW link
134.3 000A5C FF DB 0FFh ; not immediate
134.4 000A5D link SET $
134.5 000A5D 03 DB 3
134.6 000A5E 415050 DB 'APP'
134.7 000A61 00 EVEN
134.8 000A62 IF 'DOUSER'='DOCODE'
134.9 000A62 APP: DW $+2
134.10 000A62 ELSE
134.11 000A62 .... APP: DW DOUSER
134.12 000A64 ENDIF
134.13 000A64 ENDM
135 000A64 1800 DW 24
136 000A66
137 000A66 ;Z CAPS -- a-addr capitalize words
- 4e-configLP - Page 80
pointer
138 000A66 ; 26 USER CAPS
139 000A66 HEADER CAPS,4,'CAPS',DOUSER
139.1 000000 PUBLIC CAPS
139.2 000A66 .... DW link
139.3 000A68 FF DB 0FFh ; not immediate
139.4 000A69 link SET $
139.5 000A69 04 DB 4
139.6 000A6A 43415053 DB 'CAPS'
139.7 000A6E EVEN
139.8 000A6E IF 'DOUSER'='DOCODE'
139.9 000A6E CAPS: DW $+2
139.10 000A6E ELSE
139.11 000A6E .... CAPS: DW DOUSER
139.12 000A70 ENDIF
139.13 000A70 ENDM
140 000A70 1A00 DW 26
141 000A72
142 000A72 ;Z USERKEY -- a-addr KEY pointer
143 000A72 ; 28 USER KEY
144 000A72 HEADER USERKEY,7,'USERKEY',DOUSER
144.1 000000 PUBLIC USERKEY
144.2 000A72 .... DW link
144.3 000A74 FF DB 0FFh ; not immediate
144.4 000A75 link SET $
144.5 000A75 07 DB 7
144.6 000A76 555345524B45* DB 'USERKEY'
144.7 000A7D 00 EVEN
144.8 000A7E IF 'DOUSER'='DOCODE'
144.9 000A7E USERKEY: DW $+2
144.10 000A7E ELSE
144.11 000A7E .... USERKEY: DW DOUSER
144.12 000A80 ENDIF
144.13 000A80 ENDM
145 000A80 1C00 DW 28
146 000A82
147 000A82 ;Z USEREMIT -- a-addr EMIT
pointer
148 000A82 ; 30 USER EMIT
149 000A82 HEADER USEREMIT,8,'USEREMIT',DOUSER
149.1 000000 PUBLIC USEREMIT
149.2 000A82 .... DW link
149.3 000A84 FF DB 0FFh ; not immediate
149.4 000A85 link SET $
149.5 000A85 08 DB 8
149.6 000A86 55534552454D* DB 'USEREMIT'
149.7 000A8E EVEN
149.8 000A8E IF 'DOUSER'='DOCODE'
149.9 000A8E USEREMIT: DW $+2
149.10 000A8E ELSE
149.11 000A8E .... USEREMIT: DW DOUSER
149.12 000A90 ENDIF
149.13 000A90 ENDM
150 000A90 1E00 DW 30
151 000A92
152 000A92 ;Z NEWLINE -- a-addr CR pointer
153 000A92 ; 32 USER
154 000A92 HEADER NEWLINE,7,'NEWLINE',DOUSER
154.1 000000 PUBLIC NEWLINE
154.2 000A92 .... DW link
154.3 000A94 FF DB 0FFh ; not immediate
154.4 000A95 link SET $
154.5 000A95 07 DB 7
154.6 000A96 4E45574C494E* DB 'NEWLINE'
154.7 000A9D 00 EVEN
154.8 000A9E IF 'DOUSER'='DOCODE'
154.9 000A9E NEWLINE: DW $+2
154.10 000A9E ELSE
154.11 000A9E .... NEWLINE: DW DOUSER
154.12 000AA0 ENDIF
154.13 000AA0 ENDM
155 000AA0 2000 DW 32
156 000AA2
157 000AA2 ; 2 more for savety 34, 36
158 000AA2
159 000AA2
160 000AA2
161 000AA2 ;X PAD -- a-addr user PAD buffer
- 4e-configLP - Page 81
162 000AA2 ; = end of hold
area!
163 000AA2 HEADER PAD,3,'PAD',DOUSER
163.1 000000 PUBLIC PAD
163.2 000AA2 .... DW link
163.3 000AA4 FF DB 0FFh ; not immediate
163.4 000AA5 link SET $
163.5 000AA5 03 DB 3
163.6 000AA6 504144 DB 'PAD'
163.7 000AA9 00 EVEN
163.8 000AAA IF 'DOUSER'='DOCODE'
163.9 000AAA PAD: DW $+2
163.10 000AAA ELSE
163.11 000AAA .... PAD: DW DOUSER
163.12 000AAC ENDIF
163.13 000AAC ENDM
164 000AAC .... DW PADAREA-UAREA
165 000AAE
166 000AAE ;Z l0 -- a-addr bottom of Leave
stack
167 000AAE HEADER L0,2,'L0',DOUSER
167.1 000000 PUBLIC L0
167.2 000AAE .... DW link
167.3 000AB0 FF DB 0FFh ; not immediate
167.4 000AB1 link SET $
167.5 000AB1 02 DB 2
167.6 000AB2 4C30 DB 'L0'
167.7 000AB4 EVEN
167.8 000AB4 IF 'DOUSER'='DOCODE'
167.9 000AB4 L0: DW $+2
167.10 000AB4 ELSE
167.11 000AB4 .... L0: DW DOUSER
167.12 000AB6 ENDIF
167.13 000AB6 ENDM
168 000AB6 .... DW LSTACK-UAREA
169 000AB8
170 000AB8 ;Z r0 -- a-addr end of return
stack
171 000AB8 HEADER RZERO,2,'R0',DOUSER
171.1 000000 PUBLIC RZERO
171.2 000AB8 .... DW link
171.3 000ABA FF DB 0FFh ; not immediate
171.4 000ABB link SET $
171.5 000ABB 02 DB 2
171.6 000ABC 5230 DB 'R0'
171.7 000ABE EVEN
171.8 000ABE IF 'DOUSER'='DOCODE'
171.9 000ABE RZERO: DW $+2
171.10 000ABE ELSE
171.11 000ABE .... RZERO: DW DOUSER
171.12 000AC0 ENDIF
171.13 000AC0 ENDM
172 000AC0 .... DW RSTACK-UAREA
173 000AC2
174 000AC2 ;Z s0 -- a-addr end of parameter
stack
175 000AC2 HEADER S0,2,'S0',DOUSER
175.1 000000 PUBLIC S0
175.2 000AC2 .... DW link
175.3 000AC4 FF DB 0FFh ; not immediate
175.4 000AC5 link SET $
175.5 000AC5 02 DB 2
175.6 000AC6 5330 DB 'S0'
175.7 000AC8 EVEN
175.8 000AC8 IF 'DOUSER'='DOCODE'
175.9 000AC8 S0: DW $+2
175.10 000AC8 ELSE
175.11 000AC8 .... S0: DW DOUSER
175.12 000ACA ENDIF
175.13 000ACA ENDM
176 000ACA .... DW PSTACK-UAREA
177 000ACC
178 000ACC ;X tib -- a-addr Terminal Input
Buffer
179 000ACC ; HEX 80 USER TIB 8086: above user
area
180 000ACC HEADER TIB,3,'TIB',DOUSER
180.1 000000 PUBLIC TIB
- 4e-configLP - Page 82
180.2 000ACC .... DW link
180.3 000ACE FF DB 0FFh ; not immediate
180.4 000ACF link SET $
180.5 000ACF 03 DB 3
180.6 000AD0 544942 DB 'TIB'
180.7 000AD3 00 EVEN
180.8 000AD4 IF 'DOUSER'='DOCODE'
180.9 000AD4 TIB: DW $+2
180.10 000AD4 ELSE
180.11 000AD4 .... TIB: DW DOUSER
180.12 000AD6 ENDIF
180.13 000AD6 ENDM
181 000AD6 .... DW TIBAREA-UAREA
182 000AD8
183 000AD8 ;Z tibsize -- n size of TIB
184 000AD8 HEADER TIBSIZE,7,'TIBSIZE',DOCON
184.1 000000 PUBLIC TIBSIZE
184.2 000AD8 .... DW link
184.3 000ADA FF DB 0FFh ; not immediate
184.4 000ADB link SET $
184.5 000ADB 07 DB 7
184.6 000ADC 54494253495A* DB 'TIBSIZE'
184.7 000AE3 00 EVEN
184.8 000AE4 IF 'DOCON'='DOCODE'
184.9 000AE4 TIBSIZE: DW $+2
184.10 000AE4 ELSE
184.11 000AE4 .... TIBSIZE: DW DOCON
184.12 000AE6 ENDIF
184.13 000AE6 ENDM
185 000AE6 .... DW TIB_SIZE-2 ; 2 chars safety zone
186 000AE8
187 000AE8 ;C BL -- char an ASCII
space
188 000AE8 HEADER BLANK,2,'BL',DOCON
188.1 000000 PUBLIC BLANK
188.2 000AE8 .... DW link
188.3 000AEA FF DB 0FFh ; not immediate
188.4 000AEB link SET $
188.5 000AEB 02 DB 2
188.6 000AEC 424C DB 'BL'
188.7 000AEE EVEN
188.8 000AEE IF 'DOCON'='DOCODE'
188.9 000AEE BLANK: DW $+2
188.10 000AEE ELSE
188.11 000AEE .... BLANK: DW DOCON
188.12 000AF0 ENDIF
188.13 000AF0 ENDM
189 000AF0 2000 DW 20h
190 000AF2
191 000AF2 ;Z uinit -- addr initial values for
user area
192 000AF2 HEADER UINIT,5,'UINIT',DOROM
192.1 000000 PUBLIC UINIT
192.2 000AF2 .... DW link
192.3 000AF4 FF DB 0FFh ; not immediate
192.4 000AF5 link SET $
192.5 000AF5 05 DB 5
192.6 000AF6 55494E4954 DB 'UINIT'
192.7 000AFB 00 EVEN
192.8 000AFC IF 'DOROM'='DOCODE'
192.9 000AFC UINIT: DW $+2
192.10 000AFC ELSE
192.11 000AFC .... UINIT: DW DOROM
192.12 000AFE ENDIF
192.13 000AFE ENDM
193 000AFE uinitstart:
194 000AFE 000000000A00* DW 0,0,10,0 ; reserved,>IN,BASE,STAT
E ; start in HEX
mk
195 000B06 .... DW RAMDICT ; DP
196 000B08 00000000 DW 0,0 ; SOURCE init'd
elsewhere
197 000B0C .... DW lastword ; LATEST
198 000B0E 00000000 DW 0,0 ; HP,LP init'd
elsewhere
199 000B12 00C0 DW USERFLASHSTART ; IDP
200 000B14 0000 DW 0 ; NEWEST not init'd
- 4e-configLP - Page 83
201 000B16 .... DW DOTCOLD ; APP vector; default is
.COLD
202 000B18 FFFF DW -1 ; CAPS flag; default is
TRUE
203 000B1A .... DW DOKEY ; KEY vector
204 000B1C .... DW DOEMIT ; EMIT vector
205 000B1E .... DW DOCR ; CR vector
206 000B20 uinitend:
207 000022 uareasize = uinitend-uinitstart
208 000B20
209 000B20 /* not there mk
210 000B20 ; RAM interrupt vectors, 15 vectors of 2 cells
each
211 000B20 MOV #nullirq,PC
212 000B20 MOV #nullirq,PC
213 000B20 MOV #nullirq,PC
214 000B20 MOV #nullirq,PC
215 000B20 MOV #nullirq,PC
216 000B20 MOV #nullirq,PC
217 000B20 MOV #nullirq,PC
218 000B20 MOV #nullirq,PC
219 000B20 MOV #nullirq,PC
220 000B20 MOV #nullirq,PC
221 000B20 MOV #nullirq,PC
222 000B20 MOV #nullirq,PC
223 000B20 MOV #nullirq,PC
224 000B20 MOV #nullirq,PC
225 000B20 MOV #nullirq,PC
226 000B20 */
227 000B20
228 000B20 ;Z #init -- n #bytes of user area init
data
229 000B20 HEADER NINIT,5,'#INIT',DOCON
229.1 000000 PUBLIC NINIT
229.2 000B20 .... DW link
229.3 000B22 FF DB 0FFh ; not immediate
229.4 000B23 link SET $
229.5 000B23 05 DB 5
229.6 000B24 23494E4954 DB '#INIT'
229.7 000B29 00 EVEN
229.8 000B2A IF 'DOCON'='DOCODE'
229.9 000B2A NINIT: DW $+2
229.10 000B2A ELSE
229.11 000B2A .... NINIT: DW DOCON
229.12 000B2C ENDIF
229.13 000B2C ENDM
230 000B2C 2200 DW uareasize
231 000B2E
232 000B2E
233 000000 EXTERN cor,infoB,AppU0,infoC,infoD
234 000B2E ;Z COR -- adr cause of reset
235 000B2E HEADER COR,3,'COR',DOCON
235.1 000000 PUBLIC COR
235.2 000B2E .... DW link
235.3 000B30 FF DB 0FFh ; not immediate
235.4 000B31 link SET $
235.5 000B31 03 DB 3
235.6 000B32 434F52 DB 'COR'
235.7 000B35 00 EVEN
235.8 000B36 IF 'DOCON'='DOCODE'
235.9 000B36 COR: DW $+2
235.10 000B36 ELSE
235.11 000B36 .... COR: DW DOCON
235.12 000B38 ENDIF
235.13 000B38 ENDM
236 000B38 .... DW cor
237 000B3A
238 000B3A ;Z INFOB -- adr start of info B
segment
239 000B3A HEADER INFOB,5,'INFOB',DOCON
239.1 000000 PUBLIC INFOB
239.2 000B3A .... DW link
239.3 000B3C FF DB 0FFh ; not immediate
239.4 000B3D link SET $
239.5 000B3D 05 DB 5
239.6 000B3E 494E464F42 DB 'INFOB'
239.7 000B43 00 EVEN
239.8 000B44 IF 'DOCON'='DOCODE'
- 4e-configLP - Page 84
239.9 000B44 INFOB: DW $+2
239.10 000B44 ELSE
239.11 000B44 .... INFOB: DW DOCON
239.12 000B46 ENDIF
239.13 000B46 ENDM
240 000B46 .... DW infoB
241 000B48
242 000B48 ;Z INFOC -- adr start of info C
segment
243 000B48 HEADER INFOC,5,'INFOC',DOCON
243.1 000000 PUBLIC INFOC
243.2 000B48 .... DW link
243.3 000B4A FF DB 0FFh ; not immediate
243.4 000B4B link SET $
243.5 000B4B 05 DB 5
243.6 000B4C 494E464F43 DB 'INFOC'
243.7 000B51 00 EVEN
243.8 000B52 IF 'DOCON'='DOCODE'
243.9 000B52 INFOC: DW $+2
243.10 000B52 ELSE
243.11 000B52 .... INFOC: DW DOCON
243.12 000B54 ENDIF
243.13 000B54 ENDM
244 000B54 .... DW infoC
245 000B56
246 000B56 ;Z INFOD -- adr start of info C
segment
247 000B56 HEADER INFOD,5,'INFOD',DOCON
247.1 000000 PUBLIC INFOD
247.2 000B56 .... DW link
247.3 000B58 FF DB 0FFh ; not immediate
247.4 000B59 link SET $
247.5 000B59 05 DB 5
247.6 000B5A 494E464F44 DB 'INFOD'
247.7 000B5F 00 EVEN
247.8 000B60 IF 'DOCON'='DOCODE'
247.9 000B60 INFOD: DW $+2
247.10 000B60 ELSE
247.11 000B60 .... INFOD: DW DOCON
247.12 000B62 ENDIF
247.13 000B62 ENDM
248 000B62 .... DW infoD
249 000B64
250 000B64 ;Z APPU0 -- adr start of Application
user area
251 000B64 HEADER APPU0,5,'APPU0',DOCON
251.1 000000 PUBLIC APPU0
251.2 000B64 .... DW link
251.3 000B66 FF DB 0FFh ; not immediate
251.4 000B67 link SET $
251.5 000B67 05 DB 5
251.6 000B68 4150505530 DB 'APPU0'
251.7 000B6D 00 EVEN
251.8 000B6E IF 'DOCON'='DOCODE'
251.9 000B6E APPU0: DW $+2
251.10 000B6E ELSE
251.11 000B6E .... APPU0: DW DOCON
251.12 000B70 ENDIF
251.13 000B70 ENDM
252 000B70 .... DW AppU0
253 000B72
254 000B72
255 000B72 ; ARITHMETIC OPERATORS =========================
=
256 000B72
257 000B72 ;C S>D n -- d single -> double
prec.
258 000B72 ; DUP 0< ;
259 000B72 HEADER STOD,3,'S>D',DOCOLON
259.1 000000 PUBLIC STOD
259.2 000B72 .... DW link
259.3 000B74 FF DB 0FFh ; not immediate
259.4 000B75 link SET $
259.5 000B75 03 DB 3
259.6 000B76 533E44 DB 'S>D'
259.7 000B79 00 EVEN
259.8 000B7A IF 'DOCOLON'='DOCODE'
259.9 000B7A STOD: DW $+2
- 4e-configLP - Page 85
259.10 000B7A ELSE
259.11 000B7A .... STOD: DW DOCOLON
259.12 000B7C ENDIF
259.13 000B7C ENDM
260 000B7C ............ DW DUP,ZEROLESS,EXIT
261 000B82
262 000B82 ;Z ?NEGATE n1 n2 -- n3 negate n1 if n2
negative
263 000B82 ; 0< IF NEGATE THEN ; ...a common
factor
264 000B82 HEADER QNEGATE,7,'?NEGATE',DOCOLON
264.1 000000 PUBLIC QNEGATE
264.2 000B82 .... DW link
264.3 000B84 FF DB 0FFh ; not immediate
264.4 000B85 link SET $
264.5 000B85 07 DB 7
264.6 000B86 3F4E45474154* DB '?NEGATE'
264.7 000B8D 00 EVEN
264.8 000B8E IF 'DOCOLON'='DOCODE'
264.9 000B8E QNEGATE: DW $+2
264.10 000B8E ELSE
264.11 000B8E .... QNEGATE: DW DOCOLON
264.12 000B90 ENDIF
264.13 000B90 ENDM
265 000B90 ........ DW ZEROLESS,qbran
266 000B94 DEST QNEG1
266.1 000B94 0400 DW QNEG1-$
266.2 000B96 ENDM
267 000B96 .... DW NEGATE
268 000B98 .... QNEG1: DW EXIT
269 000B9A
270 000B9A ;C ABS n1 -- +n2 absolute value
271 000B9A ; DUP ?NEGATE ;
272 000B9A HEADER ABBS,3,'ABS',DOCOLON
272.1 000000 PUBLIC ABBS
272.2 000B9A .... DW link
272.3 000B9C FF DB 0FFh ; not immediate
272.4 000B9D link SET $
272.5 000B9D 03 DB 3
272.6 000B9E 414253 DB 'ABS'
272.7 000BA1 00 EVEN
272.8 000BA2 IF 'DOCOLON'='DOCODE'
272.9 000BA2 ABBS: DW $+2
272.10 000BA2 ELSE
272.11 000BA2 .... ABBS: DW DOCOLON
272.12 000BA4 ENDIF
272.13 000BA4 ENDM
273 000BA4 ............ DW DUP,QNEGATE,EXIT
274 000BAA
275 000BAA ;X DNEGATE d1 -- d2 negate double
precision
276 000BAA ; SWAP INVERT SWAP INVERT 1 M+ ;
277 000BAA HEADER DNEGATE,7,'DNEGATE',DOCOLON
277.1 000000 PUBLIC DNEGATE
277.2 000BAA .... DW link
277.3 000BAC FF DB 0FFh ; not immediate
277.4 000BAD link SET $
277.5 000BAD 07 DB 7
277.6 000BAE 444E45474154* DB 'DNEGATE'
277.7 000BB5 00 EVEN
277.8 000BB6 IF 'DOCOLON'='DOCODE'
277.9 000BB6 DNEGATE: DW $+2
277.10 000BB6 ELSE
277.11 000BB6 .... DNEGATE: DW DOCOLON
277.12 000BB8 ENDIF
277.13 000BB8 ENDM
278 000BB8 ............* DW SWAP,INVERT,SWAP,INVERT,lit,1,MPLUS
279 000BC6 .... DW EXIT
280 000BC8
281 000BC8 ;Z ?DNEGATE d1 n -- d2 negate d1 if n
negative
282 000BC8 ; 0< IF DNEGATE THEN ; ...a common
factor
283 000BC8 HEADER QDNEGATE,8,'?DNEGATE',DOCOLON
283.1 000000 PUBLIC QDNEGATE
283.2 000BC8 .... DW link
283.3 000BCA FF DB 0FFh ; not immediate
283.4 000BCB link SET $
- 4e-configLP - Page 86
283.5 000BCB 08 DB 8
283.6 000BCC 3F444E454741* DB '?DNEGATE'
283.7 000BD4 EVEN
283.8 000BD4 IF 'DOCOLON'='DOCODE'
283.9 000BD4 QDNEGATE: DW $+2
283.10 000BD4 ELSE
283.11 000BD4 .... QDNEGATE: DW DOCOLON
283.12 000BD6 ENDIF
283.13 000BD6 ENDM
284 000BD6 ........ DW ZEROLESS,qbran
285 000BDA DEST DNEG1
285.1 000BDA 0400 DW DNEG1-$
285.2 000BDC ENDM
286 000BDC .... DW DNEGATE
287 000BDE .... DNEG1: DW EXIT
288 000BE0
289 000BE0 ;X DABS d1 -- +d2 absolute value
dbl.prec.
290 000BE0 ; DUP ?DNEGATE ;
291 000BE0 HEADER DABS,4,'DABS',DOCOLON
291.1 000000 PUBLIC DABS
291.2 000BE0 .... DW link
291.3 000BE2 FF DB 0FFh ; not immediate
291.4 000BE3 link SET $
291.5 000BE3 04 DB 4
291.6 000BE4 44414253 DB 'DABS'
291.7 000BE8 EVEN
291.8 000BE8 IF 'DOCOLON'='DOCODE'
291.9 000BE8 DABS: DW $+2
291.10 000BE8 ELSE
291.11 000BE8 .... DABS: DW DOCOLON
291.12 000BEA ENDIF
291.13 000BEA ENDM
292 000BEA ............ DW DUP,QDNEGATE,EXIT
293 000BF0
294 000BF0 ;C M* n1 n2 -- d signed 16*16->32
multiply
295 000BF0 ; 2DUP XOR >R carries sign of the
result
296 000BF0 ; SWAP ABS SWAP ABS UM*
297 000BF0 ; R> ?DNEGATE ;
298 000BF0 HEADER MSTAR,2,'M*',DOCOLON
298.1 000000 PUBLIC MSTAR
298.2 000BF0 .... DW link
298.3 000BF2 FF DB 0FFh ; not immediate
298.4 000BF3 link SET $
298.5 000BF3 02 DB 2
298.6 000BF4 4D2A DB 'M*'
298.7 000BF6 EVEN
298.8 000BF6 IF 'DOCOLON'='DOCODE'
298.9 000BF6 MSTAR: DW $+2
298.10 000BF6 ELSE
298.11 000BF6 .... MSTAR: DW DOCOLON
298.12 000BF8 ENDIF
298.13 000BF8 ENDM
299 000BF8 ............ DW TWODUP,XORR,TOR
300 000BFE ............* DW SWAP,ABBS,SWAP,ABBS,UMSTAR
301 000C08 ............ DW RFROM,QDNEGATE,EXIT
302 000C0E
303 000C0E ;C SM/REM d1 n1 -- n2 n3 symmetric signed
div
304 000C0E ; 2DUP XOR >R sign of quotient
305 000C0E ; OVER >R sign of remainder
306 000C0E ; ABS >R DABS R> UM/MOD
307 000C0E ; SWAP R> ?NEGATE
308 000C0E ; SWAP R> ?NEGATE ;
309 000C0E ; Ref. dpANS-6 section 3.2.2.1.
310 000C0E HEADER SMSLASHREM,6,'SM/REM',DOCOLON
310.1 000000 PUBLIC SMSLASHREM
310.2 000C0E .... DW link
310.3 000C10 FF DB 0FFh ; not immediate
310.4 000C11 link SET $
310.5 000C11 06 DB 6
310.6 000C12 534D2F52454D DB 'SM/REM'
310.7 000C18 EVEN
310.8 000C18 IF 'DOCOLON'='DOCODE'
310.9 000C18 SMSLASHREM: DW $+2
310.10 000C18 ELSE
- 4e-configLP - Page 87
310.11 000C18 .... SMSLASHREM: DW DOCOLON
310.12 000C1A ENDIF
310.13 000C1A ENDM
311 000C1A ............* DW TWODUP,XORR,TOR,OVER,TOR
312 000C24 ............* DW ABBS,TOR,DABS,RFROM,UMSLASHMOD
313 000C2E ............* DW SWAP,RFROM,QNEGATE,SWAP,RFROM,QNEGATE
314 000C3A .... DW EXIT
315 000C3C
316 000C3C ;C d1 n1 -- n2 n3 floored signed div'n
317 000C3C ; courtesy of Ed
Smeda
318 000C3C ; DUP >R SM/REM 2DUP 1 < AND IF
319 000C3C ; SWAP R@ + SWAP 1- THEN
320 000C3C ; R> DROP ;
321 000C3C ; Ref. dpANS-6 section 3.2.2.1.
322 000C3C ; HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON
323 000C3C ; DW DUP,TOR,SMSLASHREM
324 000C3C ; DW TWODUP,lit,1,LESS,ANDD,qbran
325 000C3C ; DEST FMMOD1
326 000C3C ; DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS
327 000C3C ;FMMOD1: DW RFROM,DROP,EXIT
328 000C3C
329 000C3C ; Fixed FM/MOD, added 12 nov 2012
330 000C3C ;C FM/MOD d1 n1 -- n2 n3 floored signed
div'n
331 000C3C ; Ching-Tang Tseng
Mar 24 2012
332 000C3C ; DUP >R OVER OVER XOR >R
333 000C3C ; SM/REM
334 000C3C ; OVER R> 0< AND
335 000C3C ; IF SWAP R@ + SWAP 1 -
336 000C3C ; THEN R> DROP ;
337 000C3C ; 1 0 2 FM/MOD(OK) . . 0 1 ok
338 000C3C ; 7 0 9 FM/MOD(OK) . . 0 7 ok
339 000C3C ; Ref. dpANS-6 section 3.2.2.1.
340 000C3C HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON
340.1 000000 PUBLIC FMSLASHMOD
340.2 000C3C .... DW link
340.3 000C3E FF DB 0FFh ; not immediate
340.4 000C3F link SET $
340.5 000C3F 06 DB 6
340.6 000C40 464D2F4D4F44 DB 'FM/MOD'
340.7 000C46 EVEN
340.8 000C46 IF 'DOCOLON'='DOCODE'
340.9 000C46 FMSLASHMOD: DW $+2
340.10 000C46 ELSE
340.11 000C46 .... FMSLASHMOD: DW DOCOLON
340.12 000C48 ENDIF
340.13 000C48 ENDM
341 000C48 ............* DW DUP,TOR,OVER,OVER,XORR,TOR
342 000C54 .... DW SMSLASHREM
343 000C56 ............* DW OVER,RFROM,ZEROLESS,ANDD,qbran
344 000C60 DEST FMMOD1
344.1 000C60 0C00 DW FMMOD1-$
344.2 000C62 ENDM
345 000C62 ............* DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS
346 000C6C ............ FMMOD1: DW RFROM,DROP,EXIT
347 000C72
348 000C72 ;C * n1 n2 -- n3 signed multiply
349 000C72 ; M* DROP ;
350 000C72 HEADER STAR,1,'*',DOCOLON
350.1 000000 PUBLIC STAR
350.2 000C72 .... DW link
350.3 000C74 FF DB 0FFh ; not immediate
350.4 000C75 link SET $
350.5 000C75 01 DB 1
350.6 000C76 2A DB '*'
350.7 000C77 00 EVEN
350.8 000C78 IF 'DOCOLON'='DOCODE'
350.9 000C78 STAR: DW $+2
350.10 000C78 ELSE
350.11 000C78 .... STAR: DW DOCOLON
350.12 000C7A ENDIF
350.13 000C7A ENDM
351 000C7A ............ DW MSTAR,DROP,EXIT
352 000C80
353 000C80 ;C /MOD n1 n2 -- n3 n4 signed divide/rem'dr
354 000C80 ; >R S>D R> FM/MOD ;
- 4e-configLP - Page 88
355 000C80 HEADER SLASHMOD,4,'/MOD',DOCOLON
355.1 000000 PUBLIC SLASHMOD
355.2 000C80 .... DW link
355.3 000C82 FF DB 0FFh ; not immediate
355.4 000C83 link SET $
355.5 000C83 04 DB 4
355.6 000C84 2F4D4F44 DB '/MOD'
355.7 000C88 EVEN
355.8 000C88 IF 'DOCOLON'='DOCODE'
355.9 000C88 SLASHMOD: DW $+2
355.10 000C88 ELSE
355.11 000C88 .... SLASHMOD: DW DOCOLON
355.12 000C8A ENDIF
355.13 000C8A ENDM
356 000C8A ............* DW TOR,STOD,RFROM,FMSLASHMOD,EXIT
357 000C94
358 000C94 ;C / n1 n2 -- n3 signed divide
359 000C94 ; /MOD nip ;
360 000C94 HEADER SLASH,1,'/',DOCOLON
360.1 000000 PUBLIC SLASH
360.2 000C94 .... DW link
360.3 000C96 FF DB 0FFh ; not immediate
360.4 000C97 link SET $
360.5 000C97 01 DB 1
360.6 000C98 2F DB '/'
360.7 000C99 00 EVEN
360.8 000C9A IF 'DOCOLON'='DOCODE'
360.9 000C9A SLASH: DW $+2
360.10 000C9A ELSE
360.11 000C9A .... SLASH: DW DOCOLON
360.12 000C9C ENDIF
360.13 000C9C ENDM
361 000C9C ............ DW SLASHMOD,NIP,EXIT
362 000CA2
363 000CA2 ;C MOD n1 n2 -- n3 signed remainder
364 000CA2 ; /MOD DROP ;
365 000CA2 HEADER MODD,3,'MOD',DOCOLON
365.1 000000 PUBLIC MODD
365.2 000CA2 .... DW link
365.3 000CA4 FF DB 0FFh ; not immediate
365.4 000CA5 link SET $
365.5 000CA5 03 DB 3
365.6 000CA6 4D4F44 DB 'MOD'
365.7 000CA9 00 EVEN
365.8 000CAA IF 'DOCOLON'='DOCODE'
365.9 000CAA MODD: DW $+2
365.10 000CAA ELSE
365.11 000CAA .... MODD: DW DOCOLON
365.12 000CAC ENDIF
365.13 000CAC ENDM
366 000CAC ............ DW SLASHMOD,DROP,EXIT
367 000CB2
368 000CB2 ;C */MOD n1 n2 n3 -- n4 n5 n1*n2/n3,
rem"
369 000CB2 ; >R M* R> FM/MOD ;
370 000CB2 HEADER SSMOD,5,'*/MOD',DOCOLON
370.1 000000 PUBLIC SSMOD
370.2 000CB2 .... DW link
370.3 000CB4 FF DB 0FFh ; not immediate
370.4 000CB5 link SET $
370.5 000CB5 05 DB 5
370.6 000CB6 2A2F4D4F44 DB '*/MOD'
370.7 000CBB 00 EVEN
370.8 000CBC IF 'DOCOLON'='DOCODE'
370.9 000CBC SSMOD: DW $+2
370.10 000CBC ELSE
370.11 000CBC .... SSMOD: DW DOCOLON
370.12 000CBE ENDIF
370.13 000CBE ENDM
371 000CBE ............* DW TOR,MSTAR,RFROM,FMSLASHMOD,EXIT
372 000CC8
373 000CC8 ;C */ n1 n2 n3 -- n4 n1*n2/n3
374 000CC8 ; */MOD nip ;
375 000CC8 HEADER STARSLASH,2,'*/',DOCOLON
375.1 000000 PUBLIC STARSLASH
375.2 000CC8 .... DW link
375.3 000CCA FF DB 0FFh ; not immediate
375.4 000CCB link SET $
- 4e-configLP - Page 89
375.5 000CCB 02 DB 2
375.6 000CCC 2A2F DB '*/'
375.7 000CCE EVEN
375.8 000CCE IF 'DOCOLON'='DOCODE'
375.9 000CCE STARSLASH: DW $+2
375.10 000CCE ELSE
375.11 000CCE .... STARSLASH: DW DOCOLON
375.12 000CD0 ENDIF
375.13 000CD0 ENDM
376 000CD0 ............ DW SSMOD,NIP,EXIT
377 000CD6
378 000CD6 ;C MAX n1 n2 -- n3 signed maximum
379 000CD6 ; 2DUP < IF SWAP THEN DROP ;
380 000CD6 HEADER MAX,3,'MAX',DOCOLON
380.1 000000 PUBLIC MAX
380.2 000CD6 .... DW link
380.3 000CD8 FF DB 0FFh ; not immediate
380.4 000CD9 link SET $
380.5 000CD9 03 DB 3
380.6 000CDA 4D4158 DB 'MAX'
380.7 000CDD 00 EVEN
380.8 000CDE IF 'DOCOLON'='DOCODE'
380.9 000CDE MAX: DW $+2
380.10 000CDE ELSE
380.11 000CDE .... MAX: DW DOCOLON
380.12 000CE0 ENDIF
380.13 000CE0 ENDM
381 000CE0 ............ DW TWODUP,LESS,qbran
382 000CE6 DEST MAX1
382.1 000CE6 0400 DW MAX1-$
382.2 000CE8 ENDM
383 000CE8 .... DW SWAP
384 000CEA ........ MAX1: DW DROP,EXIT
385 000CEE
386 000CEE ;C MIN n1 n2 -- n3 signed minimum
387 000CEE ; 2DUP > IF SWAP THEN DROP ;
388 000CEE HEADER MIN,3,'MIN',DOCOLON
388.1 000000 PUBLIC MIN
388.2 000CEE .... DW link
388.3 000CF0 FF DB 0FFh ; not immediate
388.4 000CF1 link SET $
388.5 000CF1 03 DB 3
388.6 000CF2 4D494E DB 'MIN'
388.7 000CF5 00 EVEN
388.8 000CF6 IF 'DOCOLON'='DOCODE'
388.9 000CF6 MIN: DW $+2
388.10 000CF6 ELSE
388.11 000CF6 .... MIN: DW DOCOLON
388.12 000CF8 ENDIF
388.13 000CF8 ENDM
389 000CF8 ............ DW TWODUP,GREATER,qbran
390 000CFE DEST MIN1
390.1 000CFE 0400 DW MIN1-$
390.2 000D00 ENDM
391 000D00 .... DW SWAP
392 000D02 ........ MIN1: DW DROP,EXIT
393 000D06
394 000D06 ; DOUBLE OPERATORS =============================
=
395 000D06
396 000D06 ;C 2@ a-addr -- x1 x2 fetch 2 cells
397 000D06 ; DUP CELL+ @ SWAP @ ;
398 000D06 ; the lower address will appear on top of
stack
399 000D06 HEADER TWOFETCH,2,'2@',DOCOLON
399.1 000000 PUBLIC TWOFETCH
399.2 000D06 .... DW link
399.3 000D08 FF DB 0FFh ; not immediate
399.4 000D09 link SET $
399.5 000D09 02 DB 2
399.6 000D0A 3240 DB '2@'
399.7 000D0C EVEN
399.8 000D0C IF 'DOCOLON'='DOCODE'
399.9 000D0C TWOFETCH: DW $+2
399.10 000D0C ELSE
399.11 000D0C .... TWOFETCH: DW DOCOLON
399.12 000D0E ENDIF
399.13 000D0E ENDM
- 4e-configLP - Page 90
400 000D0E ............* DW DUP,CELLPLUS,FETCH,SWAP,FETCH,EXIT
401 000D1A
402 000D1A ;C 2! x1 x2 a-addr -- store 2 cells
403 000D1A ; SWAP OVER ! CELL+ ! ;
404 000D1A ; the top of stack is stored at the lower
adrs
405 000D1A HEADER TWOSTORE,2,'2!',DOCOLON
405.1 000000 PUBLIC TWOSTORE
405.2 000D1A .... DW link
405.3 000D1C FF DB 0FFh ; not immediate
405.4 000D1D link SET $
405.5 000D1D 02 DB 2
405.6 000D1E 3221 DB '2!'
405.7 000D20 EVEN
405.8 000D20 IF 'DOCOLON'='DOCODE'
405.9 000D20 TWOSTORE: DW $+2
405.10 000D20 ELSE
405.11 000D20 .... TWOSTORE: DW DOCOLON
405.12 000D22 ENDIF
405.13 000D22 ENDM
406 000D22 ............* DW SWAP,OVER,STORE,CELLPLUS,STORE,EXIT
407 000D2E
408 000D2E ;C 2DROP x1 x2 -- drop 2 cells
409 000D2E ; DROP DROP ;
410 000D2E HEADER TWODROP,5,'2DROP',DOCOLON
410.1 000000 PUBLIC TWODROP
410.2 000D2E .... DW link
410.3 000D30 FF DB 0FFh ; not immediate
410.4 000D31 link SET $
410.5 000D31 05 DB 5
410.6 000D32 3244524F50 DB '2DROP'
410.7 000D37 00 EVEN
410.8 000D38 IF 'DOCOLON'='DOCODE'
410.9 000D38 TWODROP: DW $+2
410.10 000D38 ELSE
410.11 000D38 .... TWODROP: DW DOCOLON
410.12 000D3A ENDIF
410.13 000D3A ENDM
411 000D3A ............ DW DROP,DROP,EXIT
412 000D40
413 000D40 ;C 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2
cells
414 000D40 ; OVER OVER ;
415 000D40 HEADER TWODUP,4,'2DUP',DOCOLON
415.1 000000 PUBLIC TWODUP
415.2 000D40 .... DW link
415.3 000D42 FF DB 0FFh ; not immediate
415.4 000D43 link SET $
415.5 000D43 04 DB 4
415.6 000D44 32445550 DB '2DUP'
415.7 000D48 EVEN
415.8 000D48 IF 'DOCOLON'='DOCODE'
415.9 000D48 TWODUP: DW $+2
415.10 000D48 ELSE
415.11 000D48 .... TWODUP: DW DOCOLON
415.12 000D4A ENDIF
415.13 000D4A ENDM
416 000D4A ............ DW OVER,OVER,EXIT
417 000D50
418 000D50 ;C 2SWAP x1 x2 x3 x4 -- x3 x4 x1 x2 per
diagram
419 000D50 ; ROT >R ROT R> ;
420 000D50 HEADER TWOSWAP,5,'2SWAP',DOCOLON
420.1 000000 PUBLIC TWOSWAP
420.2 000D50 .... DW link
420.3 000D52 FF DB 0FFh ; not immediate
420.4 000D53 link SET $
420.5 000D53 05 DB 5
420.6 000D54 3253574150 DB '2SWAP'
420.7 000D59 00 EVEN
420.8 000D5A IF 'DOCOLON'='DOCODE'
420.9 000D5A TWOSWAP: DW $+2
420.10 000D5A ELSE
420.11 000D5A .... TWOSWAP: DW DOCOLON
420.12 000D5C ENDIF
420.13 000D5C ENDM
421 000D5C ............* DW ROT,TOR,ROT,RFROM,EXIT
422 000D66
- 4e-configLP - Page 91
423 000D66 ;C 2OVER x1 x2 x3 x4 -- x1 x2 x3 x4 x1
x2
424 000D66 ; >R >R 2DUP R> R> 2SWAP ;
425 000D66 HEADER TWOOVER,5,'2OVER',DOCOLON
425.1 000000 PUBLIC TWOOVER
425.2 000D66 .... DW link
425.3 000D68 FF DB 0FFh ; not immediate
425.4 000D69 link SET $
425.5 000D69 05 DB 5
425.6 000D6A 324F564552 DB '2OVER'
425.7 000D6F 00 EVEN
425.8 000D70 IF 'DOCOLON'='DOCODE'
425.9 000D70 TWOOVER: DW $+2
425.10 000D70 ELSE
425.11 000D70 .... TWOOVER: DW DOCOLON
425.12 000D72 ENDIF
425.13 000D72 ENDM
426 000D72 ............* DW TOR,TOR,TWODUP,RFROM,RFROM
427 000D7C ........ DW TWOSWAP,EXIT
428 000D80
429 000D80 ; INPUT/OUTPUT =================================
=
430 000D80
431 000000 PUBLIC DOCR
432 000D80
433 000D80 ;C COUNT c-addr1 -- c-addr2 u counted->adr/le
n
434 000D80 ; DUP CHAR+ SWAP C@ ;
435 000D80 HEADER COUNT,5,'COUNT',DOCOLON
435.1 000000 PUBLIC COUNT
435.2 000D80 .... DW link
435.3 000D82 FF DB 0FFh ; not immediate
435.4 000D83 link SET $
435.5 000D83 05 DB 5
435.6 000D84 434F554E54 DB 'COUNT'
435.7 000D89 00 EVEN
435.8 000D8A IF 'DOCOLON'='DOCODE'
435.9 000D8A COUNT: DW $+2
435.10 000D8A ELSE
435.11 000D8A .... COUNT: DW DOCOLON
435.12 000D8C ENDIF
435.13 000D8C ENDM
436 000D8C ............* DW DUP,CHARPLUS,SWAP,CFETCH,EXIT
437 000D96
438 000D96 ;C DOCR -- output newline
439 000D96 ; 0D EMIT 0A EMIT ;
440 000D96 HEADER DOCR,4,'DOCR',DOCOLON
440.1 000D96 PUBLIC DOCR
440.2 000D96 .... DW link
440.3 000D98 FF DB 0FFh ; not immediate
440.4 000D99 link SET $
440.5 000D99 04 DB 4
440.6 000D9A 444F4352 DB 'DOCR'
440.7 000D9E EVEN
440.8 000D9E IF 'DOCOLON'='DOCODE'
440.9 000D9E DOCR: DW $+2
440.10 000D9E ELSE
440.11 000D9E .... DOCR: DW DOCOLON
440.12 000DA0 ENDIF
440.13 000DA0 ENDM
441 000DA0 ....0D00....* DW lit,0dh,EMIT,lit,0ah,EMIT,EXIT
442 000DAE
443 000DAE ;C CR -- output newline
444 000DAE ; userkey @ execute ;
445 000DAE HEADER CR,2,'CR',DOCOLON
445.1 000000 PUBLIC CR
445.2 000DAE .... DW link
445.3 000DB0 FF DB 0FFh ; not immediate
445.4 000DB1 link SET $
445.5 000DB1 02 DB 2
445.6 000DB2 4352 DB 'CR'
445.7 000DB4 EVEN
445.8 000DB4 IF 'DOCOLON'='DOCODE'
445.9 000DB4 CR: DW $+2
445.10 000DB4 ELSE
445.11 000DB4 .... CR: DW DOCOLON
445.12 000DB6 ENDIF
- 4e-configLP - Page 92
445.13 000DB6 ENDM
446 000DB6 ............* DW NEWLINE,FETCH,EXECUTE,EXIT
447 000DBE
448 000DBE ;C SPACE -- output a space
449 000DBE ; BL EMIT ;
450 000DBE HEADER SPACE,5,'SPACE',DOCOLON
450.1 000000 PUBLIC SPACE
450.2 000DBE .... DW link
450.3 000DC0 FF DB 0FFh ; not immediate
450.4 000DC1 link SET $
450.5 000DC1 05 DB 5
450.6 000DC2 5350414345 DB 'SPACE'
450.7 000DC7 00 EVEN
450.8 000DC8 IF 'DOCOLON'='DOCODE'
450.9 000DC8 SPACE: DW $+2
450.10 000DC8 ELSE
450.11 000DC8 .... SPACE: DW DOCOLON
450.12 000DCA ENDIF
450.13 000DCA ENDM
451 000DCA ............ DW BLANK,EMIT,EXIT
452 000DD0
453 000DD0 ;C SPACES n -- output n spaces
454 000DD0 ; BEGIN DUP WHILE SPACE 1- REPEAT DROP
;
455 000DD0 HEADER SPACES,6,'SPACES',DOCOLON
455.1 000000 PUBLIC SPACES
455.2 000DD0 .... DW link
455.3 000DD2 FF DB 0FFh ; not immediate
455.4 000DD3 link SET $
455.5 000DD3 06 DB 6
455.6 000DD4 535041434553 DB 'SPACES'
455.7 000DDA EVEN
455.8 000DDA IF 'DOCOLON'='DOCODE'
455.9 000DDA SPACES: DW $+2
455.10 000DDA ELSE
455.11 000DDA .... SPACES: DW DOCOLON
455.12 000DDC ENDIF
455.13 000DDC ENDM
456 000DDC ........ SPCS1: DW DUP,qbran
457 000DE0 DEST SPCS2
457.1 000DE0 0A00 DW SPCS2-$
457.2 000DE2 ENDM
458 000DE2 ............ DW SPACE,ONEMINUS,bran
459 000DE8 DEST SPCS1
459.1 000DE8 F4FF DW SPCS1-$
459.2 000DEA ENDM
460 000DEA ........ SPCS2: DW DROP,EXIT
461 000DEE
462 000DEE ;Z umin u1 u2 -- u unsigned minimum
463 000DEE ; 2DUP U> IF SWAP THEN DROP ;
464 000DEE HEADER UMIN,4,'UMIN',DOCOLON
464.1 000000 PUBLIC UMIN
464.2 000DEE .... DW link
464.3 000DF0 FF DB 0FFh ; not immediate
464.4 000DF1 link SET $
464.5 000DF1 04 DB 4
464.6 000DF2 554D494E DB 'UMIN'
464.7 000DF6 EVEN
464.8 000DF6 IF 'DOCOLON'='DOCODE'
464.9 000DF6 UMIN: DW $+2
464.10 000DF6 ELSE
464.11 000DF6 .... UMIN: DW DOCOLON
464.12 000DF8 ENDIF
464.13 000DF8 ENDM
465 000DF8 ............ DW TWODUP,UGREATER,qbran
466 000DFE DEST UMIN1
466.1 000DFE 0400 DW UMIN1-$
466.2 000E00 ENDM
467 000E00 .... DW SWAP
468 000E02 ........ UMIN1: DW DROP,EXIT
469 000E06
470 000E06 ;Z umax u1 u2 -- u unsigned maximum
471 000E06 ; 2DUP U< IF SWAP THEN DROP ;
472 000E06 HEADER UMAX,4,'UMAX',DOCOLON
472.1 000000 PUBLIC UMAX
472.2 000E06 .... DW link
472.3 000E08 FF DB 0FFh ; not immediate
472.4 000E09 link SET $
- 4e-configLP - Page 93
472.5 000E09 04 DB 4
472.6 000E0A 554D4158 DB 'UMAX'
472.7 000E0E EVEN
472.8 000E0E IF 'DOCOLON'='DOCODE'
472.9 000E0E UMAX: DW $+2
472.10 000E0E ELSE
472.11 000E0E .... UMAX: DW DOCOLON
472.12 000E10 ENDIF
472.13 000E10 ENDM
473 000E10 ............ DW TWODUP,ULESS,qbran
474 000E16 DEST UMAX1
474.1 000E16 0400 DW UMAX1-$
474.2 000E18 ENDM
475 000E18 .... DW SWAP
476 000E1A ........ UMAX1: DW DROP,EXIT
477 000E1E
478 000E1E ; C .ERR# n -- print error
number
479 000E1E HEADER DOTERRN,5,'.ERR#',DOCOLON
479.1 000000 PUBLIC DOTERRN
479.2 000E1E .... DW link
479.3 000E20 FF DB 0FFh ; not immediate
479.4 000E21 link SET $
479.5 000E21 05 DB 5
479.6 000E22 2E45525223 DB '.ERR#'
479.7 000E27 00 EVEN
479.8 000E28 IF 'DOCOLON'='DOCODE'
479.9 000E28 DOTERRN: DW $+2
479.10 000E28 ELSE
479.11 000E28 .... DOTERRN: DW DOCOLON
479.12 000E2A ENDIF
479.13 000E2A ENDM
480 000E2A ....1500.... DW lit,15H,EMIT ; emit a NAK ($15)
481 000E30 ....3F00.... DW lit,3FH,EMIT
482 000E36 ............* DW BASE,FETCH,TOR,DECIMAL
483 000E3E .... DW DOT
484 000E40 ............ DW RFROM,BASE,STORE
485 000E46 .... DW EXIT
486 000E48
487 000E48 ; C ?TIB adr1 adr2 -- error if line
too long
488 000E48 HEADERLESS QTIB,4,'?TIB',DOCOLON
488.1 000000 PUBLIC QTIB
488.2 000E48 IF 'DOCOLON'='DOCODE'
488.3 000E48 QTIB: DW $+2
488.4 000E48 ELSE
488.5 000E48 .... QTIB: DW DOCOLON
488.6 000E4A ENDIF
488.7 000E4A ENDM
489 000E4A ........ DW GREATER,qbran
490 000E4E DEST QTIB1
490.1 000E4E 0C00 DW QTIB1-$
490.2 000E50 ENDM
491 000E50 ....9601.... DW lit,406,DOTERRN
492 000E56 ........ DW CR,ABORT
493 000E5A .... QTIB1: DW EXIT
494 000E5C
495 000E5C ;C ACCEPT c-addr +n -- +n' get line from
term'l
496 000E5C ; OVER + 1- OVER -- sa ea a
497 000E5C ; BEGIN KEY -- sa ea a c
498 000E5C ; DUP 0D <> WHILE
499 000E5C ; DUP EMIT -- sa ea a c
500 000E5C ; DUP 8 = IF DROP 1- >R OVER R>
UMAX
501 000E5C ; ELSE OVER C! 1+ OVER UMIN
502 000E5C ; THEN -- sa ea a
503 000E5C ; REPEAT -- sa ea a c
504 000E5C ; DROP NIP SWAP - ;
505 000E5C HEADER ACCEPT,6,'ACCEPT',DOCOLON
505.1 000000 PUBLIC ACCEPT
505.2 000E5C .... DW link
505.3 000E5E FF DB 0FFh ; not immediate
505.4 000E5F link SET $
505.5 000E5F 06 DB 6
505.6 000E60 414343455054 DB 'ACCEPT'
505.7 000E66 EVEN
505.8 000E66 IF 'DOCOLON'='DOCODE'
- 4e-configLP - Page 94
505.9 000E66 ACCEPT: DW $+2
505.10 000E66 ELSE
505.11 000E66 .... ACCEPT: DW DOCOLON
505.12 000E68 ENDIF
505.13 000E68 ENDM
506 000E68 ............* DW OVER,PLUS,ONEMINUS,OVER
507 000E70 ACC1: ; DW KEY,DUP,lit,0DH,NOTEQUAL,qbran
508 000E70 .... DW KEY
509 000E72 ........0D00* DW DUP,lit,0DH,NOTEQUAL ; ( -- c f )
CR
510 000E7A ; DW OVER,lit,0AH,NOTEQUAL ; ( -- c f f )
LF
511 000E7A ; DW ANDD
512 000E7A .... DW qbran
513 000E7C DEST ACC5
513.1 000E7C 3A00 DW ACC5-$
513.2 000E7E ENDM
514 000E7E ........ DW DUP,EMIT
515 000E82 ; DW DUP,STORELEDS ; testing
516 000E82 ........0800* DW DUP,lit,8,EQUAL,qbran ;mk BS
received?
517 000E8C DEST ACC3
517.1 000E8C 1A00 DW ACC3-$
517.2 000E8E ENDM
518 000E8E ............* DW DROP,ONEMINUS,TOR,OVER,RFROM,UMAX ;mk
backspace handling
519 000E9A ........0800* DW SPACE,lit,8,EMIT ;mk $08 == BS (for
tera term and
hyterterminal)
520 000EA2 .... DW bran
521 000EA4 DEST ACC4
521.1 000EA4 0E00 DW ACC4-$
521.2 000EA6 ENDM
522 000EA6 ; ( -- sa ea a c )
523 000EA6 ............ ACC3: DW OVER,CSTORE,ONEPLUS
524 000EAC ; ( -- sa ea a+1 )
525 000EAC ; DW OVER,UMIN ; einfacher zähler
stillstand
526 000EAC ............ DW TWODUP,SWAP,QTIB ; line too
long?
527 000EB2 .... ACC4: DW bran
528 000EB4 DEST ACC1
528.1 000EB4 BCFF DW ACC1-$
528.2 000EB6 ENDM
529 000EB6 ............*ACC5: DW DROP,NIP,SWAP,MINUS,EXIT
530 000EC0
531 000EC0 ;C TYPE c-addr +n -- type line to
term'l
532 000EC0 ; ?DUP IF
533 000EC0 ; OVER + SWAP DO I C@ EMIT LOOP
534 000EC0 ; ELSE DROP THEN ;
535 000EC0 HEADER TYP,4,'TYPE',DOCOLON
535.1 000000 PUBLIC TYP
535.2 000EC0 .... DW link
535.3 000EC2 FF DB 0FFh ; not immediate
535.4 000EC3 link SET $
535.5 000EC3 04 DB 4
535.6 000EC4 54595045 DB 'TYPE'
535.7 000EC8 EVEN
535.8 000EC8 IF 'DOCOLON'='DOCODE'
535.9 000EC8 TYP: DW $+2
535.10 000EC8 ELSE
535.11 000EC8 .... TYP: DW DOCOLON
535.12 000ECA ENDIF
535.13 000ECA ENDM
536 000ECA ........ DW QDUP,qbran
537 000ECE DEST TYP4
537.1 000ECE 1800 DW TYP4-$
537.2 000ED0 ENDM
538 000ED0 ............* DW OVER,PLUS,SWAP,xdo
539 000ED8 ............*TYP3: DW II,CFETCH,EMIT,xloop
540 000EE0 DEST TYP3
540.1 000EE0 F8FF DW TYP3-$
540.2 000EE2 ENDM
541 000EE2 .... DW bran
542 000EE4 DEST TYP5
542.1 000EE4 0400 DW TYP5-$
542.2 000EE6 ENDM
- 4e-configLP - Page 95
543 000EE6 .... TYP4: DW DROP
544 000EE8 .... TYP5: DW EXIT
545 000EEA
546 000EEA #define ITYPE TYP
547 000EEA #define ICOUNT COUNT
548 000EEA
549 000EEA ; HARVARD MODEL EXTENSIONS (split Code &
Data)
550 000EEA
551 000EEA /*
552 000EEA ;Z ICOUNT c-addr1 -- c-addr2 u counted->adr/le
n
553 000EEA ; DUP CHAR+ SWAP IC@ ; from Code
space
554 000EEA HEADER ICOUNT,6,'ICOUNT',DOCOLON
555 000EEA DW DUP,CHARPLUS,SWAP,ICFETCH,EXIT
556 000EEA
557 000EEA ;Z ITYPE c-addr +n -- type line to
term'l
558 000EEA ; ?DUP IF from Code
space
559 000EEA ; OVER + SWAP DO I IC@ EMIT LOOP
560 000EEA ; ELSE DROP THEN ;
561 000EEA HEADER ITYPE,5,'ITYPE',DOCOLON
562 000EEA DW QDUP,qbran
563 000EEA DEST ITYP4
564 000EEA DW OVER,PLUS,SWAP,xdo
565 000EEA ITYP3: DW II,ICFETCH,EMIT,xloop
566 000EEA DEST ITYP3
567 000EEA DW bran
568 000EEA DEST ITYP5
569 000EEA ITYP4: DW DROP
570 000EEA ITYP5: DW EXIT
571 000EEA */
572 000EEA
573 000EEA
574 000EEA ;Z (IS") -- c-addr u run-time code for
S"
575 000EEA ; R> ICOUNT 2DUP + ALIGNED >R ;
576 000EEA ; Harvard model, for string stored in Code
space
577 000EEA ; e.g. as used by ."
578 000EEA HEADER XISQUOTE,5,'(IS")',DOCOLON
578.1 000000 PUBLIC XISQUOTE
578.2 000EEA .... DW link
578.3 000EEC FF DB 0FFh ; not immediate
578.4 000EED link SET $
578.5 000EED 05 DB 5
578.6 000EEE 2849532229 DB '(IS")'
578.7 000EF3 00 EVEN
578.8 000EF4 IF 'DOCOLON'='DOCODE'
578.9 000EF4 XISQUOTE: DW $+2
578.10 000EF4 ELSE
578.11 000EF4 .... XISQUOTE: DW DOCOLON
578.12 000EF6 ENDIF
578.13 000EF6 ENDM
579 000EF6 ............* DW RFROM,ICOUNT,TWODUP,PLUS,ALIGNED,TOR
580 000F02 .... DW EXIT
581 000F04
582 000F04 ;Z (S") -- c-addr u run-time code for
S"
583 000F04 ; R@ I@ get Data
address
584 000F04 ; R> CELL+ DUP IC@ CHAR+ -- Dadr Radr+2
n+1
585 000F04 ; 2DUP + ALIGNED >R -- Dadr Iadr
n+1
586 000F04 ; >R OVER R> I->D -- Dadr
587 000F04 ; COUNT ;
588 000F04 ; Harvard model, for string stored in Code
space
589 000F04 ; which is copied to Data space.
590 000F04 HEADER XSQUOTE,4,'(S")',DOCOLON
590.1 000000 PUBLIC XSQUOTE
590.2 000F04 .... DW link
590.3 000F06 FF DB 0FFh ; not immediate
590.4 000F07 link SET $
590.5 000F07 04 DB 4
- 4e-configLP - Page 96
590.6 000F08 28532229 DB '(S")'
590.7 000F0C EVEN
590.8 000F0C IF 'DOCOLON'='DOCODE'
590.9 000F0C XSQUOTE: DW $+2
590.10 000F0C ELSE
590.11 000F0C .... XSQUOTE: DW DOCOLON
590.12 000F0E ENDIF
590.13 000F0E ENDM
591 000F0E ........ DW RFETCH,IFETCH
592 000F12 ............* DW RFROM,CELLPLUS,DUP,ICFETCH,CHARPLUS
593 000F1C ............* DW TWODUP,PLUS,ALIGNED,TOR
594 000F24 ............* DW TOR,OVER,RFROM,ITOD,COUNT,EXIT
595 000F30
596 000F30 ;Z IS" -- compile in-line
string
597 000F30 ; COMPILE (IS") [ HEX ]
598 000F30 ; 22 PARSE ( -- c-addr n )
599 000F30 ; DUP >R IC, IHERE R@ D->I
600 000F30 ; R> IALLOT ALIGN ; IMMEDIATE
601 000F30 ; Harvard model: string is stored in Code
space
602 000F30 IMMED ISQUOTE,3,'IS"',DOCOLON
602.1 000000 PUBLIC ISQUOTE
602.2 000F30 .... DW link
602.3 000F32 FE DB 0FEh // ; immediate
(LSB=0)
602.4 000F33 link SET $
602.5 000F33 03 DB 3
602.6 000F34 495322 DB 'IS"'
602.7 000F37 00 EVEN
602.8 000F38 IF 'DOCOLON'='DOCODE'
602.9 000F38 ISQUOTE: DW $+2
602.10 000F38 ELSE
602.11 000F38 .... ISQUOTE: DW DOCOLON
602.12 000F3A ENDIF
602.13 000F3A ENDM
603 000F3A ............ DW lit,XISQUOTE,COMMAXT
604 000F40 ....2200.... DW lit,22H,PARSE
605 000F46 ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI
606 000F52 ............* DW RFROM,IALLOT,ALIGNN,EXIT
607 000F5A
608 000F5A ;Z IS" -- compile in-line string
OLD DEF'N
609 000F5A ; COMPILE (IS") [ HEX ]
610 000F5A ; 22 IWORD
611 000F5A ; IC@ 1+ ALIGNED IALLOT ; IMMEDIATE
612 000F5A ; Harvard model: string is stored in Code
space
613 000F5A ; IMMED ISQUOTE,3,'IS"',DOCOLON
614 000F5A ; DW lit,XISQUOTE,COMMAXT
615 000F5A ; DW lit,22H,IWORD
616 000F5A ; DW ICFETCH,ONEPLUS,ALIGNED,IALLOT,EXIT
617 000F5A
618 000F5A ;C S" -- compile in-line
string
619 000F5A ; COMPILE (S") [ HEX ]
620 000F5A ; HERE I, data address
621 000F5A ; 22 PARSE ( -- c-addr n )
622 000F5A ; DUP >R IC, IHERE R@ D->I
623 000F5A ; R@ 1+ ALLOT reserve RAM
space
624 000F5A ; R> IALLOT ALIGN ; IMMEDIATE
625 000F5A ; Harvard model: string is stored in Code
space
626 000F5A IMMED SQUOTE,2,'S"',DOCOLON
626.1 000000 PUBLIC SQUOTE
626.2 000F5A .... DW link
626.3 000F5C FE DB 0FEh // ; immediate
(LSB=0)
626.4 000F5D link SET $
626.5 000F5D 02 DB 2
626.6 000F5E 5322 DB 'S"'
626.7 000F60 EVEN
626.8 000F60 IF 'DOCOLON'='DOCODE'
626.9 000F60 SQUOTE: DW $+2
626.10 000F60 ELSE
626.11 000F60 .... SQUOTE: DW DOCOLON
626.12 000F62 ENDIF
- 4e-configLP - Page 97
626.13 000F62 ENDM
627 000F62 ............ DW lit,XSQUOTE,COMMAXT
628 000F68 ............* DW HERE,ICOMMA,lit,22H,PARSE
629 000F72 ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI
630 000F7E ............ DW RFETCH,ONEPLUS,ALLOT
631 000F84 ............* DW RFROM,IALLOT,ALIGNN,EXIT
632 000F8C
633 000F8C ;C S" -- compile in-line
string OLD DEF'N
634 000F8C ; COMPILE (S") [ HEX ]
635 000F8C ; HERE I, data address
636 000F8C ; 22 IWORD
637 000F8C ; IC@ 1+ ALIGNED
638 000F8C ; DUP ALLOT IALLOT ; IMMEDIATE
639 000F8C ; Harvard model: string is stored in Code
space
640 000F8C ; IMMED SQUOTE,2,'S"',DOCOLON
641 000F8C ; DW lit,XSQUOTE,COMMAXT
642 000F8C ; DW HERE,ICOMMA,lit,22H,IWORD
643 000F8C ; DW ICFETCH,ONEPLUS,ALIGNED
644 000F8C ; DW DUP,ALLOT,IALLOT,EXIT
645 000F8C
646 000F8C ;C ." -- compile string to
print
647 000F8C ; POSTPONE IS" POSTPONE ITYPE ; IMMEDIATE
648 000F8C IMMED DOTQUOTE,2,'."',DOCOLON
648.1 000000 PUBLIC DOTQUOTE
648.2 000F8C .... DW link
648.3 000F8E FE DB 0FEh // ; immediate
(LSB=0)
648.4 000F8F link SET $
648.5 000F8F 02 DB 2
648.6 000F90 2E22 DB '."'
648.7 000F92 EVEN
648.8 000F92 IF 'DOCOLON'='DOCODE'
648.9 000F92 DOTQUOTE: DW $+2
648.10 000F92 ELSE
648.11 000F92 .... DOTQUOTE: DW DOCOLON
648.12 000F94 ENDIF
648.13 000F94 ENDM
649 000F94 .... DW ISQUOTE
650 000F96 ............ DW lit,ITYPE,COMMAXT
651 000F9C .... DW EXIT
652 000F9E
653 000F9E ;Z IWORD c -- c-addr WORD to Code
space
654 000F9E ; WORD
655 000F9E ; IHERE TUCK OVER C@ CHAR+ D->I ;
656 000F9E HEADER IWORD,5,'IWORD',DOCOLON
656.1 000000 PUBLIC IWORD
656.2 000F9E .... DW link
656.3 000FA0 FF DB 0FFh ; not immediate
656.4 000FA1 link SET $
656.5 000FA1 05 DB 5
656.6 000FA2 49574F5244 DB 'IWORD'
656.7 000FA7 00 EVEN
656.8 000FA8 IF 'DOCOLON'='DOCODE'
656.9 000FA8 IWORD: DW $+2
656.10 000FA8 ELSE
656.11 000FA8 .... IWORD: DW DOCOLON
656.12 000FAA ENDIF
656.13 000FAA ENDM
657 000FAA .... DW WORDD
658 000FAC ............*IWORD1: DW IHERE,TUCK,OVER,CFETCH
659 000FB4 ............ DW CHARPLUS,DTOI,EXIT
660 000FBA
661 000FBA ;Z IWORDC c -- c-addr maybe capitalize
WORD to Code space
662 000FBA ; WORD CAPITALIZE
663 000FBA ; IHERE TUCK OVER C@ CHAR+ D->I ;
664 000FBA ; HEADER IWORDC,6,'IWORDC',DOCOLON
665 000FBA HEADLESS IWORDC, DOCOLON
665.1 000000 PUBLIC IWORDC
665.2 000FBA IF 'DOCOLON'='DOCODE'
665.3 000FBA IWORDC: DW $+2
665.4 000FBA ELSE
665.5 000FBA .... IWORDC: DW DOCOLON
665.6 000FBC ENDIF
- 4e-configLP - Page 98
665.7 000FBC ENDM
666 000FBC ........ DW WORDD, CAPITALIZE
667 000FC0 .... DW bran
668 000FC2 DEST IWORD1
668.1 000FC2 EAFF DW IWORD1-$
668.2 000FC4 ENDM
669 000FC4
670 000FC4 ; SEPARATE HEADER EXTENSIONS ARE NOT USED
671 000FC4 #define HCOUNT ICOUNT
672 000FC4 #define HTYPE ITYPE
673 000FC4 #define HWORD IWORDC
674 000FC4
675 000FC4 ; NUMERIC OUTPUT ===============================
=
676 000FC4 ; Numeric conversion is done l.s.digit first,
so
677 000FC4 ; the output buffer is built backwards in
memory.
678 000FC4
679 000FC4 ; Some double-precision arithmetic operators
are
680 000FC4 ; needed to implement ANSI numeric conversion.
681 000FC4
682 000FC4 ;Z UD/MOD ud1 u2 -- u3 ud4 32/16->32
divide
683 000FC4 ; >R 0 R@ UM/MOD ROT ROT R> UM/MOD ROT
;
684 000FC4 HEADER UDSLASHMOD,6,'UD/MOD',DOCOLON
684.1 000000 PUBLIC UDSLASHMOD
684.2 000FC4 .... DW link
684.3 000FC6 FF DB 0FFh ; not immediate
684.4 000FC7 link SET $
684.5 000FC7 06 DB 6
684.6 000FC8 55442F4D4F44 DB 'UD/MOD'
684.7 000FCE EVEN
684.8 000FCE IF 'DOCOLON'='DOCODE'
684.9 000FCE UDSLASHMOD: DW $+2
684.10 000FCE ELSE
684.11 000FCE .... UDSLASHMOD: DW DOCOLON
684.12 000FD0 ENDIF
684.13 000FD0 ENDM
685 000FD0 ............* DW TOR,ZERO,RFETCH,UMSLASHMOD,ROT,ROT
686 000FDC ............* DW RFROM,UMSLASHMOD,ROT,EXIT
687 000FE4
688 000FE4 ;Z UD* ud1 d2 -- ud3 32*16->32
multiply
689 000FE4 ; DUP >R UM* DROP SWAP R> UM* ROT +
;
690 000FE4 HEADER UDSTAR,3,'UD*',DOCOLON
690.1 000000 PUBLIC UDSTAR
690.2 000FE4 .... DW link
690.3 000FE6 FF DB 0FFh ; not immediate
690.4 000FE7 link SET $
690.5 000FE7 03 DB 3
690.6 000FE8 55442A DB 'UD*'
690.7 000FEB 00 EVEN
690.8 000FEC IF 'DOCOLON'='DOCODE'
690.9 000FEC UDSTAR: DW $+2
690.10 000FEC ELSE
690.11 000FEC .... UDSTAR: DW DOCOLON
690.12 000FEE ENDIF
690.13 000FEE ENDM
691 000FEE ............* DW DUP,TOR,UMSTAR,DROP
692 000FF6 ............* DW SWAP,RFROM,UMSTAR,ROT,PLUS,EXIT
693 001002
694 001002 ;C HOLD char -- add char to output
string
695 001002 ; -1 HP +! HP @ C! ;
696 001002 HEADER HOLD,4,'HOLD',DOCOLON
696.1 000000 PUBLIC HOLD
696.2 001002 .... DW link
696.3 001004 FF DB 0FFh ; not immediate
696.4 001005 link SET $
696.5 001005 04 DB 4
696.6 001006 484F4C44 DB 'HOLD'
696.7 00100A EVEN
696.8 00100A IF 'DOCOLON'='DOCODE'
696.9 00100A HOLD: DW $+2
- 4e-configLP - Page 99
696.10 00100A ELSE
696.11 00100A .... HOLD: DW DOCOLON
696.12 00100C ENDIF
696.13 00100C ENDM
697 00100C ....FFFF....* DW lit,-1,HP,PLUSSTORE
698 001014 ............* DW HP,FETCH,CSTORE,EXIT
699 00101C
700 00101C ;C <# -- begin numeric conversion
701 00101C ; PAD HP ! ; (initialize Hold
Pointer)
702 00101C HEADER LESSNUM,2,'<#',DOCOLON
702.1 000000 PUBLIC LESSNUM
702.2 00101C .... DW link
702.3 00101E FF DB 0FFh ; not immediate
702.4 00101F link SET $
702.5 00101F 02 DB 2
702.6 001020 3C23 DB '<#'
702.7 001022 EVEN
702.8 001022 IF 'DOCOLON'='DOCODE'
702.9 001022 LESSNUM: DW $+2
702.10 001022 ELSE
702.11 001022 .... LESSNUM: DW DOCOLON
702.12 001024 ENDIF
702.13 001024 ENDM
703 001024 ............* DW PAD,HP,STORE,EXIT
704 00102C
705 00102C ;Z >digit n -- c convert to 0..9A..Z
706 00102C ; [ HEX ] DUP 9 > 7 AND + 30 + ;
707 00102C HEADER TODIGIT,6,'>DIGIT',DOCOLON
707.1 000000 PUBLIC TODIGIT
707.2 00102C .... DW link
707.3 00102E FF DB 0FFh ; not immediate
707.4 00102F link SET $
707.5 00102F 06 DB 6
707.6 001030 3E4449474954 DB '>DIGIT'
707.7 001036 EVEN
707.8 001036 IF 'DOCOLON'='DOCODE'
707.9 001036 TODIGIT: DW $+2
707.10 001036 ELSE
707.11 001036 .... TODIGIT: DW DOCOLON
707.12 001038 ENDIF
707.13 001038 ENDM
708 001038 ........0900* DW DUP,lit,9,GREATER,lit,7,ANDD,PLUS
709 001048 ....3000....* DW lit,30H,PLUS,EXIT
710 001050
711 001050 ;C # ud1 -- ud2 convert 1 digit of
output
712 001050 ; BASE @ UD/MOD ROT >digit HOLD ;
713 001050 HEADER NUM,1,'#',DOCOLON
713.1 000000 PUBLIC NUM
713.2 001050 .... DW link
713.3 001052 FF DB 0FFh ; not immediate
713.4 001053 link SET $
713.5 001053 01 DB 1
713.6 001054 23 DB '#'
713.7 001055 00 EVEN
713.8 001056 IF 'DOCOLON'='DOCODE'
713.9 001056 NUM: DW $+2
713.10 001056 ELSE
713.11 001056 .... NUM: DW DOCOLON
713.12 001058 ENDIF
713.13 001058 ENDM
714 001058 ............* DW BASE,FETCH,UDSLASHMOD,ROT,TODIGIT
715 001062 ........ DW HOLD,EXIT
716 001066
717 001066 ;C #S ud1 -- ud2 convert remaining
digits
718 001066 ; BEGIN # 2DUP OR 0= UNTIL ;
719 001066 HEADER NUMS,2,'#S',DOCOLON
719.1 000000 PUBLIC NUMS
719.2 001066 .... DW link
719.3 001068 FF DB 0FFh ; not immediate
719.4 001069 link SET $
719.5 001069 02 DB 2
719.6 00106A 2353 DB '#S'
719.7 00106C EVEN
719.8 00106C IF 'DOCOLON'='DOCODE'
719.9 00106C NUMS: DW $+2
- 4e-configLP - Page 100
719.10 00106C ELSE
719.11 00106C .... NUMS: DW DOCOLON
719.12 00106E ENDIF
719.13 00106E ENDM
720 00106E ............*NUMS1: DW NUM,TWODUP,ORR,ZEROEQUAL,qbran
721 001078 DEST NUMS1
721.1 001078 F6FF DW NUMS1-$
721.2 00107A ENDM
722 00107A .... DW EXIT
723 00107C
724 00107C ;C #> ud1 -- c-addr u end conv., get
string
725 00107C ; 2DROP HP @ PAD OVER - ;
726 00107C HEADER NUMGREATER,2,'#>',DOCOLON
726.1 000000 PUBLIC NUMGREATER
726.2 00107C .... DW link
726.3 00107E FF DB 0FFh ; not immediate
726.4 00107F link SET $
726.5 00107F 02 DB 2
726.6 001080 233E DB '#>'
726.7 001082 EVEN
726.8 001082 IF 'DOCOLON'='DOCODE'
726.9 001082 NUMGREATER: DW $+2
726.10 001082 ELSE
726.11 001082 .... NUMGREATER: DW DOCOLON
726.12 001084 ENDIF
726.13 001084 ENDM
727 001084 ............* DW TWODROP,HP,FETCH,PAD,OVER,MINUS,EXIT
728 001092
729 001092 ;C SIGN n -- add minus sign if
n<0
730 001092 ; 0< IF 2D HOLD THEN ;
731 001092 HEADER SIGN,4,'SIGN',DOCOLON
731.1 000000 PUBLIC SIGN
731.2 001092 .... DW link
731.3 001094 FF DB 0FFh ; not immediate
731.4 001095 link SET $
731.5 001095 04 DB 4
731.6 001096 5349474E DB 'SIGN'
731.7 00109A EVEN
731.8 00109A IF 'DOCOLON'='DOCODE'
731.9 00109A SIGN: DW $+2
731.10 00109A ELSE
731.11 00109A .... SIGN: DW DOCOLON
731.12 00109C ENDIF
731.13 00109C ENDM
732 00109C ........ DW ZEROLESS,qbran
733 0010A0 DEST SIGN1
733.1 0010A0 0800 DW SIGN1-$
733.2 0010A2 ENDM
734 0010A2 ....2D00.... DW lit,2DH,HOLD
735 0010A8 .... SIGN1: DW EXIT
736 0010AA
737 0010AA ;C U. u -- display u unsigned
738 0010AA ; <# 0 #S #> TYPE SPACE ;
739 0010AA HEADER UDOT,2,'U.',DOCOLON
739.1 000000 PUBLIC UDOT
739.2 0010AA .... DW link
739.3 0010AC FF DB 0FFh ; not immediate
739.4 0010AD link SET $
739.5 0010AD 02 DB 2
739.6 0010AE 552E DB 'U.'
739.7 0010B0 EVEN
739.8 0010B0 IF 'DOCOLON'='DOCODE'
739.9 0010B0 UDOT: DW $+2
739.10 0010B0 ELSE
739.11 0010B0 .... UDOT: DW DOCOLON
739.12 0010B2 ENDIF
739.13 0010B2 ENDM
740 0010B2 ............* DW LESSNUM,ZERO,NUMS,NUMGREATER,TYP
741 0010BC ........ DW SPACE,EXIT
742 0010C0
743 0010C0 ;C . n -- display n signed
744 0010C0 ; <# DUP ABS 0 #S ROT SIGN #> TYPE SPACE
;
745 0010C0 HEADER DOT,1,'.',DOCOLON
745.1 000000 PUBLIC DOT
745.2 0010C0 .... DW link
- 4e-configLP - Page 101
745.3 0010C2 FF DB 0FFh ; not immediate
745.4 0010C3 link SET $
745.5 0010C3 01 DB 1
745.6 0010C4 2E DB '.'
745.7 0010C5 00 EVEN
745.8 0010C6 IF 'DOCOLON'='DOCODE'
745.9 0010C6 DOT: DW $+2
745.10 0010C6 ELSE
745.11 0010C6 .... DOT: DW DOCOLON
745.12 0010C8 ENDIF
745.13 0010C8 ENDM
746 0010C8 ............* DW LESSNUM,DUP,ABBS,ZERO,NUMS
747 0010D2 ............* DW ROT,SIGN,NUMGREATER,TYP,SPACE,EXIT
748 0010DE
749 0010DE ;C DECIMAL -- set number base to
decimal
750 0010DE ; 10 BASE ! ;
751 0010DE HEADER DECIMAL,7,'DECIMAL',DOCOLON
751.1 000000 PUBLIC DECIMAL
751.2 0010DE .... DW link
751.3 0010E0 FF DB 0FFh ; not immediate
751.4 0010E1 link SET $
751.5 0010E1 07 DB 7
751.6 0010E2 444543494D41* DB 'DECIMAL'
751.7 0010E9 00 EVEN
751.8 0010EA IF 'DOCOLON'='DOCODE'
751.9 0010EA DECIMAL: DW $+2
751.10 0010EA ELSE
751.11 0010EA .... DECIMAL: DW DOCOLON
751.12 0010EC ENDIF
751.13 0010EC ENDM
752 0010EC ....0A00....* DW lit,10,BASE,STORE,EXIT
753 0010F6
754 0010F6 ;X HEX -- set number base to
hex
755 0010F6 ; 16 BASE ! ;
756 0010F6 HEADER HEX,3,'HEX',DOCOLON
756.1 000000 PUBLIC HEX
756.2 0010F6 .... DW link
756.3 0010F8 FF DB 0FFh ; not immediate
756.4 0010F9 link SET $
756.5 0010F9 03 DB 3
756.6 0010FA 484558 DB 'HEX'
756.7 0010FD 00 EVEN
756.8 0010FE IF 'DOCOLON'='DOCODE'
756.9 0010FE HEX: DW $+2
756.10 0010FE ELSE
756.11 0010FE .... HEX: DW DOCOLON
756.12 001100 ENDIF
756.13 001100 ENDM
757 001100 ....1000....* DW lit,16,BASE,STORE,EXIT
758 00110A
759 00110A ; DICTIONARY MANAGEMENT ========================
=
760 00110A
761 00110A ;C HERE -- addr returns dictionary
ptr
762 00110A ; DP @ ;
763 00110A HEADER HERE,4,'HERE',DOCOLON
763.1 000000 PUBLIC HERE
763.2 00110A .... DW link
763.3 00110C FF DB 0FFh ; not immediate
763.4 00110D link SET $
763.5 00110D 04 DB 4
763.6 00110E 48455245 DB 'HERE'
763.7 001112 EVEN
763.8 001112 IF 'DOCOLON'='DOCODE'
763.9 001112 HERE: DW $+2
763.10 001112 ELSE
763.11 001112 .... HERE: DW DOCOLON
763.12 001114 ENDIF
763.13 001114 ENDM
764 001114 ............ DW DDP,FETCH,EXIT
765 00111A
766 00111A ;C ALLOT n -- allocate n bytes in
dict
767 00111A ; DP +! ;
768 00111A HEADER ALLOT,5,'ALLOT',DOCOLON
- 4e-configLP - Page 102
768.1 000000 PUBLIC ALLOT
768.2 00111A .... DW link
768.3 00111C FF DB 0FFh ; not immediate
768.4 00111D link SET $
768.5 00111D 05 DB 5
768.6 00111E 414C4C4F54 DB 'ALLOT'
768.7 001123 00 EVEN
768.8 001124 IF 'DOCOLON'='DOCODE'
768.9 001124 ALLOT: DW $+2
768.10 001124 ELSE
768.11 001124 .... ALLOT: DW DOCOLON
768.12 001126 ENDIF
768.13 001126 ENDM
769 001126 ............ DW DDP,PLUSSTORE,EXIT
770 00112C
771 00112C ;C , x -- append cell to dict
772 00112C ; HERE ! 1 CELLS ALLOT ;
773 00112C HEADER COMMA,1,',',DOCOLON
773.1 000000 PUBLIC COMMA
773.2 00112C .... DW link
773.3 00112E FF DB 0FFh ; not immediate
773.4 00112F link SET $
773.5 00112F 01 DB 1
773.6 001130 2C DB ','
773.7 001131 00 EVEN
773.8 001132 IF 'DOCOLON'='DOCODE'
773.9 001132 COMMA: DW $+2
773.10 001132 ELSE
773.11 001132 .... COMMA: DW DOCOLON
773.12 001134 ENDIF
773.13 001134 ENDM
774 001134 ............* DW HERE,STORE,lit,1,CELLS,ALLOT,EXIT
775 001142
776 001142 ;C C, char -- append char to dict
777 001142 ; HERE C! 1 CHARS ALLOT ;
778 001142 HEADER CCOMMA,2,'C,',DOCOLON
778.1 000000 PUBLIC CCOMMA
778.2 001142 .... DW link
778.3 001144 FF DB 0FFh ; not immediate
778.4 001145 link SET $
778.5 001145 02 DB 2
778.6 001146 432C DB 'C,'
778.7 001148 EVEN
778.8 001148 IF 'DOCOLON'='DOCODE'
778.9 001148 CCOMMA: DW $+2
778.10 001148 ELSE
778.11 001148 .... CCOMMA: DW DOCOLON
778.12 00114A ENDIF
778.13 00114A ENDM
779 00114A ............* DW HERE,CSTORE,lit,1,CHARS,ALLOT,EXIT
780 001158
781 001158 ; The following additional words support
the
782 001158 ; "Harvard" model, with separate address
spaces
783 001158 ; for Instructions (Code) and Data. ANSI
784 001158 ; requires DP to manage the Data space, so
a
785 001158 ; separate Instruction Dictionary Pointer,
IDP,
786 001158 ; is added to manage the Code space. Also
added:
787 001158 ; I@ IC@ I! IC! I->D D->I (in the primitives
)
788 001158 ; ITYPE ICOUNT IWORD (above)
789 001158 ; IHERE IALLOT I, IC, (below)
790 001158 ; It should be possible to convert the
Harvard
791 001158 ; implementation to a combined-code-and-data
792 001158 ; system, by equating these words to their
793 001158 ; Data-space counterparts.
794 001158
795 001158 ; on MSP430 we have Neumann, but
796 001158 ; I! IC! D->I (in the primitives) work on
flash
797 001158 ; I@ IC@ alias @ C@
798 001158 ; I->D alias CMOVE
799 001158 ; IWORD works on flash
- 4e-configLP - Page 103
800 001158 ; IHERE IALLOT I, IC, work on flash
801 001158
802 001158 ;C IHERE -- addr returns Code dictionary
ptr
803 001158 ; IDP @ ;
804 001158 HEADER IHERE,5,'IHERE',DOCOLON
804.1 000000 PUBLIC IHERE
804.2 001158 .... DW link
804.3 00115A FF DB 0FFh ; not immediate
804.4 00115B link SET $
804.5 00115B 05 DB 5
804.6 00115C 4948455245 DB 'IHERE'
804.7 001161 00 EVEN
804.8 001162 IF 'DOCOLON'='DOCODE'
804.9 001162 IHERE: DW $+2
804.10 001162 ELSE
804.11 001162 .... IHERE: DW DOCOLON
804.12 001164 ENDIF
804.13 001164 ENDM
805 001164 ............ DW IDP,FETCH,EXIT
806 00116A
807 00116A ;C IALLOT n -- allocate n bytes in Code
dict
808 00116A ; IDP +! ;
809 00116A HEADER IALLOT,6,'IALLOT',DOCOLON
809.1 000000 PUBLIC IALLOT
809.2 00116A .... DW link
809.3 00116C FF DB 0FFh ; not immediate
809.4 00116D link SET $
809.5 00116D 06 DB 6
809.6 00116E 49414C4C4F54 DB 'IALLOT'
809.7 001174 EVEN
809.8 001174 IF 'DOCOLON'='DOCODE'
809.9 001174 IALLOT: DW $+2
809.10 001174 ELSE
809.11 001174 .... IALLOT: DW DOCOLON
809.12 001176 ENDIF
809.13 001176 ENDM
810 001176 ............ DW IDP,PLUSSTORE,EXIT
811 00117C
812 00117C ;C I, x -- append cell to Code
dict
813 00117C ; IHERE I! 1 CELLS IALLOT ;
814 00117C HEADER ICOMMA,2,'I,',DOCOLON
814.1 000000 PUBLIC ICOMMA
814.2 00117C .... DW link
814.3 00117E FF DB 0FFh ; not immediate
814.4 00117F link SET $
814.5 00117F 02 DB 2
814.6 001180 492C DB 'I,'
814.7 001182 EVEN
814.8 001182 IF 'DOCOLON'='DOCODE'
814.9 001182 ICOMMA: DW $+2
814.10 001182 ELSE
814.11 001182 .... ICOMMA: DW DOCOLON
814.12 001184 ENDIF
814.13 001184 ENDM
815 001184 ............* DW IHERE,ISTORE,lit,1,CELLS,IALLOT,EXIT
816 001192
817 001192 ;C IC, char -- append char to Code
dict
818 001192 ; IHERE IC! 1 CHARS IALLOT ;
819 001192 HEADER ICCOMMA,3,'IC,',DOCOLON
819.1 000000 PUBLIC ICCOMMA
819.2 001192 .... DW link
819.3 001194 FF DB 0FFh ; not immediate
819.4 001195 link SET $
819.5 001195 03 DB 3
819.6 001196 49432C DB 'IC,'
819.7 001199 00 EVEN
819.8 00119A IF 'DOCOLON'='DOCODE'
819.9 00119A ICCOMMA: DW $+2
819.10 00119A ELSE
819.11 00119A .... ICCOMMA: DW DOCOLON
819.12 00119C ENDIF
819.13 00119C ENDM
820 00119C ............* DW IHERE,ICSTORE,lit,1,CHARS,IALLOT,EXIT
821 0011AA
- 4e-configLP - Page 104
822 0011AA ; SEPARATE HEADER EXTENSIONS ARE NOT USED
823 0011AA #define HHERE IHERE
824 0011AA #define HALLOT IALLOT
825 0011AA #define HCOMMA ICOMMA
826 0011AA #define HCCOMMA ICCOMMA
827 0011AA #define HCFETCH ICFETCH
828 0011AA #define HFETCH IFETCH
829 0011AA #define HCSTORE ICSTORE
830 0011AA #define HSTORE ISTORE
831 0011AA
832 0011AA ; INTERPRETER ==================================
=
833 0011AA ; Note that NFA>LFA, NFA>CFA, IMMED?, and
FIND
834 0011AA ; are dependent on the structure of the
Forth
835 0011AA ; header. This may be common across many
CPUs,
836 0011AA ; or it may be different.
837 0011AA
838 0011AA ; ?STACK --
839 0011AA ; depth 0< abort" SUF" ; stack underflow
840 0011AA HEADER QSTACK,6,'?STACK',DOCOLON
840.1 000000 PUBLIC QSTACK
840.2 0011AA .... DW link
840.3 0011AC FF DB 0FFh ; not immediate
840.4 0011AD link SET $
840.5 0011AD 06 DB 6
840.6 0011AE 3F535441434B DB '?STACK'
840.7 0011B4 EVEN
840.8 0011B4 IF 'DOCOLON'='DOCODE'
840.9 0011B4 QSTACK: DW $+2
840.10 0011B4 ELSE
840.11 0011B4 .... QSTACK: DW DOCOLON
840.12 0011B6 ENDIF
840.13 0011B6 ENDM
841 0011B6 ............ DW DEPTH,ZEROLESS,XISQUOTE
842 0011BC 03535546 DB 3,'SUF'
843 0011C0 ........ DW QABORT,EXIT
844 0011C4
845 0011C4 ;C SOURCE -- adr n current input buffer
846 0011C4 ; 'SOURCE 2@ ; length is at lower
adrs
847 0011C4 HEADER SOURCE,6,'SOURCE',DOCOLON
847.1 000000 PUBLIC SOURCE
847.2 0011C4 .... DW link
847.3 0011C6 FF DB 0FFh ; not immediate
847.4 0011C7 link SET $
847.5 0011C7 06 DB 6
847.6 0011C8 534F55524345 DB 'SOURCE'
847.7 0011CE EVEN
847.8 0011CE IF 'DOCOLON'='DOCODE'
847.9 0011CE SOURCE: DW $+2
847.10 0011CE ELSE
847.11 0011CE .... SOURCE: DW DOCOLON
847.12 0011D0 ENDIF
847.13 0011D0 ENDM
848 0011D0 ............ DW TICKSOURCE,TWOFETCH,EXIT
849 0011D6
850 0011D6 ;X /STRING a u n -- a+n u-n trim string
851 0011D6 ; ROT OVER + ROT ROT - ;
852 0011D6 HEADER SLASHSTRING,7,'/STRING',DOCOLON
852.1 000000 PUBLIC SLASHSTRING
852.2 0011D6 .... DW link
852.3 0011D8 FF DB 0FFh ; not immediate
852.4 0011D9 link SET $
852.5 0011D9 07 DB 7
852.6 0011DA 2F535452494E* DB '/STRING'
852.7 0011E1 00 EVEN
852.8 0011E2 IF 'DOCOLON'='DOCODE'
852.9 0011E2 SLASHSTRING: DW $+2
852.10 0011E2 ELSE
852.11 0011E2 .... SLASHSTRING: DW DOCOLON
852.12 0011E4 ENDIF
852.13 0011E4 ENDM
853 0011E4 ............* DW ROT,OVER,PLUS,ROT,ROT,MINUS,EXIT
854 0011F2
855 0011F2 ;Z >counted src n dst -- copy to counted
- 4e-configLP - Page 105
str
856 0011F2 ; 2DUP C! CHAR+ SWAP CMOVE ;
857 0011F2 HEADER TOCOUNTED,8,'>COUNTED',DOCOLON
857.1 000000 PUBLIC TOCOUNTED
857.2 0011F2 .... DW link
857.3 0011F4 FF DB 0FFh ; not immediate
857.4 0011F5 link SET $
857.5 0011F5 08 DB 8
857.6 0011F6 3E434F554E54* DB '>COUNTED'
857.7 0011FE EVEN
857.8 0011FE IF 'DOCOLON'='DOCODE'
857.9 0011FE TOCOUNTED: DW $+2
857.10 0011FE ELSE
857.11 0011FE .... TOCOUNTED: DW DOCOLON
857.12 001200 ENDIF
857.13 001200 ENDM
858 001200 ............* DW TWODUP,CSTORE,CHARPLUS,SWAP,CMOVE,EXI
T
859 00120C
860 00120C ;Z ADR>IN c-addr' -- set >IN to offset to
given adr
861 00120C ; SOURCE -- adr' adr n
862 00120C ; ROT ROT - -- n adr'-adr
863 00120C ; MIN 0 MAX -- n'
864 00120C ; >IN ! ;
865 00120C HEADER ADRTOIN,6,'ADR>IN',DOCOLON
865.1 000000 PUBLIC ADRTOIN
865.2 00120C .... DW link
865.3 00120E FF DB 0FFh ; not immediate
865.4 00120F link SET $
865.5 00120F 06 DB 6
865.6 001210 4144523E494E DB 'ADR>IN'
865.7 001216 EVEN
865.8 001216 IF 'DOCOLON'='DOCODE'
865.9 001216 ADRTOIN: DW $+2
865.10 001216 ELSE
865.11 001216 .... ADRTOIN: DW DOCOLON
865.12 001218 ENDIF
865.13 001218 ENDM
866 001218 ............* DW SOURCE,ROT,ROT,MINUS,MIN,lit,0,MAX
867 001228 ............ DW TOIN,STORE,EXIT
868 00122E
869 00122E ;X PARSE char -- c-addr n word delim'd by
char
870 00122E ; SOURCE >IN @ /STRING -- c adr
n
871 00122E ; OVER >R save adr of
string start
872 00122E ; ROT SCAN -- adr"
n"
873 00122E ; OVER SWAP IF CHAR+ THEN skip trailing
delim. if any
874 00122E ; ADR>IN advance >IN --
adr"
875 00122E ; R> TUCK - ; -- adr
n'
876 00122E HEADER PARSE,5,'PARSE',DOCOLON
876.1 000000 PUBLIC PARSE
876.2 00122E .... DW link
876.3 001230 FF DB 0FFh ; not immediate
876.4 001231 link SET $
876.5 001231 05 DB 5
876.6 001232 5041525345 DB 'PARSE'
876.7 001237 00 EVEN
876.8 001238 IF 'DOCOLON'='DOCODE'
876.9 001238 PARSE: DW $+2
876.10 001238 ELSE
876.11 001238 .... PARSE: DW DOCOLON
876.12 00123A ENDIF
876.13 00123A ENDM
877 00123A ............* DW SOURCE,TOIN,FETCH,SLASHSTRING
878 001242 ............* DW OVER,TOR,ROT,SCAN
879 00124A ............ DW OVER,SWAP,qbran
880 001250 DEST PARSE1
880.1 001250 0400 DW PARSE1-$
880.2 001252 ENDM
881 001252 .... DW ONEPLUS ; char+
882 001254 .... PARSE1: DW ADRTOIN
- 4e-configLP - Page 106
883 001256 ............* DW RFROM,TUCK,MINUS,EXIT
884 00125E
885 00125E ;C WORD char -- c-addr word delim'd by
char
886 00125E ; DUP SOURCE >IN @ /STRING -- c c adr
n
887 00125E ; ROT SKIP -- c adr'
n'
888 00125E ; DROP ADR>IN PARSE -- adr"
n"
889 00125E ; HERE >counted --
890 00125E ; HERE -- a
891 00125E ; BL OVER COUNT + C! ; append trailing
blank
892 00125E HEADER WORDD,4,'WORD',DOCOLON
892.1 000000 PUBLIC WORDD
892.2 00125E .... DW link
892.3 001260 FF DB 0FFh ; not immediate
892.4 001261 link SET $
892.5 001261 04 DB 4
892.6 001262 574F5244 DB 'WORD'
892.7 001266 EVEN
892.8 001266 IF 'DOCOLON'='DOCODE'
892.9 001266 WORDD: DW $+2
892.10 001266 ELSE
892.11 001266 .... WORDD: DW DOCOLON
892.12 001268 ENDIF
892.13 001268 ENDM
893 001268 ............* DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING
894 001272 ........ DW ROT,SKIP
895 001276 ............ DW DROP,ADRTOIN,PARSE
896 00127C ............ DW HERE,TOCOUNTED,HERE
897 001282 ............* DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT
898 00128E
899 00128E ;C WORD char -- c-addr word delim'd by char
OLD DEF'N
900 00128E ; DUP SOURCE >IN @ /STRING -- c c adr
n
901 00128E ; DUP >R ROT SKIP -- c adr'
n'
902 00128E ; OVER >R ROT SCAN -- adr"
n"
903 00128E ; DUP IF CHAR- THEN skip trailing
delim.
904 00128E ; R> R> ROT - >IN +! update >IN
offset
905 00128E ; TUCK - -- adr'
N
906 00128E ; HERE >counted --
907 00128E ; HERE -- a
908 00128E ; BL OVER COUNT + C! ; append trailing
blank
909 00128E ; HEADER WORDD,4,'WORD',DOCOLON
910 00128E ; DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING
911 00128E ; DW DUP,TOR,ROT,SKIP
912 00128E ; DW OVER,TOR,ROT,SCAN
913 00128E ; DW DUP,qbran
914 00128E ; DEST WORD1
915 00128E ; DW ONEMINUS ; char-
916 00128E ;WORD1: DW RFROM,RFROM,ROT,MINUS,TOIN,PLUSSTORE
917 00128E ; DW TUCK,MINUS
918 00128E ; DW HERE,TOCOUNTED,HERE
919 00128E ; DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT
920 00128E
921 00128E ;Z NFA>LFA nfa -- lfa name adr -> link
field
922 00128E ; 3 - ;
923 00128E HEADER NFATOLFA,7,'NFA>LFA',DOCOLON
923.1 000000 PUBLIC NFATOLFA
923.2 00128E .... DW link
923.3 001290 FF DB 0FFh ; not immediate
923.4 001291 link SET $
923.5 001291 07 DB 7
923.6 001292 4E46413E4C46* DB 'NFA>LFA'
923.7 001299 00 EVEN
923.8 00129A IF 'DOCOLON'='DOCODE'
923.9 00129A NFATOLFA: DW $+2
923.10 00129A ELSE
- 4e-configLP - Page 107
923.11 00129A .... NFATOLFA: DW DOCOLON
923.12 00129C ENDIF
923.13 00129C ENDM
924 00129C ....0300....* DW lit,3,MINUS,EXIT
925 0012A4
926 0012A4 ;Z NFA>CFA nfa -- cfa name adr -> code
field
927 0012A4 ; HCOUNT 7F AND + ALIGNED ; mask off
'smudge' bit
928 0012A4 HEADER NFATOCFA,7,'NFA>CFA',DOCOLON
928.1 000000 PUBLIC NFATOCFA
928.2 0012A4 .... DW link
928.3 0012A6 FF DB 0FFh ; not immediate
928.4 0012A7 link SET $
928.5 0012A7 07 DB 7
928.6 0012A8 4E46413E4346* DB 'NFA>CFA'
928.7 0012AF 00 EVEN
928.8 0012B0 IF 'DOCOLON'='DOCODE'
928.9 0012B0 NFATOCFA: DW $+2
928.10 0012B0 ELSE
928.11 0012B0 .... NFATOCFA: DW DOCOLON
928.12 0012B2 ENDIF
928.13 0012B2 ENDM
929 0012B2 .... DW HCOUNT
930 0012B4 ....7F00....* DW lit,07FH,ANDD,PLUS,ALIGNED,EXIT
931 0012C0
932 0012C0 ;Z IMMED? nfa -- f fetch immediate
flag
933 0012C0 ; 1- HC@ 1 AND 0= ; Flashable model, LSB=0
if immed
934 0012C0 HEADER IMMEDQ,6,'IMMED?',DOCOLON
934.1 000000 PUBLIC IMMEDQ
934.2 0012C0 .... DW link
934.3 0012C2 FF DB 0FFh ; not immediate
934.4 0012C3 link SET $
934.5 0012C3 06 DB 6
934.6 0012C4 494D4D45443F DB 'IMMED?'
934.7 0012CA EVEN
934.8 0012CA IF 'DOCOLON'='DOCODE'
934.9 0012CA IMMEDQ: DW $+2
934.10 0012CA ELSE
934.11 0012CA .... IMMEDQ: DW DOCOLON
934.12 0012CC ENDIF
934.13 0012CC ENDM
935 0012CC ............* DW ONEMINUS,HCFETCH,lit,1,ANDD,ZEROEQUAL
,EXIT
936 0012DA
937 0012DA ;C FIND c-addr -- c-addr 0 if not found
938 0012DA ;C FIND c-addr -- xt 1 if immediate
939 0012DA ;C FIND c-addr -- xt -1 if "normal"
940 0012DA ; LATEST @ BEGIN -- a nfa
941 0012DA ; 2DUP OVER C@ CHAR+ -- a nfa a nfa
n+1
942 0012DA ; N= -- a nfa
f
943 0012DA ; DUP IF
944 0012DA ; DROP
945 0012DA ; NFA>LFA H@ DUP -- a link
link
946 0012DA ; THEN
947 0012DA ; 0= UNTIL -- a nfa OR a
0
948 0012DA ; DUP IF
949 0012DA ; NIP DUP NFA>CFA -- nfa xt
950 0012DA ; SWAP IMMED? -- xt iflag
951 0012DA ; 0= 1 OR -- xt 1/-1
952 0012DA ; THEN ;
953 0012DA HEADER FIND,4,'FIND',DOCOLON
953.1 000000 PUBLIC FIND
953.2 0012DA .... DW link
953.3 0012DC FF DB 0FFh ; not immediate
953.4 0012DD link SET $
953.5 0012DD 04 DB 4
953.6 0012DE 46494E44 DB 'FIND'
953.7 0012E2 EVEN
953.8 0012E2 IF 'DOCOLON'='DOCODE'
953.9 0012E2 FIND: DW $+2
953.10 0012E2 ELSE
- 4e-configLP - Page 108
953.11 0012E2 .... FIND: DW DOCOLON
953.12 0012E4 ENDIF
953.13 0012E4 ENDM
954 0012E4 ........ DW LATEST,FETCH
955 0012E8 ............*FIND1: DW TWODUP,OVER,CFETCH,CHARPLUS
956 0012F0 ............ DW NEQUAL,DUP,qbran
957 0012F6 DEST FIND2
957.1 0012F6 0A00 DW FIND2-$
957.2 0012F8 ENDM
958 0012F8 ............* DW DROP,NFATOLFA,HFETCH,DUP
959 001300 ........ FIND2: DW ZEROEQUAL,qbran
960 001304 DEST FIND1
960.1 001304 E4FF DW FIND1-$
960.2 001306 ENDM
961 001306 ........ DW DUP,qbran
962 00130A DEST FIND3
962.1 00130A 1400 DW FIND3-$
962.2 00130C ENDM
963 00130C ............ DW NIP,DUP,NFATOCFA
964 001312 ............* DW SWAP,IMMEDQ,ZEROEQUAL,lit,1,ORR
965 00131E .... FIND3: DW EXIT
966 001320
967 001320 ;C UPC char -- char capitalize character
968 001320 ;
969 001320 ; DUP [CHAR] a < OVER [CHAR] z > OR IF EXIT THEN
970 001320 ; [ CHAR A CHAR a - ] LITERAL + ;
971 001320 ; HEADER UPC,3,'UPC',DOCOLON
972 001320 HEADLESS UPC, DOCOLON
972.1 000000 PUBLIC UPC
972.2 001320 IF 'DOCOLON'='DOCODE'
972.3 001320 UPC: DW $+2
972.4 001320 ELSE
972.5 001320 .... UPC: DW DOCOLON
972.6 001322 ENDIF
972.7 001322 ENDM
973 001322 ........6100* DW DUP, lit, 'a', LESS, OVER, lit, 'z',
GREATER
974 001332 ........ DW ORR, qbran
975 001336 DEST UPC1
975.1 001336 0400 DW UPC1-$
975.2 001338 ENDM
976 001338 .... DW EXIT
977 00133A ....E0FF.... UPC1: DW lit, 'A'-'a', PLUS
978 001340 .... DW EXIT
979 001342
980 001342 ;C CAPITALIZE c-addr -- c-addr capitalize
string
981 001342 ;
982 001342 ; CAPS @ IF DUP COUNT OVER + SWAP ?DO I c@ upc
I c! LOOP THEN
983 001342 ; HEADER CAPITALIZE, 10, 'CAPITALIZE',
DOCOLON
984 001342 HEADLESS CAPITALIZE, DOCOLON
984.1 000000 PUBLIC CAPITALIZE
984.2 001342 IF 'DOCOLON'='DOCODE'
984.3 001342 CAPITALIZE: DW $+2
984.4 001342 ELSE
984.5 001342 .... CAPITALIZE: DW DOCOLON
984.6 001344 ENDIF
984.7 001344 ENDM
985 001344 ............ DW CAPS, FETCH, qbran
986 00134A DEST CAPS2
986.1 00134A 1C00 DW CAPS2-$
986.2 00134C ENDM
987 00134C ............* DW DUP, COUNT, OVER, PLUS, SWAP,
xdo
988 001358 ............*CAPS1: DW II, CFETCH, UPC, II, CSTORE
989 001362 .... DW xloop
990 001364 DEST CAPS1
990.1 001364 F4FF DW CAPS1-$
990.2 001366 ENDM
991 001366 .... CAPS2: DW EXIT
992 001368
993 001368 ;C LITERAL x -- append numeric
literal
994 001368 ; STATE @ IF ['] LIT ,XT I, THEN ; IMMEDIATE
995 001368 ; This tests STATE so that it can also be
- 4e-configLP - Page 109
used
996 001368 ; interpretively. (ANSI doesn't require
this.)
997 001368 IMMED LITERAL,7,'LITERAL',DOCOLON
997.1 000000 PUBLIC LITERAL
997.2 001368 .... DW link
997.3 00136A FE DB 0FEh // ; immediate
(LSB=0)
997.4 00136B link SET $
997.5 00136B 07 DB 7
997.6 00136C 4C4954455241* DB 'LITERAL'
997.7 001373 00 EVEN
997.8 001374 IF 'DOCOLON'='DOCODE'
997.9 001374 LITERAL: DW $+2
997.10 001374 ELSE
997.11 001374 .... LITERAL: DW DOCOLON
997.12 001376 ENDIF
997.13 001376 ENDM
998 001376 ............ DW STATE,FETCH,qbran
999 00137C DEST LITER1
999.1 00137C 0A00 DW LITER1-$
999.2 00137E ENDM
1000 00137E ............* DW lit,lit,COMMAXT,ICOMMA
1001 001386 .... LITER1: DW EXIT
1002 001388
1003 001388 ;Z DIGIT? c -- n -1 if c is a valid
digit
1004 001388 ;Z DIGIT? c -- x 0 otherwise
1005 001388 ; [ HEX ] DUP 39 > 100 AND + silly
looking
1006 001388 ; DUP 140 > 107 AND - 30 - but it
works!
1007 001388 ; DUP BASE @ U< ;
1008 001388 HEADER DIGITQ,6,'DIGIT?',DOCOLON
1008.1 000000 PUBLIC DIGITQ
1008.2 001388 .... DW link
1008.3 00138A FF DB 0FFh ; not immediate
1008.4 00138B link SET $
1008.5 00138B 06 DB 6
1008.6 00138C 44494749543F DB 'DIGIT?'
1008.7 001392 EVEN
1008.8 001392 IF 'DOCOLON'='DOCODE'
1008.9 001392 DIGITQ: DW $+2
1008.10 001392 ELSE
1008.11 001392 .... DIGITQ: DW DOCOLON
1008.12 001394 ENDIF
1008.13 001394 ENDM
1009 001394 ........3900* DW DUP,lit,39H,GREATER,lit,100H,ANDD,PLU
S
1010 0013A4 ........4001* DW DUP,lit,140H,GREATER,lit,107H,ANDD
1011 0013B2 ........3000* DW MINUS,lit,30H,MINUS
1012 0013BA ............* DW DUP,BASE,FETCH,ULESS,EXIT
1013 0013C4
1014 0013C4 ;Z ?SIGN adr n -- adr' n' f get optional
sign
1015 0013C4 ;Z advance adr/n if sign; return NZ if
negative
1016 0013C4 ; OVER C@ -- adr n c
1017 0013C4 ; 2C - DUP ABS 1 = AND -- +=-1, -=+1, else
0
1018 0013C4 ; DUP IF 1+ -- +=0, -=+2
1019 0013C4 ; >R 1 /STRING R> -- adr' n'
f
1020 0013C4 ; THEN ;
1021 0013C4 HEADER QSIGN,5,'?SIGN',DOCOLON
1021.1 000000 PUBLIC QSIGN
1021.2 0013C4 .... DW link
1021.3 0013C6 FF DB 0FFh ; not immediate
1021.4 0013C7 link SET $
1021.5 0013C7 05 DB 5
1021.6 0013C8 3F5349474E DB '?SIGN'
1021.7 0013CD 00 EVEN
1021.8 0013CE IF 'DOCOLON'='DOCODE'
1021.9 0013CE QSIGN: DW $+2
1021.10 0013CE ELSE
1021.11 0013CE .... QSIGN: DW DOCOLON
1021.12 0013D0 ENDIF
1021.13 0013D0 ENDM
- 4e-configLP - Page 110
1022 0013D0 ............* DW OVER,CFETCH,lit,2CH,MINUS,DUP,ABBS
1023 0013DE ....0100....* DW lit,1,EQUAL,ANDD,DUP,qbran
1024 0013EA DEST QSIGN1
1024.1 0013EA 0E00 DW QSIGN1-$
1024.2 0013EC ENDM
1025 0013EC ............* DW ONEPLUS,TOR,lit,1,SLASHSTRING,RFROM
1026 0013F8 .... QSIGN1: DW EXIT
1027 0013FA
1028 0013FA ;C >NUMBER ud adr u -- ud' adr' u'
1029 0013FA ;C convert string to
number
1030 0013FA ; BEGIN
1031 0013FA ; DUP WHILE
1032 0013FA ; OVER C@ DIGIT?
1033 0013FA ; 0= IF DROP EXIT THEN
1034 0013FA ; >R 2SWAP BASE @ UD*
1035 0013FA ; R> M+ 2SWAP
1036 0013FA ; 1 /STRING
1037 0013FA ; REPEAT ;
1038 0013FA HEADER TONUMBER,7,'>NUMBER',DOCOLON
1038.1 000000 PUBLIC TONUMBER
1038.2 0013FA .... DW link
1038.3 0013FC FF DB 0FFh ; not immediate
1038.4 0013FD link SET $
1038.5 0013FD 07 DB 7
1038.6 0013FE 3E4E554D4245* DB '>NUMBER'
1038.7 001405 00 EVEN
1038.8 001406 IF 'DOCOLON'='DOCODE'
1038.9 001406 TONUMBER: DW $+2
1038.10 001406 ELSE
1038.11 001406 .... TONUMBER: DW DOCOLON
1038.12 001408 ENDIF
1038.13 001408 ENDM
1039 001408 ........ TONUM1: DW DUP,qbran
1040 00140C DEST TONUM3
1040.1 00140C 2C00 DW TONUM3-$
1040.2 00140E ENDM
1041 00140E ............ DW OVER,CFETCH,DIGITQ
1042 001414 ........ DW ZEROEQUAL,qbran
1043 001418 DEST TONUM2
1043.1 001418 0600 DW TONUM2-$
1043.2 00141A ENDM
1044 00141A ........ DW DROP,EXIT
1045 00141E ............*TONUM2: DW TOR,TWOSWAP,BASE,FETCH,UDSTAR
1046 001428 ............ DW RFROM,MPLUS,TWOSWAP
1047 00142E ....0100....* DW lit,1,SLASHSTRING,bran
1048 001436 DEST TONUM1
1048.1 001436 D2FF DW TONUM1-$
1048.2 001438 ENDM
1049 001438 .... TONUM3: DW EXIT
1050 00143A
1051 00143A ;Z ?NUMBER c-addr -- n -1 string->number
1052 00143A ;Z ?NUMBER c-addr -- c-addr 0 if convert
error
1053 00143A ; DUP 0 0 ROT COUNT -- ca ud adr
n
1054 00143A ; ?SIGN >R >NUMBER -- ca ud adr'
n'
1055 00143A ; IF R> 2DROP 2DROP 0 -- ca 0 (error)
1056 00143A ; ELSE 2DROP NIP R>
1057 00143A ; IF NEGATE THEN -1 -- n -1 (ok)
1058 00143A ; THEN ;
1059 00143A HEADER QNUMBER,7,'?NUMBER',DOCOLON
1059.1 000000 PUBLIC QNUMBER
1059.2 00143A .... DW link
1059.3 00143C FF DB 0FFh ; not immediate
1059.4 00143D link SET $
1059.5 00143D 07 DB 7
1059.6 00143E 3F4E554D4245* DB '?NUMBER'
1059.7 001445 00 EVEN
1059.8 001446 IF 'DOCOLON'='DOCODE'
1059.9 001446 QNUMBER: DW $+2
1059.10 001446 ELSE
1059.11 001446 .... QNUMBER: DW DOCOLON
1059.12 001448 ENDIF
1059.13 001448 ENDM
1060 001448 ............* DW DUP,ZERO,DUP,ROT,COUNT
1061 001452 ............* DW QSIGN,TOR,TONUMBER,qbran
- 4e-configLP - Page 111
1062 00145A DEST QNUM1
1062.1 00145A 1000 DW QNUM1-$
1062.2 00145C ENDM
1063 00145C ............* DW RFROM,TWODROP,TWODROP,lit,0
1064 001466 .... DW bran
1065 001468 DEST QNUM3
1065.1 001468 1200 DW QNUM3-$
1065.2 00146A ENDM
1066 00146A ............*QNUM1: DW TWODROP,NIP,RFROM,qbran
1067 001472 DEST QNUM2
1067.1 001472 0400 DW QNUM2-$
1067.2 001474 ENDM
1068 001474 .... DW NEGATE
1069 001476 ....FFFF QNUM2: DW lit,-1
1070 00147A .... QNUM3: DW EXIT
1071 00147C
1072 00147C ;Z INTERPRET i*x c-addr u -- j*x
interpret given buffer
1073 00147C ; This is a common factor of EVALUATE and
QUIT.
1074 00147C ; ref. dpANS-6, 3.4 The Forth Text Interpreter
1075 00147C ; 'SOURCE 2! 0 >IN !
1076 00147C ; BEGIN
1077 00147C ; BL WORD DUP C@ WHILE -- textadr
1078 00147C ; CAPITALIZE
1079 00147C ; FIND -- a 0/1/-1
1080 00147C ; ?DUP IF -- xt 1/-1
1081 00147C ; 1+ STATE @ 0= OR IMMED or
interp?
1082 00147C ; IF EXECUTE ELSE ,XT THEN
1083 00147C ; ELSE -- textadr
1084 00147C ; ?NUMBER
1085 00147C ; IF POSTPONE LITERAL converted
ok
1086 00147C ; ELSE COUNT TYPE 3F EMIT CR ABORT
err
1087 00147C ; THEN
1088 00147C ; THEN
1089 00147C ; REPEAT DROP ;
1090 00147C HEADER INTERPRET,9,'INTERPRET',DOCOLON
1090.1 000000 PUBLIC INTERPRET
1090.2 00147C .... DW link
1090.3 00147E FF DB 0FFh ; not immediate
1090.4 00147F link SET $
1090.5 00147F 09 DB 9
1090.6 001480 494E54455250* DB 'INTERPRET'
1090.7 001489 00 EVEN
1090.8 00148A IF 'DOCOLON'='DOCODE'
1090.9 00148A INTERPRET: DW $+2
1090.10 00148A ELSE
1090.11 00148A .... INTERPRET: DW DOCOLON
1090.12 00148C ENDIF
1090.13 00148C ENDM
1091 00148C ............* DW TICKSOURCE,TWOSTORE,ZERO,TOIN,STORE
1092 001496 .... INTER1: DW QSTACK ; ?stack prüft auf stck
underflow mk
1093 001498 ............* DW BLANK,WORDD,DUP,CFETCH,qbran
1094 0014A2 DEST INTER9
1094.1 0014A2 4A00 DW INTER9-$
1094.2 0014A4 ENDM
1095 0014A4 .... DW CAPITALIZE
1096 0014A6 ............ DW FIND,QDUP,qbran
1097 0014AC DEST INTER4
1097.1 0014AC 1C00 DW INTER4-$
1097.2 0014AE ENDM
1098 0014AE ............* DW ONEPLUS,STATE,FETCH,ZEROEQUAL,ORR
1099 0014B8 .... DW qbran
1100 0014BA DEST INTER2
1100.1 0014BA 0800 DW INTER2-$
1100.2 0014BC ENDM
1101 0014BC ........ DW EXECUTE,bran
1102 0014C0 DEST INTER3
1102.1 0014C0 0400 DW INTER3-$
1102.2 0014C2 ENDM
1103 0014C2 .... INTER2: DW COMMAXT
1104 0014C4 .... INTER3: DW bran
1105 0014C6 DEST INTER8
1105.1 0014C6 2200 DW INTER8-$
- 4e-configLP - Page 112
1105.2 0014C8 ENDM
1106 0014C8 ........ INTER4: DW QNUMBER,qbran
1107 0014CC DEST INTER5
1107.1 0014CC 0800 DW INTER5-$
1107.2 0014CE ENDM
1108 0014CE ........ DW LITERAL,bran
1109 0014D2 DEST INTER6
1109.1 0014D2 1600 DW INTER6-$
1109.2 0014D4 ENDM
1110 0014D4 ........ INTER5: DW COUNT,TYP
1111 0014D8 ....1500.... DW lit,15H,EMIT ; emit a NAK ($15)
1112 0014DE ....3F00.... DW lit,3FH,EMIT
1113 0014E4 ; DW TOIN,FETCH,DOT
1114 0014E4 ........ DW CR,ABORT
1115 0014E8 INTER6:
1116 0014E8 .... INTER8: DW bran
1117 0014EA DEST INTER1
1117.1 0014EA ACFF DW INTER1-$
1117.2 0014EC ENDM
1118 0014EC ........ INTER9: DW DROP,EXIT
1119 0014F0
1120 0014F0 ;C EVALUATE i*x c-addr u -- j*x
interprt string
1121 0014F0 ; 'SOURCE 2@ >R >R >IN @ >R
1122 0014F0 ; INTERPRET
1123 0014F0 ; R> >IN ! R> R> 'SOURCE 2! ;
1124 0014F0 HEADER EVALUATE,8,'EVALUATE',DOCOLON
1124.1 000000 PUBLIC EVALUATE
1124.2 0014F0 .... DW link
1124.3 0014F2 FF DB 0FFh ; not immediate
1124.4 0014F3 link SET $
1124.5 0014F3 08 DB 8
1124.6 0014F4 4556414C5541* DB 'EVALUATE'
1124.7 0014FC EVEN
1124.8 0014FC IF 'DOCOLON'='DOCODE'
1124.9 0014FC EVALUATE: DW $+2
1124.10 0014FC ELSE
1124.11 0014FC .... EVALUATE: DW DOCOLON
1124.12 0014FE ENDIF
1124.13 0014FE ENDM
1125 0014FE ............* DW TICKSOURCE,TWOFETCH,TOR,TOR
1126 001506 ............* DW TOIN,FETCH,TOR,INTERPRET
1127 00150E ............* DW RFROM,TOIN,STORE,RFROM,RFROM
1128 001518 ............ DW TICKSOURCE,TWOSTORE,EXIT
1129 00151E
1130 00151E #define PREFIXPROMPT 0
1131 00151E
1132 00151E ; C DOTSTATUS -- display system
status
1133 00151E HEADLESS DOTSTATUS,DOCOLON
1133.1 000000 PUBLIC DOTSTATUS
1133.2 00151E IF 'DOCOLON'='DOCODE'
1133.3 00151E DOTSTATUS: DW $+2
1133.4 00151E ELSE
1133.5 00151E .... DOTSTATUS: DW DOCOLON
1133.6 001520 ENDIF
1133.7 001520 ENDM
1134 001520 ....1100.... DW lit,11H,EMIT ; send XON
1135 001526 .... DW CR
1136 001528 IF PREFIXPROMPT=1
1137 001528 DW XISQUOTE
1138 001528 DB 3,'OK ' ; for prefix prompt
style
1139 001528 DW ITYPE
1140 001528 ENDIF
1141 001528 .... DW EXIT
1142 00152A
1143 00152A ; C PROMPT -- prompt user
1144 00152A HEADLESS PROMPT,DOCOLON
1144.1 000000 PUBLIC PROMPT
1144.2 00152A IF 'DOCOLON'='DOCODE'
1144.3 00152A PROMPT: DW $+2
1144.4 00152A ELSE
1144.5 00152A .... PROMPT: DW DOCOLON
1144.6 00152C ENDIF
1144.7 00152C ENDM
1145 00152C IF PREFIXPROMPT!=1
1146 00152C ............* DW STATE,FETCH,ZEROEQUAL,qbran
- 4e-configLP - Page 113
1147 001534 DEST PROMPT1
1147.1 001534 2800 DW PROMPT1-$
1147.2 001536 ENDM
1148 001536 ....0600.... DW lit,06H,EMIT ; send ACK
1149 00153C ............* DW BASE,FETCH,DUP,HEX,lit,'$',EMIT,lit
,02,ZEROUDOTR,BASE,STORE
1150 001554 .... DW XISQUOTE
1151 001556 036F6B20 DB 3,'ok ' ; for traditional Forth
style
1152 00155A .... DW ITYPE
1153 00155C ENDIF
1154 00155C .... PROMPT1:DW EXIT
1155 00155E
1156 00155E
1157 00155E ;C QUIT -- R: i*x -- interpret from
kbd
1158 00155E ; L0 LP ! R0 RP! 0 STATE !
1159 00155E ; BEGIN
1160 00155E ; xon EMIT
1161 00155E ; TIB DUP TIBSIZE ACCEPT
1162 00155E ; xoff EMIT SPACE
1163 00155E ; INTERPRET
1164 00155E ; CR STATE @ 0= IF ." OK" THEN
1165 00155E ; AGAIN ;
1166 00155E HEADER QUIT,4,'QUIT',DOCOLON
1166.1 000000 PUBLIC QUIT
1166.2 00155E .... DW link
1166.3 001560 FF DB 0FFh ; not immediate
1166.4 001561 link SET $
1166.5 001561 04 DB 4
1166.6 001562 51554954 DB 'QUIT'
1166.7 001566 EVEN
1166.8 001566 IF 'DOCOLON'='DOCODE'
1166.9 001566 QUIT: DW $+2
1166.10 001566 ELSE
1166.11 001566 .... QUIT: DW DOCOLON
1166.12 001568 ENDIF
1166.13 001568 ENDM
1167 001568 ............ DW L0,LP,STORE
1168 00156E ............* DW RZERO,RPSTORE,ZERO,STATE,STORE
1169 001578 .... QUIT1: DW DOTSTATUS
1170 00157A ............* DW TIB,DUP,TIBSIZE,ACCEPT
1171 001582 ; DW lit,13H,EMIT ; send
XOFF
1172 001582 .... DW SPACE
1173 001584 .... DW INTERPRET
1174 001586 .... DW PROMPT
1175 001588 .... DW bran
1176 00158A DEST QUIT1
1176.1 00158A EEFF DW QUIT1-$
1176.2 00158C ENDM
1177 000000 PUBLIC QUITIP
1178 00158C QUITIP equ QUIT+2
1179 00158C
1180 00158C ;C ABORT i*x -- R: j*x -- clear stk &
QUIT
1181 00158C ; S0 SP! QUIT ;
1182 00158C HEADER ABORT,5,'ABORT',DOCOLON
1182.1 000000 PUBLIC ABORT
1182.2 00158C .... DW link
1182.3 00158E FF DB 0FFh ; not immediate
1182.4 00158F link SET $
1182.5 00158F 05 DB 5
1182.6 001590 41424F5254 DB 'ABORT'
1182.7 001595 00 EVEN
1182.8 001596 IF 'DOCOLON'='DOCODE'
1182.9 001596 ABORT: DW $+2
1182.10 001596 ELSE
1182.11 001596 .... ABORT: DW DOCOLON
1182.12 001598 ENDIF
1182.13 001598 ENDM
1183 001598 ............ abort1 DW S0,SPSTORE,QUIT ; QUIT never
returns
1184 00159E
1185 00159E ;Z ?ABORT f c-addr u -- abort & print
msg
1186 00159E ; ROT IF ITYPE ABORT THEN 2DROP ;
1187 00159E HEADER QABORT,6,'?ABORT',DOCOLON
- 4e-configLP - Page 114
1187.1 000000 PUBLIC QABORT
1187.2 00159E .... DW link
1187.3 0015A0 FF DB 0FFh ; not immediate
1187.4 0015A1 link SET $
1187.5 0015A1 06 DB 6
1187.6 0015A2 3F41424F5254 DB '?ABORT'
1187.7 0015A8 EVEN
1187.8 0015A8 IF 'DOCOLON'='DOCODE'
1187.9 0015A8 QABORT: DW $+2
1187.10 0015A8 ELSE
1187.11 0015A8 .... QABORT: DW DOCOLON
1187.12 0015AA ENDIF
1187.13 0015AA ENDM
1188 0015AA ........ DW ROT,qbran
1189 0015AE DEST QABO1
1189.1 0015AE 0600 DW QABO1-$
1189.2 0015B0 ENDM
1190 0015B0 ........ DW ITYPE,ABORT
1191 0015B4 ........ QABO1: DW TWODROP,EXIT
1192 0015B8
1193 0015B8 ;C ABORT" i*x 0 -- i*x R: j*x -- j*x
x1=0
1194 0015B8 ;C ABORT" i*x x1 -- R: j*x --
x1<>0
1195 0015B8 ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE
1196 0015B8 IMMED ABORTQUOTE,6,'ABORT"',DOCOLON
1196.1 000000 PUBLIC ABORTQUOTE
1196.2 0015B8 .... DW link
1196.3 0015BA FE DB 0FEh // ; immediate
(LSB=0
)
1196.4 0015BB link SET $
1196.5 0015BB 06 DB 6
1196.6 0015BC 41424F525422 DB 'ABORT"'
1196.7 0015C2 EVEN
1196.8 0015C2 IF 'DOCOLON'='DOCODE'
1196.9 0015C2 ABORTQUOTE: DW $+2
1196.10 0015C2 ELSE
1196.11 0015C2 .... ABORTQUOTE: DW DOCOLON
1196.12 0015C4 ENDIF
1196.13 0015C4 ENDM
1197 0015C4 .... DW ISQUOTE
1198 0015C6 ............ DW lit,QABORT,COMMAXT
1199 0015CC .... DW EXIT
1200 0015CE
1201 0015CE ;C ' -- xt find word in dictionary
1202 0015CE ; BL WORD CAPITALIZE FIND
1203 0015CE ; 0= ABORT" ?" ;
1204 0015CE HEADER TICK,1,27h,DOCOLON
1204.1 000000 PUBLIC TICK
1204.2 0015CE .... DW link
1204.3 0015D0 FF DB 0FFh ; not immediate
1204.4 0015D1 link SET $
1204.5 0015D1 01 DB 1
1204.6 0015D2 27 DB 27h
1204.7 0015D3 00 EVEN
1204.8 0015D4 IF 'DOCOLON'='DOCODE'
1204.9 0015D4 TICK: DW $+2
1204.10 0015D4 ELSE
1204.11 0015D4 .... TICK: DW DOCOLON
1204.12 0015D6 ENDIF
1204.13 0015D6 ENDM
1205 0015D6 ............* DW BLANK,WORDD,CAPITALIZE,FIND,ZEROEQUAL
,XISQUOTE
1206 0015E2 013F DB 1,'?'
1207 0015E4 ........ DW QABORT,EXIT
1208 0015E8
1209 0015E8 ;C CHAR -- char parse ASCII
character
1210 0015E8 ; BL WORD 1+ C@ ;
1211 0015E8 HEADER CHARR,4,'CHAR',DOCOLON
1211.1 000000 PUBLIC CHARR
1211.2 0015E8 .... DW link
1211.3 0015EA FF DB 0FFh ; not immediate
1211.4 0015EB link SET $
1211.5 0015EB 04 DB 4
1211.6 0015EC 43484152 DB 'CHAR'
1211.7 0015F0 EVEN
- 4e-configLP - Page 115
1211.8 0015F0 IF 'DOCOLON'='DOCODE'
1211.9 0015F0 CHARR: DW $+2
1211.10 0015F0 ELSE
1211.11 0015F0 .... CHARR: DW DOCOLON
1211.12 0015F2 ENDIF
1211.13 0015F2 ENDM
1212 0015F2 ............* DW BLANK,WORDD,ONEPLUS,CFETCH,EXIT
1213 0015FC
1214 0015FC ;C [CHAR] -- compile character
literal
1215 0015FC ; CHAR ['] LIT ,XT I, ; IMMEDIATE
1216 0015FC IMMED BRACCHAR,6,'[CHAR]',DOCOLON
1216.1 000000 PUBLIC BRACCHAR
1216.2 0015FC .... DW link
1216.3 0015FE FE DB 0FEh // ; immediate
(LSB=0)
1216.4 0015FF link SET $
1216.5 0015FF 06 DB 6
1216.6 001600 5B434841525D DB '[CHAR]'
1216.7 001606 EVEN
1216.8 001606 IF 'DOCOLON'='DOCODE'
1216.9 001606 BRACCHAR: DW $+2
1216.10 001606 ELSE
1216.11 001606 .... BRACCHAR: DW DOCOLON
1216.12 001608 ENDIF
1216.13 001608 ENDM
1217 001608 .... DW CHARR
1218 00160A ............ DW lit,lit,COMMAXT
1219 001610 ........ DW ICOMMA,EXIT
1220 001614
1221 001614 ;C ( -- skip input until
)
1222 001614 ; [ HEX ] 29 PARSE 2DROP ; IMMEDIATE
1223 001614 IMMED PAREN,1,'(',DOCOLON
1223.1 000000 PUBLIC PAREN
1223.2 001614 .... DW link
1223.3 001616 FE DB 0FEh // ; immediate
(LSB=0)
1223.4 001617 link SET $
1223.5 001617 01 DB 1
1223.6 001618 28 DB '('
1223.7 001619 00 EVEN
1223.8 00161A IF 'DOCOLON'='DOCODE'
1223.9 00161A PAREN: DW $+2
1223.10 00161A ELSE
1223.11 00161A .... PAREN: DW DOCOLON
1223.12 00161C ENDIF
1223.13 00161C ENDM
1224 00161C ....2900....* DW lit,29H,PARSE,TWODROP,EXIT
1225 001626
1226 001626 ; COMPILER =====================================
=
1227 001626
1228 001626 ;Z HEADER -- create a Forth word
header
1229 001626 ; LATEST @ H, 0FF HC, link & IMMED
field
1230 001626 ; HHERE LATEST ! new "latest"
link
1231 001626 ; BL HWORD HC@ 1+ HALLOT name field
1232 001626 ; ALIGN ;
1233 001626 ; Separate headers model.
1234 001626 HEADER HEADR,6,'HEADER',DOCOLON
1234.1 000000 PUBLIC HEADR
1234.2 001626 .... DW link
1234.3 001628 FF DB 0FFh ; not immediate
1234.4 001629 link SET $
1234.5 001629 06 DB 6
1234.6 00162A 484541444552 DB 'HEADER'
1234.7 001630 EVEN
1234.8 001630 IF 'DOCOLON'='DOCODE'
1234.9 001630 HEADR: DW $+2
1234.10 001630 ELSE
1234.11 001630 .... HEADR: DW DOCOLON
1234.12 001632 ENDIF
1234.13 001632 ENDM
1235 001632 ............ DW LATEST,FETCH,HCOMMA ; link
1236 001638 ....FF00.... DW lit,0FFh,HCCOMMA ; immediate
- 4e-configLP - Page 116
flag - see
note
below
1237 00163E ............ DW HHERE,LATEST,STORE
1238 001644 ............* DW BLANK,HWORD,HCFETCH,ONEPLUS,HALLOT
1239 00164E ........ DW ALIGNN,EXIT ; MSP430: headers in I
space must be
aligned
1240 001652 ; Note for Flashable MSP430: when compiling to
RAM, we need to set
1241 001652 ; the immediate byte to 0FFH. When compiling to
Flash, the word IC!
1242 001652 ; will not write 0FFH to erased Flash (because
the byte is already 0FFH).
1243 001652 ; Thus we can write this byte at a later time
(with IMMEDIATE).
1244 001652
1245 001652 ;Z ) -- run-time action of
DOES>
1262 001684 ; R> adrs of headless DOES>
def'n
1263 001684 ; LATEST @ NFA>CFA code field to fix
up
1264 001684 ; !CF ;
1265 001684 HEADER XDOES,7,'(DOES>)',DOCOLON
1265.1 000000 PUBLIC XDOES
1265.2 001684 .... DW link
1265.3 001686 FF DB 0FFh ; not immediate
1265.4 001687 link SET $
1265.5 001687 07 DB 7
1265.6 001688 28444F45533E* DB '(DOES>)'
- 4e-configLP - Page 117
1265.7 00168F 00 EVEN
1265.8 001690 IF 'DOCOLON'='DOCODE'
1265.9 001690 XDOES: DW $+2
1265.10 001690 ELSE
1265.11 001690 .... XDOES: DW DOCOLON
1265.12 001692 ENDIF
1265.13 001692 ENDM
1266 001692 ............* DW RFROM,LATEST,FETCH,NFATOCFA,STORECF
1267 00169C .... DW EXIT
1268 00169E
1269 00169E ;C DOES> -- change action of latest
def'n
1270 00169E ; COMPILE (DOES>)
1271 00169E ; dodoes ,JMP ; IMMEDIATE
1272 00169E ; Note that MSP430 uses a JMP, not a CALL, to
DODOES.
1273 00169E IMMED DOES,5,'DOES>',DOCOLON
1273.1 000000 PUBLIC DOES
1273.2 00169E .... DW link
1273.3 0016A0 FE DB 0FEh // ; immediate
(LSB=0)
1273.4 0016A1 link SET $
1273.5 0016A1 05 DB 5
1273.6 0016A2 444F45533E DB 'DOES>'
1273.7 0016A7 00 EVEN
1273.8 0016A8 IF 'DOCOLON'='DOCODE'
1273.9 0016A8 DOES: DW $+2
1273.10 0016A8 ELSE
1273.11 0016A8 .... DOES: DW DOCOLON
1273.12 0016AA ENDIF
1273.13 0016AA ENDM
1274 0016AA ............ DW lit,XDOES,COMMAXT
1275 0016B0 ............* DW lit,dodoes,COMMAJMP,EXIT
1276 0016B8
1277 0016B8 ;C RECURSE -- recurse current definition
1278 0016B8 ; LATEST @ NFA>CFA ,XT ; IMMEDIATE
1279 0016B8 ; NEWEST @ NFA>CFA ,XT ; IMMEDIATE
Flashable
1280 0016B8 IMMED RECURSE,7,'RECURSE',DOCOLON
1280.1 000000 PUBLIC RECURSE
1280.2 0016B8 .... DW link
1280.3 0016BA FE DB 0FEh // ; immediate
(LSB=0)
1280.4 0016BB link SET $
1280.5 0016BB 07 DB 7
1280.6 0016BC 524543555253* DB 'RECURSE'
1280.7 0016C3 00 EVEN
1280.8 0016C4 IF 'DOCOLON'='DOCODE'
1280.9 0016C4 RECURSE: DW $+2
1280.10 0016C4 ELSE
1280.11 0016C4 .... RECURSE: DW DOCOLON
1280.12 0016C6 ENDIF
1280.13 0016C6 ENDM
1281 0016C6 ............* DW NEWEST,FETCH,NFATOCFA,COMMAXT,EXIT
1282 0016D0
1283 0016D0 ;C [ -- enter interpretive
state
1284 0016D0 ; 0 STATE ! ; IMMEDIATE
1285 0016D0 IMMED LEFTBRACKET,1,'[',DOCOLON
1285.1 000000 PUBLIC LEFTBRACKET
1285.2 0016D0 .... DW link
1285.3 0016D2 FE DB 0FEh // ; immediate
(LSB=0)
1285.4 0016D3 link SET $
1285.5 0016D3 01 DB 1
1285.6 0016D4 5B DB '['
1285.7 0016D5 00 EVEN
1285.8 0016D6 IF 'DOCOLON'='DOCODE'
1285.9 0016D6 LEFTBRACKET: DW $+2
1285.10 0016D6 ELSE
1285.11 0016D6 .... LEFTBRACKET: DW DOCOLON
1285.12 0016D8 ENDIF
1285.13 0016D8 ENDM
1286 0016D8 ............* DW ZERO,STATE,STORE,EXIT
1287 0016E0
1288 0016E0 ;C ] -- enter compiling state
1289 0016E0 ; -1 STATE ! ;
1290 0016E0 HEADER RIGHTBRACKET,1,']',DOCOLON
- 4e-configLP - Page 118
1290.1 000000 PUBLIC RIGHTBRACKET
1290.2 0016E0 .... DW link
1290.3 0016E2 FF DB 0FFh ; not immediate
1290.4 0016E3 link SET $
1290.5 0016E3 01 DB 1
1290.6 0016E4 5D DB ']'
1290.7 0016E5 00 EVEN
1290.8 0016E6 IF 'DOCOLON'='DOCODE'
1290.9 0016E6 RIGHTBRACKET: DW $+2
1290.10 0016E6 ELSE
1290.11 0016E6 .... RIGHTBRACKET: DW DOCOLON
1290.12 0016E8 ENDIF
1290.13 0016E8 ENDM
1291 0016E8 ....FFFF....* DW lit,-1,STATE,STORE,EXIT
1292 0016F2
1293 0016F2 ;Z HIDE -- "hide" latest definition
Flashable
1294 0016F2 ; LATEST @ DUP NEWEST ! NFA>LFA H@ LATEST !
;
1295 0016F2 HEADER HIDE,4,'HIDE',DOCOLON
1295.1 000000 PUBLIC HIDE
1295.2 0016F2 .... DW link
1295.3 0016F4 FF DB 0FFh ; not immediate
1295.4 0016F5 link SET $
1295.5 0016F5 04 DB 4
1295.6 0016F6 48494445 DB 'HIDE'
1295.7 0016FA EVEN
1295.8 0016FA IF 'DOCOLON'='DOCODE'
1295.9 0016FA HIDE: DW $+2
1295.10 0016FA ELSE
1295.11 0016FA .... HIDE: DW DOCOLON
1295.12 0016FC ENDIF
1295.13 0016FC ENDM
1296 0016FC ............* DW LATEST,FETCH,DUP,NEWEST,STORE
1297 001706 ............* DW NFATOLFA,HFETCH,LATEST,STORE,EXIT
1298 001710
1299 001710 ;Z REVEAL -- "reveal" latest definition
Flashable
1300 001710 ; NEWEST @ LATEST ! ;
1301 001710 HEADER REVEAL,6,'REVEAL',DOCOLON
1301.1 000000 PUBLIC REVEAL
1301.2 001710 .... DW link
1301.3 001712 FF DB 0FFh ; not immediate
1301.4 001713 link SET $
1301.5 001713 06 DB 6
1301.6 001714 52455645414C DB 'REVEAL'
1301.7 00171A EVEN
1301.8 00171A IF 'DOCOLON'='DOCODE'
1301.9 00171A REVEAL: DW $+2
1301.10 00171A ELSE
1301.11 00171A .... REVEAL: DW DOCOLON
1301.12 00171C ENDIF
1301.13 00171C ENDM
1302 00171C ............* DW NEWEST,FETCH,LATEST,STORE,EXIT
1303 001726
1304 001726 ;C IMMEDIATE -- make last def'n immediate
1305 001726 ; 0FE LATEST @ 1- HC! ; set Flashable
immediate flag
1306 001726 HEADER IMMEDIATE,9,'IMMEDIATE',DOCOLON
1306.1 000000 PUBLIC IMMEDIATE
1306.2 001726 .... DW link
1306.3 001728 FF DB 0FFh ; not immediate
1306.4 001729 link SET $
1306.5 001729 09 DB 9
1306.6 00172A 494D4D454449* DB 'IMMEDIATE'
1306.7 001733 00 EVEN
1306.8 001734 IF 'DOCOLON'='DOCODE'
1306.9 001734 IMMEDIATE: DW $+2
1306.10 001734 ELSE
1306.11 001734 .... IMMEDIATE: DW DOCOLON
1306.12 001736 ENDIF
1306.13 001736 ENDM
1307 001736 ....FE00....* DW lit,0FEh,LATEST,FETCH,ONEMINUS,HCSTOR
E
1308 001742 .... DW EXIT
1309 001744
1310 001744 ;C : -- begin a colon definition
- 4e-configLP - Page 119
1311 001744 ; DUP CELL+ >R @ ,XT ;
1358 0017B6 ; The phrase ['] xxx ,XT appears so often
that
1359 0017B6 ; this word was created to combine the
actions
1360 0017B6 ; of LIT and ,XT. It takes an inline literal
1361 0017B6 ; execution token and appends it to the
dict.
1362 0017B6 ; HEADER COMPILE,7,'COMPILE',DOCOLON
1363 0017B6 ; DW RFROM,DUP,CELLPLUS,TOR
1364 0017B6 ; DW FETCH,COMMAXT,EXIT
1365 0017B6 ; N.B.: not used in the current implementation
1366 0017B6
1367 0017B6 ; CONTROL STRUCTURES ===========================
=
1368 0017B6
1369 0017B6 ;C IF -- adrs conditional forward
branch
1370 0017B6 ; ['] qbran ,BRANCH IHERE ,NONE ;
Flashable
1371 0017B6 ; IMMEDIATE
1372 0017B6 IMMED IFF,2,'IF',DOCOLON
1372.1 000000 PUBLIC IFF
1372.2 0017B6 .... DW link
1372.3 0017B8 FE DB 0FEh // ; immediate
(LSB=0)
1372.4 0017B9 link SET $
1372.5 0017B9 02 DB 2
1372.6 0017BA 4946 DB 'IF'
1372.7 0017BC EVEN
1372.8 0017BC IF 'DOCOLON'='DOCODE'
1372.9 0017BC IFF: DW $+2
- 4e-configLP - Page 121
1372.10 0017BC ELSE
1372.11 0017BC .... IFF: DW DOCOLON
1372.12 0017BE ENDIF
1372.13 0017BE ENDM
1373 0017BE ............ DW lit,qbran,COMMABRANCH
1374 0017C4 ............ DW IHERE,COMMANONE,EXIT
1375 0017CA
1376 0017CA ;C THEN adrs -- resolve forward
branch
1377 0017CA ; IHERE SWAP !DEST ; IMMEDIATE
1378 0017CA IMMED THEN,4,'THEN',DOCOLON
1378.1 000000 PUBLIC THEN
1378.2 0017CA .... DW link
1378.3 0017CC FE DB 0FEh // ; immediate
(LSB=0)
1378.4 0017CD link SET $
1378.5 0017CD 04 DB 4
1378.6 0017CE 5448454E DB 'THEN'
1378.7 0017D2 EVEN
1378.8 0017D2 IF 'DOCOLON'='DOCODE'
1378.9 0017D2 THEN: DW $+2
1378.10 0017D2 ELSE
1378.11 0017D2 .... THEN: DW DOCOLON
1378.12 0017D4 ENDIF
1378.13 0017D4 ENDM
1379 0017D4 ............* DW IHERE,SWAP,STOREDEST,EXIT
1380 0017DC
1381 0017DC ;C ELSE adrs1 -- adrs2 branch for
IF..ELSE
1382 0017DC ; ['] branch ,BRANCH IHERE ,NONE
Flashable
1383 0017DC ; SWAP POSTPONE THEN ; IMMEDIATE
1384 0017DC IMMED ELSS,4,'ELSE',DOCOLON
1384.1 000000 PUBLIC ELSS
1384.2 0017DC .... DW link
1384.3 0017DE FE DB 0FEh // ; immediate
(LSB=0)
1384.4 0017DF link SET $
1384.5 0017DF 04 DB 4
1384.6 0017E0 454C5345 DB 'ELSE'
1384.7 0017E4 EVEN
1384.8 0017E4 IF 'DOCOLON'='DOCODE'
1384.9 0017E4 ELSS: DW $+2
1384.10 0017E4 ELSE
1384.11 0017E4 .... ELSS: DW DOCOLON
1384.12 0017E6 ENDIF
1384.13 0017E6 ENDM
1385 0017E6 ............ DW lit,bran,COMMABRANCH
1386 0017EC ........ DW IHERE,COMMANONE
1387 0017F0 ............ DW SWAP,THEN,EXIT
1388 0017F6
1389 0017F6 ;C BEGIN -- adrs target for bwd.
branch
1390 0017F6 ; IHERE ; IMMEDIATE
1391 0017F6 IMMED BEGIN,5,'BEGIN',DOCOLON
1391.1 000000 PUBLIC BEGIN
1391.2 0017F6 .... DW link
1391.3 0017F8 FE DB 0FEh // ; immediate
(LSB=0)
1391.4 0017F9 link SET $
1391.5 0017F9 05 DB 5
1391.6 0017FA 424547494E DB 'BEGIN'
1391.7 0017FF 00 EVEN
1391.8 001800 IF 'DOCOLON'='DOCODE'
1391.9 001800 BEGIN: DW $+2
1391.10 001800 ELSE
1391.11 001800 .... BEGIN: DW DOCOLON
1391.12 001802 ENDIF
1391.13 001802 ENDM
1392 001802 ........ DW IHERE,EXIT
1393 001806
1394 001806 ;C UNTIL adrs -- conditional backward
branch
1395 001806 ; ['] qbran ,BRANCH ,DEST ; IMMEDIATE
1396 001806 ; conditional backward branch
1397 001806 IMMED UNTIL,5,'UNTIL',DOCOLON
1397.1 000000 PUBLIC UNTIL
1397.2 001806 .... DW link
- 4e-configLP - Page 122
1397.3 001808 FE DB 0FEh // ; immediate
(LSB=0)
1397.4 001809 link SET $
1397.5 001809 05 DB 5
1397.6 00180A 554E54494C DB 'UNTIL'
1397.7 00180F 00 EVEN
1397.8 001810 IF 'DOCOLON'='DOCODE'
1397.9 001810 UNTIL: DW $+2
1397.10 001810 ELSE
1397.11 001810 .... UNTIL: DW DOCOLON
1397.12 001812 ENDIF
1397.13 001812 ENDM
1398 001812 ............ DW lit,qbran,COMMABRANCH
1399 001818 ........ DW COMMADEST,EXIT
1400 00181C
1401 00181C ;X AGAIN adrs -- uncond'l backward
branch
1402 00181C ; ['] branch ,BRANCH ,DEST ; IMMEDIATE
1403 00181C ; unconditional backward branch
1404 00181C IMMED AGAIN,5,'AGAIN',DOCOLON
1404.1 000000 PUBLIC AGAIN
1404.2 00181C .... DW link
1404.3 00181E FE DB 0FEh // ; immediate
(LSB=0)
1404.4 00181F link SET $
1404.5 00181F 05 DB 5
1404.6 001820 414741494E DB 'AGAIN'
1404.7 001825 00 EVEN
1404.8 001826 IF 'DOCOLON'='DOCODE'
1404.9 001826 AGAIN: DW $+2
1404.10 001826 ELSE
1404.11 001826 .... AGAIN: DW DOCOLON
1404.12 001828 ENDIF
1404.13 001828 ENDM
1405 001828 ............ DW lit,bran,COMMABRANCH
1406 00182E ........ DW COMMADEST,EXIT
1407 001832
1408 001832 ;C WHILE adrs1 -- adrs2 adrs1
branch for WHILE loop
1409 001832 ; POSTPONE IF SWAP ; IMMEDIATE
1410 001832 IMMED WHILE,5,'WHILE',DOCOLON
1410.1 000000 PUBLIC WHILE
1410.2 001832 .... DW link
1410.3 001834 FE DB 0FEh // ; immediate
(LSB=0)
1410.4 001835 link SET $
1410.5 001835 05 DB 5
1410.6 001836 5748494C45 DB 'WHILE'
1410.7 00183B 00 EVEN
1410.8 00183C IF 'DOCOLON'='DOCODE'
1410.9 00183C WHILE: DW $+2
1410.10 00183C ELSE
1410.11 00183C .... WHILE: DW DOCOLON
1410.12 00183E ENDIF
1410.13 00183E ENDM
1411 00183E ............ DW IFF,SWAP,EXIT
1412 001844
1413 001844 ;C REPEAT adrs2 adrs1 -- resolve
WHILE loop
1414 001844 ; POSTPONE AGAIN POSTPONE THEN ; IMMEDIATE
1415 001844 IMMED REPEAT,6,'REPEAT',DOCOLON
1415.1 000000 PUBLIC REPEAT
1415.2 001844 .... DW link
1415.3 001846 FE DB 0FEh // ; immediate
(LSB=0)
1415.4 001847 link SET $
1415.5 001847 06 DB 6
1415.6 001848 524550454154 DB 'REPEAT'
1415.7 00184E EVEN
1415.8 00184E IF 'DOCOLON'='DOCODE'
1415.9 00184E REPEAT: DW $+2
1415.10 00184E ELSE
1415.11 00184E .... REPEAT: DW DOCOLON
1415.12 001850 ENDIF
1415.13 001850 ENDM
1416 001850 ............ DW AGAIN,THEN,EXIT
1417 001856
1418 001856 ;Z >L x -- L: -- x move to leave
- 4e-configLP - Page 123
stack
1419 001856 ; CELL LP +! LP @ ! ; (L stack grows
up)
1420 001856 HEADER TOL,2,'>L',DOCOLON
1420.1 000000 PUBLIC TOL
1420.2 001856 .... DW link
1420.3 001858 FF DB 0FFh ; not immediate
1420.4 001859 link SET $
1420.5 001859 02 DB 2
1420.6 00185A 3E4C DB '>L'
1420.7 00185C EVEN
1420.8 00185C IF 'DOCOLON'='DOCODE'
1420.9 00185C TOL: DW $+2
1420.10 00185C ELSE
1420.11 00185C .... TOL: DW DOCOLON
1420.12 00185E ENDIF
1420.13 00185E ENDM
1421 00185E ............* DW CELL,LP,PLUSSTORE,LP,FETCH,STORE,EXIT
1422 00186C
1423 00186C ;Z L> -- x L: x -- move from leave
stack
1424 00186C ; LP @ @ CELL NEGATE LP +! ;
1425 00186C HEADER LFROM,2,'L>',DOCOLON
1425.1 000000 PUBLIC LFROM
1425.2 00186C .... DW link
1425.3 00186E FF DB 0FFh ; not immediate
1425.4 00186F link SET $
1425.5 00186F 02 DB 2
1425.6 001870 4C3E DB 'L>'
1425.7 001872 EVEN
1425.8 001872 IF 'DOCOLON'='DOCODE'
1425.9 001872 LFROM: DW $+2
1425.10 001872 ELSE
1425.11 001872 .... LFROM: DW DOCOLON
1425.12 001874 ENDIF
1425.13 001874 ENDM
1426 001874 ............ DW LP,FETCH,FETCH
1427 00187A ............* DW CELL,NEGATE,LP,PLUSSTORE,EXIT
1428 001884
1429 001884 ;C DO -- adrs L: -- 0 start a loop
1430 001884 ; ['] xdo ,XT IHERE target for bwd
branch
1431 001884 ; 0 >L ; IMMEDIATE marker for
LEAVEs
1432 001884 IMMED DO,2,'DO',DOCOLON
1432.1 000000 PUBLIC DO
1432.2 001884 .... DW link
1432.3 001886 FE DB 0FEh // ; immediate
(LSB=0)
1432.4 001887 link SET $
1432.5 001887 02 DB 2
1432.6 001888 444F DB 'DO'
1432.7 00188A EVEN
1432.8 00188A IF 'DOCOLON'='DOCODE'
1432.9 00188A DO: DW $+2
1432.10 00188A ELSE
1432.11 00188A .... DO: DW DOCOLON
1432.12 00188C ENDIF
1432.13 00188C ENDM
1433 00188C ............* DW lit,xdo,COMMAXT,IHERE
1434 001894 ............ DW ZERO,TOL,EXIT
1435 00189A
1436 00189A ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN --
common factor of LOOP and +LOOP
1437 00189A ; ,BRANCH ,DEST backward
loop
1438 00189A ; BEGIN L> ?DUP WHILE POSTPONE THEN REPEAT
;
1439 00189A ; resolve
LEAVEs
1440 00189A ; This is a common factor of LOOP and +LOOP.
1441 00189A HEADER ENDLOOP,7,'ENDLOOP',DOCOLON
1441.1 000000 PUBLIC ENDLOOP
1441.2 00189A .... DW link
1441.3 00189C FF DB 0FFh ; not immediate
1441.4 00189D link SET $
1441.5 00189D 07 DB 7
- 4e-configLP - Page 124
1441.6 00189E 454E444C4F4F* DB 'ENDLOOP'
1441.7 0018A5 00 EVEN
1441.8 0018A6 IF 'DOCOLON'='DOCODE'
1441.9 0018A6 ENDLOOP: DW $+2
1441.10 0018A6 ELSE
1441.11 0018A6 .... ENDLOOP: DW DOCOLON
1441.12 0018A8 ENDIF
1441.13 0018A8 ENDM
1442 0018A8 ........ DW COMMABRANCH,COMMADEST
1443 0018AC ............ LOOP1: DW LFROM,QDUP,qbran
1444 0018B2 DEST LOOP2
1444.1 0018B2 0800 DW LOOP2-$
1444.2 0018B4 ENDM
1445 0018B4 ........ DW THEN,bran
1446 0018B8 DEST LOOP1
1446.1 0018B8 F4FF DW LOOP1-$
1446.2 0018BA ENDM
1447 0018BA .... LOOP2: DW EXIT
1448 0018BC
1449 0018BC ;C LOOP adrs -- L: 0 a1 a2 .. aN -- finish
a loop
1450 0018BC ; ['] xloop ENDLOOP ; IMMEDIATE
1451 0018BC IMMED LOO,4,'LOOP',DOCOLON
1451.1 000000 PUBLIC LOO
1451.2 0018BC .... DW link
1451.3 0018BE FE DB 0FEh // ; immediate
(LSB=0)
1451.4 0018BF link SET $
1451.5 0018BF 04 DB 4
1451.6 0018C0 4C4F4F50 DB 'LOOP'
1451.7 0018C4 EVEN
1451.8 0018C4 IF 'DOCOLON'='DOCODE'
1451.9 0018C4 LOO: DW $+2
1451.10 0018C4 ELSE
1451.11 0018C4 .... LOO: DW DOCOLON
1451.12 0018C6 ENDIF
1451.13 0018C6 ENDM
1452 0018C6 ............* DW lit,xloop,ENDLOOP,EXIT
1453 0018CE
1454 0018CE ;C +LOOP adrs -- L: 0 a1 a2 .. aN -- finish
a loop
1455 0018CE ; ['] xplusloop ENDLOOP ; IMMEDIATE
1456 0018CE IMMED PLUSLOOP,5,'+LOOP',DOCOLON
1456.1 000000 PUBLIC PLUSLOOP
1456.2 0018CE .... DW link
1456.3 0018D0 FE DB 0FEh // ; immediate
(LSB=0)
1456.4 0018D1 link SET $
1456.5 0018D1 05 DB 5
1456.6 0018D2 2B4C4F4F50 DB '+LOOP'
1456.7 0018D7 00 EVEN
1456.8 0018D8 IF 'DOCOLON'='DOCODE'
1456.9 0018D8 PLUSLOOP: DW $+2
1456.10 0018D8 ELSE
1456.11 0018D8 .... PLUSLOOP: DW DOCOLON
1456.12 0018DA ENDIF
1456.13 0018DA ENDM
1457 0018DA ............* DW lit,xplusloop,ENDLOOP,EXIT
1458 0018E2
1459 0018E2 ;C LEAVE -- L: -- adrs
1460 0018E2 ; ['] UNLOOP ,XT
1461 0018E2 ; ['] branch ,BRANCH IHERE ,NONE >L
1462 0018E2 ; ; IMMEDIATE unconditional forward
branch
1463 0018E2 IMMED LEAV,5,'LEAVE',DOCOLON
1463.1 000000 PUBLIC LEAV
1463.2 0018E2 .... DW link
1463.3 0018E4 FE DB 0FEh // ; immediate
(LSB=0)
1463.4 0018E5 link SET $
1463.5 0018E5 05 DB 5
1463.6 0018E6 4C45415645 DB 'LEAVE'
1463.7 0018EB 00 EVEN
1463.8 0018EC IF 'DOCOLON'='DOCODE'
1463.9 0018EC LEAV: DW $+2
1463.10 0018EC ELSE
1463.11 0018EC .... LEAV: DW DOCOLON
1463.12 0018EE ENDIF
- 4e-configLP - Page 125
1463.13 0018EE ENDM
1464 0018EE ............ DW lit,UNLOOP,COMMAXT
1465 0018F4 ............ DW lit,bran,COMMABRANCH
1466 0018FA ............* DW IHERE,COMMANONE,TOL,EXIT
1467 001902
1468 001902 ; OTHER OPERATIONS =============================
=
1469 001902
1470 001902 ;X WITHIN n1|u1 n2|u2 n3|u3 -- f
n2<=n1R - R> U< ; per ANS
document
1472 001902 HEADER WITHIN,6,'WITHIN',DOCOLON
1472.1 000000 PUBLIC WITHIN
1472.2 001902 .... DW link
1472.3 001904 FF DB 0FFh ; not immediate
1472.4 001905 link SET $
1472.5 001905 06 DB 6
1472.6 001906 57495448494E DB 'WITHIN'
1472.7 00190C EVEN
1472.8 00190C IF 'DOCOLON'='DOCODE'
1472.9 00190C WITHIN: DW $+2
1472.10 00190C ELSE
1472.11 00190C .... WITHIN: DW DOCOLON
1472.12 00190E ENDIF
1472.13 00190E ENDM
1473 00190E ............* DW OVER,MINUS,TOR,MINUS,RFROM,ULESS,EXIT
1474 00191C
1475 00191C ;C MOVE addr1 addr2 u -- smart move
1476 00191C ; VERSION FOR 1 ADDRESS UNIT = 1
CHAR
1477 00191C ; >R 2DUP SWAP DUP R@ + -- ... dst src
src+n
1478 00191C ; WITHIN IF R> CMOVE> src <= dst <
src+n
1479 00191C ; ELSE R> CMOVE THEN ;
otherwise
1480 00191C HEADER MOVE,4,'MOVE',DOCOLON
1480.1 000000 PUBLIC MOVE
1480.2 00191C .... DW link
1480.3 00191E FF DB 0FFh ; not immediate
1480.4 00191F link SET $
1480.5 00191F 04 DB 4
1480.6 001920 4D4F5645 DB 'MOVE'
1480.7 001924 EVEN
1480.8 001924 IF 'DOCOLON'='DOCODE'
1480.9 001924 MOVE: DW $+2
1480.10 001924 ELSE
1480.11 001924 .... MOVE: DW DOCOLON
1480.12 001926 ENDIF
1480.13 001926 ENDM
1481 001926 ............* DW TOR,TWODUP,SWAP,DUP,RFETCH,PLUS
1482 001932 ........ DW WITHIN,qbran
1483 001936 DEST MOVE1
1483.1 001936 0A00 DW MOVE1-$
1483.2 001938 ENDM
1484 001938 ............ DW RFROM,CMOVEUP,bran
1485 00193E DEST MOVE2
1485.1 00193E 0600 DW MOVE2-$
1485.2 001940 ENDM
1486 001940 ........ MOVE1: DW RFROM,CMOVE
1487 001944 .... MOVE2: DW EXIT
1488 001946
1489 001946 ;C DEPTH -- +n number of items on
stack
1490 001946 ; SP@ S0 SWAP - 2/ ; 16-BIT VERSION!
1491 001946 HEADER DEPTH,5,'DEPTH',DOCOLON
1491.1 000000 PUBLIC DEPTH
1491.2 001946 .... DW link
1491.3 001948 FF DB 0FFh ; not immediate
1491.4 001949 link SET $
1491.5 001949 05 DB 5
1491.6 00194A 4445505448 DB 'DEPTH'
1491.7 00194F 00 EVEN
1491.8 001950 IF 'DOCOLON'='DOCODE'
1491.9 001950 DEPTH: DW $+2
1491.10 001950 ELSE
1491.11 001950 .... DEPTH: DW DOCOLON
- 4e-configLP - Page 126
1491.12 001952 ENDIF
1491.13 001952 ENDM
1492 001952 ............* DW SPFETCH,S0,SWAP,MINUS,TWOSLASH,EXIT
1493 00195E
1494 00195E ;C ENVIRONMENT? c-addr u -- false system
query
1495 00195E ; -- i*x true
1496 00195E ; 2DROP 0 ; the minimal definition!
1497 00195E HEADER ENVIRONMENTQ,12,'ENVIRONMENT?',DOCOL
ON
1497.1 000000 PUBLIC ENVIRONMENTQ
1497.2 00195E .... DW link
1497.3 001960 FF DB 0FFh ; not immediate
1497.4 001961 link SET $
1497.5 001961 0C DB 12
1497.6 001962 454E5649524F* DB 'ENVIRONMENT?'
1497.7 00196E EVEN
1497.8 00196E IF 'DOCOLON'='DOCODE'
1497.9 00196E ENVIRONMENTQ: DW $+2
1497.10 00196E ELSE
1497.11 00196E .... ENVIRONMENTQ: DW DOCOLON
1497.12 001970 ENDIF
1497.13 001970 ENDM
1498 001970 ............ DW TWODROP,ZERO,EXIT
1499 001976
1500 001976 ;U UTILITY WORDS =====================
1501 001976
1502 001976 ;Z NOOP -- do nothing
1503 001976 HEADER NOOP,4,'NOOP',DOCOLON
1503.1 000000 PUBLIC NOOP
1503.2 001976 .... DW link
1503.3 001978 FF DB 0FFh ; not immediate
1503.4 001979 link SET $
1503.5 001979 04 DB 4
1503.6 00197A 4E4F4F50 DB 'NOOP'
1503.7 00197E EVEN
1503.8 00197E IF 'DOCOLON'='DOCODE'
1503.9 00197E NOOP: DW $+2
1503.10 00197E ELSE
1503.11 00197E .... NOOP: DW DOCOLON
1503.12 001980 ENDIF
1503.13 001980 ENDM
1504 001980 .... DW EXIT
1505 001982
1506 001982 ;Z FLALIGNED a -- a' align IDP to flash
boundary
1507 001982 ; $200 OVER - $1FF AND + ;
1508 001982 HEADER FLALIGNED,9,'FLALIGNED',DOCOLON
1508.1 000000 PUBLIC FLALIGNED
1508.2 001982 .... DW link
1508.3 001984 FF DB 0FFh ; not immediate
1508.4 001985 link SET $
1508.5 001985 09 DB 9
1508.6 001986 464C414C4947* DB 'FLALIGNED'
1508.7 00198F 00 EVEN
1508.8 001990 IF 'DOCOLON'='DOCODE'
1508.9 001990 FLALIGNED: DW $+2
1508.10 001990 ELSE
1508.11 001990 .... FLALIGNED: DW DOCOLON
1508.12 001992 ENDIF
1508.13 001992 ENDM
1509 001992 ....0002....* DW lit,0200h,OVER,MINUS,lit,01FFh,ANDD,P
LUS,EXIT
1510 0019A4
1511 0019A4 ;X MARKER -- create word to restore
dictionary
1512 0019A4 ; LATEST @ IHERE HERE
1513 0019A4 ; IHERE FLALIGNED IDP ! align new word to
flash boundary
1514 0019A4 ; DUP I@
1516 0019A4 ; SWAP CELL+ DUP I@
1517 0019A4 ; SWAP CELL+ I@ fetch saved -- dp
idp latest
1518 0019A4 ; OVER FLALIGNED IHERE OVER - FLERASE erase
Flash from saved to IHERE
1519 0019A4 ; LATEST ! IDP ! DP ! ;
1520 0019A4 HEADER MARKER,6,'MARKER',DOCOLON
- 4e-configLP - Page 127
1520.1 000000 PUBLIC MARKER
1520.2 0019A4 .... DW link
1520.3 0019A6 FF DB 0FFh ; not immediate
1520.4 0019A7 link SET $
1520.5 0019A7 06 DB 6
1520.6 0019A8 4D41524B4552 DB 'MARKER'
1520.7 0019AE EVEN
1520.8 0019AE IF 'DOCOLON'='DOCODE'
1520.9 0019AE MARKER: DW $+2
1520.10 0019AE ELSE
1520.11 0019AE .... MARKER: DW DOCOLON
1520.12 0019B0 ENDIF
1520.13 0019B0 ENDM
1521 0019B0 ............* DW LATEST,FETCH,IHERE,HERE
1522 0019B8 ............* DW IHERE,FLALIGNED,IDP,STORE
1523 0019C0 ............* DW BUILDS,ICOMMA,ICOMMA,ICOMMA,XDOES
1524 0019CA 3040.... MOV #dodoes,PC ; long direct jump
to DODOES
1525 0019CE ........ DW DUP,IFETCH
1526 0019D2 ............* DW SWAP,CELLPLUS,DUP,IFETCH
1527 0019DA ............ DW SWAP,CELLPLUS,IFETCH
1528 0019E0 ............* DW OVER,FLALIGNED,IHERE,OVER,MINUS,FLERA
SE
1529 0019EC ............* DW LATEST,STORE,IDP,STORE,DDP,STORE,EXIT
1530 0019FA
1531 0019FA /***
1532 0019FA ;X WORDS -- list all words in
dict.
1533 0019FA ; LATEST @ BEGIN
1534 0019FA ; DUP HCOUNT 7F AND HTYPE SPACE
1535 0019FA ; NFA>LFA H@
1536 0019FA ; DUP 0= UNTIL
1537 0019FA ; DROP ;
1538 0019FA HEADER WORDS,5,'WORDS',DOCOLON
1539 0019FA DW LATEST,FETCH
1540 0019FA WDS1: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE
1541 0019FA DW NFATOLFA,HFETCH
1542 0019FA DW DUP,ZEROEQUAL,qbran
1543 0019FA DEST WDS1
1544 0019FA DW DROP,EXIT
1545 0019FA ***/
1546 0019FA
1547 0019FA ;X WORDS -- list all words in dict.
Stop and go key version.
1548 0019FA ; LATEST @ BEGIN
1549 0019FA ; KEY? IF KEY DROP KEY 0x0D = IF DROP EXIT
THEN THEN
1550 0019FA ; DUP HCOUNT 7F AND HTYPE SPACE
1551 0019FA ; NFA>LFA H@
1552 0019FA ; DUP 0= UNTIL
1553 0019FA ; DROP ;
1554 0019FA HEADER WORDS,5,'WORDS',DOCOLON
1554.1 000000 PUBLIC WORDS
1554.2 0019FA .... DW link
1554.3 0019FC FF DB 0FFh ; not immediate
1554.4 0019FD link SET $
1554.5 0019FD 05 DB 5
1554.6 0019FE 574F524453 DB 'WORDS'
1554.7 001A03 00 EVEN
1554.8 001A04 IF 'DOCOLON'='DOCODE'
1554.9 001A04 WORDS: DW $+2
1554.10 001A04 ELSE
1554.11 001A04 .... WORDS: DW DOCOLON
1554.12 001A06 ENDIF
1554.13 001A06 ENDM
1555 001A06 ........ DW LATEST,FETCH
1556 001A0A ........ WDS1: DW KEYQ,qbran
1557 001A0E DEST WDS2
1557.1 001A0E 1000 DW WDS2-$
1557.2 001A10 ENDM
1558 001A10 ........ DW KEY,DROP ; halt
1559 001A14 ............* DW KEY,BLANK,EQUAL,qbran ; go on if
blank, else
quit
words
1560 001A1C DEST WDS3
1560.1 001A1C 1C00 DW WDS3-$
1560.2 001A1E ENDM
- 4e-configLP - Page 128
1561 001A1E ............*WDS2: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE
1562 001A2C ........ DW NFATOLFA,HFETCH
1563 001A30 ............ DW DUP,ZEROEQUAL,qbran
1564 001A36 DEST WDS1
1564.1 001A36 D4FF DW WDS1-$
1564.2 001A38 ENDM
1565 001A38 ........ WDS3: DW DROP,EXIT
1566 001A3C
1567 001A3C ;X (U.R) u n -- xxx display u
unsigned in n width; primitiv
1568 001A3C ; >R <# 0 #S #> R> OVER - 0 MAX (jump)
;
1569 001A3C HEADLESS PARENUDOTR,DOCOLON
1569.1 000000 PUBLIC PARENUDOTR
1569.2 001A3C IF 'DOCOLON'='DOCODE'
1569.3 001A3C PARENUDOTR: DW $+2
1569.4 001A3C ELSE
1569.5 001A3C .... PARENUDOTR: DW DOCOLON
1569.6 001A3E ENDIF
1569.7 001A3E ENDM
1570 001A3E ............* DW TOR,LESSNUM,ZERO,NUMS,NUMGREATER
1571 001A48 ............* DW RFROM,OVER,MINUS,ZERO,MAX
1572 001A52 .... DW EXIT
1573 001A54
1574 001A54 ;X U.R u n -- display u unsigned in
n width
1575 001A54 ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE
;
1576 001A54 HEADER UDOTR,3,'U.R',DOCOLON
1576.1 000000 PUBLIC UDOTR
1576.2 001A54 .... DW link
1576.3 001A56 FF DB 0FFh ; not immediate
1576.4 001A57 link SET $
1576.5 001A57 03 DB 3
1576.6 001A58 552E52 DB 'U.R'
1576.7 001A5B 00 EVEN
1576.8 001A5C IF 'DOCOLON'='DOCODE'
1576.9 001A5C UDOTR: DW $+2
1576.10 001A5C ELSE
1576.11 001A5C .... UDOTR: DW DOCOLON
1576.12 001A5E ENDIF
1576.13 001A5E ENDM
1577 001A5E .... DW PARENUDOTR
1578 001A60 ............ DW SPACES,TYP,EXIT
1579 001A66
1580 001A66 ;X 0U.R u n -- display u unsigned
in n width with leading zeros
1581 001A66 ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE
;
1582 001A66 HEADER ZEROUDOTR,4,'0U.R',DOCOLON
1582.1 000000 PUBLIC ZEROUDOTR
1582.2 001A66 .... DW link
1582.3 001A68 FF DB 0FFh ; not immediate
1582.4 001A69 link SET $
1582.5 001A69 04 DB 4
1582.6 001A6A 30552E52 DB '0U.R'
1582.7 001A6E EVEN
1582.8 001A6E IF 'DOCOLON'='DOCODE'
1582.9 001A6E ZEROUDOTR: DW $+2
1582.10 001A6E ELSE
1582.11 001A6E .... ZEROUDOTR: DW DOCOLON
1582.12 001A70 ENDIF
1582.13 001A70 ENDM
1583 001A70 .... DW PARENUDOTR
1584 001A72 ............ DW ZEROS,TYP,EXIT
1585 001A78
1586 001A78 ;X ZEROS n -- output n zeros
1587 001A78 ; BEGIN DUP WHILE ZERO 1- REPEAT DROP
;
1588 001A78 HEADER ZEROS,5,'ZEROS',DOCOLON
1588.1 000000 PUBLIC ZEROS
1588.2 001A78 .... DW link
1588.3 001A7A FF DB 0FFh ; not immediate
1588.4 001A7B link SET $
1588.5 001A7B 05 DB 5
1588.6 001A7C 5A45524F53 DB 'ZEROS'
1588.7 001A81 00 EVEN
1588.8 001A82 IF 'DOCOLON'='DOCODE'
- 4e-configLP - Page 129
1588.9 001A82 ZEROS: DW $+2
1588.10 001A82 ELSE
1588.11 001A82 .... ZEROS: DW DOCOLON
1588.12 001A84 ENDIF
1588.13 001A84 ENDM
1589 001A84 ........ ZEROS1: DW DUP,qbran
1590 001A88 DEST ZEROS2
1590.1 001A88 0E00 DW ZEROS2-$
1590.2 001A8A ENDM
1591 001A8A ....3000....* DW lit,'0',EMIT,ONEMINUS,bran
1592 001A94 DEST ZEROS1
1592.1 001A94 F0FF DW ZEROS1-$
1592.2 001A96 ENDM
1593 001A96 ........ ZEROS2: DW DROP,EXIT
1594 001A9A
1595 001A9A
1596 001A9A
1597 001A9A ;X DUMP adr n -- dump memory
1598 001A9A ; OVER + SWAP DO
1599 001A9A ; CR I 4 U.R SPACE SPACE
1600 001A9A ; I $10 + I DO I C@ 3 U.R LOOP SPACE
SPACE
1601 001A9A ; I $10 + I DO I C@ $7F AND $7E MIN BL MAX
EMIT LOOP
1602 001A9A ; 10 +LOOP ;
1603 001A9A HEADER DUMP,4,'DUMP',DOCOLON
1603.1 000000 PUBLIC DUMP
1603.2 001A9A .... DW link
1603.3 001A9C FF DB 0FFh ; not immediate
1603.4 001A9D link SET $
1603.5 001A9D 04 DB 4
1603.6 001A9E 44554D50 DB 'DUMP'
1603.7 001AA2 EVEN
1603.8 001AA2 IF 'DOCOLON'='DOCODE'
1603.9 001AA2 DUMP: DW $+2
1603.10 001AA2 ELSE
1603.11 001AA2 .... DUMP: DW DOCOLON
1603.12 001AA4 ENDIF
1603.13 001AA4 ENDM
1604 001AA4 ............* DW OVER,PLUS,SWAP,xdo
1605 001AAC ............*LDUMP1: DW CR,II,lit,4,UDOTR,SPACE,SPACE
1606 001ABA ........1000* DW II,lit,10h,PLUS,II,xdo
1607 001AC6 ............*LDUMP2: DW II,CFETCH,lit,3,UDOTR,xloop
1608 001AD2 DEST LDUMP2
1608.1 001AD2 F4FF DW LDUMP2-$
1608.2 001AD4 ENDM
1609 001AD4 ........ DW SPACE,SPACE
1610 001AD8 ........1000* DW II,lit,10h,PLUS,II,xdo
1611 001AE4 ............*LDUMP3: DW II,CFETCH,lit,7Fh,ANDD,lit,7Eh,MIN,BL
ANK,MAX,EMIT,xloop
1612 001AFC DEST LDUMP3
1612.1 001AFC E8FF DW LDUMP3-$
1612.2 001AFE ENDM
1613 001AFE ....1000.... DW lit,10h,xplusloop
1614 001B04 DEST LDUMP1
1614.1 001B04 A8FF DW LDUMP1-$
1614.2 001B06 ENDM
1615 001B06 .... DW EXIT
1616 001B08
1617 001B08 ;X .S -- print stack contents
1618 001B08 ; [char] < EMIT DEPTH . BS [char] > EMIT
1619 001B08 ; SP@ S0 < IF
1620 001B08 ; SP@ S0 2 - DO I @ U. -2 +LOOP
1621 001B08 ; THEN ;
1622 001B08 HEADER DOTS,2,'.S',DOCOLON
1622.1 000000 PUBLIC DOTS
1622.2 001B08 .... DW link
1622.3 001B0A FF DB 0FFh ; not immediate
1622.4 001B0B link SET $
1622.5 001B0B 02 DB 2
1622.6 001B0C 2E53 DB '.S'
1622.7 001B0E EVEN
1622.8 001B0E IF 'DOCOLON'='DOCODE'
1622.9 001B0E DOTS: DW $+2
1622.10 001B0E ELSE
1622.11 001B0E .... DOTS: DW DOCOLON
1622.12 001B10 ENDIF
- 4e-configLP - Page 130
1622.13 001B10 ENDM
1623 001B10 ;mk gforth style
1624 001B10 ....3C00.... DW lit,$3C,EMIT
1625 001B16 ........ DW DEPTH,DOT
1626 001B1A ....0800....* DW lit,$08,EMIT,lit,$3E,EMIT,SPACE
1627 001B28 ;/mk
1628 001B28 ............* DW SPFETCH,S0,LESS,qbran
1629 001B30 DEST DOTS2
1629.1 001B30 1C00 DW DOTS2-$
1629.2 001B32 ENDM
1630 001B32 ............* DW SPFETCH,S0,lit,2,MINUS
1631 001B3C ; DW TWODUP,TOR,TOR,
1632 001B3C .... DW xdo
1633 001B3E ............*DOTS1: DW II,FETCH,UDOT,lit,-2,xplusloop
1634 001B4A DEST DOTS1
1634.1 001B4A F4FF DW DOTS1-$
1634.2 001B4C ENDM
1635 001B4C ; DW lit,'|',EMIT,RFROM,RFROM
1636 001B4C ; DW xdo
1637 001B4C ;DOTS11: DW II,FETCH,UDOT,lit,-2,xplusloop
1638 001B4C ; DEST DOTS11
1639 001B4C .... DOTS2: DW EXIT
1640 001B4E
1641 001B4E
1642 001B4E ;U ccrc n c -- n' crc process
byte
1643 001B4E ; 8 LSHIFT XOR
1644 001B4E ; 8 0 DO ( n' )
1645 001B4E ; DUP 1 LSHIFT SWAP 8000 AND 0= INVERT 1021
( CRC-16 ) AND XOR
1646 001B4E ; LOOP
1647 001B4E ; FFFF AND ;
1648 001B4E ; HEADER CCRC,4,'ccrc',DOCODE
1649 001B4E HEADLESS CCRC,DOCODE
1649.1 000000 PUBLIC CCRC
1649.2 001B4E IF 'DOCODE'='DOCODE'
1649.3 001B4E .... CCRC: DW $+2
1649.4 001B50 ELSE
1649.5 001B50 CCRC: DW DOCODE
1649.6 001B50 ENDIF
1649.7 001B50 ENDM
1650 001B50 37F0FF00 AND #00FFh,TOS
1651 001B54 8710 SWPB TOS
1652 001B56 37E4 XOR @PSP+,TOS
1653 001B58 3642 MOV #8,W
1654 001B5A 0757 ccrc1: RLA TOS
1655 001B5C 0228 JNC ccrc2
1656 001B5E 37E02110 XOR #01021h,TOS
1657 001B62 1683 ccrc2: DEC W
1658 001B64 FA23 JNZ ccrc1
1659 001B66 NEXT
1659.1 001B66 3645 MOV @IP+,W // ; fetch word address
into W
1659.2 001B68 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1659.3 001B6A ENDM
1660 001B6A
1661 001B6A ;U crc n addr len -- n' crc process
string
1662 001B6A ; dup IF over + swap DO ( n ) I C@ ccrc LOOP
ELSE 2drop THEN ;
1663 001B6A HEADER CRC,3,'CRC',DOCOLON
1663.1 000000 PUBLIC CRC
1663.2 001B6A .... DW link
1663.3 001B6C FF DB 0FFh ; not immediate
1663.4 001B6D link SET $
1663.5 001B6D 03 DB 3
1663.6 001B6E 435243 DB 'CRC'
1663.7 001B71 00 EVEN
1663.8 001B72 IF 'DOCOLON'='DOCODE'
1663.9 001B72 CRC: DW $+2
1663.10 001B72 ELSE
1663.11 001B72 .... CRC: DW DOCOLON
1663.12 001B74 ENDIF
1663.13 001B74 ENDM
1664 001B74 ........ DW DUP,qbran
1665 001B78 DEST pcrc2
- 4e-configLP - Page 131
1665.1 001B78 1800 DW pcrc2-$
1665.2 001B7A ENDM
1666 001B7A ............* DW OVER,PLUS,SWAP,xdo
1667 001B82 ............*pcrc1: DW II,CFETCH,CCRC, xloop
1668 001B8A DEST pcrc1
1668.1 001B8A F8FF DW pcrc1-$
1668.2 001B8C ENDM
1669 001B8C .... DW bran
1670 001B8E DEST pcrc3
1670.1 001B8E 0400 DW pcrc3-$
1670.2 001B90 ENDM
1671 001B90 .... pcrc2: DW TWODROP
1672 001B92 .... pcrc3: DW EXIT
1673 001B94
1674 001B94
1675 001B94
1676 001B94 ;U MISC ========================================
================================
1677 001B94
1678 001B94 ;C 2CONSTANT w1 w2 -- define a
Forth double constant
1679 001B94 ; (machine code fragment)
1681 001B94 ; Note that the constant is stored in Code
space.
1682 001B94 HEADER TWOCONSTANT,9,'2CONSTANT',DOCOLON
1682.1 000000 PUBLIC TWOCONSTANT
1682.2 001B94 .... DW link
1682.3 001B96 FF DB 0FFh ; not immediate
1682.4 001B97 link SET $
1682.5 001B97 09 DB 9
1682.6 001B98 32434F4E5354* DB '2CONSTANT'
1682.7 001BA1 00 EVEN
1682.8 001BA2 IF 'DOCOLON'='DOCODE'
1682.9 001BA2 TWOCONSTANT: DW $+2
1682.10 001BA2 ELSE
1682.11 001BA2 .... TWOCONSTANT: DW DOCOLON
1682.12 001BA4 ENDIF
1682.13 001BA4 ENDM
1683 001BA4 ............* DW BUILDS,ICOMMA,ICOMMA,XDOES
1684 000000 PUBLIC DOTWOCON
1685 001BAC DOTWOCON: ; ( -- w1 w2 )
1686 001BAC 2482 SUB #4,PSP ; make room on stack
1687 001BAE 84470200 MOV TOS,2(PSP)
1688 001BB2 3746 MOV @W+,TOS ; fetch from parameter
field to TOS
1689 001BB4 A4460000 MOV @W,0(PSP) ; fetch secon word from
parameter field to
NOS
1690 001BB8 NEXT
1690.1 001BB8 3645 MOV @IP+,W // ; fetch word address
into W
1690.2 001BBA 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1690.3 001BBC ENDM
1691 001BBC
1692 001BBC ;U \ -- backslash
1693 001BBC ; everything up to the end of the current line
is a comment.
1694 001BBC ; SOURCE >IN ! DROP ;
1695 001BBC IMMED BACKSLASH,1,'\\',DOCOLON
1695.1 000000 PUBLIC BACKSLASH
1695.2 001BBC .... DW link
1695.3 001BBE FE DB 0FEh // ; immediate
(LSB=0)
1695.4 001BBF link SET $
1695.5 001BBF 01 DB 1
1695.6 001BC0 5C DB '\\'
1695.7 001BC1 00 EVEN
1695.8 001BC2 IF 'DOCOLON'='DOCODE'
1695.9 001BC2 BACKSLASH: DW $+2
1695.10 001BC2 ELSE
1695.11 001BC2 .... BACKSLASH: DW DOCOLON
1695.12 001BC4 ENDIF
1695.13 001BC4 ENDM
1696 001BC4 ............* DW SOURCE,TOIN,STORE,DROP,EXIT
- 4e-configLP - Page 132
1697 001BCE
1698 001BCE ;Z .VER -- type message
1699 001BCE HEADER DOTVER,4,'.VER',DOCOLON
1699.1 000000 PUBLIC DOTVER
1699.2 001BCE .... DW link
1699.3 001BD0 FF DB 0FFh ; not immediate
1699.4 001BD1 link SET $
1699.5 001BD1 04 DB 4
1699.6 001BD2 2E564552 DB '.VER'
1699.7 001BD6 EVEN
1699.8 001BD6 IF 'DOCOLON'='DOCODE'
1699.9 001BD6 DOTVER: DW $+2
1699.10 001BD6 ELSE
1699.11 001BD6 .... DOTVER: DW DOCOLON
1699.12 001BD8 ENDIF
1699.13 001BD8 ENDM
1700 001BD8 ............* DW lit,version,COUNT,ITYPE ; # of
version
1701 001BE0 ............* DW lit,stamp,COUNT,ONEMINUS,ITYPE ; time
stamp of version
1702 001BEA .... DW DOTBOOTVERSION
1703 001BEC .... DW SPACE
1704 001BEE ............ DW BASE,FETCH,BIN
1705 001BF4 ............* DW COR,FETCH,lit,16,ZEROUDOTR ; flags
indicating reset procedure.
1706 001BFE ........ DW BASE,STORE
1707 001C02 .... DW EXIT
1708 001C04
1709 001C04 ;U BELL -- send $07 to
Terminal
1710 001C04 HEADER BELL,4,'BELL',DOCOLON
1710.1 000000 PUBLIC BELL
1710.2 001C04 .... DW link
1710.3 001C06 FF DB 0FFh ; not immediate
1710.4 001C07 link SET $
1710.5 001C07 04 DB 4
1710.6 001C08 42454C4C DB 'BELL'
1710.7 001C0C EVEN
1710.8 001C0C IF 'DOCOLON'='DOCODE'
1710.9 001C0C BELL: DW $+2
1710.10 001C0C ELSE
1710.11 001C0C .... BELL: DW DOCOLON
1710.12 001C0E ENDIF
1710.13 001C0E ENDM
1711 001C0E ....0700....* DW lit,7,EMIT,EXIT
1712 001C16
1713 001C16 ;U ESC[ -- start esc-sequence
1714 001C16 ; 27 emit 91 emit ;
1715 001C16 HEADERLESS ESCPAR,4,'ESC[',DOCOLON
1715.1 000000 PUBLIC ESCPAR
1715.2 001C16 IF 'DOCOLON'='DOCODE'
1715.3 001C16 ESCPAR: DW $+2
1715.4 001C16 ELSE
1715.5 001C16 .... ESCPAR: DW DOCOLON
1715.6 001C18 ENDIF
1715.7 001C18 ENDM
1716 001C18 ....1B00....* DW lit,27,EMIT, lit,91,EMIT
1717 001C24 .... DW EXIT
1718 001C26
1719 001C26 ;U PN -- send parameter of
esc-sequence
1720 001C26 ; base @ swap decimal 0 u.r base ! ;
1721 001C26 HEADERLESS PN,2,'PN',DOCOLON
1721.1 000000 PUBLIC PN
1721.2 001C26 IF 'DOCOLON'='DOCODE'
1721.3 001C26 PN: DW $+2
1721.4 001C26 ELSE
1721.5 001C26 .... PN: DW DOCOLON
1721.6 001C28 ENDIF
1721.7 001C28 ENDM
1722 001C28 ........ DW BASE,FETCH
1723 001C2C ............* DW SWAP,DECIMAL,ZERO,UDOTR
1724 001C34 ........ DW BASE,STORE
1725 001C38 .... DW EXIT
- 4e-configLP - Page 133
1726 001C3A
1727 001C3A ;U ;PN -- send delimiter ;
followed by parameter
1728 001C3A ; 59 emit pn ;
1729 001C3A HEADERLESS SEMIPN,3,';PN',DOCOLON
1729.1 000000 PUBLIC SEMIPN
1729.2 001C3A IF 'DOCOLON'='DOCODE'
1729.3 001C3A SEMIPN: DW $+2
1729.4 001C3A ELSE
1729.5 001C3A .... SEMIPN: DW DOCOLON
1729.6 001C3C ENDIF
1729.7 001C3C ENDM
1730 001C3C ....3B00....* DW lit,59,EMIT,PN
1731 001C44 .... DW EXIT
1732 001C46
1733 001C46 ;U AT-XY x y -- send esc-sequence to
terminal
1734 001C46 ; 1+ swap 1+ swap ESC[ pn ;pn 72 emit ;
1735 001C46 HEADER ATXY,5,'AT-XY',DOCOLON
1735.1 000000 PUBLIC ATXY
1735.2 001C46 .... DW link
1735.3 001C48 FF DB 0FFh ; not immediate
1735.4 001C49 link SET $
1735.5 001C49 05 DB 5
1735.6 001C4A 41542D5859 DB 'AT-XY'
1735.7 001C4F 00 EVEN
1735.8 001C50 IF 'DOCOLON'='DOCODE'
1735.9 001C50 ATXY: DW $+2
1735.10 001C50 ELSE
1735.11 001C50 .... ATXY: DW DOCOLON
1735.12 001C52 ENDIF
1735.13 001C52 ENDM
1736 001C52 ............* DW ONEPLUS,SWAP,ONEPLUS,SWAP
1737 001C5A ........ DW ESCPAR,PN
1738 001C5E ........4800* DW SEMIPN, lit,72,EMIT
1739 001C66 .... DW EXIT
1740 001C68
1741 001C68 ;U PAGE -- send "page" command
to terminal to clear screen.
1742 001C68 ; esc[ ." 2J" 0 0 at-xy ;
1743 001C68 HEADER PAGEE,4,'PAGE',DOCOLON
1743.1 000000 PUBLIC PAGEE
1743.2 001C68 .... DW link
1743.3 001C6A FF DB 0FFh ; not immediate
1743.4 001C6B link SET $
1743.5 001C6B 04 DB 4
1743.6 001C6C 50414745 DB 'PAGE'
1743.7 001C70 EVEN
1743.8 001C70 IF 'DOCOLON'='DOCODE'
1743.9 001C70 PAGEE: DW $+2
1743.10 001C70 ELSE
1743.11 001C70 .... PAGEE: DW DOCOLON
1743.12 001C72 ENDIF
1743.13 001C72 ENDM
1744 001C72 .... DW ESCPAR
1745 001C74 .... DW XISQUOTE
1746 001C76 03 DB (ESC1-ESC0)
1747 001C77 324A ESC0: DB '2J'
1748 001C79 00 EVEN
1749 001C7A .... ESC1: DW ITYPE
1750 001C7C ............ DW ZERO,ZERO,ATXY
1751 001C82 .... DW EXIT
1752 001C84
1753 001C84 ;U BIN -- set number base to
binary
1754 001C84 HEADER BIN,3,'BIN',DOCOLON
1754.1 000000 PUBLIC BIN
1754.2 001C84 .... DW link
1754.3 001C86 FF DB 0FFh ; not immediate
1754.4 001C87 link SET $
1754.5 001C87 03 DB 3
1754.6 001C88 42494E DB 'BIN'
1754.7 001C8B 00 EVEN
1754.8 001C8C IF 'DOCOLON'='DOCODE'
1754.9 001C8C BIN: DW $+2
1754.10 001C8C ELSE
1754.11 001C8C .... BIN: DW DOCOLON
- 4e-configLP - Page 134
1754.12 001C8E ENDIF
1754.13 001C8E ENDM
1755 001C8E ....0200....* DW lit,2,BASE,STORE,EXIT
1756 001C98
1757 001C98 ; ommitted, MSP430G2553 RAM is too smal.
1758 001C98 ;U RAM -- compile into RAM.
SAVE your system befor using RAM.
1759 001C98 ; here unused 10 - allot idp ! ; Use COLD to
swich back to flash.
1760 001C98 ; HEADER RAM,3,'RAM',DOCOLON
1761 001C98 ; DW HERE,UNUSED,lit,0x10,MINUS,ALLOT,ID
P,STORE,EXIT
1762 001C98
1763 001C98 ;U TRUE -- f true flag
1764 001C98 HEADER TRUE,4,'TRUE',DOCON
1764.1 000000 PUBLIC TRUE
1764.2 001C98 .... DW link
1764.3 001C9A FF DB 0FFh ; not immediate
1764.4 001C9B link SET $
1764.5 001C9B 04 DB 4
1764.6 001C9C 54525545 DB 'TRUE'
1764.7 001CA0 EVEN
1764.8 001CA0 IF 'DOCON'='DOCODE'
1764.9 001CA0 TRUE: DW $+2
1764.10 001CA0 ELSE
1764.11 001CA0 .... TRUE: DW DOCON
1764.12 001CA2 ENDIF
1764.13 001CA2 ENDM
1765 001CA2 FFFF DW 0xFFFF
1766 001CA4
1767 001CA4 ;U FALSE -- f false flag
1768 001CA4 HEADER FALSE,5,'FALSE',DOCON
1768.1 000000 PUBLIC FALSE
1768.2 001CA4 .... DW link
1768.3 001CA6 FF DB 0FFh ; not immediate
1768.4 001CA7 link SET $
1768.5 001CA7 05 DB 5
1768.6 001CA8 46414C5345 DB 'FALSE'
1768.7 001CAD 00 EVEN
1768.8 001CAE IF 'DOCON'='DOCODE'
1768.9 001CAE FALSE: DW $+2
1768.10 001CAE ELSE
1768.11 001CAE .... FALSE: DW DOCON
1768.12 001CB0 ENDIF
1768.13 001CB0 ENDM
1769 001CB0 0000 DW 0x0
1770 001CB2
1771 001CB2 ;C TABLE -- create an empty definition
pointing to FLASH
1772 001CB2 ; HEADER
1773 001CB2 ; docreate ,CF code field
1774 001CB2 ; IHERE I, ; store data adr
(Harvard)
1775 001CB2 ; Harvard model, separate Code and Data
spaces.
1776 001CB2 ; Separate headers model.
1777 001CB2 ; or do this (4e4th):
1778 001CB2 ; : TABLE @
;
1779 001CB2 HEADER TABLE,5,'TABLE',DOCOLON
1779.1 000000 PUBLIC TABLE
1779.2 001CB2 .... DW link
1779.3 001CB4 FF DB 0FFh ; not immediate
1779.4 001CB5 link SET $
1779.5 001CB5 05 DB 5
1779.6 001CB6 5441424C45 DB 'TABLE'
1779.7 001CBB 00 EVEN
1779.8 001CBC IF 'DOCOLON'='DOCODE'
1779.9 001CBC TABLE: DW $+2
1779.10 001CBC ELSE
1779.11 001CBC .... TABLE: DW DOCOLON
1779.12 001CBE ENDIF
1779.13 001CBE ENDM
1780 001CBE .... DW HEADR
1781 001CC0 ............ DW lit,docreate,COMMACF
1782 001CC6 ............* DW IHERE,CELL,PLUS,ICOMMA,EXIT
1783 001CD0
1784 001CD0
- 4e-configLP - Page 135
1785 001CD0 ;U Bit manipulation words ----------------------
--------------------------------
1786 001CD0 ; based on http://www.forth.org/svfig/Len/bits.
htm
1787 001CD0
1788 001CD0 ;U SET mask addr -- set bit from mask in
addr (cell); use even adr!
1789 001CD0 HEADER wset,3,'SET',DOCODE
1789.1 000000 PUBLIC wset
1789.2 001CD0 .... DW link
1789.3 001CD2 FF DB 0FFh ; not immediate
1789.4 001CD3 link SET $
1789.5 001CD3 03 DB 3
1789.6 001CD4 534554 DB 'SET'
1789.7 001CD7 00 EVEN
1789.8 001CD8 IF 'DOCODE'='DOCODE'
1789.9 001CD8 .... wset: DW $+2
1789.10 001CDA ELSE
1789.11 001CDA wset: DW DOCODE
1789.12 001CDA ENDIF
1789.13 001CDA ENDM
1790 001CDA A7D40000 BIS @PSP,0(TOS)
1791 001CDE 2453 ADD #2,PSP
1792 001CE0 3744 MOV @PSP+,TOS
1793 001CE2 NEXT
1793.1 001CE2 3645 MOV @IP+,W // ; fetch word address
into W
1793.2 001CE4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1793.3 001CE6 ENDM
1794 001CE6
1795 001CE6 ;U CSET mask addr -- set bit from mask
in addr (byte)
1796 001CE6 HEADER cset,4,'CSET',DOCODE
1796.1 000000 PUBLIC cset
1796.2 001CE6 .... DW link
1796.3 001CE8 FF DB 0FFh ; not immediate
1796.4 001CE9 link SET $
1796.5 001CE9 04 DB 4
1796.6 001CEA 43534554 DB 'CSET'
1796.7 001CEE EVEN
1796.8 001CEE IF 'DOCODE'='DOCODE'
1796.9 001CEE .... cset: DW $+2
1796.10 001CF0 ELSE
1796.11 001CF0 cset: DW DOCODE
1796.12 001CF0 ENDIF
1796.13 001CF0 ENDM
1797 001CF0 E7D40000 BIS.B @PSP,0(TOS)
1798 001CF4 2453 ADD #2,PSP
1799 001CF6 3744 MOV @PSP+,TOS
1800 001CF8 NEXT
1800.1 001CF8 3645 MOV @IP+,W // ; fetch word address
into W
1800.2 001CFA 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1800.3 001CFC ENDM
1801 001CFC
1802 001CFC ;U CLR mask addr -- reset bit from mask in
addr (cell); use even adr!
1803 001CFC HEADER wclr,3,'CLR',DOCODE
1803.1 000000 PUBLIC wclr
1803.2 001CFC .... DW link
1803.3 001CFE FF DB 0FFh ; not immediate
1803.4 001CFF link SET $
1803.5 001CFF 03 DB 3
1803.6 001D00 434C52 DB 'CLR'
1803.7 001D03 00 EVEN
1803.8 001D04 IF 'DOCODE'='DOCODE'
1803.9 001D04 .... wclr: DW $+2
1803.10 001D06 ELSE
1803.11 001D06 wclr: DW DOCODE
1803.12 001D06 ENDIF
1803.13 001D06 ENDM
1804 001D06 A7C40000 BIC @PSP,0(TOS)
1805 001D0A 2453 ADD #2,PSP
1806 001D0C 3744 MOV @PSP+,TOS
1807 001D0E NEXT
1807.1 001D0E 3645 MOV @IP+,W // ; fetch word address
- 4e-configLP - Page 136
into W
1807.2 001D10 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1807.3 001D12 ENDM
1808 001D12
1809 001D12 ;U CCLR mask addr -- reset bit from mask
in addr (byte)
1810 001D12 HEADER cclr,4,'CCLR',DOCODE
1810.1 000000 PUBLIC cclr
1810.2 001D12 .... DW link
1810.3 001D14 FF DB 0FFh ; not immediate
1810.4 001D15 link SET $
1810.5 001D15 04 DB 4
1810.6 001D16 43434C52 DB 'CCLR'
1810.7 001D1A EVEN
1810.8 001D1A IF 'DOCODE'='DOCODE'
1810.9 001D1A .... cclr: DW $+2
1810.10 001D1C ELSE
1810.11 001D1C cclr: DW DOCODE
1810.12 001D1C ENDIF
1810.13 001D1C ENDM
1811 001D1C E7C40000 BIC.B @PSP,0(TOS)
1812 001D20 2453 ADD #2,PSP
1813 001D22 3744 MOV @PSP+,TOS
1814 001D24 NEXT
1814.1 001D24 3645 MOV @IP+,W // ; fetch word address
into W
1814.2 001D26 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1814.3 001D28 ENDM
1815 001D28
1816 001D28 ;U CTOGGLE mask addr -- flip bit from
mask in addr (byte)
1817 001D28 HEADER ctoggle,7,'CTOGGLE',DOCODE
1817.1 000000 PUBLIC ctoggle
1817.2 001D28 .... DW link
1817.3 001D2A FF DB 0FFh ; not immediate
1817.4 001D2B link SET $
1817.5 001D2B 07 DB 7
1817.6 001D2C 43544F47474C* DB 'CTOGGLE'
1817.7 001D33 00 EVEN
1817.8 001D34 IF 'DOCODE'='DOCODE'
1817.9 001D34 .... ctoggle: DW $+2
1817.10 001D36 ELSE
1817.11 001D36 ctoggle: DW DOCODE
1817.12 001D36 ENDIF
1817.13 001D36 ENDM
1818 001D36 E7E40000 XOR.B @PSP,0(TOS)
1819 001D3A 2453 ADD #2,PSP
1820 001D3C 3744 MOV @PSP+,TOS
1821 001D3E NEXT
1821.1 001D3E 3645 MOV @IP+,W // ; fetch word address
into W
1821.2 001D40 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1821.3 001D42 ENDM
1822 001D42
1823 001D42 ;U CGET mask addr -- flag test bit from
mask in addr (byte)
1824 001D42 HEADER cget,4,'CGET',DOCODE
1824.1 000000 PUBLIC cget
1824.2 001D42 .... DW link
1824.3 001D44 FF DB 0FFh ; not immediate
1824.4 001D45 link SET $
1824.5 001D45 04 DB 4
1824.6 001D46 43474554 DB 'CGET'
1824.7 001D4A EVEN
1824.8 001D4A IF 'DOCODE'='DOCODE'
1824.9 001D4A .... cget: DW $+2
1824.10 001D4C ELSE
1824.11 001D4C cget: DW DOCODE
1824.12 001D4C ENDIF
1824.13 001D4C ENDM
1825 001D4C E7B40000 BIT.B @PSP,0(TOS)
1826 001D50 0224 JZ cget1
1827 001D52 3743 MOV #-1,TOS
1828 001D54 013C JMP cget2
1829 001D56 0743 cget1:MOV #0, TOS
- 4e-configLP - Page 137
1830 001D58 2453 cget2:ADD #2,PSP
1831 001D5A NEXT
1831.1 001D5A 3645 MOV @IP+,W // ; fetch word address
into W
1831.2 001D5C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1831.3 001D5E ENDM
1832 001D5E
1833 001D5E
1834 001D5E ;U Memory infos --------------------------------
---------------------------------
1835 001D5E
1836 001D5E /* see also: XLINK configuration file for
MSP430G2553
1837 001D5E ram =: 0200-03FF
1838 001D5E 0200-03C9 forth system; userarea, stacks,
tib, pad ...
1839 001D5E 03CA-03FF VARAREA for forth variables;
check UNUSED ram.
1840 001D5E
1841 001D5E flash =: C000-FFFF
1842 001D5E C000-D7FF MEMBOT to MEMTOP is user flash.
Check unsused MEM.
1843 001D5E D800-FDFF kernel (may differ with type of
board and system loaded)
1844 001D5E FE00-FFFF INTSEG
1845 001D5E FFE0-FFFF INTVEC
1846 001D5E FFFE-FFFF RESET
1847 001D5E */
1848 001D5E
1849 000000 EXTERN resetvec
1850 001D5E ;Z RESETADR -- adr reset vector
address
1851 001D5E HEADER RESETADR,8,'RESETADR',DOCON
1851.1 000000 PUBLIC RESETADR
1851.2 001D5E .... DW link
1851.3 001D60 FF DB 0FFh ; not immediate
1851.4 001D61 link SET $
1851.5 001D61 08 DB 8
1851.6 001D62 524553455441* DB 'RESETADR'
1851.7 001D6A EVEN
1851.8 001D6A IF 'DOCON'='DOCODE'
1851.9 001D6A RESETADR: DW $+2
1851.10 001D6A ELSE
1851.11 001D6A .... RESETADR: DW DOCON
1851.12 001D6C ENDIF
1851.13 001D6C ENDM
1852 001D6C .... DW resetvec
1853 001D6E
1854 001D6E ;Z MEMBOT -- adr begining of USERflash
1855 001D6E HEADER MEMBOT,6,'MEMBOT',DOCON
1855.1 000000 PUBLIC MEMBOT
1855.2 001D6E .... DW link
1855.3 001D70 FF DB 0FFh ; not immediate
1855.4 001D71 link SET $
1855.5 001D71 06 DB 6
1855.6 001D72 4D454D424F54 DB 'MEMBOT'
1855.7 001D78 EVEN
1855.8 001D78 IF 'DOCON'='DOCODE'
1855.9 001D78 MEMBOT: DW $+2
1855.10 001D78 ELSE
1855.11 001D78 .... MEMBOT: DW DOCON
1855.12 001D7A ENDIF
1855.13 001D7A ENDM
1856 001D7A 00C0 DW USERFLASHSTART
1857 001D7C
1858 001D7C ;Z MEMTOP -- adr end of USERflash
1859 001D7C HEADER MEMTOP,6,'MEMTOP',DOCON
1859.1 000000 PUBLIC MEMTOP
1859.2 001D7C .... DW link
1859.3 001D7E FF DB 0FFh ; not immediate
1859.4 001D7F link SET $
1859.5 001D7F 06 DB 6
1859.6 001D80 4D454D544F50 DB 'MEMTOP'
1859.7 001D86 EVEN
1859.8 001D86 IF 'DOCON'='DOCODE'
- 4e-configLP - Page 138
1859.9 001D86 MEMTOP: DW $+2
1859.10 001D86 ELSE
1859.11 001D86 .... MEMTOP: DW DOCON
1859.12 001D88 ENDIF
1859.13 001D88 ENDM
1860 001D88 FFD7 DW USERFLASHEND
1861 001D8A
1862 001D8A ;U MEM -- u bytes left in flash
1863 001D8A ; memtop ihere - ;
1864 001D8A HEADER MEM,3,'MEM',DOCOLON
1864.1 000000 PUBLIC MEM
1864.2 001D8A .... DW link
1864.3 001D8C FF DB 0FFh ; not immediate
1864.4 001D8D link SET $
1864.5 001D8D 03 DB 3
1864.6 001D8E 4D454D DB 'MEM'
1864.7 001D91 00 EVEN
1864.8 001D92 IF 'DOCOLON'='DOCODE'
1864.9 001D92 MEM: DW $+2
1864.10 001D92 ELSE
1864.11 001D92 .... MEM: DW DOCOLON
1864.12 001D94 ENDIF
1864.13 001D94 ENDM
1865 001D94 ............ DW MEMTOP,IHERE,MINUS
1866 001D9A .... DW EXIT
1867 001D9C
1868 001D9C ;U UNUSED -- u bytes left in RAM
1869 001D9C HEADER UNUSED,6,'UNUSED',DOCOLON
1869.1 000000 PUBLIC UNUSED
1869.2 001D9C .... DW link
1869.3 001D9E FF DB 0FFh ; not immediate
1869.4 001D9F link SET $
1869.5 001D9F 06 DB 6
1869.6 001DA0 554E55534544 DB 'UNUSED'
1869.7 001DA6 EVEN
1869.8 001DA6 IF 'DOCOLON'='DOCODE'
1869.9 001DA6 UNUSED: DW $+2
1869.10 001DA6 ELSE
1869.11 001DA6 .... UNUSED: DW DOCOLON
1869.12 001DA8 ENDIF
1869.13 001DA8 ENDM
1870 001DA8 ....0004....* DW lit,RAMEND,HERE,MINUS
1871 001DB0 .... DW EXIT
1872 001DB2
1873 001DB2 ;Z VARBOT -- a-addr bottom of Variable
Area
1874 001DB2 HEADER VARBOT,6,'VARBOT',DOCON
1874.1 000000 PUBLIC VARBOT
1874.2 001DB2 .... DW link
1874.3 001DB4 FF DB 0FFh ; not immediate
1874.4 001DB5 link SET $
1874.5 001DB5 06 DB 6
1874.6 001DB6 564152424F54 DB 'VARBOT'
1874.7 001DBC EVEN
1874.8 001DBC IF 'DOCON'='DOCODE'
1874.9 001DBC VARBOT: DW $+2
1874.10 001DBC ELSE
1874.11 001DBC .... VARBOT: DW DOCON
1874.12 001DBE ENDIF
1874.13 001DBE ENDM
1875 001DBE .... DW VARAREA
1876 001DC0
1877 000000 EXTERN intseg,intvecs
1878 001DC0 ;Z TOPSEG -- a-addr bottom of top most
segment
1879 001DC0 HEADER TOPSEG,6,'TOPSEG',DOCON
1879.1 000000 PUBLIC TOPSEG
1879.2 001DC0 .... DW link
1879.3 001DC2 FF DB 0FFh ; not immediate
1879.4 001DC3 link SET $
1879.5 001DC3 06 DB 6
1879.6 001DC4 544F50534547 DB 'TOPSEG'
1879.7 001DCA EVEN
1879.8 001DCA IF 'DOCON'='DOCODE'
1879.9 001DCA TOPSEG: DW $+2
1879.10 001DCA ELSE
1879.11 001DCA .... TOPSEG: DW DOCON
1879.12 001DCC ENDIF
- 4e-configLP - Page 139
1879.13 001DCC ENDM
1880 001DCC .... DW intseg
1881 001DCE
1882 001DCE ;Z VECBOT -- a-addr begining of vector
segment
1883 001DCE HEADER VECBOT,6,'VECBOT',DOCON
1883.1 000000 PUBLIC VECBOT
1883.2 001DCE .... DW link
1883.3 001DD0 FF DB 0FFh ; not immediate
1883.4 001DD1 link SET $
1883.5 001DD1 06 DB 6
1883.6 001DD2 564543424F54 DB 'VECBOT'
1883.7 001DD8 EVEN
1883.8 001DD8 IF 'DOCON'='DOCODE'
1883.9 001DD8 VECBOT: DW $+2
1883.10 001DD8 ELSE
1883.11 001DD8 .... VECBOT: DW DOCON
1883.12 001DDA ENDIF
1883.13 001DDA ENDM
1884 001DDA .... DW intvecs
1885 001DDC
1886 001DDC
1887 001DDC ;U ? adr -- u display content of
variable
1888 001DDC ; @ u. ;
1889 001DDC HEADER QQ,1,'?',DOCOLON
1889.1 000000 PUBLIC QQ
1889.2 001DDC .... DW link
1889.3 001DDE FF DB 0FFh ; not immediate
1889.4 001DDF link SET $
1889.5 001DDF 01 DB 1
1889.6 001DE0 3F DB '?'
1889.7 001DE1 00 EVEN
1889.8 001DE2 IF 'DOCOLON'='DOCODE'
1889.9 001DE2 QQ: DW $+2
1889.10 001DE2 ELSE
1889.11 001DE2 .... QQ: DW DOCOLON
1889.12 001DE4 ENDIF
1889.13 001DE4 ENDM
1890 001DE4 ........ DW FETCH,UDOT
1891 001DE8 .... DW EXIT
1892 001DEA
1893 001DEA
1894 001DEA
1895 001DEA ; Note: the first character sent from the MSP430
seems to get
1896 001DEA ; scrambled. I conjecture this is because the
baud rate generator
1897 001DEA ; has not reset to the new rate when we attempt
to send a character.
1898 001DEA ; See init430f1611.s43 for delay after
initialization.
1899 001DEA
1900 001DEA ; EOF
31 001DEA #include "4e-startup.s43"
1 001DEA ;U STARTUP WORDS ===============================
================================
2 001DEA
3 001DEA ;U .BOOTVERSION -- print boot version
4 001DEA HEADLESS DOTBOOTVERSION,DOCOLON
4.1 000000 PUBLIC DOTBOOTVERSION
4.2 001DEA IF 'DOCOLON'='DOCODE'
4.3 001DEA DOTBOOTVERSION: DW $+2
4.4 001DEA ELSE
4.5 001DEA .... DOTBOOTVERSION: DW DOCOLON
4.6 001DEC ENDIF
4.7 001DEC ENDM
5 001DEC .... DW XISQUOTE
6 001DEE 07 DB (doboot1-doboot0)
7 001DEF 206465627567*doboot0: DB ' debug '
8 001DF6 EVEN
9 001DF6 .... doboot1: DW ITYPE
10 001DF8 .... DW EXIT
11 001DFA
12 001DFA ;Z ITHERE -- adr find first free flash
cell
13 001DFA ; MEMTOP BEGIN 1-
- 4e-configLP - Page 140
14 001DFA ; DUP C@ FF <>
15 001DFA ; OVER FL0 < OR UNTIL 1+ ;
16 001DFA HEADER ITHERE,6,'ITHERE',DOCOLON
16.1 000000 PUBLIC ITHERE
16.2 001DFA .... DW link
16.3 001DFC FF DB 0FFh ; not immediate
16.4 001DFD link SET $
16.5 001DFD 06 DB 6
16.6 001DFE 495448455245 DB 'ITHERE'
16.7 001E04 EVEN
16.8 001E04 IF 'DOCOLON'='DOCODE'
16.9 001E04 ITHERE: DW $+2
16.10 001E04 ELSE
16.11 001E04 .... ITHERE: DW DOCOLON
16.12 001E06 ENDIF
16.13 001E06 ENDM
17 001E06 .... DW MEMTOP
18 001E08 ............*ih1 DW ONEMINUS,DUP,CFETCH,lit,$FF,NOTEQUAL
19 001E14 ............* DW OVER,MEMBOT,LESS,ORR,qbran
20 001E1E DEST ih1
20.1 001E1E EAFF DW ih1-$
20.2 001E20 ENDM
21 001E20 ........ DW ONEPLUS,EXIT
22 001E24
23 001E24 ;U APPCRC -- crc CRC of APP-dictionary
24 001E24 ; 0 MEMBOT ITHERE OVER - (crc APPU0 #INIT
(crc ;
25 001E24 ; HEADER APPCRC,6,'APPCRC',DOCOLON
26 001E24 HEADLESS APPCRC,DOCOLON
26.1 000000 PUBLIC APPCRC
26.2 001E24 IF 'DOCOLON'='DOCODE'
26.3 001E24 APPCRC: DW $+2
26.4 001E24 ELSE
26.5 001E24 .... APPCRC: DW DOCOLON
26.6 001E26 ENDIF
26.7 001E26 ENDM
27 001E26 ....0000 DW lit,0
28 001E2A ............* DW MEMBOT,ITHERE,OVER,MINUS,CRC
29 001E34 ............* DW APPU0,NINIT,CRC,EXIT
30 001E3C
31 000000 EXTERN crcval
32 001E3C
33 001E3C ;U VALID? -- f check if user app crc
matches infoB
34 001E3C ; APPCRC crcval I@ = ;
35 001E3C ; HEADER VALIDQ,6,'VALID?',DOCOLON
36 001E3C HEADLESS VALIDQ,DOCOLON
36.1 000000 PUBLIC VALIDQ
36.2 001E3C IF 'DOCOLON'='DOCODE'
36.3 001E3C VALIDQ: DW $+2
36.4 001E3C ELSE
36.5 001E3C .... VALIDQ: DW DOCOLON
36.6 001E3E ENDIF
36.7 001E3E ENDM
37 001E3E ............* DW APPCRC,lit,crcval,IFETCH,EQUAL,EXIT
38 001E4A
39 001E4A ;U SAVE -- save user area to infoB
40 001E4A ; InfoB [ 63 2 + ] Literal FLERASE
41 001E4A ; U0 APPU0 #INIT D->I
42 001E4A ; APPCRC [ crcval ] Literal I! ;
43 001E4A HEADER SAVE,4,'SAVE',DOCOLON
43.1 000000 PUBLIC SAVE
43.2 001E4A .... DW link
43.3 001E4C FF DB 0FFh ; not immediate
43.4 001E4D link SET $
43.5 001E4D 04 DB 4
43.6 001E4E 53415645 DB 'SAVE'
43.7 001E52 EVEN
43.8 001E52 IF 'DOCOLON'='DOCODE'
43.9 001E52 SAVE: DW $+2
43.10 001E52 ELSE
43.11 001E52 .... SAVE: DW DOCOLON
43.12 001E54 ENDIF
43.13 001E54 ENDM
44 001E54 ; save user area to infoB
45 001E54 ........4100* DW INFOB,lit,63+2,FLERASE
46 001E5C ............* DW U0,APPU0,NINIT,DTOI
47 001E64 ............* DW APPCRC,lit,crcval,ISTORE
- 4e-configLP - Page 141
48 001E6C ; save variable area to infoC
49 001E6C ........4100* DW INFOC,lit,63+2,FLERASE
50 001E74 ............* DW HERE,UNUSED,ZERO,FILL
51 001E7C ............* DW VARBOT,INFOC,lit,(VAR_SIZE)*2,DTOI
52 001E86 .... DW EXIT
53 001E88
54 00018E CORREST EQU 018Eh
55 000186 CORPOWERON EQU 0186h
56 001E88
57 001E88 ;Z BOOT -- boot system
58 001E88 HEADER BOOT,4,'BOOT',DOCOLON
58.1 000000 PUBLIC BOOT
58.2 001E88 .... DW link
58.3 001E8A FF DB 0FFh ; not immediate
58.4 001E8B link SET $
58.5 001E8B 04 DB 4
58.6 001E8C 424F4F54 DB 'BOOT'
58.7 001E90 EVEN
58.8 001E90 IF 'DOCOLON'='DOCODE'
58.9 001E90 BOOT: DW $+2
58.10 001E90 ELSE
58.11 001E90 .... BOOT: DW DOCOLON
58.12 001E92 ENDIF
58.13 001E92 ENDM
59 001E92 ............ DW S2,cget,qbran
60 001E98 DEST boot1
60.1 001E98 2800 DW boot1-$
60.2 001E9A ENDM
61 001E9A ........ DW VALIDQ,qbran
62 001E9E DEST invalid
62.1 001E9E 0400 DW invalid-$
62.2 001EA0 ENDM
63 001EA0 .... valid: DW COLD ; valid infoB and dictionary
64 001EA2 ............*invalid:DW COR,FETCH,lit,CORPOWERON,NOTEQUAL,qbr
an
65 001EAE DEST boot1
65.1 001EAE 1200 DW boot1-$
65.2 001EB0 ENDM
66 001EB0 reset1: ; reset and invalid infoB
67 001EB0 ............* DW LATEST,FETCH,MEMBOT,ITHERE,WITHIN,qbr
an ; check RAM latest
68 001EBC DEST boot1
68.1 001EBC 0400 DW boot1-$
68.2 001EBE ENDM
69 001EBE .... DW WARM ; invalid infoB but seemingly
valid RAM
70 001EC0 .... boot1: DW WIPE ; invalid infoB but power on
or RAM invalid
71 001EC2
72 000000 PUBLIC BOOTIP ; used to init IP register.
73 001EC2 BOOTIP equ BOOT+2
74 001EC2
75 001EC2 ;Z WARM -- use user area from RAM
(hopefully intact)
76 001EC2 HEADER WARM,4,'WARM',DOCOLON
76.1 000000 PUBLIC WARM
76.2 001EC2 .... DW link
76.3 001EC4 FF DB 0FFh ; not immediate
76.4 001EC5 link SET $
76.5 001EC5 04 DB 4
76.6 001EC6 5741524D DB 'WARM'
76.7 001ECA EVEN
76.8 001ECA IF 'DOCOLON'='DOCODE'
76.9 001ECA WARM: DW $+2
76.10 001ECA ELSE
76.11 001ECA .... WARM: DW DOCOLON
76.12 001ECC ENDIF
76.13 001ECC ENDM
77 001ECC .... DW XISQUOTE
78 001ECE 05 DB (warm1-warm0)
79 001ECF 5761726D warm0: DB 'Warm'
80 001ED3 00 EVEN
81 001ED4 .... warm1: DW ITYPE
82 001ED6 .... DW ABORT
83 001ED8
84 001ED8 ;U .COLD -- display COLD message
85 001ED8 HEADLESS DOTCOLD,DOCOLON
- 4e-configLP - Page 142
85.1 000000 PUBLIC DOTCOLD
85.2 001ED8 IF 'DOCOLON'='DOCODE'
85.3 001ED8 DOTCOLD: DW $+2
85.4 001ED8 ELSE
85.5 001ED8 .... DOTCOLD: DW DOCOLON
85.6 001EDA ENDIF
85.7 001EDA ENDM
86 001EDA .... DW XISQUOTE
87 001EDC 05 DB (dotcold1-dotcold0)
88 001EDD 436F6C64 dotcold0:DB 'Cold'
89 001EE1 00 EVEN
90 001EE2 .... dotcold1:DW ITYPE
91 001EE4 .... DW EXIT
92 001EE6
93 001EE6 PUBLIC DOTCOLD
94 001EE6
95 001EE6 ;Z COLD -- set user area to latest
application
96 001EE6 HEADER COLD,4,'COLD',DOCOLON
96.1 000000 PUBLIC COLD
96.2 001EE6 .... DW link
96.3 001EE8 FF DB 0FFh ; not immediate
96.4 001EE9 link SET $
96.5 001EE9 04 DB 4
96.6 001EEA 434F4C44 DB 'COLD'
96.7 001EEE EVEN
96.8 001EEE IF 'DOCOLON'='DOCODE'
96.9 001EEE COLD: DW $+2
96.10 001EEE ELSE
96.11 001EEE .... COLD: DW DOCOLON
96.12 001EF0 ENDIF
96.13 001EF0 ENDM
97 001EF0 ............* DW APPU0,U0,NINIT,ITOD ; use application
user area
98 001EF8 ............* DW INFOC,VARBOT,lit,0x20,ITOD ; use
applicatio
n variable
area
99 001F02 ............ DW APP,FETCH,EXECUTE ; AUTOSTART
Application
100 001F08 .... DW ABORT
101 001F0A
102 000000 PUBLIC COLDIP ; used to init IP register while
testing.
103 001F0A COLDIP equ COLD+2
104 001F0A
105 001F0A ;Z FACTORY -- set user area to plain
kernel
106 001F0A ; UINIT U0 #INIT I->D SAVE init user
area
107 001F0A ; ABORT ;
108 001F0A HEADER FACTORY,7,'FACTORY',DOCOLON
108.1 000000 PUBLIC FACTORY
108.2 001F0A .... DW link
108.3 001F0C FF DB 0FFh ; not immediate
108.4 001F0D link SET $
108.5 001F0D 07 DB 7
108.6 001F0E 464143544F52* DB 'FACTORY'
108.7 001F15 00 EVEN
108.8 001F16 IF 'DOCOLON'='DOCODE'
108.9 001F16 FACTORY: DW $+2
108.10 001F16 ELSE
108.11 001F16 .... FACTORY: DW DOCOLON
108.12 001F18 ENDIF
108.13 001F18 ENDM
109 001F18 ............* DW UINIT,U0,NINIT,ITOD ; store kernel
user area
table to user
area
110 001F20 ............* DW VARBOT,lit,(VAR_SIZE)*2,ZERO,FILL ;
set variables to ZERO
111 001F2A .... DW SAVE
112 001F2C .... DW DOTVER
113 001F2E .... DW EXIT
114 001F30
115 000000 PUBLIC FACTORYIP ; used to init IP register.
116 001F30 FACTORYIP equ FACTORY+2
117 001F30
- 4e-configLP - Page 143
118 001F30
119 001F30 ;U PROFUSE -- adr address of production
fuse.
120 001F30 ; constant PROFUSEADR
121 001F30 HEADER PROFUSEADR,7,'PROFUSE',DOCON
121.1 000000 PUBLIC PROFUSEADR
121.2 001F30 .... DW link
121.3 001F32 FF DB 0FFh ; not immediate
121.4 001F33 link SET $
121.5 001F33 07 DB 7
121.6 001F34 50524F465553* DB 'PROFUSE'
121.7 001F3B 00 EVEN
121.8 001F3C IF 'DOCON'='DOCODE'
121.9 001F3C PROFUSEADR: DW $+2
121.10 001F3C ELSE
121.11 001F3C .... PROFUSEADR: DW DOCON
121.12 001F3E ENDIF
121.13 001F3E ENDM
122 001F3E .... DW PROFUSE
123 001F40
124 001F40 ;U 4E4THPRO -- save app and blow
production fuse.
125 001F40 ; SAVE ZERO PROFUSEADR VEC! ;
126 001F40 HEADER FORTHPRO,8,'4E4THPRO',DOCOLON
126.1 000000 PUBLIC FORTHPRO
126.2 001F40 .... DW link
126.3 001F42 FF DB 0FFh ; not immediate
126.4 001F43 link SET $
126.5 001F43 08 DB 8
126.6 001F44 344534544850* DB '4E4THPRO'
126.7 001F4C EVEN
126.8 001F4C IF 'DOCOLON'='DOCODE'
126.9 001F4C FORTHPRO: DW $+2
126.10 001F4C ELSE
126.11 001F4C .... FORTHPRO: DW DOCOLON
126.12 001F4E ENDIF
126.13 001F4E ENDM
127 001F4E ............* DW SAVE,ZERO,PROFUSEADR,VECSTORE
128 001F56 .... DW EXIT
129 001F58
130 001F58 ;U WIPE -- erase flash but not
kernel, reset user area.
131 001F58 ; PROFUSEADR @ IF WIPE ELSE COLD TEHN ;
132 001F58 HEADER WIPE,4,'WIPE',DOCOLON
132.1 000000 PUBLIC WIPE
132.2 001F58 .... DW link
132.3 001F5A FF DB 0FFh ; not immediate
132.4 001F5B link SET $
132.5 001F5B 04 DB 4
132.6 001F5C 57495045 DB 'WIPE'
132.7 001F60 EVEN
132.8 001F60 IF 'DOCOLON'='DOCODE'
132.9 001F60 WIPE: DW $+2
132.10 001F60 ELSE
132.11 001F60 .... WIPE: DW DOCOLON
132.12 001F62 ENDIF
132.13 001F62 ENDM
133 001F62 ............ DW PROFUSEADR,FETCH,qbran
134 001F68 DEST wipe1
134.1 001F68 0400 DW wipe1-$
134.2 001F6A ENDM
135 001F6A .... DW PARENWIPE
136 001F6C .... wipe1: DW COLD
137 001F6E
138 001F6E ;U (WIPE) -- erase flash but not kernel,
reset user area.
139 001F6E ; MEMBOT USERMEM FLERASE
140 001F6E ; FACTORY ." Wiped" ABORT ;
141 001F6E HEADER PARENWIPE,6,'(WIPE)',DOCOLON
141.1 000000 PUBLIC PARENWIPE
141.2 001F6E .... DW link
141.3 001F70 FF DB 0FFh ; not immediate
141.4 001F71 link SET $
141.5 001F71 06 DB 6
141.6 001F72 285749504529 DB '(WIPE)'
141.7 001F78 EVEN
141.8 001F78 IF 'DOCOLON'='DOCODE'
141.9 001F78 PARENWIPE: DW $+2
- 4e-configLP - Page 144
141.10 001F78 ELSE
141.11 001F78 .... PARENWIPE: DW DOCOLON
141.12 001F7A ENDIF
141.13 001F7A ENDM
142 001F7A ........0018* DW MEMBOT,lit,USERFLASHEND-USERFLASHSTAR
T+1,FLERASE
143 001F82 .... DW FACTORY
144 001F84 .... DW XISQUOTE
145 001F86 07 DB (wipmsg1-wipmsg0)
146 001F87 205769706564 wipmsg0:DB ' Wiped'
147 001F8D 00 EVEN
148 001F8E .... wipmsg1:DW ITYPE
149 001F90 .... DW ABORT ; ABORT never returns
150 001F92
151 001F92 ; finis
32 001F92
33 001F92 #include "4e-MSP430G2553.s43"
1 001F92 ;U MCU specific words - MSP430G2553 ============
==========================
2 001F92
3 001F92 /*
4 001F92 ; .ID -- Print MCU identifier.
5 001F92 HEADER DOTID,3,'.ID',DOCOLON
6 001F92 DW lit,id,COUNT,ITYPE
7 001F92 DW EXIT
8 001F92 */
9 001F92
10 001F92 ;U 1MS -- wait about 1 millisecond
11 001F92 ; xx 0 DO yy 0 DO LOOP LOOP ; adjust xx and yy
to get a msec.
12 001F92 HEADER ONEMS,3,'1MS',DOCOLON
12.1 000000 PUBLIC ONEMS
12.2 001F92 .... DW link
12.3 001F94 FF DB 0FFh ; not immediate
12.4 001F95 link SET $
12.5 001F95 03 DB 3
12.6 001F96 314D53 DB '1MS'
12.7 001F99 00 EVEN
12.8 001F9A IF 'DOCOLON'='DOCODE'
12.9 001F9A ONEMS: DW $+2
12.10 001F9A ELSE
12.11 001F9A .... ONEMS: DW DOCOLON
12.12 001F9C ENDIF
12.13 001F9C ENDM
13 001F9C ....2900....* DW lit,41,ZERO,xdo
14 001FA4 ....0B00....*onems1: DW lit,11,ZERO,xdo
15 001FAC .... onems2: DW xloop
16 001FAE DEST onems2
16.1 001FAE FEFF DW onems2-$
16.2 001FB0 ENDM
17 001FB0 .... DW xloop
18 001FB2 DEST onems1
18.1 001FB2 F2FF DW onems1-$
18.2 001FB4 ENDM
19 001FB4 .... DW EXIT
20 001FB6
21 001FB6 ;U MS n -- wait about n
milliseconds
22 001FB6 ; 0 DO 1MS LOOP ;
23 001FB6 HEADER MS,2,'MS',DOCOLON
23.1 000000 PUBLIC MS
23.2 001FB6 .... DW link
23.3 001FB8 FF DB 0FFh ; not immediate
23.4 001FB9 link SET $
23.5 001FB9 02 DB 2
23.6 001FBA 4D53 DB 'MS'
23.7 001FBC EVEN
23.8 001FBC IF 'DOCOLON'='DOCODE'
23.9 001FBC MS: DW $+2
23.10 001FBC ELSE
23.11 001FBC .... MS: DW DOCOLON
23.12 001FBE ENDIF
23.13 001FBE ENDM
24 001FBE ........ DW ZERO,xdo
25 001FC2 ........ ms1: DW ONEMS,xloop
26 001FC6 DEST ms1
26.1 001FC6 FCFF DW ms1-$
- 4e-configLP - Page 145
26.2 001FC8 ENDM
27 001FC8 .... DW EXIT
28 001FCA
29 001FCA ;U MCU Peripherie ------------------------------
--------------------------------
30 001FCA
31 001FCA ;Z P1 -- adr address of port1 output
register
32 001FCA HEADER P1,2,'P1',DOCON
32.1 000000 PUBLIC P1
32.2 001FCA .... DW link
32.3 001FCC FF DB 0FFh ; not immediate
32.4 001FCD link SET $
32.5 001FCD 02 DB 2
32.6 001FCE 5031 DB 'P1'
32.7 001FD0 EVEN
32.8 001FD0 IF 'DOCON'='DOCODE'
32.9 001FD0 P1: DW $+2
32.10 001FD0 ELSE
32.11 001FD0 .... P1: DW DOCON
32.12 001FD2 ENDIF
32.13 001FD2 ENDM
33 001FD2 2100 DW P1OUT
34 001FD4
35 001FD4 ;Z P2 -- adr address of port2 output
register
36 001FD4 HEADER P2,2,'P2',DOCON
36.1 000000 PUBLIC P2
36.2 001FD4 .... DW link
36.3 001FD6 FF DB 0FFh ; not immediate
36.4 001FD7 link SET $
36.5 001FD7 02 DB 2
36.6 001FD8 5032 DB 'P2'
36.7 001FDA EVEN
36.8 001FDA IF 'DOCON'='DOCODE'
36.9 001FDA P2: DW $+2
36.10 001FDA ELSE
36.11 001FDA .... P2: DW DOCON
36.12 001FDC ENDIF
36.13 001FDC ENDM
37 001FDC 2900 DW P2OUT
38 001FDE
39 001FDE ;Z P3 -- adr address of port2 output
register
40 001FDE HEADER P3,2,'P3',DOCON
40.1 000000 PUBLIC P3
40.2 001FDE .... DW link
40.3 001FE0 FF DB 0FFh ; not immediate
40.4 001FE1 link SET $
40.5 001FE1 02 DB 2
40.6 001FE2 5033 DB 'P3'
40.7 001FE4 EVEN
40.8 001FE4 IF 'DOCON'='DOCODE'
40.9 001FE4 P3: DW $+2
40.10 001FE4 ELSE
40.11 001FE4 .... P3: DW DOCON
40.12 001FE6 ENDIF
40.13 001FE6 ENDM
41 001FE6 1900 DW P3OUT
42 001FE8
43 001FE8 ; finis
34 001FE8 #include "4e-LaunchPad.s43"
1 001FE8 ; ----------------------------------------------
------------------------
2 001FE8 ; 4e4th is a Forth based on CamelForth
3 001FE8 ; for the Texas Instruments MSP430
4 001FE8 ;
5 001FE8 ; This program is free software; you can
redistribute it and/or modify
6 001FE8 ; it under the terms of the GNU General Public
License as published by
7 001FE8 ; the Free Software Foundation; either version 3
of the License, or
8 001FE8 ; (at your option) any later version.
9 001FE8 ;
10 001FE8 ; This program is distributed in the hope that
it will be useful,
- 4e-configLP - Page 146
11 001FE8 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 001FE8 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 001FE8 ; GNU General Public License for more details.
14 001FE8 ;
15 001FE8 ; You should have received a copy of the GNU
General Public License
16 001FE8 ; along with this program. If not, see
.
17 001FE8 ;
18 001FE8 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 001FE8
20 001FE8 ; ----------------------------------------------
------------------------
21 001FE8 ; 4e-LaunchPad.s43 - LaunchPad Suporting
Words
22 001FE8 ; ----------------------------------------------
------------------------
23 001FE8
24 001FE8
25 001FE8 ;U PORTS ---------------------------------------
------------------------
26 001FE8
27 001FE8 ; TI document SLAU144I - December 2004 - Revised
January 2012
28 001FE8 ; The digital I/O registers are listed in Table
8-2.
29 001FE8
30 001FE8 ;U \ P1in = $20
31 001FE8 ;U \ P1out = $21
32 001FE8 ;U \ P1dir = $22
33 001FE8
34 001FE8 ;U \ P2in = $28
35 001FE8 ;U \ P2out = $29
36 001FE8 ;U \ P2dir = $2A
37 001FE8
38 001FE8 ;U \ LED - portpinX->---resistor---LED---GND
39 001FE8 ;U \ P1.0 - red LED
40 001FE8 ;U \ P1.6 - green LED
41 001FE8
42 001FE8 ;U RED -- mask port red LED mask
and port address
43 001FE8 HEADER red,3,'RED',DOTWOCON
43.1 000000 PUBLIC red
43.2 001FE8 .... DW link
43.3 001FEA FF DB 0FFh ; not immediate
43.4 001FEB link SET $
43.5 001FEB 03 DB 3
43.6 001FEC 524544 DB 'RED'
43.7 001FEF 00 EVEN
43.8 001FF0 IF 'DOTWOCON'='DOCODE'
43.9 001FF0 red: DW $+2
43.10 001FF0 ELSE
43.11 001FF0 .... red: DW DOTWOCON
43.12 001FF2 ENDIF
43.13 001FF2 ENDM
44 001FF2 2100 DW P1OUT
45 001FF4 0100 DW 00000001b
46 001FF6
47 001FF6 ;U GREEN -- mask port green LED mask
and port address
48 001FF6 HEADER green,5,'GREEN',DOTWOCON
48.1 000000 PUBLIC green
48.2 001FF6 .... DW link
48.3 001FF8 FF DB 0FFh ; not immediate
48.4 001FF9 link SET $
48.5 001FF9 05 DB 5
48.6 001FFA 475245454E DB 'GREEN'
48.7 001FFF 00 EVEN
48.8 002000 IF 'DOTWOCON'='DOCODE'
48.9 002000 green: DW $+2
48.10 002000 ELSE
48.11 002000 .... green: DW DOTWOCON
48.12 002002 ENDIF
48.13 002002 ENDM
49 002002 2100 DW P1OUT
- 4e-configLP - Page 147
50 002004 4000 DW 01000000b
51 002006
52 002006 ;U \ Switch S2
53 002006 ;U portpin P1.3 --->0_0----GND
54 002006 ;U S2 -- mask port second button
mask and port address
55 002006 HEADER S2,2,'S2',DOTWOCON
55.1 000000 PUBLIC S2
55.2 002006 .... DW link
55.3 002008 FF DB 0FFh ; not immediate
55.4 002009 link SET $
55.5 002009 02 DB 2
55.6 00200A 5332 DB 'S2'
55.7 00200C EVEN
55.8 00200C IF 'DOTWOCON'='DOCODE'
55.9 00200C S2: DW $+2
55.10 00200C ELSE
55.11 00200C .... S2: DW DOTWOCON
55.12 00200E ENDIF
55.13 00200E ENDM
56 00200E 2000 DW P1IN
57 002010 0800 DW 00001000b
58 002012
59 002012 ;U S2? -- f test button S2, true is
pressed
60 002012 HEADER SQEST,3,'S2?',DOCOLON
60.1 000000 PUBLIC SQEST
60.2 002012 .... DW link
60.3 002014 FF DB 0FFh ; not immediate
60.4 002015 link SET $
60.5 002015 03 DB 3
60.6 002016 53323F DB 'S2?'
60.7 002019 00 EVEN
60.8 00201A IF 'DOCOLON'='DOCODE'
60.9 00201A SQEST: DW $+2
60.10 00201A ELSE
60.11 00201A .... SQEST: DW DOCOLON
60.12 00201C ENDIF
60.13 00201C ENDM
61 00201C ............* DW S2, cget, ZEROEQUAL, EXIT
62 002024
63 002024 ; ----------------------------------------------
------------------------
35 002024
36 002024 ; #include "4e-isrsup430.s43"
37 002024 ; #include "4e-onewire.s43"
38 002024 ; #include "4e-LPM.s43"
39 002024 ; #include "4e-WAS430G2553.s43"
40 002024
41 002024
42 000000 PUBLIC lastword
43 002024 lastword equ link
44 002024
45 002024 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
- 4e-configLP - Page 148
ADC10DTC1_ #define, value: (0x0049u), line: 165:2 166:2
ADC10FETCH #define, value: (0x001), line: 270:2
ADC10IE #define, value: (0x008), line: 183:2
ADC10IFG #define, value: (0x004), line: 182:2
ADC10MEM_ #define, value: (0x01B4u), line: 174:2 175:2
ADC10ON #define, value: (0x010), line: 184:2
ADC10SA_ #define, value: (0x01BCu), line: 176:2 177:2
ADC10SC #define, value: (0x001), line: 180:2
ADC10SHT0 #define, value: (0x800), line: 191:2
ADC10SHT1 #define, value: (0x1000u), line: 192:2
ADC10SHT_0 #define, value: (0*0x800u), line: 196:2
ADC10SHT_1 #define, value: (1*0x800u), line: 197:2
ADC10SHT_2 #define, value: (2*0x800u), line: 198:2
ADC10SHT_3 #define, value: (3*0x800u), line: 199:2
ADC10SR #define, value: (0x400), line: 190:2
ADC10SSEL0 #define, value: (0x0008u), line: 214:2
ADC10SSEL1 #define, value: (0x0010u), line: 215:2
ADC10SSEL_0 #define, value: (0*8u), line: 233:2
ADC10SSEL_1 #define, value: (1*8u), line: 234:2
ADC10SSEL_2 #define, value: (2*8u), line: 235:2
ADC10SSEL_3 #define, value: (3*8u), line: 236:2
ADC10TB #define, value: (0x008), line: 273:2
ADC10_VECTOR #define, value: (5 * 2u), line: 965:2
BCSCTL1_ #define, value: (0x0057u), line: 283:2 284:2
BCSCTL2_ #define, value: (0x0058u), line: 285:2 286:2
BCSCTL3_ #define, value: (0x0053u), line: 287:2 288:2
BIT0 #define, value: (0x0001u), line: 57:2
BIT1 #define, value: (0x0002u), line: 58:2
BIT2 #define, value: (0x0004u), line: 59:2
BIT3 #define, value: (0x0008u), line: 60:2
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
- 4e-configLP - Page 149
CARSEL #define, value: (0x40), line: 378:2
CASHORT #define, value: (0x80), line: 393:2
CCI #define, value: (0x0008u), line: 609:2
CCIE #define, value: (0x0010u), line: 608:2
CCIFG #define, value: (0x0001u), line: 612:2
CCIS0 #define, value: (0x1000u), line: 601:2
CCIS1 #define, value: (0x2000u), line: 600:2
CCIS_0 #define, value: (0*0x1000u), line: 622:2
CCIS_1 #define, value: (1*0x1000u), line: 623:2
CCIS_2 #define, value: (2*0x1000u), line: 624:2
CCIS_3 #define, value: (3*0x1000u), line: 625:2
CCR0 #define, value: TACCR0, line: 565:2
CCR0_ #define, value: TACCR0_, line: 571:2
CCR1 #define, value: TACCR1, line: 566:2
CCR1_ #define, value: TACCR1_, line: 572:2
CCR2 #define, value: TACCR2, line: 567:2
CCR2_ #define, value: TACCR2_, line: 573:2
CCTL0 #define, value: TACCTL0, line: 562:2
CCTL0_ #define, value: TACCTL0_, line: 568:2
CCTL1 #define, value: TACCTL1, line: 563:2
CCTL1_ #define, value: TACCTL1_, line: 569:2
CCTL2 #define, value: TACCTL2, line: 564:2
CCTL2_ #define, value: TACCTL2_, line: 570:2
CM0 #define, value: (0x4000u), line: 599:2
CM1 #define, value: (0x8000u), line: 598:2
CM_0 #define, value: (0*0x4000u), line: 626:2
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
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
- 4e-configLP - Page 150
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 327:4
FAIL #define, value: (0x0080u), line: 453:2
FCTL1_ #define, value: (0x0128u), line: 409:2 410:2
FCTL2_ #define, value: (0x012Au), line: 411:2 412:2
FCTL3_ #define, value: (0x012Cu), line: 413:2 414:2
FN0 #define, value: (0x0001u), line: 426:2
FN1 #define, value: (0x0002u), line: 427:2
FN2 #define, value: (0x0004u), line: 429:2
FN3 #define, value: (0x0008u), line: 432:2
FN4 #define, value: (0x0010u), line: 435:2
FN5 #define, value: (0x0020u), line: 437:2
FRKEY #define, value: (0x9600u), line: 416:2
FSSEL0 #define, value: (0x0040u), line: 438:2
FSSEL1 #define, value: (0x0080u), line: 439:2
FSSEL_0 #define, value: (0x0000u), line: 441:2
FSSEL_1 #define, value: (0x0040u), line: 442:2
FSSEL_2 #define, value: (0x0080u), line: 443:2
FSSEL_3 #define, value: (0x00C0u), line: 444:2
FWKEY #define, value: (0xA500u), line: 417:2 326:4 327:4 329:4 330:4
371:4 372:4 375:4 376:4
392:4 393:4 395:4 396:4
426:4 427:4 430:4 431:4
461:4 462:4 480:4 481:4
FXKEY #define, value: (0x3300u), line: 418:2
GIE #define, value: (0x0008u), line: 82:2
HALLOT #define, value: IALLOT, line: 824:6 1238:6
HCCOMMA #define, value: ICCOMMA, line: 826:6 1236:6
HCFETCH #define, value: ICFETCH, line: 827:6 935:6 1238:6
HCOMMA #define, value: ICOMMA, line: 825:6 1235:6
HCOUNT #define, value: ICOUNT, line: 671:6 929:6 1561:6
HCSTORE #define, value: ICSTORE, line: 829:6 1307:6
HFETCH #define, value: IFETCH, line: 828:6 958:6 1297:6 1562:6
HHERE #define, value: IHERE, line: 823:6 1237:6
HSTORE #define, value: ISTORE, line: 830:6
HTYPE #define, value: ITYPE, line: 672:6 1561:6
HWORD #define, value: IWORDC, line: 673:6 1238:6
ICFETCH #define, value: CFETCH, line: 444:4 592:6 935:6 1238:6
ICOUNT #define, value: COUNT, line: 547:6 579:6 929:6 1561:6
ID0 #define, value: (0x0040u), line: 578:2
ID1 #define, value: (0x0080u), line: 577:2
ID_0 #define, value: (0*0x40u), line: 589:2
ID_1 #define, value: (1*0x40u), line: 590:2
ID_2 #define, value: (2*0x40u), line: 591:2
ID_3 #define, value: (3*0x40u), line: 592:2
IE1_ #define, value: (0x0000u), line: 127:2 128:2
IE2_ #define, value: (0x0001u), line: 142:2 143:2
IFETCH #define, value: FETCH, line: 443:4 591:6 958:6 1297:6 1525:6
1526:6 1527:6 1562:6 37:7
IFG1_ #define, value: (0x0002u), line: 134:2 135:2
IFG2_ #define, value: (0x0003u), line: 150:2 151:2
INCH0 #define, value: (0x1000u), line: 223:2
INCH1 #define, value: (0x2000u), line: 224:2
INCH2 #define, value: (0x4000u), line: 225:2
INCH3 #define, value: (0x8000u), line: 226:2
INCH_0 #define, value: (0*0x1000u), line: 252:2
INCH_1 #define, value: (1*0x1000u), line: 253:2
INCH_10 #define, value: (10*0x1000u), line: 262:2
INCH_11 #define, value: (11*0x1000u), line: 263:2
INCH_12 #define, value: (12*0x1000u), line: 264:2
INCH_13 #define, value: (13*0x1000u), line: 265:2
INCH_14 #define, value: (14*0x1000u), line: 266:2
INCH_15 #define, value: (15*0x1000u), line: 267:2
INCH_2 #define, value: (2*0x1000u), line: 254:2
INCH_3 #define, value: (3*0x1000u), line: 255:2
INCH_4 #define, value: (4*0x1000u), line: 256:2
INCH_5 #define, value: (5*0x1000u), line: 257:2
INCH_6 #define, value: (6*0x1000u), line: 258:2
INCH_7 #define, value: (7*0x1000u), line: 259:2
INCH_8 #define, value: (8*0x1000u), line: 260:2
INCH_9 #define, value: (9*0x1000u), line: 261:2
- 4e-configLP - Page 151
INDEX #define, value: R8, line: 52:3 681:4 684:4 685:4 694:4
698:4 706:4 711:4 719:4
733:4
INFOEND #define, value: (0x10FF), line: 28:3 318:4 362:4 417:4
INFOSEG #define, value: (128), line: 37:3 339:4 340:4
INFOSTART #define, value: (0x1000), line: 27:3 316:4 360:4 415:4
IP #define, value: R5, line: 47:3 52:4 53:4 57:4 58:4
67:4 68:4 69:4 97:4
107:4 119:4 147:4 148:4
149:4 150:4 167:4 173:4
178:4 185:4 193:4 201:4
206:4 216:4 223:4 230:4
237:4 243:4 250:4 256:4
268:4 274:4 279:4 286:4
343:4 380:4 400:4 487:4
495:4 501:4 508:4 515:4
520:4 525:4 530:4 535:4
541:4 546:4 551:4 556:4
561:4 566:4 577:4 589:4
598:4 605:4 613:4 625:4
660:4 660:4 661:4 668:4
669:4 687:4 697:4 700:4
710:4 713:4 721:4 729:4
735:4 764:4 795:4 811:4
828:4 845:4 868:4 883:4
903:4 945:4 956:4 1659:6
1690:6 1793:6 1800:6 1807:6
1814:6 1821:6 1831:6
IRACL #define, value: R12, line: 68:3 746:4 754:4 762:4 775:4
780:4 794:4
IRACM #define, value: R13, line: 69:3 747:4 755:4 763:4
IRBT #define, value: W, line: 70:3 751:4 752:4 759:4 776:4
782:4
IROP1 #define, value: TOS, line: 65:3 752:4 777:4 779:4 787:4
IROP2L #define, value: R10, line: 66:3 743:4 754:4 756:4 770:4
784:4
IROP2M #define, value: R11, line: 67:3 750:4 755:4 757:4 769:4
777:4 779:4 785:4 787:4
793:4
ISREND #define, value: (0xFFDF), line: 35:3 311:4
ISRSTART #define, value: (0xFE00), line: 34:3 309:4
ISSH #define, value: (0x0100u), line: 219:2
ITYPE #define, value: TYP, line: 546:6 650:6 1152:6 1190:6 1561:6
1700:6 1701:6 1749:6 9:7
81:7 90:7 148:7
KEYV #define, value: (0x0002u), line: 447:2
LFXT1OF #define, value: (0x01), line: 336:2
LFXT1S0 #define, value: (0x10), line: 340:2
LFXT1S1 #define, value: (0x20), line: 341:2
LFXT1S_0 #define, value: (0x00), line: 350:2
LFXT1S_1 #define, value: (0x10), line: 351:2
LFXT1S_2 #define, value: (0x20), line: 352:2
LFXT1S_3 #define, value: (0x30), line: 353:2
LIMIT #define, value: R9, line: 53:3 680:4 682:4 683:4 685:4
699:4 712:4 720:4 734:4
LOCK #define, value: (0x0010u), line: 450:2 330:4 376:4 396:4 431:4
481:4
LOCKA #define, value: (0x0040u), line: 452:2
LPM0 #define, value: (CPUOFF), line: 91:2
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
MAINSEG #define, value: (512), line: 36:3 339:4
MC0 #define, value: (0x0010u), line: 580:2
MC1 #define, value: (0x0020u), line: 579:2
MC_0 #define, value: (0*0x10u), line: 585:2
MC_1 #define, value: (1*0x10u), line: 586:2
MC_2 #define, value: (2*0x10u), line: 587:2
MC_3 #define, value: (3*0x10u), line: 588:2
MERAS #define, value: (0x0004u), line: 421:2
MOD0 #define, value: (0x01), line: 290:2
MOD1 #define, value: (0x02), line: 291:2
MOD2 #define, value: (0x04), line: 292:2
MOD3 #define, value: (0x08), line: 293:2
MOD4 #define, value: (0x10), line: 294:2
MSC #define, value: (0x080), line: 187:2
N #define, value: (0x0004u), line: 80:2
- 4e-configLP - Page 152
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
OUT #define, value: (0x0004u), line: 610:2
OUTMOD0 #define, value: (0x0020u), line: 607:2
OUTMOD1 #define, value: (0x0040u), line: 606:2
OUTMOD2 #define, value: (0x0080u), line: 605:2
OUTMOD_0 #define, value: (0*0x20u), line: 614:2
OUTMOD_1 #define, value: (1*0x20u), line: 615:2
OUTMOD_2 #define, value: (2*0x20u), line: 616:2
OUTMOD_3 #define, value: (3*0x20u), line: 617:2
OUTMOD_4 #define, value: (4*0x20u), line: 618:2
OUTMOD_5 #define, value: (5*0x20u), line: 619:2
OUTMOD_6 #define, value: (6*0x20u), line: 620:2
OUTMOD_7 #define, value: (7*0x20u), line: 621:2
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: 1130:6 1136:6 1145:6
PSP #define, value: R4, line: 46:3 44:4 50:4 51:4 94:4
95:4 104:4 105:4 115:4
116:4 144:4 145:4 165:4
166:4 177:4 182:4 183:4
189:4 190:4 191:4 197:4
198:4 199:4 200:4 205:4
215:4 220:4 221:4 227:4
228:4 234:4 235:4 236:4
241:4 242:4 247:4 248:4
255:4 272:4 273:4 283:4
285:4 295:4 342:4 349:4
379:4 385:4 399:4 406:4
454:4 455:4 486:4 494:4
499:4 500:4 505:4 506:4
507:4 512:4 519:4 524:4
529:4 570:4 581:4 609:4
621:4 633:4 646:4 647:4
666:4 683:4 686:4 707:4
717:4 718:4 725:4 726:4
743:4 762:4 769:4 770:4
793:4 802:4 803:4 810:4
819:4 820:4 827:4 833:4
834:4 844:4 857:4 858:4
866:4 872:4 873:4 881:4
888:4 889:4 944:4 952:4
953:4 969:4 970:4 1652:6
1686:6 1687:6 1689:6 1790:6
- 4e-configLP - Page 153
1791:6 1792:6 1797:6 1798:6
1799:6 1804:6 1805:6 1806:6
1811:6 1812:6 1813:6 1818:6
1819:6 1820:6 1825:6 1830:6
Q #define, value: R12, line: 58:3 470:4 471:4 472:4
RAMEND #define, value: (0x0400), line: 30:3 1870:6
RAMSTART #define, value: (0x0200), line: 29:3
READ_ONLY #define, value: const, line: 50:2 462:2 481:2 505:2 523:2
645:2 689:2 714:2 941:2
943:2 945:2 947:2 949:2
951:2 953:2 955:2
REF2_5V #define, value: (0x040), line: 186:2
REFBURST #define, value: (0x100), line: 188:2
REFON #define, value: (0x020), line: 185:2
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: 43:3 57:4 222:4 229:4 249:4
254:4 679:4 680:4 681:4
698:4 699:4 711:4 712:4
727:4 728:4 733:4 734:4
RSTIFG #define, value: (0x08), line: 139:2
SCCI #define, value: (0x0400u), line: 603:2
SCG0 #define, value: (0x0040u), line: 85:2
SCG1 #define, value: (0x0080u), line: 86:2
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: 59: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
- 4e-configLP - Page 154
TA1IV_NONE #define, value: (0x0000u), line: 666:2
TA1IV_TACCR1 #define, value: (0x0002u), line: 667:2
TA1IV_TACCR2 #define, value: (0x0004u), line: 668:2
TA1IV_TAIFG #define, value: (0x000Au), line: 669:2
TA1R_ #define, value: (0x0190u), line: 654:2 655:2
TACCR0 #define, value: TA0CCR0, line: 548:2
TACCR0_ #define, value: TA0CCR0_, line: 557:2
TACCR1 #define, value: TA0CCR1, line: 549:2
TACCR1_ #define, value: TA0CCR1_, line: 558:2
TACCR2 #define, value: TA0CCR2, line: 550:2
TACCR2_ #define, value: TA0CCR2_, line: 559:2
TACCTL0 #define, value: TA0CCTL0, line: 544:2
TACCTL0_ #define, value: TA0CCTL0_, line: 553:2
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: 49:3 43:4 44:4 51:4 52:4
95:4 96:4 105:4 106:4
116:4 117:4 118:4 145:4
146:4 166:4 171:4 177:4
183:4 184:4 191:4 192:4
198:4 199:4 214:4 215:4
221:4 222:4 228:4 229:4
235:4 236:4 241:4 242:4
248:4 249:4 254:4 255:4
267:4 267:4 272:4 273:4
278:4 278:4 284:4 285:4
296:4 298:4 342:4 350:4
352:4 355:4 357:4 360:4
362:4 374:4 379:4 386:4
388:4 394:4 399:4 407:4
410:4 412:4 415:4 417:4
429:4 456:4 465:4 475:4
484:4 486:4 494:4 499:4
500:4 505:4 507:4 513:4
514:4 519:4 524:4 529:4
534:4 539:4 540:4 545:4
550:4 555:4 560:4 560:4
565:4 571:4 574:4 576:4
582:4 586:4 588:4 596:4
597:4 597:4 602:4 602:4
603:4 603:4 604:4 610:4
612:4 622:4 624:4 634:4
644:4 647:4 665:4 666:4
684:4 686:4 706:4 707:4
718:4 719:4 720:4 726:4
727:4 728:4 752:4 763:4
777:4 779:4 787:4 794:4
806:4 810:4 821:4 825:4
827:4 835:4 837:4 838:4
842:4 844:4 861:4 867:4
876:4 882:4 890:4 895:4
900:4 900:4 901:4 901:4
902:4 943:4 944:4 953:4
954:4 970:4 57:5 1650:6
1651:6 1652:6 1654:6 1656:6
1687:6 1688:6 1790:6 1792:6
1797:6 1799:6 1804:6 1806:6
- 4e-configLP - Page 155
1811:6 1813:6 1818:6 1820:6
1825:6 1827:6 1829:6
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
UCA0RXIFG #define, value: (0x01), line: 153:2 950:4 971:4
UCA0STAT_ #define, value: (0x0065u), line: 686:2 687:2
UCA0TXBUF_ #define, value: (0x0067u), line: 690:2 691:2
UCA0TXIE #define, value: (0x02), line: 146:2
UCA0TXIFG #define, value: (0x02), line: 154:2 941:4
UCA10 #define, value: (0x80), line: 738:2
UCABDEN #define, value: (0x01), line: 862:2
UCADDR #define, value: (0x02), line: 816:2
UCALIE #define, value: (0x01), line: 827:2
UCALIFG #define, value: (0x01), line: 835:2
UCB0BR0_ #define, value: (0x006Au), line: 705:2 706:2
UCB0BR1_ #define, value: (0x006Bu), line: 707:2 708:2
UCB0CTL0_ #define, value: (0x0068u), line: 701:2 702:2
UCB0CTL1_ #define, value: (0x0069u), line: 703:2 704:2
UCB0I2CIE_ #define, value: (0x006Cu), line: 709:2 710:2
UCB0I2COA_ #define, value: (0x0118u), line: 717:2 718:2
UCB0I2CSA_ #define, value: (0x011Au), line: 719:2 720:2
UCB0RXBUF_ #define, value: (0x006Eu), line: 713:2 714:2
UCB0RXIE #define, value: (0x04), line: 147:2
UCB0RXIFG #define, value: (0x04), line: 155:2
UCB0STAT_ #define, value: (0x006Du), line: 711:2 712:2
UCB0TXBUF_ #define, value: (0x006Fu), line: 715:2 716:2
UCB0TXIE #define, value: (0x08), line: 148:2
UCB0TXIFG #define, value: (0x08), line: 156:2
UCBBUSY #define, value: (0x10), line: 831:2
UCBRF0 #define, value: (0x10), line: 778:2
UCBRF1 #define, value: (0x20), line: 777:2
UCBRF2 #define, value: (0x40), line: 776:2
UCBRF3 #define, value: (0x80), line: 775:2
UCBRF_0 #define, value: (0x00), line: 784:2
UCBRF_1 #define, value: (0x10), line: 785:2
UCBRF_10 #define, value: (0xA0), line: 794:2
UCBRF_11 #define, value: (0xB0), line: 795:2
UCBRF_12 #define, value: (0xC0), line: 796:2
UCBRF_13 #define, value: (0xD0), line: 797:2
UCBRF_14 #define, value: (0xE0), line: 798:2
UCBRF_15 #define, value: (0xF0), line: 799:2
UCBRF_2 #define, value: (0x20), line: 786:2
UCBRF_3 #define, value: (0x30), line: 787:2
UCBRF_4 #define, value: (0x40), line: 788:2
UCBRF_5 #define, value: (0x50), line: 789:2
UCBRF_6 #define, value: (0x60), line: 790:2
UCBRF_7 #define, value: (0x70), line: 791:2
UCBRF_8 #define, value: (0x80), line: 792:2
UCBRF_9 #define, value: (0x90), line: 793:2
UCBRK #define, value: (0x08), line: 814:2
UCBRKIE #define, value: (0x10), line: 751:2
UCBRS0 #define, value: (0x02), line: 781:2
UCBRS1 #define, value: (0x04), line: 780:2
UCBRS2 #define, value: (0x08), line: 779:2
UCBRS_0 #define, value: (0x00), line: 801:2
UCBRS_1 #define, value: (0x02), line: 802:2
UCBRS_2 #define, value: (0x04), line: 803:2
UCBRS_3 #define, value: (0x06), line: 804:2
UCBRS_4 #define, value: (0x08), line: 805:2
UCBRS_5 #define, value: (0x0A), line: 806:2
UCBRS_6 #define, value: (0x0C), line: 807:2
UCBRS_7 #define, value: (0x0E), line: 808:2
UCBTOE #define, value: (0x04), line: 860:2
UCBUSY #define, value: (0x01), line: 817:2
UCCKPH #define, value: (0x80), line: 733:2
UCCKPL #define, value: (0x40), line: 734:2
UCDELIM0 #define, value: (0x10), line: 858:2
- 4e-configLP - Page 156
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-configLP - Page 157
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
USCIAB0TX_VECTOR #define, value: (6 * 2u), line: 966:2
USERFLASHEND #define, value: (0xD7FF), line: 32:3 303:4 337:4 357:4 412:4
1860:6 142:7
USERFLASHSTART #define, value: (0xC000), line: 31:3 301:4 335:4 355:4 410:4
199:6 1856:6 142:7
V #define, value: (0x0100u), line: 81:2
W #define, value: R6, line: 48:3 43:4 45:4 53:4 53:4
58:4 58:4 68:4 69:4
69:4 96:4 97:4 97:4
106:4 107:4 107:4 117:4
119:4 119:4 127:4 127:4
128:4 146:4 148:4 150:4
150:4 167:4 167:4 173:4
173:4 178:4 178:4 182:4
184:4 185:4 185:4 189:4
192:4 193:4 193:4 197:4
200:4 201:4 201:4 206:4
206:4 216:4 216:4 223:4
223:4 230:4 230:4 237:4
237:4 243:4 243:4 250:4
250:4 256:4 256:4 268:4
268:4 274:4 274:4 279:4
279:4 283:4 284:4 286:4
286:4 295:4 296:4 298:4
301:4 303:4 309:4 311:4
316:4 318:4 328:4 335:4
337:4 339:4 340:4 343:4
343:4 349:4 352:4 374:4
380:4 380:4 385:4 388:4
394:4 400:4 400:4 406:4
407:4 429:4 454:4 467:4
473:4 474:4 477:4 478:4
487:4 487:4 495:4 495:4
501:4 501:4 508:4 508:4
512:4 513:4 514:4 515:4
515:4 520:4 520:4 525:4
525:4 530:4 530:4 535:4
535:4 541:4 541:4 546:4
546:4 551:4 551:4 556:4
556:4 561:4 561:4 566:4
566:4 570:4 573:4 573:4
576:4 577:4 577:4 581:4
585:4 588:4 589:4 589:4
598:4 598:4 605:4 605:4
609:4 610:4 613:4 613:4
621:4 622:4 625:4 625:4
633:4 634:4 661:4 661:4
669:4 669:4 687:4 687:4
700:4 700:4 713:4 713:4
721:4 721:4 729:4 729:4
735:4 735:4 751:4 752:4
759:4 764:4 764:4 776:4
782:4 795:4 795:4 803:4
806:4 807:4 811:4 811:4
819:4 823:4 824:4 828:4
828:4 833:4 837:4 840:4
841:4 845:4 845:4 858:4
861:4 863:4 866:4 868:4
868:4 873:4 876:4 878:4
881:4 883:4 883:4 888:4
892:4 903:4 903:4 945:4
945:4 956:4 956:4 1653:6
1657:6 1659:6 1659:6 1688:6
1689:6 1690:6 1690:6 1793:6
1793:6 1800:6 1800:6 1807:6
1807:6 1814:6 1814:6 1821:6
1821:6 1831:6 1831:6
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
- 4e-configLP - Page 158
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 372:4 393:4 427:4 462:4
X #define, value: R10, line: 56:3 455:4 469:4 470:4 477:4
802:4 804:4 808:4 820:4
823:4 834:4 838:4 839:4
841:4 857:4 859:4 864:4
867:4 872:4 874:4 879:4
882:4 889:4 892:4 894:4
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: 57:3 469:4 472:4 473:4
Z #define, value: (0x0002u), line: 79:2
__430X_CORE__ #define, value: 1, line: 0
__430_CORE__ #define, value: 0, line: 0
__A430__ #define, value: 1, line: 0
__BUILD_NUMBER__ #define, line: 0
__CORE__ #define, value: 0, line: 0
__DATE__ #define, line: 0 21
__FILE__ #define, line: 0
__IAR_SYSTEMS_ASM #define, line: 0
__IAR_SYSTEMS_ASM__ #define, line: 0
__LINE__ #define, line: 0
__MSP430G2553 #define, value: , line: 16:2
__MSP430G2553__ #define, value: 1, line: 0
__MSP430_HAS_ADC10__ #define, value: , line: 161:2
__MSP430_HAS_BC2__ #define, value: , line: 279:2
__MSP430_HAS_CAPLUS__ #define, value: , line: 363:2
__MSP430_HAS_FLASH2__ #define, value: , line: 407:2
__MSP430_HAS_PORT1_R__ #define, value: , line: 458:2
__MSP430_HAS_PORT2_R__ #define, value: , line: 459:2
__MSP430_HAS_PORT3_R__ #define, value: , line: 502:2
__MSP430_HAS_T1A3__ #define, value: , line: 642:2
__MSP430_HAS_TA3__ #define, value: , line: 520:2
__MSP430_HAS_USCI__ #define, value: , line: 674:2
__MSP430_HAS_WDT__ #define, value: , line: 890:2
__SUBVERSION__ #define, line: 0
__TID__ #define, line: 0 24:2
__TIME__ #define, line: 0 21
__VER__ #define, line: 0
__msp430 #define, value: , line: 9:1
- 4e-configLP - Page 159
Segment Type Mode
----------------------------------------
CODE UNTYPED REL
Label Mode Type Segment Value/Offset
------------------------------------------------------------------------------
ABBS REL CONST PUB UNTYP. CODE BA2
ABORT REL CONST PUB UNTYP. CODE 1596
ABORTQUOTE REL CONST PUB UNTYP. CODE 15C2
ACC1 REL CONST UNTYP. CODE E70
ACC3 REL CONST UNTYP. CODE EA6
ACC4 REL CONST UNTYP. CODE EB2
ACC5 REL CONST UNTYP. CODE EB6
ACCEPT REL CONST PUB UNTYP. CODE E66
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 1216
AGAIN REL CONST PUB UNTYP. CODE 1826
ALIGNED REL CONST PUB UNTYP. CODE 8A4
ALIGNN REL CONST PUB UNTYP. CODE 88A
ALLOT REL CONST PUB UNTYP. CODE 1124
ANDD REL CONST PUB UNTYP. CODE 458
APP REL CONST PUB UNTYP. CODE A62
APPCRC REL CONST PUB UNTYP. CODE 1E24
APPU0 REL CONST PUB UNTYP. CODE B6E
ATXY REL CONST PUB UNTYP. CODE 1C50
AppU0 ABS CONST EXT [013] UNTYP. __EXTERNS Solved Extern
BACKSLASH REL CONST PUB UNTYP. CODE 1BC2
BASE REL CONST PUB UNTYP. CODE 9F2
BCSCTL1 ABS CONST UNTYP. ASEG 57
BCSCTL2 ABS CONST UNTYP. ASEG 58
BCSCTL3 ABS CONST UNTYP. ASEG 53
BEGIN REL CONST PUB UNTYP. CODE 1800
BELL REL CONST PUB UNTYP. CODE 1C0C
BIN REL CONST PUB UNTYP. CODE 1C8C
BLANK REL CONST PUB UNTYP. CODE AEE
BOOT REL CONST PUB UNTYP. CODE 1E90
BOOTIP REL CONST PUB UNTYP. CODE 1E92
BRACCHAR REL CONST PUB UNTYP. CODE 1606
BRACTICK REL CONST PUB UNTYP. CODE 176E
BUILDS REL CONST PUB UNTYP. CODE 165E
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
CAPD ABS CONST UNTYP. ASEG 5B
CAPITALIZE REL CONST PUB UNTYP. CODE 1342
CAPS REL CONST PUB UNTYP. CODE A6E
CAPS1 REL CONST UNTYP. CODE 1358
CAPS2 REL CONST UNTYP. CODE 1366
CCOMMA REL CONST PUB UNTYP. CODE 1148
CCRC REL CONST PUB UNTYP. CODE 1B4E
CELL REL CONST PUB UNTYP. CODE 8BA
CELLPLUS REL CONST PUB UNTYP. CODE 8C8
CELLS REL CONST PUB UNTYP. CODE 8D8
CEXIT REL CONST PUB UNTYP. CODE 97E
CFETCH REL CONST PUB UNTYP. CODE 240
CHARPLUS REL CONST PUB UNTYP. CODE 8E4
CHARR REL CONST PUB UNTYP. CODE 15F0
CHARS REL CONST PUB UNTYP. CODE 8F0
CMOVE REL CONST PUB UNTYP. CODE 732
CMOVEUP REL CONST PUB UNTYP. CODE 756
CMOVE_1 REL CONST UNTYP. CODE 73C
CMOVE_X REL CONST UNTYP. CODE 746
CMOVU_1 REL CONST UNTYP. CODE 764
CMOVU_X REL CONST UNTYP. CODE 770
COLD REL CONST PUB UNTYP. CODE 1EEE
- 4e-configLP - Page 160
COLDIP REL CONST PUB UNTYP. CODE 1EF0
COLON REL CONST PUB UNTYP. CODE 174A
COMMA REL CONST PUB UNTYP. CODE 1132
COMMABRANCH REL CONST PUB UNTYP. CODE 994
COMMACALL REL CONST PUB UNTYP. CODE 93A
COMMACF REL CONST PUB UNTYP. CODE 922
COMMADEST REL CONST PUB UNTYP. CODE 9A2
COMMAJMP REL CONST PUB UNTYP. CODE 94E
COMMANONE REL CONST PUB UNTYP. CODE 9CC
COMMAXT REL CONST PUB UNTYP. CODE 90A
CONSTANT REL CONST PUB UNTYP. CODE 9A
COR REL CONST PUB UNTYP. CODE B36
CORPOWERON ABS CONST UNTYP. CODE 186
CORREST ABS CONST UNTYP. CODE 18E
COUNT REL CONST PUB UNTYP. CODE D8A
CR REL CONST PUB UNTYP. CODE DB4
CRC REL CONST PUB UNTYP. CODE 1B72
CREATE REL CONST PUB UNTYP. CODE 1674
CSTORE REL CONST PUB UNTYP. CODE 24E
CamelForthEnd REL CONST UNTYP. CODE 880
DABS REL CONST PUB UNTYP. CODE BE8
DCOCTL ABS CONST UNTYP. ASEG 56
DDP REL CONST PUB UNTYP. CODE A0A
DECIMAL REL CONST PUB UNTYP. CODE 10EA
DEPTH REL CONST PUB UNTYP. CODE 1950
DIGITQ REL CONST PUB UNTYP. CODE 1392
DIV1 REL CONST UNTYP. CODE 6E0
DIV2 REL CONST UNTYP. CODE 6E6
DIV3 REL CONST UNTYP. CODE 6FA
DIV4 REL CONST UNTYP. CODE 6FC
DIVIDE REL CONST UNTYP. CODE 6DA
DNEG1 REL CONST UNTYP. CODE BDE
DNEGATE REL CONST PUB UNTYP. CODE BB6
DO REL CONST PUB UNTYP. CODE 188A
DOALIAS REL CONST PUB UNTYP. CODE DA
DOCODE REL CONST UNTYP. CODE Not solved
DOCOLON REL CONST PUB UNTYP. CODE 70
DOCON REL CONST PUB UNTYP. CODE A2
DOCR REL CONST PUB UNTYP. CODE D9E
DOEMIT REL CONST PUB UNTYP. CODE 806
DOES REL CONST PUB UNTYP. CODE 16A8
DOKEY REL CONST PUB UNTYP. CODE 822
DOROM REL CONST PUB UNTYP. CODE AE
DOT REL CONST PUB UNTYP. CODE 10C6
DOTBOOTVERSION REL CONST PUB UNTYP. CODE 1DEA
DOTCOLD REL CONST PUB UNTYP. CODE 1ED8
DOTERRN REL CONST PUB UNTYP. CODE E28
DOTQUOTE REL CONST PUB UNTYP. CODE F92
DOTS REL CONST PUB UNTYP. CODE 1B0E
DOTS1 REL CONST UNTYP. CODE 1B3E
DOTS2 REL CONST UNTYP. CODE 1B4C
DOTSTATUS REL CONST PUB UNTYP. CODE 151E
DOTVER REL CONST PUB UNTYP. CODE 1BD6
DOTWOCON REL CONST PUB UNTYP. CODE 1BAC
DOUSER REL CONST PUB UNTYP. CODE CA
DOVAR REL CONST PUB UNTYP. CODE A2
DROP REL CONST PUB UNTYP. CODE 120
DTOI REL CONST PUB UNTYP. CODE 3B6
DTOI_BYTE REL CONST UNTYP. CODE 3EA
DTOI_END REL CONST UNTYP. CODE 3F0
DTOI_LOOP REL CONST UNTYP. CODE 3C0
DTOI_WORD REL CONST UNTYP. CODE 3D8
DTOI_X REL CONST UNTYP. CODE 402
DUMP REL CONST PUB UNTYP. CODE 1AA2
DUP REL CONST PUB UNTYP. CODE FA
ELSS REL CONST PUB UNTYP. CODE 17E4
EMIT REL CONST PUB UNTYP. CODE 852
EMITLOOPx REL CONST UNTYP. CODE 808
ENDLOOP REL CONST PUB UNTYP. CODE 18A6
ENVIRONMENTQ REL CONST PUB UNTYP. CODE 196E
EQUAL REL CONST PUB UNTYP. CODE 554
ESC0 REL CONST UNTYP. CODE 1C77
ESC1 REL CONST UNTYP. CODE 1C7A
ESCPAR REL CONST PUB UNTYP. CODE 1C16
EVALUATE REL CONST PUB UNTYP. CODE 14FC
EXECUTE REL CONST PUB UNTYP. CODE 42
EXIT REL CONST PUB UNTYP. CODE 68
FACTORY REL CONST PUB UNTYP. CODE 1F16
- 4e-configLP - Page 161
FACTORYIP REL CONST PUB UNTYP. CODE 1F18
FALSE REL CONST PUB UNTYP. CODE 1CAE
FCTL1 ABS CONST UNTYP. ASEG 128
FCTL2 ABS CONST UNTYP. ASEG 12A
FCTL3 ABS CONST UNTYP. ASEG 12C
FETCH REL CONST PUB UNTYP. CODE 220
FILL REL CONST PUB UNTYP. CODE 70E
FILL_1 REL CONST UNTYP. CODE 718
FILL_X REL CONST UNTYP. CODE 722
FIND REL CONST PUB UNTYP. CODE 12E2
FIND1 REL CONST UNTYP. CODE 12E8
FIND2 REL CONST UNTYP. CODE 1300
FIND3 REL CONST UNTYP. CODE 131E
FLALIGNED REL CONST PUB UNTYP. CODE 1990
FLERASE REL CONST PUB UNTYP. CODE 268
FLE_1 REL CONST UNTYP. CODE 26E
FLE_INFO REL CONST UNTYP. CODE 28A
FLE_OK REL CONST UNTYP. CODE 296
FLE_VEC REL CONST UNTYP. CODE 27E
FLE_X REL CONST UNTYP. CODE 2CE
FL_INFO REL CONST UNTYP. CODE 2C8
FMMOD1 REL CONST UNTYP. CODE C6C
FMSLASHMOD REL CONST PUB UNTYP. CODE C46
FORTHPRO REL CONST PUB UNTYP. CODE 1F4C
GREATER REL CONST PUB UNTYP. CODE 58A
HEADR REL CONST PUB UNTYP. CODE 1630
HERE REL CONST PUB UNTYP. CODE 1112
HEX REL CONST PUB UNTYP. CODE 10FE
HIDE REL CONST PUB UNTYP. CODE 16FA
HOLD REL CONST PUB UNTYP. CODE 100A
HP REL CONST PUB UNTYP. CODE A32
IALLOT REL CONST PUB UNTYP. CODE 1174
ICCOMMA REL CONST PUB UNTYP. CODE 119A
ICOMMA REL CONST PUB UNTYP. CODE 1182
ICSTORE REL CONST PUB UNTYP. CODE 36A
ICST_INFO REL CONST UNTYP. CODE 37E
ICST_OK REL CONST UNTYP. CODE 38A
ICST_RAM REL CONST UNTYP. CODE 39A
IDP REL CONST PUB UNTYP. CODE A48
IE1 ABS CONST UNTYP. ASEG 0
IE2 ABS CONST UNTYP. ASEG 1
IFF REL CONST PUB UNTYP. CODE 17BC
IFG1 ABS CONST UNTYP. ASEG 2
IFG2 ABS CONST UNTYP. ASEG 3
IHERE REL CONST PUB UNTYP. CODE 1162
II REL CONST PUB UNTYP. CODE 660
IMMEDIATE REL CONST PUB UNTYP. CODE 1734
IMMEDQ REL CONST PUB UNTYP. CODE 12CA
INFOB REL CONST PUB UNTYP. CODE B44
INFOC REL CONST PUB UNTYP. CODE B52
INFOD REL CONST PUB UNTYP. CODE B60
INTER1 REL CONST UNTYP. CODE 1496
INTER2 REL CONST UNTYP. CODE 14C2
INTER3 REL CONST UNTYP. CODE 14C4
INTER4 REL CONST UNTYP. CODE 14C8
INTER5 REL CONST UNTYP. CODE 14D4
INTER6 REL CONST UNTYP. CODE 14E8
INTER8 REL CONST UNTYP. CODE 14E8
INTER9 REL CONST UNTYP. CODE 14EC
INTERPRET REL CONST PUB UNTYP. CODE 148A
INVERT REL CONST PUB UNTYP. CODE 488
ISQUOTE REL CONST PUB UNTYP. CODE F38
ISTORE REL CONST PUB UNTYP. CODE 2DA
IST_INFO REL CONST UNTYP. CODE 2F2
IST_OK REL CONST UNTYP. CODE 2FE
IST_RAM REL CONST UNTYP. CODE 30E
IST_X REL CONST UNTYP. CODE 320
IST_X2 REL CONST UNTYP. CODE 35C
ITHERE REL CONST PUB UNTYP. CODE 1E04
ITOD REL CONST PUB UNTYP. CODE 77E
IWORD REL CONST PUB UNTYP. CODE FA8
IWORD1 REL CONST UNTYP. CODE FAC
IWORDC REL CONST PUB UNTYP. CODE FBA
JJ REL CONST PUB UNTYP. CODE 676
KEY REL CONST PUB UNTYP. CODE 840
KEYLOOPx REL CONST UNTYP. CODE 824
KEYQ REL CONST PUB UNTYP. CODE 864
L$002 REL CONST UNTYP. CODE 6B0
- 4e-configLP - Page 162
L$01 REL CONST UNTYP. CODE 6B8
L0 REL CONST PUB UNTYP. CODE AB4
LATEST REL CONST PUB UNTYP. CODE A28
LDUMP1 REL CONST UNTYP. CODE 1AAC
LDUMP2 REL CONST UNTYP. CODE 1AC6
LDUMP3 REL CONST UNTYP. CODE 1AE4
LEAV REL CONST PUB UNTYP. CODE 18EC
LEFTBRACKET REL CONST PUB UNTYP. CODE 16D6
LESS REL CONST PUB UNTYP. CODE 576
LESSNUM REL CONST PUB UNTYP. CODE 1022
LFROM REL CONST PUB UNTYP. CODE 1872
LITER1 REL CONST UNTYP. CODE 1386
LITERAL REL CONST PUB UNTYP. CODE 1374
LOO REL CONST PUB UNTYP. CODE 18C4
LOOP1 REL CONST UNTYP. CODE 18AC
LOOP2 REL CONST UNTYP. CODE 18BA
LP REL CONST PUB UNTYP. CODE A3C
LSHIFT REL CONST PUB UNTYP. CODE 4F4
LSH_1 REL CONST UNTYP. CODE 4FE
LSH_X REL CONST UNTYP. CODE 504
LSTACK ABS CONST EXT [003] UNTYP. __EXTERNS Solved Extern
MACU REL CONST UNTYP. CODE 6AC
MARKER REL CONST PUB UNTYP. CODE 19AE
MAX REL CONST PUB UNTYP. CODE CDE
MAX1 REL CONST UNTYP. CODE CEA
MEM REL CONST PUB UNTYP. CODE 1D92
MEMBOT REL CONST PUB UNTYP. CODE 1D78
MEMTOP REL CONST PUB UNTYP. CODE 1D86
MIN REL CONST PUB UNTYP. CODE CF6
MIN1 REL CONST UNTYP. CODE D02
MINUS REL CONST PUB UNTYP. CODE 444
MODD REL CONST PUB UNTYP. CODE CAA
MOVE REL CONST PUB UNTYP. CODE 1924
MOVE1 REL CONST UNTYP. CODE 1940
MOVE2 REL CONST UNTYP. CODE 1944
MPLUS REL CONST PUB UNTYP. CODE 42E
MPYU REL CONST UNTYP. CODE 6A8
MS REL CONST PUB UNTYP. CODE 1FBC
MSTAR REL CONST PUB UNTYP. CODE BF6
NEGATE REL CONST PUB UNTYP. CODE 49A
NEQUAL REL CONST PUB UNTYP. CODE 7FA
NEWEST REL CONST PUB UNTYP. CODE A56
NEWLINE REL CONST PUB UNTYP. CODE A9E
NFATOCFA REL CONST PUB UNTYP. CODE 12B0
NFATOLFA REL CONST PUB UNTYP. CODE 129A
NINIT REL CONST PUB UNTYP. CODE B2A
NIP REL CONST PUB UNTYP. CODE 17A
NODUP REL CONST UNTYP. CODE 114
NOOP REL CONST PUB UNTYP. CODE 197E
NOTEQUAL REL CONST PUB UNTYP. CODE 568
NUM REL CONST PUB UNTYP. CODE 1056
NUMGREATER REL CONST PUB UNTYP. CODE 1082
NUMS REL CONST PUB UNTYP. CODE 106C
NUMS1 REL CONST UNTYP. CODE 106E
ONEMINUS REL CONST PUB UNTYP. CODE 4B8
ONEMS REL CONST PUB UNTYP. CODE 1F9A
ONEPLUS REL CONST PUB UNTYP. CODE 4AA
ORR REL CONST PUB UNTYP. CODE 466
OVER REL CONST PUB UNTYP. CODE 146
P1 REL CONST PUB UNTYP. CODE 1FD0
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 1FDA
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
- 4e-configLP - Page 163
P2SEL2 ABS CONST UNTYP. ASEG 42
P3 REL CONST PUB UNTYP. CODE 1FE4
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 AAA
PADAREA ABS CONST EXT [002] UNTYP. __EXTERNS Solved Extern
PAGEE REL CONST PUB UNTYP. CODE 1C70
PAREN REL CONST PUB UNTYP. CODE 161A
PARENUDOTR REL CONST PUB UNTYP. CODE 1A3C
PARENWIPE REL CONST PUB UNTYP. CODE 1F78
PARSE REL CONST PUB UNTYP. CODE 1238
PARSE1 REL CONST UNTYP. CODE 1254
PLUS REL CONST PUB UNTYP. CODE 40E
PLUSLOOP REL CONST PUB UNTYP. CODE 18D8
PLUSSTORE REL CONST PUB UNTYP. CODE 41C
PN REL CONST PUB UNTYP. CODE 1C26
POST1 REL CONST UNTYP. CODE 17B2
POST2 REL CONST UNTYP. CODE 17B4
POSTPONE REL CONST PUB UNTYP. CODE 1788
PROFUSE REL CONST UNTYP. CODE 0
PROFUSEADR REL CONST PUB UNTYP. CODE 1F3C
PROMPT REL CONST PUB UNTYP. CODE 152A
PROMPT1 REL CONST UNTYP. CODE 155C
PSTACK ABS CONST EXT [004] UNTYP. __EXTERNS Solved Extern
PUSHTOS REL CONST UNTYP. CODE FC
QABO1 REL CONST UNTYP. CODE 15B4
QABORT REL CONST PUB UNTYP. CODE 15A8
QDNEGATE REL CONST PUB UNTYP. CODE BD4
QDUP REL CONST PUB UNTYP. CODE 10E
QNEG1 REL CONST UNTYP. CODE B98
QNEGATE REL CONST PUB UNTYP. CODE B8E
QNUM1 REL CONST UNTYP. CODE 146A
QNUM2 REL CONST UNTYP. CODE 1476
QNUM3 REL CONST UNTYP. CODE 147A
QNUMBER REL CONST PUB UNTYP. CODE 1446
QQ REL CONST PUB UNTYP. CODE 1DE2
QSIGN REL CONST PUB UNTYP. CODE 13CE
QSIGN1 REL CONST UNTYP. CODE 13F8
QSTACK REL CONST PUB UNTYP. CODE 11B4
QTIB REL CONST PUB UNTYP. CODE E48
QTIB1 REL CONST UNTYP. CODE E5A
QUIT REL CONST PUB UNTYP. CODE 1566
QUIT1 REL CONST UNTYP. CODE 1578
QUITIP REL CONST PUB UNTYP. CODE 1568
RAMDICT ABS CONST EXT [007] UNTYP. __EXTERNS Solved Extern
RECURSE REL CONST PUB UNTYP. CODE 16C4
REPEAT REL CONST PUB UNTYP. CODE 184E
RESETADR REL CONST PUB UNTYP. CODE 1D6A
REVEAL REL CONST PUB UNTYP. CODE 171A
RFETCH REL CONST PUB UNTYP. CODE 1AC
RFROM REL CONST PUB UNTYP. CODE 198
RIGHTBRACKET REL CONST PUB UNTYP. CODE 16E6
RLAA REL CONST PUB UNTYP. CODE 5B8
ROMDICT ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern
ROT REL CONST PUB UNTYP. CODE 15E
RPFETCH REL CONST PUB UNTYP. CODE 1EA
RPSTORE REL CONST PUB UNTYP. CODE 200
RSHIFT REL CONST PUB UNTYP. CODE 514
RSH_1 REL CONST UNTYP. CODE 51E
RSH_X REL CONST UNTYP. CODE 526
RSTACK ABS CONST EXT [005] UNTYP. __EXTERNS Solved Extern
RZERO REL CONST PUB UNTYP. CODE ABE
S0 REL CONST PUB UNTYP. CODE AC8
S2 REL CONST PUB UNTYP. CODE 200C
SAVE REL CONST PUB UNTYP. CODE 1E52
SCAN REL CONST PUB UNTYP. CODE 7AE
SCAN_1 REL CONST UNTYP. CODE 7B8
SCAN_X REL CONST UNTYP. CODE 7C2
SEMICOLON REL CONST PUB UNTYP. CODE 175C
SEMIPN REL CONST PUB UNTYP. CODE 1C3A
SEQUAL REL CONST PUB UNTYP. CODE 7D2
SEQU_1 REL CONST UNTYP. CODE 7DC
SEQU_X REL CONST UNTYP. CODE 7F0
SIGN REL CONST PUB UNTYP. CODE 109A
- 4e-configLP - Page 164
SIGN1 REL CONST UNTYP. CODE 10A8
SKIP REL CONST PUB UNTYP. CODE 788
SKIP_1 REL CONST UNTYP. CODE 792
SKIP_X REL CONST UNTYP. CODE 79C
SLASH REL CONST PUB UNTYP. CODE C9A
SLASHMOD REL CONST PUB UNTYP. CODE C88
SLASHSTRING REL CONST PUB UNTYP. CODE 11E2
SMISMATCH REL CONST UNTYP. CODE 7EA
SMSLASHREM REL CONST PUB UNTYP. CODE C18
SOURCE REL CONST PUB UNTYP. CODE 11CE
SPACE REL CONST PUB UNTYP. CODE DC8
SPACES REL CONST PUB UNTYP. CODE DDA
SPCS1 REL CONST UNTYP. CODE DDC
SPCS2 REL CONST UNTYP. CODE DEA
SPFETCH REL CONST PUB UNTYP. CODE 1C2
SPSTORE REL CONST PUB UNTYP. CODE 1D8
SQEST REL CONST PUB UNTYP. CODE 201A
SQUOTE REL CONST PUB UNTYP. CODE F60
SSMOD REL CONST PUB UNTYP. CODE CBC
STAR REL CONST PUB UNTYP. CODE C78
STARSLASH REL CONST PUB UNTYP. CODE CCE
STATE REL CONST PUB UNTYP. CODE A00
STOD REL CONST PUB UNTYP. CODE B7A
STORCOLON REL CONST PUB UNTYP. CODE 964
STORE REL CONST PUB UNTYP. CODE 22E
STORECF REL CONST PUB UNTYP. CODE 916
STOREDEST REL CONST PUB UNTYP. CODE 9B6
SWAP REL CONST PUB UNTYP. CODE 130
SWAPBYTES REL CONST PUB UNTYP. CODE 4C6
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 1CBC
THEN REL CONST PUB UNTYP. CODE 17D2
TIB REL CONST PUB UNTYP. CODE AD4
TIBAREA ABS CONST EXT [006] UNTYP. __EXTERNS Solved Extern
TIBSIZE REL CONST PUB UNTYP. CODE AE4
TIB_SIZE ABS CONST EXT [008] UNTYP. __EXTERNS Solved Extern
TICK REL CONST PUB UNTYP. CODE 15D4
TICKSOURCE REL CONST PUB UNTYP. CODE A1A
TOBODY REL CONST PUB UNTYP. CODE 8FC
TOCOUNTED REL CONST PUB UNTYP. CODE 11FE
TODIGIT REL CONST PUB UNTYP. CODE 1036
TOIN REL CONST PUB UNTYP. CODE 9E6
TOL REL CONST PUB UNTYP. CODE 185C
TONUM1 REL CONST UNTYP. CODE 1408
TONUM2 REL CONST UNTYP. CODE 141E
TONUM3 REL CONST UNTYP. CODE 1438
TONUMBER REL CONST PUB UNTYP. CODE 1406
TOPSEG REL CONST PUB UNTYP. CODE 1DCA
TOR REL CONST PUB UNTYP. CODE 188
TOSFALSE REL CONST UNTYP. CODE 55C
TOSTRUE REL CONST UNTYP. CODE 57E
TRUE REL CONST PUB UNTYP. CODE 1CA0
TUCK REL CONST PUB UNTYP. CODE 212
TWOCONSTANT REL CONST PUB UNTYP. CODE 1BA2
TWODROP REL CONST PUB UNTYP. CODE D38
TWODUP REL CONST PUB UNTYP. CODE D48
TWOFETCH REL CONST PUB UNTYP. CODE D0C
TWOOVER REL CONST PUB UNTYP. CODE D70
TWOSLASH REL CONST PUB UNTYP. CODE 4E2
TWOSTAR REL CONST PUB UNTYP. CODE 4D4
TWOSTORE REL CONST PUB UNTYP. CODE D20
- 4e-configLP - Page 165
TWOSWAP REL CONST PUB UNTYP. CODE D5A
TYP REL CONST PUB UNTYP. CODE EC8
TYP3 REL CONST UNTYP. CODE ED8
TYP4 REL CONST UNTYP. CODE EE6
TYP5 REL CONST UNTYP. CODE EE8
U0 REL CONST PUB UNTYP. CODE 9DA
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 10B0
UDOTR REL CONST PUB UNTYP. CODE 1A5C
UDSLASHMOD REL CONST PUB UNTYP. CODE FCE
UDSTAR REL CONST PUB UNTYP. CODE FEC
UGREATER REL CONST PUB UNTYP. CODE 5A8
UINIT REL CONST PUB UNTYP. CODE AFC
ULESS REL CONST PUB UNTYP. CODE 598
UMAX REL CONST PUB UNTYP. CODE E0E
UMAX1 REL CONST UNTYP. CODE E1A
UMIN REL CONST PUB UNTYP. CODE DF6
UMIN1 REL CONST UNTYP. CODE E02
UMSLASHMOD REL CONST PUB UNTYP. CODE 6D4
UMSTAR REL CONST PUB UNTYP. CODE 6A4
UNLOOP REL CONST PUB UNTYP. CODE 692
UNTIL REL CONST PUB UNTYP. CODE 1810
UNUSED REL CONST PUB UNTYP. CODE 1DA6
UP ABS CONST EXT [000] UNTYP. __EXTERNS Solved Extern
UPC REL CONST PUB UNTYP. CODE 1320
UPC1 REL CONST UNTYP. CODE 133A
USER REL CONST PUB UNTYP. CODE C2
USEREMIT REL CONST PUB UNTYP. CODE A8E
USERKEY REL CONST PUB UNTYP. CODE A7E
VALIDQ REL CONST PUB UNTYP. CODE 1E3C
VARAREA ABS CONST EXT [009] UNTYP. __EXTERNS Solved Extern
VARBOT REL CONST PUB UNTYP. CODE 1DBC
VARIABLE REL CONST PUB UNTYP. CODE 84
VAR_SIZE ABS CONST EXT [010] UNTYP. __EXTERNS Solved Extern
VECBOT REL CONST PUB UNTYP. CODE 1DD8
VECSTORE REL CONST PUB UNTYP. CODE 32E
WARM REL CONST PUB UNTYP. CODE 1ECA
WDS1 REL CONST UNTYP. CODE 1A0A
WDS2 REL CONST UNTYP. CODE 1A1E
WDS3 REL CONST UNTYP. CODE 1A38
WDTCTL ABS CONST UNTYP. ASEG 120
WHILE REL CONST PUB UNTYP. CODE 183C
WIPE REL CONST PUB UNTYP. CODE 1F60
WITHIN REL CONST PUB UNTYP. CODE 190C
WORDD REL CONST PUB UNTYP. CODE 1266
WORDS REL CONST PUB UNTYP. CODE 1A04
XDOES REL CONST PUB UNTYP. CODE 1690
XISQUOTE REL CONST PUB UNTYP. CODE EF4
XORR REL CONST PUB UNTYP. CODE 476
XSQUOTE REL CONST PUB UNTYP. CODE F0C
ZERO REL CONST PUB UNTYP. CODE 87C
ZEROEQUAL REL CONST PUB UNTYP. CODE 532
ZEROLESS REL CONST PUB UNTYP. CODE 542
ZEROS REL CONST PUB UNTYP. CODE 1A82
ZEROS1 REL CONST UNTYP. CODE 1A84
ZEROS2 REL CONST UNTYP. CODE 1A96
- 4e-configLP - Page 166
ZEROUDOTR REL CONST PUB UNTYP. CODE 1A6E
__MSP430G2203__ REL CONST UNTYP. CODE Not solved
abort1 REL CONST UNTYP. CODE 1598
boot1 REL CONST UNTYP. CODE 1EC0
bran REL CONST PUB UNTYP. CODE 5D4
cclr REL CONST PUB UNTYP. CODE 1D1A
ccrc1 REL CONST UNTYP. CODE 1B5A
ccrc2 REL CONST UNTYP. CODE 1B62
cget REL CONST PUB UNTYP. CODE 1D4A
cget1 REL CONST UNTYP. CODE 1D56
cget2 REL CONST UNTYP. CODE 1D58
cor ABS CONST EXT [011] UNTYP. __EXTERNS Solved Extern
crcval ABS CONST EXT [019] UNTYP. __EXTERNS Solved Extern
cset REL CONST PUB UNTYP. CODE 1CEE
ctoggle REL CONST PUB UNTYP. CODE 1D34
doboot0 REL CONST UNTYP. CODE 1DEF
doboot1 REL CONST UNTYP. CODE 1DF6
dobran REL CONST UNTYP. CODE 5D6
docreate REL CONST PUB UNTYP. CODE A2
dodoes REL CONST PUB UNTYP. CODE DE
donext REL CONST UNTYP. CODE 834
donoop REL CONST UNTYP. CODE 834
dotcold0 REL CONST UNTYP. CODE 1EDD
dotcold1 REL CONST UNTYP. CODE 1EE2
green REL CONST PUB UNTYP. CODE 2000
ih1 REL CONST UNTYP. CODE 1E08
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 [017] UNTYP. __EXTERNS Solved Extern
intvecs ABS CONST EXT [018] UNTYP. __EXTERNS Solved Extern
invalid REL CONST UNTYP. CODE 1EA2
lastword REL CONST PUB UNTYP. CODE 2015
link REL VAR UNTYP. CODE 2015
lit REL CONST PUB UNTYP. CODE 52
ms1 REL CONST UNTYP. CODE 1FC2
nullirq ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern
onems1 REL CONST UNTYP. CODE 1FA4
onems2 REL CONST UNTYP. CODE 1FAC
pcrc1 REL CONST UNTYP. CODE 1B82
pcrc2 REL CONST UNTYP. CODE 1B90
pcrc3 REL CONST UNTYP. CODE 1B92
qbran REL CONST PUB UNTYP. CODE 5E8
red REL CONST PUB UNTYP. CODE 1FF0
reset1 REL CONST UNTYP. CODE 1EB0
resetvec ABS CONST EXT [016] UNTYP. __EXTERNS Solved Extern
stamp REL CONST UNTYP. CODE 20
stamp0 REL CONST UNTYP. CODE 21
stampend REL CONST UNTYP. CODE 37
uareasize ABS CONST UNTYP. CODE 22
uinitend REL CONST UNTYP. CODE B20
uinitstart REL CONST UNTYP. CODE AFE
valid REL CONST UNTYP. CODE 1EA0
ver0 REL CONST UNTYP. CODE 3
verend REL CONST UNTYP. CODE 20
version REL CONST UNTYP. CODE 2
warm0 REL CONST UNTYP. CODE 1ECF
warm1 REL CONST UNTYP. CODE 1ED4
wclr REL CONST PUB UNTYP. CODE 1D04
wipe1 REL CONST UNTYP. CODE 1F6C
wipmsg0 REL CONST UNTYP. CODE 1F87
wipmsg1 REL CONST UNTYP. CODE 1F8E
wset REL CONST PUB UNTYP. CODE 1CD8
xdo REL CONST PUB UNTYP. CODE 5FE
xloop REL CONST PUB UNTYP. CODE 624
xplusloop REL CONST PUB UNTYP. CODE 644
##############################
# CRC:7841 #
# Errors: 0 #
# Warnings: 0 #
# Bytes: 8228 #
##############################