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