- 4e-configLP - Page 1 ############################################################################### # # # IAR Assembler V5.30.1.50284/W32 for MSP430 20/Dec/2013 02:05:26 # # Copyright 1996-2011 IAR Systems AB. # # # # Target option = MSP430 # # Source file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-configLP.s43# # List file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\4e-configLP.lst# # Object file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\4e-configLP.r43# # Command line = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-configLP.s43 # # -OC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\ # # -s+ -M<> -w+ # # -LC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\ # # -i -p80 -t8 -xD -r -D__MSP430G2553__ # # -IC:\Programme\IAR Systems\Embedded Workbench 6.0 Kickstart\430\INC\ # # # ############################################################################### 1 000000 ; configure 4e4th for MSP430-LaunchPad =================================== 2 000000 3 000000 RSEG CODE ; place program in 'CODE' segment 4 000000 5 000000 link SET 0 ; initial dictionary link 6 000000 7 000000 #include "msp430.h" ; #define controlled include file 1 000000 /*********************************************** ******************** 2 000000 * * 3 000000 * This file is a generic include file controlled by * 4 000000 * compiler/assembler IDE generated defines * 5 000000 * * 6 000000 ************************************************ *******************/ 7 000000 8 000000 #ifndef __msp430 9 000000 #define __msp430 10 000000 11 000000 #ifndef _SYSTEM_BUILD 12 000000 #pragma system_include 13 000000 #endif 14 000000 15 000000 #if defined (__MSP430C111__) 16 000000 #include "msp430c111.h" 18 000000 #elif defined (__MSP430C1111__) 19 000000 #include "msp430c1111.h" 21 000000 #elif defined (__MSP430C112__) 22 000000 #include "msp430c112.h" 24 000000 #elif defined (__MSP430C1121__) 25 000000 #include "msp430c1121.h" 27 000000 #elif defined (__MSP430C1331__) 28 000000 #include "msp430c1331.h" 30 000000 #elif defined (__MSP430C1351__) 31 000000 #include "msp430c1351.h" 33 000000 #elif defined (__MSP430C311S__) 34 000000 #include "msp430c311s.h" 36 000000 #elif defined (__MSP430C312__) 37 000000 #include "msp430c312.h" 39 000000 #elif defined (__MSP430C313__) 40 000000 #include "msp430c313.h" 42 000000 #elif defined (__MSP430C314__) 43 000000 #include "msp430c314.h" 45 000000 #elif defined (__MSP430C315__) 46 000000 #include "msp430c315.h" 48 000000 #elif defined (__MSP430C323__) 49 000000 #include "msp430c323.h" 51 000000 #elif defined (__MSP430C325__) 52 000000 #include "msp430c325.h" 54 000000 #elif defined (__MSP430C336__) 55 000000 #include "msp430c336.h" 57 000000 #elif defined (__MSP430C337__) - 4e-configLP - Page 2 58 000000 #include "msp430c337.h" 60 000000 #elif defined (__MSP430C412__) 61 000000 #include "msp430c412.h" 63 000000 #elif defined (__MSP430C413__) 64 000000 #include "msp430c413.h" 66 000000 #elif defined (__MSP430CG4616__) 67 000000 #include "msp430cg4616.h" 69 000000 #elif defined (__MSP430CG4617__) 70 000000 #include "msp430cg4617.h" 72 000000 #elif defined (__MSP430CG4618__) 73 000000 #include "msp430cg4618.h" 75 000000 #elif defined (__MSP430CG4619__) 76 000000 #include "msp430cg4619.h" 78 000000 #elif defined (__MSP430E112__) 79 000000 #include "msp430e112.h" 81 000000 #elif defined (__MSP430E313__) 82 000000 #include "msp430e313.h" 84 000000 #elif defined (__MSP430E315__) 85 000000 #include "msp430e315.h" 87 000000 #elif defined (__MSP430E325__) 88 000000 #include "msp430e325.h" 90 000000 #elif defined (__MSP430E337__) 91 000000 #include "msp430e337.h" 93 000000 #elif defined (__MSP430F110__) 94 000000 #include "msp430f110.h" 96 000000 #elif defined (__MSP430F1101__) 97 000000 #include "msp430f1101.h" 99 000000 #elif defined (__MSP430F1101A__) 100 000000 #include "msp430f1101a.h" 102 000000 #elif defined (__MSP430F1111__) 103 000000 #include "msp430f1111.h" 105 000000 #elif defined (__MSP430F1111A__) 106 000000 #include "msp430f1111a.h" 108 000000 #elif defined (__MSP430F112__) 109 000000 #include "msp430f112.h" 111 000000 #elif defined (__MSP430F1121__) 112 000000 #include "msp430f1121.h" 114 000000 #elif defined (__MSP430F1121A__) 115 000000 #include "msp430f1121a.h" 117 000000 #elif defined (__MSP430F1122__) 118 000000 #include "msp430f1122.h" 120 000000 #elif defined (__MSP430F1132__) 121 000000 #include "msp430f1132.h" 123 000000 #elif defined (__MSP430F122__) 124 000000 #include "msp430f122.h" 126 000000 #elif defined (__MSP430F1222__) 127 000000 #include "msp430f1222.h" 129 000000 #elif defined (__MSP430F123__) 130 000000 #include "msp430f123.h" 132 000000 #elif defined (__MSP430F1232__) 133 000000 #include "msp430f1232.h" 135 000000 #elif defined (__MSP430F133__) 136 000000 #include "msp430f133.h" 138 000000 #elif defined (__MSP430F135__) 139 000000 #include "msp430f135.h" 141 000000 #elif defined (__MSP430F147__) 142 000000 #include "msp430f147.h" 144 000000 #elif defined (__MSP430F148__) 145 000000 #include "msp430f148.h" 147 000000 #elif defined (__MSP430F149__) 148 000000 #include "msp430f149.h" 150 000000 #elif defined (__MSP430F1471__) 151 000000 #include "msp430f1471.h" 153 000000 #elif defined (__MSP430F1481__) 154 000000 #include "msp430f1481.h" 156 000000 #elif defined (__MSP430F1491__) 157 000000 #include "msp430f1491.h" 159 000000 #elif defined (__MSP430F155__) 160 000000 #include "msp430f155.h" 162 000000 #elif defined (__MSP430F156__) 163 000000 #include "msp430f156.h" 165 000000 #elif defined (__MSP430F157__) 166 000000 #include "msp430f157.h" 168 000000 #elif defined (__MSP430F167__) 169 000000 #include "msp430f167.h" 171 000000 #elif defined (__MSP430F168__) 172 000000 #include "msp430f168.h" 174 000000 #elif defined (__MSP430F169__) - 4e-configLP - Page 3 175 000000 #include "msp430f169.h" 177 000000 #elif defined (__MSP430F1610__) 178 000000 #include "msp430f1610.h" 180 000000 #elif defined (__MSP430F1611__) 181 000000 #include "msp430f1611.h" 183 000000 #elif defined (__MSP430F1612__) 184 000000 #include "msp430f1612.h" 186 000000 #elif defined (__MSP430F2001__) 187 000000 #include "msp430f2001.h" 189 000000 #elif defined (__MSP430F2011__) 190 000000 #include "msp430f2011.h" 192 000000 #elif defined (__MSP430F2002__) 193 000000 #include "msp430f2002.h" 195 000000 #elif defined (__MSP430F2012__) 196 000000 #include "msp430f2012.h" 198 000000 #elif defined (__MSP430F2003__) 199 000000 #include "msp430f2003.h" 201 000000 #elif defined (__MSP430F2013__) 202 000000 #include "msp430f2013.h" 204 000000 #elif defined (__MSP430F2101__) 205 000000 #include "msp430f2101.h" 207 000000 #elif defined (__MSP430F2111__) 208 000000 #include "msp430f2111.h" 210 000000 #elif defined (__MSP430F2121__) 211 000000 #include "msp430f2121.h" 213 000000 #elif defined (__MSP430F2131__) 214 000000 #include "msp430f2131.h" 216 000000 #elif defined (__MSP430F2112__) 217 000000 #include "msp430f2112.h" 219 000000 #elif defined (__MSP430F2122__) 220 000000 #include "msp430f2122.h" 222 000000 #elif defined (__MSP430F2132__) 223 000000 #include "msp430f2132.h" 225 000000 #elif defined (__MSP430F2232__) 226 000000 #include "msp430f2232.h" 228 000000 #elif defined (__MSP430F2252__) 229 000000 #include "msp430f2252.h" 231 000000 #elif defined (__MSP430F2272__) 232 000000 #include "msp430f2272.h" 234 000000 #elif defined (__MSP430F2234__) 235 000000 #include "msp430f2234.h" 237 000000 #elif defined (__MSP430F2254__) 238 000000 #include "msp430f2254.h" 240 000000 #elif defined (__MSP430F2274__) 241 000000 #include "msp430f2274.h" 243 000000 #elif defined (__MSP430F2330__) 244 000000 #include "msp430f2330.h" 246 000000 #elif defined (__MSP430F2350__) 247 000000 #include "msp430f2350.h" 249 000000 #elif defined (__MSP430F2370__) 250 000000 #include "msp430f2370.h" 252 000000 #elif defined (__MSP430F233__) 253 000000 #include "msp430f233.h" 255 000000 #elif defined (__MSP430F235__) 256 000000 #include "msp430f235.h" 258 000000 #elif defined (__MSP430F247__) 259 000000 #include "msp430f247.h" 261 000000 #elif defined (__MSP430F248__) 262 000000 #include "msp430f248.h" 264 000000 #elif defined (__MSP430F249__) 265 000000 #include "msp430f249.h" 267 000000 #elif defined (__MSP430F2410__) 268 000000 #include "msp430f2410.h" 270 000000 #elif defined (__MSP430F2471__) 271 000000 #include "msp430f2471.h" 273 000000 #elif defined (__MSP430F2481__) 274 000000 #include "msp430f2481.h" 276 000000 #elif defined (__MSP430F2491__) 277 000000 #include "msp430f2491.h" 279 000000 #elif defined (__MSP430F2416__) 280 000000 #include "msp430f2416.h" 282 000000 #elif defined (__MSP430F2417__) 283 000000 #include "msp430f2417.h" 285 000000 #elif defined (__MSP430F2418__) 286 000000 #include "msp430f2418.h" 288 000000 #elif defined (__MSP430F2419__) 289 000000 #include "msp430f2419.h" 291 000000 #elif defined (__MSP430F2616__) - 4e-configLP - Page 4 292 000000 #include "msp430f2616.h" 294 000000 #elif defined (__MSP430F2617__) 295 000000 #include "msp430f2617.h" 297 000000 #elif defined (__MSP430F2618__) 298 000000 #include "msp430f2618.h" 300 000000 #elif defined (__MSP430F2619__) 301 000000 #include "msp430f2619.h" 303 000000 #elif defined (__MSP430F412__) 304 000000 #include "msp430f412.h" 306 000000 #elif defined (__MSP430F413__) 307 000000 #include "msp430f413.h" 309 000000 #elif defined (__MSP430F415__) 310 000000 #include "msp430f415.h" 312 000000 #elif defined (__MSP430F417__) 313 000000 #include "msp430f417.h" 315 000000 #elif defined (__MSP430F4132__) 316 000000 #include "msp430f4132.h" 318 000000 #elif defined (__MSP430F4152__) 319 000000 #include "msp430f4152.h" 321 000000 #elif defined (__MSP430F423__) 322 000000 #include "msp430f423.h" 324 000000 #elif defined (__MSP430F425__) 325 000000 #include "msp430f425.h" 327 000000 #elif defined (__MSP430F427__) 328 000000 #include "msp430f427.h" 330 000000 #elif defined (__MSP430F423A__) 331 000000 #include "msp430f423a.h" 333 000000 #elif defined (__MSP430F425A__) 334 000000 #include "msp430f425a.h" 336 000000 #elif defined (__MSP430F427A__) 337 000000 #include "msp430f427a.h" 339 000000 #elif defined (__MSP430F435__) 340 000000 #include "msp430f435.h" 342 000000 #elif defined (__MSP430F436__) 343 000000 #include "msp430f436.h" 345 000000 #elif defined (__MSP430F437__) 346 000000 #include "msp430f437.h" 348 000000 #elif defined (__MSP430F4351__) 349 000000 #include "msp430f4351.h" 351 000000 #elif defined (__MSP430F4361__) 352 000000 #include "msp430f4361.h" 354 000000 #elif defined (__MSP430F4371__) 355 000000 #include "msp430f4371.h" 357 000000 #elif defined (__MSP430F4481__) 358 000000 #include "msp430f4481.h" 360 000000 #elif defined (__MSP430F4491__) 361 000000 #include "msp430f4491.h" 363 000000 #elif defined (__MSP430F447__) 364 000000 #include "msp430f447.h" 366 000000 #elif defined (__MSP430F448__) 367 000000 #include "msp430f448.h" 369 000000 #elif defined (__MSP430F449__) 370 000000 #include "msp430f449.h" 372 000000 #elif defined (__MSP430FE423__) 373 000000 #include "msp430fe423.h" 375 000000 #elif defined (__MSP430FE425__) 376 000000 #include "msp430fe425.h" 378 000000 #elif defined (__MSP430FE427__) 379 000000 #include "msp430fe427.h" 381 000000 #elif defined (__MSP430FE423A__) 382 000000 #include "msp430fe423a.h" 384 000000 #elif defined (__MSP430FE425A__) 385 000000 #include "msp430fe425a.h" 387 000000 #elif defined (__MSP430FE427A__) 388 000000 #include "msp430fe427a.h" 390 000000 #elif defined (__MSP430FE4232__) 391 000000 #include "msp430fe4232.h" 393 000000 #elif defined (__MSP430FE4242__) 394 000000 #include "msp430fe4242.h" 396 000000 #elif defined (__MSP430FE4252__) 397 000000 #include "msp430fe4252.h" 399 000000 #elif defined (__MSP430FE4272__) 400 000000 #include "msp430fe4272.h" 402 000000 #elif defined (__MSP430F4783__) 403 000000 #include "msp430f4783.h" 405 000000 #elif defined (__MSP430F4793__) 406 000000 #include "msp430f4793.h" 408 000000 #elif defined (__MSP430F4784__) - 4e-configLP - Page 5 409 000000 #include "msp430f4784.h" 411 000000 #elif defined (__MSP430F4794__) 412 000000 #include "msp430f4794.h" 414 000000 #elif defined (__MSP430F47126__) 415 000000 #include "msp430f47126.h" 417 000000 #elif defined (__MSP430F47127__) 418 000000 #include "msp430f47127.h" 420 000000 #elif defined (__MSP430F47163__) 421 000000 #include "msp430f47163.h" 423 000000 #elif defined (__MSP430F47173__) 424 000000 #include "msp430f47173.h" 426 000000 #elif defined (__MSP430F47183__) 427 000000 #include "msp430f47183.h" 429 000000 #elif defined (__MSP430F47193__) 430 000000 #include "msp430f47193.h" 432 000000 #elif defined (__MSP430F47166__) 433 000000 #include "msp430f47166.h" 435 000000 #elif defined (__MSP430F47176__) 436 000000 #include "msp430f47176.h" 438 000000 #elif defined (__MSP430F47186__) 439 000000 #include "msp430f47186.h" 441 000000 #elif defined (__MSP430F47196__) 442 000000 #include "msp430f47196.h" 444 000000 #elif defined (__MSP430F47167__) 445 000000 #include "msp430f47167.h" 447 000000 #elif defined (__MSP430F47177__) 448 000000 #include "msp430f47177.h" 450 000000 #elif defined (__MSP430F47187__) 451 000000 #include "msp430f47187.h" 453 000000 #elif defined (__MSP430F47197__) 454 000000 #include "msp430f47197.h" 456 000000 #elif defined (__MSP430F4250__) 457 000000 #include "msp430f4250.h" 459 000000 #elif defined (__MSP430F4260__) 460 000000 #include "msp430f4260.h" 462 000000 #elif defined (__MSP430F4270__) 463 000000 #include "msp430f4270.h" 465 000000 #elif defined (__MSP430FG4250__) 466 000000 #include "msp430fg4250.h" 468 000000 #elif defined (__MSP430FG4260__) 469 000000 #include "msp430fg4260.h" 471 000000 #elif defined (__MSP430FG4270__) 472 000000 #include "msp430fg4270.h" 474 000000 #elif defined (__MSP430FW423__) 475 000000 #include "msp430fw423.h" 477 000000 #elif defined (__MSP430FW425__) 478 000000 #include "msp430fw425.h" 480 000000 #elif defined (__MSP430FW427__) 481 000000 #include "msp430fw427.h" 483 000000 #elif defined (__MSP430FW428__) 484 000000 #include "msp430fw428.h" 486 000000 #elif defined (__MSP430FW429__) 487 000000 #include "msp430fw429.h" 489 000000 #elif defined (__MSP430FG437__) 490 000000 #include "msp430fg437.h" 492 000000 #elif defined (__MSP430FG438__) 493 000000 #include "msp430fg438.h" 495 000000 #elif defined (__MSP430FG439__) 496 000000 #include "msp430fg439.h" 498 000000 #elif defined (__MSP430F438__) 499 000000 #include "msp430f438.h" 501 000000 #elif defined (__MSP430F439__) 502 000000 #include "msp430f439.h" 504 000000 #elif defined (__MSP430F477__) 505 000000 #include "msp430f477.h" 507 000000 #elif defined (__MSP430F478__) 508 000000 #include "msp430f478.h" 510 000000 #elif defined (__MSP430F479__) 511 000000 #include "msp430f479.h" 513 000000 #elif defined (__MSP430FG477__) 514 000000 #include "msp430fg477.h" 516 000000 #elif defined (__MSP430FG478__) 517 000000 #include "msp430fg478.h" 519 000000 #elif defined (__MSP430FG479__) 520 000000 #include "msp430fg479.h" 522 000000 #elif defined (__MSP430F46161__) 523 000000 #include "msp430f46161.h" 525 000000 #elif defined (__MSP430F46171__) - 4e-configLP - Page 6 526 000000 #include "msp430f46171.h" 528 000000 #elif defined (__MSP430F46181__) 529 000000 #include "msp430f46181.h" 531 000000 #elif defined (__MSP430F46191__) 532 000000 #include "msp430f46191.h" 534 000000 #elif defined (__MSP430F4616__) 535 000000 #include "msp430f4616.h" 537 000000 #elif defined (__MSP430F4617__) 538 000000 #include "msp430f4617.h" 540 000000 #elif defined (__MSP430F4618__) 541 000000 #include "msp430f4618.h" 543 000000 #elif defined (__MSP430F4619__) 544 000000 #include "msp430f4619.h" 546 000000 #elif defined (__MSP430FG4616__) 547 000000 #include "msp430fg4616.h" 549 000000 #elif defined (__MSP430FG4617__) 550 000000 #include "msp430fg4617.h" 552 000000 #elif defined (__MSP430FG4618__) 553 000000 #include "msp430fg4618.h" 555 000000 #elif defined (__MSP430FG4619__) 556 000000 #include "msp430fg4619.h" 558 000000 #elif defined (__MSP430F5418__) 559 000000 #include "msp430f5418.h" 561 000000 #elif defined (__MSP430F5419__) 562 000000 #include "msp430f5419.h" 564 000000 #elif defined (__MSP430F5435__) 565 000000 #include "msp430f5435.h" 567 000000 #elif defined (__MSP430F5436__) 568 000000 #include "msp430f5436.h" 570 000000 #elif defined (__MSP430F5437__) 571 000000 #include "msp430f5437.h" 573 000000 #elif defined (__MSP430F5438__) 574 000000 #include "msp430f5438.h" 576 000000 #elif defined (__XMS430F5438__) 577 000000 #include "xms430f5438.h" 579 000000 #elif defined (__MSP430F5418A__) 580 000000 #include "msp430f5418a.h" 582 000000 #elif defined (__MSP430F5419A__) 583 000000 #include "msp430f5419a.h" 585 000000 #elif defined (__MSP430F5435A__) 586 000000 #include "msp430f5435a.h" 588 000000 #elif defined (__MSP430F5436A__) 589 000000 #include "msp430f5436a.h" 591 000000 #elif defined (__MSP430F5437A__) 592 000000 #include "msp430f5437a.h" 594 000000 #elif defined (__MSP430F5438A__) 595 000000 #include "msp430f5438a.h" 597 000000 #elif defined (__MSP430F5304__) 598 000000 #include "msp430f5304.h" 600 000000 #elif defined (__MSP430F5308__) 601 000000 #include "msp430f5308.h" 603 000000 #elif defined (__MSP430F5309__) 604 000000 #include "msp430f5309.h" 606 000000 #elif defined (__MSP430F5310__) 607 000000 #include "msp430f5310.h" 609 000000 #elif defined (__MSP430F5340__) 610 000000 #include "msp430f5340.h" 612 000000 #elif defined (__MSP430F5341__) 613 000000 #include "msp430f5341.h" 615 000000 #elif defined (__MSP430F5342__) 616 000000 #include "msp430f5342.h" 618 000000 #elif defined (__MSP430F5324__) 619 000000 #include "msp430f5324.h" 621 000000 #elif defined (__MSP430F5325__) 622 000000 #include "msp430f5325.h" 624 000000 #elif defined (__MSP430F5326__) 625 000000 #include "msp430f5326.h" 627 000000 #elif defined (__MSP430F5327__) 628 000000 #include "msp430f5327.h" 630 000000 #elif defined (__MSP430F5328__) 631 000000 #include "msp430f5328.h" 633 000000 #elif defined (__MSP430F5329__) 634 000000 #include "msp430f5329.h" 636 000000 #elif defined (__MSP430F5500__) 637 000000 #include "msp430f5500.h" 639 000000 #elif defined (__MSP430F5501__) 640 000000 #include "msp430f5501.h" 642 000000 #elif defined (__MSP430F5502__) - 4e-configLP - Page 7 643 000000 #include "msp430f5502.h" 645 000000 #elif defined (__MSP430F5503__) 646 000000 #include "msp430f5503.h" 648 000000 #elif defined (__MSP430F5504__) 649 000000 #include "msp430f5504.h" 651 000000 #elif defined (__MSP430F5505__) 652 000000 #include "msp430f5505.h" 654 000000 #elif defined (__MSP430F5506__) 655 000000 #include "msp430f5506.h" 657 000000 #elif defined (__MSP430F5507__) 658 000000 #include "msp430f5507.h" 660 000000 #elif defined (__MSP430F5508__) 661 000000 #include "msp430f5508.h" 663 000000 #elif defined (__MSP430F5509__) 664 000000 #include "msp430f5509.h" 666 000000 #elif defined (__MSP430F5510__) 667 000000 #include "msp430f5510.h" 669 000000 #elif defined (__MSP430F5513__) 670 000000 #include "msp430f5513.h" 672 000000 #elif defined (__MSP430F5514__) 673 000000 #include "msp430f5514.h" 675 000000 #elif defined (__MSP430F5515__) 676 000000 #include "msp430f5515.h" 678 000000 #elif defined (__MSP430F5517__) 679 000000 #include "msp430f5517.h" 681 000000 #elif defined (__MSP430F5519__) 682 000000 #include "msp430f5519.h" 684 000000 #elif defined (__MSP430F5521__) 685 000000 #include "msp430f5521.h" 687 000000 #elif defined (__MSP430F5522__) 688 000000 #include "msp430f5522.h" 690 000000 #elif defined (__MSP430F5524__) 691 000000 #include "msp430f5524.h" 693 000000 #elif defined (__MSP430F5525__) 694 000000 #include "msp430f5525.h" 696 000000 #elif defined (__MSP430F5526__) 697 000000 #include "msp430f5526.h" 699 000000 #elif defined (__MSP430F5527__) 700 000000 #include "msp430f5527.h" 702 000000 #elif defined (__MSP430F5528__) 703 000000 #include "msp430f5528.h" 705 000000 #elif defined (__MSP430F5529__) 706 000000 #include "msp430f5529.h" 708 000000 #elif defined (__MSP430P112__) 709 000000 #include "msp430p112.h" 711 000000 #elif defined (__MSP430P313__) 712 000000 #include "msp430p313.h" 714 000000 #elif defined (__MSP430P315__) 715 000000 #include "msp430p315.h" 717 000000 #elif defined (__MSP430P315S__) 718 000000 #include "msp430p315s.h" 720 000000 #elif defined (__MSP430P325__) 721 000000 #include "msp430p325.h" 723 000000 #elif defined (__MSP430P337__) 724 000000 #include "msp430p337.h" 726 000000 #elif defined (__CC430F5133__) 727 000000 #include "cc430f5133.h" 729 000000 #elif defined (__CC430F5135__) 730 000000 #include "cc430f5135.h" 732 000000 #elif defined (__CC430F5137__) 733 000000 #include "cc430f5137.h" 735 000000 #elif defined (__CC430F6125__) 736 000000 #include "cc430f6125.h" 738 000000 #elif defined (__CC430F6126__) 739 000000 #include "cc430f6126.h" 741 000000 #elif defined (__CC430F6127__) 742 000000 #include "cc430f6127.h" 744 000000 #elif defined (__CC430F6135__) 745 000000 #include "cc430f6135.h" 747 000000 #elif defined (__CC430F6137__) 748 000000 #include "cc430f6137.h" 750 000000 #elif defined (__MSP430F5630__) 751 000000 #include "msp430f5630.h" 753 000000 #elif defined (__MSP430F5631__) 754 000000 #include "msp430f5631.h" 756 000000 #elif defined (__MSP430F5632__) 757 000000 #include "msp430f5632.h" 759 000000 #elif defined (__MSP430F5633__) - 4e-configLP - Page 8 760 000000 #include "msp430f5633.h" 762 000000 #elif defined (__MSP430F5634__) 763 000000 #include "msp430f5634.h" 765 000000 #elif defined (__MSP430F5635__) 766 000000 #include "msp430f5635.h" 768 000000 #elif defined (__MSP430F5636__) 769 000000 #include "msp430f5636.h" 771 000000 #elif defined (__MSP430F5637__) 772 000000 #include "msp430f5637.h" 774 000000 #elif defined (__MSP430F5638__) 775 000000 #include "msp430f5638.h" 777 000000 #elif defined (__MSP430F6630__) 778 000000 #include "msp430f6630.h" 780 000000 #elif defined (__MSP430F6631__) 781 000000 #include "msp430f6631.h" 783 000000 #elif defined (__MSP430F6632__) 784 000000 #include "msp430f6632.h" 786 000000 #elif defined (__MSP430F6633__) 787 000000 #include "msp430f6633.h" 789 000000 #elif defined (__MSP430F6634__) 790 000000 #include "msp430f6634.h" 792 000000 #elif defined (__MSP430F6635__) 793 000000 #include "msp430f6635.h" 795 000000 #elif defined (__MSP430F6636__) 796 000000 #include "msp430f6636.h" 798 000000 #elif defined (__MSP430F6637__) 799 000000 #include "msp430f6637.h" 801 000000 #elif defined (__MSP430F6638__) 802 000000 #include "msp430f6638.h" 804 000000 #elif defined (__MSP430L092__) 805 000000 #include "msp430l092.h" 807 000000 #elif defined (__MSP430C091__) 808 000000 #include "msp430c091.h" 810 000000 #elif defined (__MSP430C092__) 811 000000 #include "msp430c092.h" 813 000000 #elif defined (__MSP430F5131__) 814 000000 #include "msp430f5131.h" 816 000000 #elif defined (__MSP430F5151__) 817 000000 #include "msp430f5151.h" 819 000000 #elif defined (__MSP430F5171__) 820 000000 #include "msp430f5171.h" 822 000000 #elif defined (__MSP430F5132__) 823 000000 #include "msp430f5132.h" 825 000000 #elif defined (__MSP430F5152__) 826 000000 #include "msp430f5152.h" 828 000000 #elif defined (__MSP430F5172__) 829 000000 #include "msp430f5172.h" 831 000000 #elif defined (__MSP430FR5720__) 832 000000 #include "msp430fr5720.h" 834 000000 #elif defined (__MSP430FR5725__) 835 000000 #include "msp430fr5725.h" 837 000000 #elif defined (__MSP430FR5728__) 838 000000 #include "msp430fr5728.h" 840 000000 #elif defined (__MSP430FR5729__) 841 000000 #include "msp430fr5729.h" 843 000000 #elif defined (__MSP430FR5730__) 844 000000 #include "msp430fr5730.h" 846 000000 #elif defined (__MSP430FR5735__) 847 000000 #include "msp430fr5735.h" 849 000000 #elif defined (__MSP430FR5738__) 850 000000 #include "msp430fr5738.h" 852 000000 #elif defined (__MSP430FR5739__) 853 000000 #include "msp430fr5739.h" 855 000000 #elif defined (__MSP430G2211__) 856 000000 #include "msp430g2211.h" 858 000000 #elif defined (__MSP430G2201__) 859 000000 #include "msp430g2201.h" 861 000000 #elif defined (__MSP430G2111__) 862 000000 #include "msp430g2111.h" 864 000000 #elif defined (__MSP430G2101__) 865 000000 #include "msp430g2101.h" 867 000000 #elif defined (__MSP430G2001__) 868 000000 #include "msp430g2001.h" 870 000000 #elif defined (__MSP430G2231__) 871 000000 #include "msp430g2231.h" 873 000000 #elif defined (__MSP430G2221__) 874 000000 #include "msp430g2221.h" 876 000000 #elif defined (__MSP430G2131__) - 4e-configLP - Page 9 877 000000 #include "msp430g2131.h" 879 000000 #elif defined (__MSP430G2121__) 880 000000 #include "msp430g2121.h" 882 000000 #elif defined (__MSP430AFE221__) 883 000000 #include "msp430afe221.h" 885 000000 #elif defined (__MSP430AFE231__) 886 000000 #include "msp430afe231.h" 888 000000 #elif defined (__MSP430AFE251__) 889 000000 #include "msp430afe251.h" 891 000000 #elif defined (__MSP430AFE222__) 892 000000 #include "msp430afe222.h" 894 000000 #elif defined (__MSP430AFE232__) 895 000000 #include "msp430afe232.h" 897 000000 #elif defined (__MSP430AFE252__) 898 000000 #include "msp430afe252.h" 900 000000 #elif defined (__MSP430AFE223__) 901 000000 #include "msp430afe223.h" 903 000000 #elif defined (__MSP430AFE233__) 904 000000 #include "msp430afe233.h" 906 000000 #elif defined (__MSP430AFE253__) 907 000000 #include "msp430afe253.h" 909 000000 #elif defined (__MSP430G2102__) 910 000000 #include "msp430g2102.h" 912 000000 #elif defined (__MSP430G2202__) 913 000000 #include "msp430g2202.h" 915 000000 #elif defined (__MSP430G2302__) 916 000000 #include "msp430g2302.h" 918 000000 #elif defined (__MSP430G2402__) 919 000000 #include "msp430g2402.h" 921 000000 #elif defined (__MSP430G2132__) 922 000000 #include "msp430g2132.h" 924 000000 #elif defined (__MSP430G2232__) 925 000000 #include "msp430g2232.h" 927 000000 #elif defined (__MSP430G2332__) 928 000000 #include "msp430g2332.h" 930 000000 #elif defined (__MSP430G2432__) 931 000000 #include "msp430g2432.h" 933 000000 #elif defined (__MSP430G2112__) 934 000000 #include "msp430g2112.h" 936 000000 #elif defined (__MSP430G2212__) 937 000000 #include "msp430g2212.h" 939 000000 #elif defined (__MSP430G2312__) 940 000000 #include "msp430g2312.h" 942 000000 #elif defined (__MSP430G2412__) 943 000000 #include "msp430g2412.h" 945 000000 #elif defined (__MSP430G2152__) 946 000000 #include "msp430g2152.h" 948 000000 #elif defined (__MSP430G2252__) 949 000000 #include "msp430g2252.h" 951 000000 #elif defined (__MSP430G2352__) 952 000000 #include "msp430g2352.h" 954 000000 #elif defined (__MSP430G2452__) 955 000000 #include "msp430g2452.h" 957 000000 #elif defined (__MSP430G2113__) 958 000000 #include "msp430g2113.h" 960 000000 #elif defined (__MSP430G2213__) 961 000000 #include "msp430g2213.h" 963 000000 #elif defined (__MSP430G2313__) 964 000000 #include "msp430g2313.h" 966 000000 #elif defined (__MSP430G2413__) 967 000000 #include "msp430g2413.h" 969 000000 #elif defined (__MSP430G2513__) 970 000000 #include "msp430g2513.h" 972 000000 #elif defined (__MSP430G2153__) 973 000000 #include "msp430g2153.h" 975 000000 #elif defined (__MSP430G2253__) 976 000000 #include "msp430g2253.h" 978 000000 #elif defined (__MSP430G2353__) 979 000000 #include "msp430g2353.h" 981 000000 #elif defined (__MSP430G2453__) 982 000000 #include "msp430g2453.h" 984 000000 #elif defined (__MSP430G2553__) 985 000000 #include "msp430g2553.h" 1 000000 /*********************************************** ********************* 2 000000 * 3 000000 * Standard register and bit definitions for the Texas Instruments - 4e-configLP - Page 10 4 000000 * MSP430 microcontroller. 5 000000 * 6 000000 * This file supports assembler and C development for 7 000000 * MSP430G2553 devices. 8 000000 * 9 000000 * Texas Instruments, Version 1.0 10 000000 * 11 000000 * Rev. 1.0, Setup 12 000000 * 13 000000 ************************************************ ********************/ 14 000000 15 000000 #ifndef __MSP430G2553 16 000000 #define __MSP430G2553 17 000000 18 000000 #ifdef __IAR_SYSTEMS_ICC__ 19 000000 #ifndef _SYSTEM_BUILD 20 000000 #pragma system_include 21 000000 #endif 22 000000 #endif 23 000000 24 000000 #if (((__TID__ >> 8) & 0x7F) != 0x2b) /* 0x2b = 43 dec */ 25 000000 #error msp430g2553.h file for use with ICC430/A430 only 26 000000 #endif 27 000000 28 000000 29 000000 #ifdef __IAR_SYSTEMS_ICC__ 30 000000 #include "in430.h" 31 000000 #pragma language=extended 33 000000 #define DEFC(name, address) __no_init volatile unsigned char name @ address; 34 000000 #define DEFW(name, address) __no_init volatile unsigned short name @ address; 35 000000 #define DEFXC volatile unsigned char 36 000000 #define DEFXW volatile unsigned short 38 000000 #endif /* __IAR_SYSTEMS_ICC__ */ 39 000000 40 000000 41 000000 #ifdef __IAR_SYSTEMS_ASM__ 42 000000 #define DEFC(name, address) sfrb name = address; 43 000000 #define DEFW(name, address) sfrw name = address; 44 000000 45 000000 #endif /* __IAR_SYSTEMS_ASM__*/ 46 000000 47 000000 #ifdef __cplusplus 48 000000 #define READ_ONLY 49 000000 #else 50 000000 #define READ_ONLY const 51 000000 #endif 52 000000 53 000000 /*********************************************** ************* 54 000000 * STANDARD BITS 55 000000 ************************************************ ************/ 56 000000 57 000000 #define BIT0 (0x0001u) 58 000000 #define BIT1 (0x0002u) 59 000000 #define BIT2 (0x0004u) 60 000000 #define BIT3 (0x0008u) 61 000000 #define BIT4 (0x0010u) 62 000000 #define BIT5 (0x0020u) 63 000000 #define BIT6 (0x0040u) 64 000000 #define BIT7 (0x0080u) 65 000000 #define BIT8 (0x0100u) 66 000000 #define BIT9 (0x0200u) 67 000000 #define BITA (0x0400u) 68 000000 #define BITB (0x0800u) 69 000000 #define BITC (0x1000u) 70 000000 #define BITD (0x2000u) 71 000000 #define BITE (0x4000u) 72 000000 #define BITF (0x8000u) 73 000000 - 4e-configLP - Page 11 74 000000 /*********************************************** ************* 75 000000 * STATUS REGISTER BITS 76 000000 ************************************************ ************/ 77 000000 78 000000 #define C (0x0001u) 79 000000 #define Z (0x0002u) 80 000000 #define N (0x0004u) 81 000000 #define V (0x0100u) 82 000000 #define GIE (0x0008u) 83 000000 #define CPUOFF (0x0010u) 84 000000 #define OSCOFF (0x0020u) 85 000000 #define SCG0 (0x0040u) 86 000000 #define SCG1 (0x0080u) 87 000000 88 000000 /* Low Power Modes coded with Bits 4-7 in SR */ 89 000000 90 000000 #ifndef __IAR_SYSTEMS_ICC__ /* Begin #defines for assembler */ 91 000000 #define LPM0 (CPUOFF) 92 000000 #define LPM1 (SCG0+CPUOFF) 93 000000 #define LPM2 (SCG1+CPUOFF) 94 000000 #define LPM3 (SCG1+SCG0+CPUOFF) 95 000000 #define LPM4 (SCG1+SCG0+OSCOFF+CP UOFF) 96 000000 /* End #defines for assembler */ 97 000000 98 000000 #else /* Begin #defines for C */ 99 000000 #define LPM0_bits (CPUOFF) 100 000000 #define LPM1_bits (SCG0+CPUOFF) 101 000000 #define LPM2_bits (SCG1+CPUOFF) 102 000000 #define LPM3_bits (SCG1+SCG0+CPUOFF) 103 000000 #define LPM4_bits (SCG1+SCG0+OSCOFF+CP UOFF) 105 000000 #include "in430.h" 107 000000 #define LPM0 _BIS_SR(LPM0_bits) /* Enter Low Power Mode 0 */ 108 000000 #define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits) /* Exit Low Power Mode 0 */ 109 000000 #define LPM1 _BIS_SR(LPM1_bits) /* Enter Low Power Mode 1 */ 110 000000 #define LPM1_EXIT _BIC_SR_IRQ(LPM1_bits) /* Exit Low Power Mode 1 */ 111 000000 #define LPM2 _BIS_SR(LPM2_bits) /* Enter Low Power Mode 2 */ 112 000000 #define LPM2_EXIT _BIC_SR_IRQ(LPM2_bits) /* Exit Low Power Mode 2 */ 113 000000 #define LPM3 _BIS_SR(LPM3_bits) /* Enter Low Power Mode 3 */ 114 000000 #define LPM3_EXIT _BIC_SR_IRQ(LPM3_bits) /* Exit Low Power Mode 3 */ 115 000000 #define LPM4 _BIS_SR(LPM4_bits) /* Enter Low Power Mode 4 */ 116 000000 #define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits) /* Exit Low Power Mode 4 */ 117 000000 #endif /* End #defines for C */ 118 000000 119 000000 /*********************************************** ************* 120 000000 * PERIPHERAL FILE MAP 121 000000 ************************************************ ************/ 122 000000 123 000000 /*********************************************** ************* 124 000000 * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS 125 000000 ************************************************ ************/ 126 000000 127 000000 #define IE1_ (0x0000u) /* Interrupt Enable 1 */ 128 000000 DEFC( IE1 , IE1_) 129 000000 #define WDTIE (0x01) /* Watchdog Interrupt Enable */ 130 000000 #define OFIE (0x02) /* Osc. - 4e-configLP - Page 12 Fault Interrupt Enable */ 131 000000 #define NMIIE (0x10) /* NMI Interrupt Enable */ 132 000000 #define ACCVIE (0x20) /* Flash Access Violation Interrupt Enable */ 133 000000 134 000000 #define IFG1_ (0x0002u) /* Interrupt Flag 1 */ 135 000000 DEFC( IFG1 , IFG1_) 136 000000 #define WDTIFG (0x01) /* Watchdog Interrupt Flag */ 137 000000 #define OFIFG (0x02) /* Osc. Fault Interrupt Flag */ 138 000000 #define PORIFG (0x04) /* Power On Interrupt Flag */ 139 000000 #define RSTIFG (0x08) /* Reset Interrupt Flag */ 140 000000 #define NMIIFG (0x10) /* NMI Interrupt Flag */ 141 000000 142 000000 #define IE2_ (0x0001u) /* Interrupt Enable 2 */ 143 000000 DEFC( IE2 , IE2_) 144 000000 #define UC0IE IE2 145 000000 #define UCA0RXIE (0x01) 146 000000 #define UCA0TXIE (0x02) 147 000000 #define UCB0RXIE (0x04) 148 000000 #define UCB0TXIE (0x08) 149 000000 150 000000 #define IFG2_ (0x0003u) /* Interrupt Flag 2 */ 151 000000 DEFC( IFG2 , IFG2_) 152 000000 #define UC0IFG IFG2 153 000000 #define UCA0RXIFG (0x01) 154 000000 #define UCA0TXIFG (0x02) 155 000000 #define UCB0RXIFG (0x04) 156 000000 #define UCB0TXIFG (0x08) 157 000000 158 000000 /*********************************************** ************* 159 000000 * ADC10 160 000000 ************************************************ ************/ 161 000000 #define __MSP430_HAS_ADC10__ /* Definition to show that Module is available */ 162 000000 163 000000 #define ADC10DTC0_ (0x0048u) /* ADC10 Data Transfer Control 0 */ 164 000000 DEFC( ADC10DTC0 , ADC10DTC0_) 165 000000 #define ADC10DTC1_ (0x0049u) /* ADC10 Data Transfer Control 1 */ 166 000000 DEFC( ADC10DTC1 , ADC10DTC1_) 167 000000 #define ADC10AE0_ (0x004Au) /* ADC10 Analog Enable 0 */ 168 000000 DEFC( ADC10AE0 , ADC10AE0_) 169 000000 170 000000 #define ADC10CTL0_ (0x01B0u) /* ADC10 Control 0 */ 171 000000 DEFW( ADC10CTL0 , ADC10CTL0_) 172 000000 #define ADC10CTL1_ (0x01B2u) /* ADC10 Control 1 */ 173 000000 DEFW( ADC10CTL1 , ADC10CTL1_) 174 000000 #define ADC10MEM_ (0x01B4u) /* ADC10 Memory */ 175 000000 DEFW( ADC10MEM , ADC10MEM_) 176 000000 #define ADC10SA_ (0x01BCu) /* ADC10 Data Transfer Start Address */ 177 000000 DEFW( ADC10SA , ADC10SA_) 178 000000 179 000000 /* ADC10CTL0 */ 180 000000 #define ADC10SC (0x001) /* ADC10 Start Conversion */ 181 000000 #define ENC (0x002) /* ADC10 Enable Conversion */ 182 000000 #define ADC10IFG (0x004) /* ADC10 Interrupt Flag */ 183 000000 #define ADC10IE (0x008) /* ADC10 - 4e-configLP - Page 13 Interrupt Enalbe */ 184 000000 #define ADC10ON (0x010) /* ADC10 On/Enable */ 185 000000 #define REFON (0x020) /* ADC10 Reference on */ 186 000000 #define REF2_5V (0x040) /* ADC10 Ref 0:1.5V / 1:2.5V */ 187 000000 #define MSC (0x080) /* ADC10 Multiple SampleConversion */ 188 000000 #define REFBURST (0x100) /* ADC10 Reference Burst Mode */ 189 000000 #define REFOUT (0x200) /* ADC10 Enalbe output of Ref. */ 190 000000 #define ADC10SR (0x400) /* ADC10 Sampling Rate 0:200ksps / 1:50ksps */ 191 000000 #define ADC10SHT0 (0x800) /* ADC10 Sample Hold Select Bit: 0 */ 192 000000 #define ADC10SHT1 (0x1000u) /* ADC10 Sample Hold Select Bit: 1 */ 193 000000 #define SREF0 (0x2000u) /* ADC10 Reference Select Bit: 0 */ 194 000000 #define SREF1 (0x4000u) /* ADC10 Reference Select Bit: 1 */ 195 000000 #define SREF2 (0x8000u) /* ADC10 Reference Select Bit: 2 */ 196 000000 #define ADC10SHT_0 (0*0x800u) /* 4 x ADC10CLKs */ 197 000000 #define ADC10SHT_1 (1*0x800u) /* 8 x ADC10CLKs */ 198 000000 #define ADC10SHT_2 (2*0x800u) /* 16 x ADC10CLKs */ 199 000000 #define ADC10SHT_3 (3*0x800u) /* 64 x ADC10CLKs */ 200 000000 201 000000 #define SREF_0 (0*0x2000u) /* VR+ = AVCC and VR- = AVSS */ 202 000000 #define SREF_1 (1*0x2000u) /* VR+ = VREF+ and VR- = AVSS */ 203 000000 #define SREF_2 (2*0x2000u) /* VR+ = VEREF+ and VR- = AVSS */ 204 000000 #define SREF_3 (3*0x2000u) /* VR+ = VEREF+ and VR- = AVSS */ 205 000000 #define SREF_4 (4*0x2000u) /* VR+ = AVCC and VR- = VREF-/VEREF- */ 206 000000 #define SREF_5 (5*0x2000u) /* VR+ = VREF+ and VR- = VREF-/VEREF- */ 207 000000 #define SREF_6 (6*0x2000u) /* VR+ = VEREF+ and VR- = VREF-/VEREF- */ 208 000000 #define SREF_7 (7*0x2000u) /* VR+ = VEREF+ and VR- = VREF-/VEREF- */ 209 000000 210 000000 /* ADC10CTL1 */ 211 000000 #define ADC10BUSY (0x0001u) /* ADC10 BUSY */ 212 000000 #define CONSEQ0 (0x0002u) /* ADC10 Conversion Sequence Select 0 */ 213 000000 #define CONSEQ1 (0x0004u) /* ADC10 Conversion Sequence Select 1 */ 214 000000 #define ADC10SSEL0 (0x0008u) /* ADC10 Clock Source Select Bit: 0 */ 215 000000 #define ADC10SSEL1 (0x0010u) /* ADC10 Clock Source Select Bit: 1 */ 216 000000 #define ADC10DIV0 (0x0020u) /* ADC10 Clock Divider Select Bit: 0 */ 217 000000 #define ADC10DIV1 (0x0040u) /* ADC10 Clock Divider Select Bit: 1 */ 218 000000 #define ADC10DIV2 (0x0080u) /* ADC10 Clock Divider Select Bit: 2 */ 219 000000 #define ISSH (0x0100u) /* ADC10 Invert Sample Hold Signal */ 220 000000 #define ADC10DF (0x0200u) /* ADC10 Data Format 0:binary 1:2's complement */ 221 000000 #define SHS0 (0x0400u) /* ADC10 Sample/Hold Source Bit: 0 */ 222 000000 #define SHS1 (0x0800u) /* ADC10 Sample/Hold Source Bit: 1 */ 223 000000 #define INCH0 (0x1000u) /* - 4e-configLP - Page 14 ADC10 Input Channel Select Bit: 0 */ 224 000000 #define INCH1 (0x2000u) /* ADC10 Input Channel Select Bit: 1 */ 225 000000 #define INCH2 (0x4000u) /* ADC10 Input Channel Select Bit: 2 */ 226 000000 #define INCH3 (0x8000u) /* ADC10 Input Channel Select Bit: 3 */ 227 000000 228 000000 #define CONSEQ_0 (0*2u) /* Single channel single conversion */ 229 000000 #define CONSEQ_1 (1*2u) /* Sequence of channels */ 230 000000 #define CONSEQ_2 (2*2u) /* Repeat single channel */ 231 000000 #define CONSEQ_3 (3*2u) /* Repeat sequence of channels */ 232 000000 233 000000 #define ADC10SSEL_0 (0*8u) /* ADC10OSC */ 234 000000 #define ADC10SSEL_1 (1*8u) /* ACLK */ 235 000000 #define ADC10SSEL_2 (2*8u) /* MCLK */ 236 000000 #define ADC10SSEL_3 (3*8u) /* SMCLK */ 237 000000 238 000000 #define ADC10DIV_0 (0*0x20u) /* ADC10 Clock Divider Select 0 */ 239 000000 #define ADC10DIV_1 (1*0x20u) /* ADC10 Clock Divider Select 1 */ 240 000000 #define ADC10DIV_2 (2*0x20u) /* ADC10 Clock Divider Select 2 */ 241 000000 #define ADC10DIV_3 (3*0x20u) /* ADC10 Clock Divider Select 3 */ 242 000000 #define ADC10DIV_4 (4*0x20u) /* ADC10 Clock Divider Select 4 */ 243 000000 #define ADC10DIV_5 (5*0x20u) /* ADC10 Clock Divider Select 5 */ 244 000000 #define ADC10DIV_6 (6*0x20u) /* ADC10 Clock Divider Select 6 */ 245 000000 #define ADC10DIV_7 (7*0x20u) /* ADC10 Clock Divider Select 7 */ 246 000000 247 000000 #define SHS_0 (0*0x400u) /* ADC10SC */ 248 000000 #define SHS_1 (1*0x400u) /* TA3 OUT1 */ 249 000000 #define SHS_2 (2*0x400u) /* TA3 OUT0 */ 250 000000 #define SHS_3 (3*0x400u) /* TA3 OUT2 */ 251 000000 252 000000 #define INCH_0 (0*0x1000u) /* Selects Channel 0 */ 253 000000 #define INCH_1 (1*0x1000u) /* Selects Channel 1 */ 254 000000 #define INCH_2 (2*0x1000u) /* Selects Channel 2 */ 255 000000 #define INCH_3 (3*0x1000u) /* Selects Channel 3 */ 256 000000 #define INCH_4 (4*0x1000u) /* Selects Channel 4 */ 257 000000 #define INCH_5 (5*0x1000u) /* Selects Channel 5 */ 258 000000 #define INCH_6 (6*0x1000u) /* Selects Channel 6 */ 259 000000 #define INCH_7 (7*0x1000u) /* Selects Channel 7 */ 260 000000 #define INCH_8 (8*0x1000u) /* Selects Channel 8 */ 261 000000 #define INCH_9 (9*0x1000u) /* Selects Channel 9 */ 262 000000 #define INCH_10 (10*0x1000u) /* Selects Channel 10 */ 263 000000 #define INCH_11 (11*0x1000u) /* Selects Channel 11 */ 264 000000 #define INCH_12 (12*0x1000u) /* Selects Channel 12 */ - 4e-configLP - Page 15 265 000000 #define INCH_13 (13*0x1000u) /* Selects Channel 13 */ 266 000000 #define INCH_14 (14*0x1000u) /* Selects Channel 14 */ 267 000000 #define INCH_15 (15*0x1000u) /* Selects Channel 15 */ 268 000000 269 000000 /* ADC10DTC0 */ 270 000000 #define ADC10FETCH (0x001) /* This bit should normally be reset */ 271 000000 #define ADC10B1 (0x002) /* ADC10 block one */ 272 000000 #define ADC10CT (0x004) /* ADC10 continuous transfer */ 273 000000 #define ADC10TB (0x008) /* ADC10 two-block mode */ 274 000000 #define ADC10DISABLE (0x000) /* ADC10DTC1 */ 275 000000 276 000000 /*********************************************** ************* 277 000000 * Basic Clock Module 278 000000 ************************************************ ************/ 279 000000 #define __MSP430_HAS_BC2__ /* Definition to show that Module is available */ 280 000000 281 000000 #define DCOCTL_ (0x0056u) /* DCO Clock Frequency Control */ 282 000000 DEFC( DCOCTL , DCOCTL_) 283 000000 #define BCSCTL1_ (0x0057u) /* Basic Clock System Control 1 */ 284 000000 DEFC( BCSCTL1 , BCSCTL1_) 285 000000 #define BCSCTL2_ (0x0058u) /* Basic Clock System Control 2 */ 286 000000 DEFC( BCSCTL2 , BCSCTL2_) 287 000000 #define BCSCTL3_ (0x0053u) /* Basic Clock System Control 3 */ 288 000000 DEFC( BCSCTL3 , BCSCTL3_) 289 000000 290 000000 #define MOD0 (0x01) /* Modulation Bit 0 */ 291 000000 #define MOD1 (0x02) /* Modulation Bit 1 */ 292 000000 #define MOD2 (0x04) /* Modulation Bit 2 */ 293 000000 #define MOD3 (0x08) /* Modulation Bit 3 */ 294 000000 #define MOD4 (0x10) /* Modulation Bit 4 */ 295 000000 #define DCO0 (0x20) /* DCO Select Bit 0 */ 296 000000 #define DCO1 (0x40) /* DCO Select Bit 1 */ 297 000000 #define DCO2 (0x80) /* DCO Select Bit 2 */ 298 000000 299 000000 #define RSEL0 (0x01) /* Range Select Bit 0 */ 300 000000 #define RSEL1 (0x02) /* Range Select Bit 1 */ 301 000000 #define RSEL2 (0x04) /* Range Select Bit 2 */ 302 000000 #define RSEL3 (0x08) /* Range Select Bit 3 */ 303 000000 #define DIVA0 (0x10) /* ACLK Divider 0 */ 304 000000 #define DIVA1 (0x20) /* ACLK Divider 1 */ 305 000000 #define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ 306 000000 #define XT2OFF (0x80) /* Enable XT2CLK */ 307 000000 308 000000 #define DIVA_0 (0x00) /* ACLK Divider 0: /1 */ 309 000000 #define DIVA_1 (0x10) /* ACLK - 4e-configLP - Page 16 Divider 1: /2 */ 310 000000 #define DIVA_2 (0x20) /* ACLK Divider 2: /4 */ 311 000000 #define DIVA_3 (0x30) /* ACLK Divider 3: /8 */ 312 000000 313 000000 #define DIVS0 (0x02) /* SMCLK Divider 0 */ 314 000000 #define DIVS1 (0x04) /* SMCLK Divider 1 */ 315 000000 #define SELS (0x08) /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */ 316 000000 #define DIVM0 (0x10) /* MCLK Divider 0 */ 317 000000 #define DIVM1 (0x20) /* MCLK Divider 1 */ 318 000000 #define SELM0 (0x40) /* MCLK Source Select 0 */ 319 000000 #define SELM1 (0x80) /* MCLK Source Select 1 */ 320 000000 321 000000 #define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */ 322 000000 #define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */ 323 000000 #define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */ 324 000000 #define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */ 325 000000 326 000000 #define DIVM_0 (0x00) /* MCLK Divider 0: /1 */ 327 000000 #define DIVM_1 (0x10) /* MCLK Divider 1: /2 */ 328 000000 #define DIVM_2 (0x20) /* MCLK Divider 2: /4 */ 329 000000 #define DIVM_3 (0x30) /* MCLK Divider 3: /8 */ 330 000000 331 000000 #define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */ 332 000000 #define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */ 333 000000 #define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */ 334 000000 #define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */ 335 000000 336 000000 #define LFXT1OF (0x01) /* Low/high Frequency Oscillator Fault Flag */ 337 000000 #define XT2OF (0x02) /* High frequency oscillator 2 fault flag */ 338 000000 #define XCAP0 (0x04) /* XIN/XOUT Cap 0 */ 339 000000 #define XCAP1 (0x08) /* XIN/XOUT Cap 1 */ 340 000000 #define LFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */ 341 000000 #define LFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */ 342 000000 #define XT2S0 (0x40) /* Mode 0 for XT2 */ 343 000000 #define XT2S1 (0x80) /* Mode 1 for XT2 */ 344 000000 345 000000 #define XCAP_0 (0x00) /* XIN/XOUT Cap : 0 pF */ 346 000000 #define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */ 347 000000 #define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */ 348 000000 #define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */ 349 000000 350 000000 #define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */ 351 000000 #define LFXT1S_1 (0x10) /* Mode 1 - 4e-configLP - Page 17 for LFXT1 : Reserved */ 352 000000 #define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */ 353 000000 #define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal */ 354 000000 355 000000 #define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */ 356 000000 #define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */ 357 000000 #define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */ 358 000000 #define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal */ 359 000000 360 000000 /*********************************************** ************* 361 000000 * Comparator A 362 000000 ************************************************ ************/ 363 000000 #define __MSP430_HAS_CAPLUS__ /* Definition to show that Module is available */ 364 000000 365 000000 #define CACTL1_ (0x0059u) /* Comparator A Control 1 */ 366 000000 DEFC( CACTL1 , CACTL1_) 367 000000 #define CACTL2_ (0x005Au) /* Comparator A Control 2 */ 368 000000 DEFC( CACTL2 , CACTL2_) 369 000000 #define CAPD_ (0x005Bu) /* Comparator A Port Disable */ 370 000000 DEFC( CAPD , CAPD_) 371 000000 372 000000 #define CAIFG (0x01) /* Comp. A Interrupt Flag */ 373 000000 #define CAIE (0x02) /* Comp. A Interrupt Enable */ 374 000000 #define CAIES (0x04) /* Comp. A Int. Edge Select: 0:rising / 1:falling */ 375 000000 #define CAON (0x08) /* Comp. A enable */ 376 000000 #define CAREF0 (0x10) /* Comp. A Internal Reference Select 0 */ 377 000000 #define CAREF1 (0x20) /* Comp. A Internal Reference Select 1 */ 378 000000 #define CARSEL (0x40) /* Comp. A Internal Reference Enable */ 379 000000 #define CAEX (0x80) /* Comp. A Exchange Inputs */ 380 000000 381 000000 #define CAREF_0 (0x00) /* Comp. A Int. Ref. Select 0 : Off */ 382 000000 #define CAREF_1 (0x10) /* Comp. A Int. Ref. Select 1 : 0.25*Vcc */ 383 000000 #define CAREF_2 (0x20) /* Comp. A Int. Ref. Select 2 : 0.5*Vcc */ 384 000000 #define CAREF_3 (0x30) /* Comp. A Int. Ref. Select 3 : Vt*/ 385 000000 386 000000 #define CAOUT (0x01) /* Comp. A Output */ 387 000000 #define CAF (0x02) /* Comp. A Enable Output Filter */ 388 000000 #define P2CA0 (0x04) /* Comp. A +Terminal Multiplexer */ 389 000000 #define P2CA1 (0x08) /* Comp. A -Terminal Multiplexer */ 390 000000 #define P2CA2 (0x10) /* Comp. A -Terminal Multiplexer */ 391 000000 #define P2CA3 (0x20) /* Comp. A -Terminal Multiplexer */ 392 000000 #define P2CA4 (0x40) /* Comp. A +Terminal Multiplexer */ 393 000000 #define CASHORT (0x80) /* Comp. A Short + and - Terminals */ 394 000000 - 4e-configLP - Page 18 395 000000 #define CAPD0 (0x01) /* Comp. A Disable Input Buffer of Port Register .0 */ 396 000000 #define CAPD1 (0x02) /* Comp. A Disable Input Buffer of Port Register .1 */ 397 000000 #define CAPD2 (0x04) /* Comp. A Disable Input Buffer of Port Register .2 */ 398 000000 #define CAPD3 (0x08) /* Comp. A Disable Input Buffer of Port Register .3 */ 399 000000 #define CAPD4 (0x10) /* Comp. A Disable Input Buffer of Port Register .4 */ 400 000000 #define CAPD5 (0x20) /* Comp. A Disable Input Buffer of Port Register .5 */ 401 000000 #define CAPD6 (0x40) /* Comp. A Disable Input Buffer of Port Register .6 */ 402 000000 #define CAPD7 (0x80) /* Comp. A Disable Input Buffer of Port Register .7 */ 403 000000 404 000000 /*********************************************** ************** 405 000000 * Flash Memory 406 000000 ************************************************ *************/ 407 000000 #define __MSP430_HAS_FLASH2__ /* Definition to show that Module is available */ 408 000000 409 000000 #define FCTL1_ (0x0128u) /* FLASH Control 1 */ 410 000000 DEFW( FCTL1 , FCTL1_) 411 000000 #define FCTL2_ (0x012Au) /* FLASH Control 2 */ 412 000000 DEFW( FCTL2 , FCTL2_) 413 000000 #define FCTL3_ (0x012Cu) /* FLASH Control 3 */ 414 000000 DEFW( FCTL3 , FCTL3_) 415 000000 416 000000 #define FRKEY (0x9600u) /* Flash key returned by read */ 417 000000 #define FWKEY (0xA500u) /* Flash key for write */ 418 000000 #define FXKEY (0x3300u) /* for use with XOR instruction */ 419 000000 420 000000 #define ERASE (0x0002u) /* Enable bit for Flash segment erase */ 421 000000 #define MERAS (0x0004u) /* Enable bit for Flash mass erase */ 422 000000 #define WRT (0x0040u) /* Enable bit for Flash write */ 423 000000 #define BLKWRT (0x0080u) /* Enable bit for Flash segment write */ 424 000000 #define SEGWRT (0x0080u) /* old definition */ /* Enable bit for Flash segment write */ 425 000000 426 000000 #define FN0 (0x0001u) /* Divide Flash clock by 1 to 64 using FN0 to FN5 according to: */ 427 000000 #define FN1 (0x0002u) /* 32*FN5 + 16*FN4 + 8*FN3 + 4*FN2 + 2*FN1 + FN0 + 1 */ 428 000000 #ifndef FN2 429 000000 #define FN2 (0x0004u) 430 000000 #endif 431 000000 #ifndef FN3 432 000000 #define FN3 (0x0008u) 433 000000 #endif 434 000000 #ifndef FN4 435 000000 #define FN4 (0x0010u) 436 000000 #endif - 4e-configLP - Page 19 437 000000 #define FN5 (0x0020u) 438 000000 #define FSSEL0 (0x0040u) /* Flash clock select 0 */ /* to distinguish from USART SSELx */ 439 000000 #define FSSEL1 (0x0080u) /* Flash clock select 1 */ 440 000000 441 000000 #define FSSEL_0 (0x0000u) /* Flash clock select: 0 - ACLK */ 442 000000 #define FSSEL_1 (0x0040u) /* Flash clock select: 1 - MCLK */ 443 000000 #define FSSEL_2 (0x0080u) /* Flash clock select: 2 - SMCLK */ 444 000000 #define FSSEL_3 (0x00C0u) /* Flash clock select: 3 - SMCLK */ 445 000000 446 000000 #define BUSY (0x0001u) /* Flash busy: 1 */ 447 000000 #define KEYV (0x0002u) /* Flash Key violation flag */ 448 000000 #define ACCVIFG (0x0004u) /* Flash Access violation flag */ 449 000000 #define WAIT (0x0008u) /* Wait flag for segment write */ 450 000000 #define LOCK (0x0010u) /* Lock bit: 1 - Flash is locked (read only) */ 451 000000 #define EMEX (0x0020u) /* Flash Emergency Exit */ 452 000000 #define LOCKA (0x0040u) /* Segment A Lock bit: read = 1 - Segment is locked (read only) */ 453 000000 #define FAIL (0x0080u) /* Last Program or Erase failed */ 454 000000 455 000000 /*********************************************** ************* 456 000000 * DIGITAL I/O Port1/2 Pull up / Pull down Resistors 457 000000 ************************************************ ************/ 458 000000 #define __MSP430_HAS_PORT1_R__ /* Definition to show that Module is available */ 459 000000 #define __MSP430_HAS_PORT2_R__ /* Definition to show that Module is available */ 460 000000 461 000000 #define P1IN_ (0x0020u) /* Port 1 Input */ 462 000000 READ_ONLY DEFC( P1IN , P1IN_) 463 000000 #define P1OUT_ (0x0021u) /* Port 1 Output */ 464 000000 DEFC( P1OUT , P1OUT_) 465 000000 #define P1DIR_ (0x0022u) /* Port 1 Direction */ 466 000000 DEFC( P1DIR , P1DIR_) 467 000000 #define P1IFG_ (0x0023u) /* Port 1 Interrupt Flag */ 468 000000 DEFC( P1IFG , P1IFG_) 469 000000 #define P1IES_ (0x0024u) /* Port 1 Interrupt Edge Select */ 470 000000 DEFC( P1IES , P1IES_) 471 000000 #define P1IE_ (0x0025u) /* Port 1 Interrupt Enable */ 472 000000 DEFC( P1IE , P1IE_) 473 000000 #define P1SEL_ (0x0026u) /* Port 1 Selection */ 474 000000 DEFC( P1SEL , P1SEL_) 475 000000 #define P1SEL2_ (0x0041u) /* Port 1 Selection 2 */ 476 000000 DEFC( P1SEL2 , P1SEL2_) 477 000000 #define P1REN_ (0x0027u) /* Port 1 Resistor Enable */ 478 000000 DEFC( P1REN , P1REN_) 479 000000 480 000000 #define P2IN_ (0x0028u) /* Port 2 Input */ 481 000000 READ_ONLY DEFC( P2IN , P2IN_) - 4e-configLP - Page 20 482 000000 #define P2OUT_ (0x0029u) /* Port 2 Output */ 483 000000 DEFC( P2OUT , P2OUT_) 484 000000 #define P2DIR_ (0x002Au) /* Port 2 Direction */ 485 000000 DEFC( P2DIR , P2DIR_) 486 000000 #define P2IFG_ (0x002Bu) /* Port 2 Interrupt Flag */ 487 000000 DEFC( P2IFG , P2IFG_) 488 000000 #define P2IES_ (0x002Cu) /* Port 2 Interrupt Edge Select */ 489 000000 DEFC( P2IES , P2IES_) 490 000000 #define P2IE_ (0x002Du) /* Port 2 Interrupt Enable */ 491 000000 DEFC( P2IE , P2IE_) 492 000000 #define P2SEL_ (0x002Eu) /* Port 2 Selection */ 493 000000 DEFC( P2SEL , P2SEL_) 494 000000 #define P2SEL2_ (0x0042u) /* Port 2 Selection 2 */ 495 000000 DEFC( P2SEL2 , P2SEL2_) 496 000000 #define P2REN_ (0x002Fu) /* Port 2 Resistor Enable */ 497 000000 DEFC( P2REN , P2REN_) 498 000000 499 000000 /*********************************************** ************* 500 000000 * DIGITAL I/O Port3 Pull up / Pull down Resistors 501 000000 ************************************************ ************/ 502 000000 #define __MSP430_HAS_PORT3_R__ /* Definition to show that Module is available */ 503 000000 504 000000 #define P3IN_ (0x0018u) /* Port 3 Input */ 505 000000 READ_ONLY DEFC( P3IN , P3IN_) 506 000000 #define P3OUT_ (0x0019u) /* Port 3 Output */ 507 000000 DEFC( P3OUT , P3OUT_) 508 000000 #define P3DIR_ (0x001Au) /* Port 3 Direction */ 509 000000 DEFC( P3DIR , P3DIR_) 510 000000 #define P3SEL_ (0x001Bu) /* Port 3 Selection */ 511 000000 DEFC( P3SEL , P3SEL_) 512 000000 #define P3SEL2_ (0x0043u) /* Port 3 Selection 2 */ 513 000000 DEFC( P3SEL2 , P3SEL2_) 514 000000 #define P3REN_ (0x0010u) /* Port 3 Resistor Enable */ 515 000000 DEFC( P3REN , P3REN_) 516 000000 517 000000 /*********************************************** ************* 518 000000 * Timer0_A3 519 000000 ************************************************ ************/ 520 000000 #define __MSP430_HAS_TA3__ /* Definition to show that Module is available */ 521 000000 522 000000 #define TA0IV_ (0x012Eu) /* Timer0_A3 Interrupt Vector Word */ 523 000000 READ_ONLY DEFW( TA0IV , TA0IV_) 524 000000 #define TA0CTL_ (0x0160u) /* Timer0_A3 Control */ 525 000000 DEFW( TA0CTL , TA0CTL_) 526 000000 #define TA0CCTL0_ (0x0162u) /* Timer0_A3 Capture/Compare Control 0 */ 527 000000 DEFW( TA0CCTL0 , TA0CCTL0_) 528 000000 #define TA0CCTL1_ (0x0164u) /* Timer0_A3 Capture/Compare Control 1 */ 529 000000 DEFW( TA0CCTL1 , TA0CCTL1_) 530 000000 #define TA0CCTL2_ (0x0166u) /* Timer0_A3 Capture/Compare Control 2 */ 531 000000 DEFW( TA0CCTL2 , TA0CCTL2_) - 4e-configLP - Page 21 532 000000 #define TA0R_ (0x0170u) /* Timer0_A3 */ 533 000000 DEFW( TA0R , TA0R_) 534 000000 #define TA0CCR0_ (0x0172u) /* Timer0_A3 Capture/Compare 0 */ 535 000000 DEFW( TA0CCR0 , TA0CCR0_) 536 000000 #define TA0CCR1_ (0x0174u) /* Timer0_A3 Capture/Compare 1 */ 537 000000 DEFW( TA0CCR1 , TA0CCR1_) 538 000000 #define TA0CCR2_ (0x0176u) /* Timer0_A3 Capture/Compare 2 */ 539 000000 DEFW( TA0CCR2 , TA0CCR2_) 540 000000 541 000000 /* Alternate register names */ 542 000000 #define TAIV TA0IV /* Timer A Interrupt Vector Word */ 543 000000 #define TACTL TA0CTL /* Timer A Control */ 544 000000 #define TACCTL0 TA0CCTL0 /* Timer A Capture/Compare Control 0 */ 545 000000 #define TACCTL1 TA0CCTL1 /* Timer A Capture/Compare Control 1 */ 546 000000 #define TACCTL2 TA0CCTL2 /* Timer A Capture/Compare Control 2 */ 547 000000 #define TAR TA0R /* Timer A */ 548 000000 #define TACCR0 TA0CCR0 /* Timer A Capture/Compare 0 */ 549 000000 #define TACCR1 TA0CCR1 /* Timer A Capture/Compare 1 */ 550 000000 #define TACCR2 TA0CCR2 /* Timer A Capture/Compare 2 */ 551 000000 #define TAIV_ TA0IV_ /* Timer A Interrupt Vector Word */ 552 000000 #define TACTL_ TA0CTL_ /* Timer A Control */ 553 000000 #define TACCTL0_ TA0CCTL0_ /* Timer A Capture/Compare Control 0 */ 554 000000 #define TACCTL1_ TA0CCTL1_ /* Timer A Capture/Compare Control 1 */ 555 000000 #define TACCTL2_ TA0CCTL2_ /* Timer A Capture/Compare Control 2 */ 556 000000 #define TAR_ TA0R_ /* Timer A */ 557 000000 #define TACCR0_ TA0CCR0_ /* Timer A Capture/Compare 0 */ 558 000000 #define TACCR1_ TA0CCR1_ /* Timer A Capture/Compare 1 */ 559 000000 #define TACCR2_ TA0CCR2_ /* Timer A Capture/Compare 2 */ 560 000000 561 000000 /* Alternate register names 2 */ 562 000000 #define CCTL0 TACCTL0 /* Timer A Capture/Compare Control 0 */ 563 000000 #define CCTL1 TACCTL1 /* Timer A Capture/Compare Control 1 */ 564 000000 #define CCTL2 TACCTL2 /* Timer A Capture/Compare Control 2 */ 565 000000 #define CCR0 TACCR0 /* Timer A Capture/Compare 0 */ 566 000000 #define CCR1 TACCR1 /* Timer A Capture/Compare 1 */ 567 000000 #define CCR2 TACCR2 /* Timer A Capture/Compare 2 */ 568 000000 #define CCTL0_ TACCTL0_ /* Timer A Capture/Compare Control 0 */ 569 000000 #define CCTL1_ TACCTL1_ /* Timer A Capture/Compare Control 1 */ 570 000000 #define CCTL2_ TACCTL2_ /* Timer A Capture/Compare Control 2 */ 571 000000 #define CCR0_ TACCR0_ /* Timer A Capture/Compare 0 */ 572 000000 #define CCR1_ TACCR1_ /* Timer A Capture/Compare 1 */ 573 000000 #define CCR2_ TACCR2_ /* Timer A Capture/Compare 2 */ 574 000000 575 000000 #define TASSEL1 (0x0200u) /* Timer - 4e-configLP - Page 22 A clock source select 0 */ 576 000000 #define TASSEL0 (0x0100u) /* Timer A clock source select 1 */ 577 000000 #define ID1 (0x0080u) /* Timer A clock input divider 1 */ 578 000000 #define ID0 (0x0040u) /* Timer A clock input divider 0 */ 579 000000 #define MC1 (0x0020u) /* Timer A mode control 1 */ 580 000000 #define MC0 (0x0010u) /* Timer A mode control 0 */ 581 000000 #define TACLR (0x0004u) /* Timer A counter clear */ 582 000000 #define TAIE (0x0002u) /* Timer A counter interrupt enable */ 583 000000 #define TAIFG (0x0001u) /* Timer A counter interrupt flag */ 584 000000 585 000000 #define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */ 586 000000 #define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */ 587 000000 #define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */ 588 000000 #define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */ 589 000000 #define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */ 590 000000 #define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */ 591 000000 #define ID_2 (2*0x40u) /* Timer A input divider: 2 - /4 */ 592 000000 #define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */ 593 000000 #define TASSEL_0 (0*0x100u) /* Timer A clock source select: 0 - TACLK */ 594 000000 #define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */ 595 000000 #define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */ 596 000000 #define TASSEL_3 (3*0x100u) /* Timer A clock source select: 3 - INCLK */ 597 000000 598 000000 #define CM1 (0x8000u) /* Capture mode 1 */ 599 000000 #define CM0 (0x4000u) /* Capture mode 0 */ 600 000000 #define CCIS1 (0x2000u) /* Capture input select 1 */ 601 000000 #define CCIS0 (0x1000u) /* Capture input select 0 */ 602 000000 #define SCS (0x0800u) /* Capture sychronize */ 603 000000 #define SCCI (0x0400u) /* Latched capture signal (read) */ 604 000000 #define CAP (0x0100u) /* Capture mode: 1 /Compare mode : 0 */ 605 000000 #define OUTMOD2 (0x0080u) /* Output mode 2 */ 606 000000 #define OUTMOD1 (0x0040u) /* Output mode 1 */ 607 000000 #define OUTMOD0 (0x0020u) /* Output mode 0 */ 608 000000 #define CCIE (0x0010u) /* Capture/compare interrupt enable */ 609 000000 #define CCI (0x0008u) /* Capture input signal (read) */ 610 000000 #define OUT (0x0004u) /* PWM Output signal if output mode 0 */ 611 000000 #define COV (0x0002u) /* Capture/compare overflow flag */ 612 000000 #define CCIFG (0x0001u) /* Capture/compare interrupt flag */ 613 000000 614 000000 #define OUTMOD_0 (0*0x20u) /* PWM output mode: 0 - output only */ 615 000000 #define OUTMOD_1 (1*0x20u) /* PWM output mode: 1 - set */ - 4e-configLP - Page 23 616 000000 #define OUTMOD_2 (2*0x20u) /* PWM output mode: 2 - PWM toggle/reset */ 617 000000 #define OUTMOD_3 (3*0x20u) /* PWM output mode: 3 - PWM set/reset */ 618 000000 #define OUTMOD_4 (4*0x20u) /* PWM output mode: 4 - toggle */ 619 000000 #define OUTMOD_5 (5*0x20u) /* PWM output mode: 5 - Reset */ 620 000000 #define OUTMOD_6 (6*0x20u) /* PWM output mode: 6 - PWM toggle/set */ 621 000000 #define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/set */ 622 000000 #define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */ 623 000000 #define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */ 624 000000 #define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */ 625 000000 #define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */ 626 000000 #define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */ 627 000000 #define CM_1 (1*0x4000u) /* Capture mode: 1 - pos. edge */ 628 000000 #define CM_2 (2*0x4000u) /* Capture mode: 1 - neg. edge */ 629 000000 #define CM_3 (3*0x4000u) /* Capture mode: 1 - both edges */ 630 000000 631 000000 /* T0_A3IV Definitions */ 632 000000 #define TA0IV_NONE (0x0000u) /* No Interrupt pending */ 633 000000 #define TA0IV_TACCR1 (0x0002u) /* TA0CCR1_CCIFG */ 634 000000 #define TA0IV_TACCR2 (0x0004u) /* TA0CCR2_CCIFG */ 635 000000 #define TA0IV_6 (0x0006u) /* Reserved */ 636 000000 #define TA0IV_8 (0x0008u) /* Reserved */ 637 000000 #define TA0IV_TAIFG (0x000Au) /* TA0IFG */ 638 000000 639 000000 /*********************************************** ************* 640 000000 * Timer1_A3 641 000000 ************************************************ ************/ 642 000000 #define __MSP430_HAS_T1A3__ /* Definition to show that Module is available */ 643 000000 644 000000 #define TA1IV_ (0x011Eu) /* Timer1_A3 Interrupt Vector Word */ 645 000000 READ_ONLY DEFW( TA1IV , TA1IV_) 646 000000 #define TA1CTL_ (0x0180u) /* Timer1_A3 Control */ 647 000000 DEFW( TA1CTL , TA1CTL_) 648 000000 #define TA1CCTL0_ (0x0182u) /* Timer1_A3 Capture/Compare Control 0 */ 649 000000 DEFW( TA1CCTL0 , TA1CCTL0_) 650 000000 #define TA1CCTL1_ (0x0184u) /* Timer1_A3 Capture/Compare Control 1 */ 651 000000 DEFW( TA1CCTL1 , TA1CCTL1_) 652 000000 #define TA1CCTL2_ (0x0186u) /* Timer1_A3 Capture/Compare Control 2 */ 653 000000 DEFW( TA1CCTL2 , TA1CCTL2_) 654 000000 #define TA1R_ (0x0190u) /* Timer1_A3 */ 655 000000 DEFW( TA1R , TA1R_) 656 000000 #define TA1CCR0_ (0x0192u) /* Timer1_A3 Capture/Compare 0 */ 657 000000 DEFW( TA1CCR0 , TA1CCR0_) 658 000000 #define TA1CCR1_ (0x0194u) /* Timer1_A3 Capture/Compare 1 */ 659 000000 DEFW( TA1CCR1 , TA1CCR1_) 660 000000 #define TA1CCR2_ (0x0196u) /* Timer1_A3 Capture/Compare 2 */ - 4e-configLP - Page 24 661 000000 DEFW( TA1CCR2 , TA1CCR2_) 662 000000 663 000000 /* Bits are already defined within the Timer0_Ax */ 664 000000 665 000000 /* T1_A3IV Definitions */ 666 000000 #define TA1IV_NONE (0x0000u) /* No Interrupt pending */ 667 000000 #define TA1IV_TACCR1 (0x0002u) /* TA1CCR1_CCIFG */ 668 000000 #define TA1IV_TACCR2 (0x0004u) /* TA1CCR2_CCIFG */ 669 000000 #define TA1IV_TAIFG (0x000Au) /* TA1IFG */ 670 000000 671 000000 /*********************************************** ************* 672 000000 * USCI 673 000000 ************************************************ ************/ 674 000000 #define __MSP430_HAS_USCI__ /* Definition to show that Module is available */ 675 000000 676 000000 #define UCA0CTL0_ (0x0060u) /* USCI A0 Control Register 0 */ 677 000000 DEFC( UCA0CTL0 , UCA0CTL0_) 678 000000 #define UCA0CTL1_ (0x0061u) /* USCI A0 Control Register 1 */ 679 000000 DEFC( UCA0CTL1 , UCA0CTL1_) 680 000000 #define UCA0BR0_ (0x0062u) /* USCI A0 Baud Rate 0 */ 681 000000 DEFC( UCA0BR0 , UCA0BR0_) 682 000000 #define UCA0BR1_ (0x0063u) /* USCI A0 Baud Rate 1 */ 683 000000 DEFC( UCA0BR1 , UCA0BR1_) 684 000000 #define UCA0MCTL_ (0x0064u) /* USCI A0 Modulation Control */ 685 000000 DEFC( UCA0MCTL , UCA0MCTL_) 686 000000 #define UCA0STAT_ (0x0065u) /* USCI A0 Status Register */ 687 000000 DEFC( UCA0STAT , UCA0STAT_) 688 000000 #define UCA0RXBUF_ (0x0066u) /* USCI A0 Receive Buffer */ 689 000000 READ_ONLY DEFC( UCA0RXBUF , UCA0RXBUF_) 690 000000 #define UCA0TXBUF_ (0x0067u) /* USCI A0 Transmit Buffer */ 691 000000 DEFC( UCA0TXBUF , UCA0TXBUF_) 692 000000 #define UCA0ABCTL_ (0x005Du) /* USCI A0 LIN Control */ 693 000000 DEFC( UCA0ABCTL , UCA0ABCTL_) 694 000000 #define UCA0IRTCTL_ (0x005Eu) /* USCI A0 IrDA Transmit Control */ 695 000000 DEFC( UCA0IRTCTL , UCA0IRTCTL_) 696 000000 #define UCA0IRRCTL_ (0x005Fu) /* USCI A0 IrDA Receive Control */ 697 000000 DEFC( UCA0IRRCTL , UCA0IRRCTL_) 698 000000 699 000000 700 000000 701 000000 #define UCB0CTL0_ (0x0068u) /* USCI B0 Control Register 0 */ 702 000000 DEFC( UCB0CTL0 , UCB0CTL0_) 703 000000 #define UCB0CTL1_ (0x0069u) /* USCI B0 Control Register 1 */ 704 000000 DEFC( UCB0CTL1 , UCB0CTL1_) 705 000000 #define UCB0BR0_ (0x006Au) /* USCI B0 Baud Rate 0 */ 706 000000 DEFC( UCB0BR0 , UCB0BR0_) 707 000000 #define UCB0BR1_ (0x006Bu) /* USCI B0 Baud Rate 1 */ 708 000000 DEFC( UCB0BR1 , UCB0BR1_) 709 000000 #define UCB0I2CIE_ (0x006Cu) /* USCI B0 I2C Interrupt Enable Register */ 710 000000 DEFC( UCB0I2CIE , UCB0I2CIE_) 711 000000 #define UCB0STAT_ (0x006Du) /* USCI B0 Status Register */ 712 000000 DEFC( UCB0STAT , UCB0STAT_) - 4e-configLP - Page 25 713 000000 #define UCB0RXBUF_ (0x006Eu) /* USCI B0 Receive Buffer */ 714 000000 READ_ONLY DEFC( UCB0RXBUF , UCB0RXBUF_) 715 000000 #define UCB0TXBUF_ (0x006Fu) /* USCI B0 Transmit Buffer */ 716 000000 DEFC( UCB0TXBUF , UCB0TXBUF_) 717 000000 #define UCB0I2COA_ (0x0118u) /* USCI B0 I2C Own Address */ 718 000000 DEFW( UCB0I2COA , UCB0I2COA_) 719 000000 #define UCB0I2CSA_ (0x011Au) /* USCI B0 I2C Slave Address */ 720 000000 DEFW( UCB0I2CSA , UCB0I2CSA_) 721 000000 722 000000 // UART-Mode Bits 723 000000 #define UCPEN (0x80) /* Async. Mode: Parity enable */ 724 000000 #define UCPAR (0x40) /* Async. Mode: Parity 0:odd / 1:even */ 725 000000 #define UCMSB (0x20) /* Async. Mode: MSB first 0:LSB / 1:MSB */ 726 000000 #define UC7BIT (0x10) /* Async. Mode: Data Bits 0:8-bits / 1:7-bits */ 727 000000 #define UCSPB (0x08) /* Async. Mode: Stop Bits 0:one / 1: two */ 728 000000 #define UCMODE1 (0x04) /* Async. Mode: USCI Mode 1 */ 729 000000 #define UCMODE0 (0x02) /* Async. Mode: USCI Mode 0 */ 730 000000 #define UCSYNC (0x01) /* Sync-Mode 0:UART-Mode / 1:SPI-Mode */ 731 000000 732 000000 // SPI-Mode Bits 733 000000 #define UCCKPH (0x80) /* Sync. Mode: Clock Phase */ 734 000000 #define UCCKPL (0x40) /* Sync. Mode: Clock Polarity */ 735 000000 #define UCMST (0x08) /* Sync. Mode: Master Select */ 736 000000 737 000000 // I2C-Mode Bits 738 000000 #define UCA10 (0x80) /* 10-bit Address Mode */ 739 000000 #define UCSLA10 (0x40) /* 10-bit Slave Address Mode */ 740 000000 #define UCMM (0x20) /* Multi-Master Environment */ 741 000000 //#define res (0x10) /* reserved */ 742 000000 #define UCMODE_0 (0x00) /* Sync. Mode: USCI Mode: 0 */ 743 000000 #define UCMODE_1 (0x02) /* Sync. Mode: USCI Mode: 1 */ 744 000000 #define UCMODE_2 (0x04) /* Sync. Mode: USCI Mode: 2 */ 745 000000 #define UCMODE_3 (0x06) /* Sync. Mode: USCI Mode: 3 */ 746 000000 747 000000 // UART-Mode Bits 748 000000 #define UCSSEL1 (0x80) /* USCI 0 Clock Source Select 1 */ 749 000000 #define UCSSEL0 (0x40) /* USCI 0 Clock Source Select 0 */ 750 000000 #define UCRXEIE (0x20) /* RX Error interrupt enable */ 751 000000 #define UCBRKIE (0x10) /* Break interrupt enable */ 752 000000 #define UCDORM (0x08) /* Dormant (Sleep) Mode */ 753 000000 #define UCTXADDR (0x04) /* Send next Data as Address */ 754 000000 #define UCTXBRK (0x02) /* Send next Data as Break */ 755 000000 #define UCSWRST (0x01) /* USCI Software Reset */ 756 000000 757 000000 // SPI-Mode Bits 758 000000 //#define res (0x20) /* reserved */ - 4e-configLP - Page 26 759 000000 //#define res (0x10) /* reserved */ 760 000000 //#define res (0x08) /* reserved */ 761 000000 //#define res (0x04) /* reserved */ 762 000000 //#define res (0x02) /* reserved */ 763 000000 764 000000 // I2C-Mode Bits 765 000000 //#define res (0x20) /* reserved */ 766 000000 #define UCTR (0x10) /* Transmit/Receive Select/Flag */ 767 000000 #define UCTXNACK (0x08) /* Transmit NACK */ 768 000000 #define UCTXSTP (0x04) /* Transmit STOP */ 769 000000 #define UCTXSTT (0x02) /* Transmit START */ 770 000000 #define UCSSEL_0 (0x00) /* USCI 0 Clock Source: 0 */ 771 000000 #define UCSSEL_1 (0x40) /* USCI 0 Clock Source: 1 */ 772 000000 #define UCSSEL_2 (0x80) /* USCI 0 Clock Source: 2 */ 773 000000 #define UCSSEL_3 (0xC0) /* USCI 0 Clock Source: 3 */ 774 000000 775 000000 #define UCBRF3 (0x80) /* USCI First Stage Modulation Select 3 */ 776 000000 #define UCBRF2 (0x40) /* USCI First Stage Modulation Select 2 */ 777 000000 #define UCBRF1 (0x20) /* USCI First Stage Modulation Select 1 */ 778 000000 #define UCBRF0 (0x10) /* USCI First Stage Modulation Select 0 */ 779 000000 #define UCBRS2 (0x08) /* USCI Second Stage Modulation Select 2 */ 780 000000 #define UCBRS1 (0x04) /* USCI Second Stage Modulation Select 1 */ 781 000000 #define UCBRS0 (0x02) /* USCI Second Stage Modulation Select 0 */ 782 000000 #define UCOS16 (0x01) /* USCI 16-times Oversampling enable */ 783 000000 784 000000 #define UCBRF_0 (0x00) /* USCI First Stage Modulation: 0 */ 785 000000 #define UCBRF_1 (0x10) /* USCI First Stage Modulation: 1 */ 786 000000 #define UCBRF_2 (0x20) /* USCI First Stage Modulation: 2 */ 787 000000 #define UCBRF_3 (0x30) /* USCI First Stage Modulation: 3 */ 788 000000 #define UCBRF_4 (0x40) /* USCI First Stage Modulation: 4 */ 789 000000 #define UCBRF_5 (0x50) /* USCI First Stage Modulation: 5 */ 790 000000 #define UCBRF_6 (0x60) /* USCI First Stage Modulation: 6 */ 791 000000 #define UCBRF_7 (0x70) /* USCI First Stage Modulation: 7 */ 792 000000 #define UCBRF_8 (0x80) /* USCI First Stage Modulation: 8 */ 793 000000 #define UCBRF_9 (0x90) /* USCI First Stage Modulation: 9 */ 794 000000 #define UCBRF_10 (0xA0) /* USCI First Stage Modulation: A */ 795 000000 #define UCBRF_11 (0xB0) /* USCI First Stage Modulation: B */ 796 000000 #define UCBRF_12 (0xC0) /* USCI First Stage Modulation: C */ 797 000000 #define UCBRF_13 (0xD0) /* USCI First Stage Modulation: D */ 798 000000 #define UCBRF_14 (0xE0) /* USCI First Stage Modulation: E */ 799 000000 #define UCBRF_15 (0xF0) /* USCI First Stage Modulation: F */ - 4e-configLP - Page 27 800 000000 801 000000 #define UCBRS_0 (0x00) /* USCI Second Stage Modulation: 0 */ 802 000000 #define UCBRS_1 (0x02) /* USCI Second Stage Modulation: 1 */ 803 000000 #define UCBRS_2 (0x04) /* USCI Second Stage Modulation: 2 */ 804 000000 #define UCBRS_3 (0x06) /* USCI Second Stage Modulation: 3 */ 805 000000 #define UCBRS_4 (0x08) /* USCI Second Stage Modulation: 4 */ 806 000000 #define UCBRS_5 (0x0A) /* USCI Second Stage Modulation: 5 */ 807 000000 #define UCBRS_6 (0x0C) /* USCI Second Stage Modulation: 6 */ 808 000000 #define UCBRS_7 (0x0E) /* USCI Second Stage Modulation: 7 */ 809 000000 810 000000 #define UCLISTEN (0x80) /* USCI Listen mode */ 811 000000 #define UCFE (0x40) /* USCI Frame Error Flag */ 812 000000 #define UCOE (0x20) /* USCI Overrun Error Flag */ 813 000000 #define UCPE (0x10) /* USCI Parity Error Flag */ 814 000000 #define UCBRK (0x08) /* USCI Break received */ 815 000000 #define UCRXERR (0x04) /* USCI RX Error Flag */ 816 000000 #define UCADDR (0x02) /* USCI Address received Flag */ 817 000000 #define UCBUSY (0x01) /* USCI Busy Flag */ 818 000000 #define UCIDLE (0x02) /* USCI Idle line detected Flag */ 819 000000 820 000000 //#define res (0x80) /* reserved */ 821 000000 //#define res (0x40) /* reserved */ 822 000000 //#define res (0x20) /* reserved */ 823 000000 //#define res (0x10) /* reserved */ 824 000000 #define UCNACKIE (0x08) /* NACK Condition interrupt enable */ 825 000000 #define UCSTPIE (0x04) /* STOP Condition interrupt enable */ 826 000000 #define UCSTTIE (0x02) /* START Condition interrupt enable */ 827 000000 #define UCALIE (0x01) /* Arbitration Lost interrupt enable */ 828 000000 829 000000 #define UCSCLLOW (0x40) /* SCL low */ 830 000000 #define UCGC (0x20) /* General Call address received Flag */ 831 000000 #define UCBBUSY (0x10) /* Bus Busy Flag */ 832 000000 #define UCNACKIFG (0x08) /* NAK Condition interrupt Flag */ 833 000000 #define UCSTPIFG (0x04) /* STOP Condition interrupt Flag */ 834 000000 #define UCSTTIFG (0x02) /* START Condition interrupt Flag */ 835 000000 #define UCALIFG (0x01) /* Arbitration Lost interrupt Flag */ 836 000000 837 000000 #define UCIRTXPL5 (0x80) /* IRDA Transmit Pulse Length 5 */ 838 000000 #define UCIRTXPL4 (0x40) /* IRDA Transmit Pulse Length 4 */ 839 000000 #define UCIRTXPL3 (0x20) /* IRDA Transmit Pulse Length 3 */ 840 000000 #define UCIRTXPL2 (0x10) /* IRDA Transmit Pulse Length 2 */ 841 000000 #define UCIRTXPL1 (0x08) /* IRDA - 4e-configLP - Page 28 Transmit Pulse Length 1 */ 842 000000 #define UCIRTXPL0 (0x04) /* IRDA Transmit Pulse Length 0 */ 843 000000 #define UCIRTXCLK (0x02) /* IRDA Transmit Pulse Clock Select */ 844 000000 #define UCIREN (0x01) /* IRDA Encoder/Decoder enable */ 845 000000 846 000000 #define UCIRRXFL5 (0x80) /* IRDA Receive Filter Length 5 */ 847 000000 #define UCIRRXFL4 (0x40) /* IRDA Receive Filter Length 4 */ 848 000000 #define UCIRRXFL3 (0x20) /* IRDA Receive Filter Length 3 */ 849 000000 #define UCIRRXFL2 (0x10) /* IRDA Receive Filter Length 2 */ 850 000000 #define UCIRRXFL1 (0x08) /* IRDA Receive Filter Length 1 */ 851 000000 #define UCIRRXFL0 (0x04) /* IRDA Receive Filter Length 0 */ 852 000000 #define UCIRRXPL (0x02) /* IRDA Receive Input Polarity */ 853 000000 #define UCIRRXFE (0x01) /* IRDA Receive Filter enable */ 854 000000 855 000000 //#define res (0x80) /* reserved */ 856 000000 //#define res (0x40) /* reserved */ 857 000000 #define UCDELIM1 (0x20) /* Break Sync Delimiter 1 */ 858 000000 #define UCDELIM0 (0x10) /* Break Sync Delimiter 0 */ 859 000000 #define UCSTOE (0x08) /* Sync-Field Timeout error */ 860 000000 #define UCBTOE (0x04) /* Break Timeout error */ 861 000000 //#define res (0x02) /* reserved */ 862 000000 #define UCABDEN (0x01) /* Auto Baud Rate detect enable */ 863 000000 864 000000 #define UCGCEN (0x8000u) /* I2C General Call enable */ 865 000000 #define UCOA9 (0x0200u) /* I2C Own Address 9 */ 866 000000 #define UCOA8 (0x0100u) /* I2C Own Address 8 */ 867 000000 #define UCOA7 (0x0080u) /* I2C Own Address 7 */ 868 000000 #define UCOA6 (0x0040u) /* I2C Own Address 6 */ 869 000000 #define UCOA5 (0x0020u) /* I2C Own Address 5 */ 870 000000 #define UCOA4 (0x0010u) /* I2C Own Address 4 */ 871 000000 #define UCOA3 (0x0008u) /* I2C Own Address 3 */ 872 000000 #define UCOA2 (0x0004u) /* I2C Own Address 2 */ 873 000000 #define UCOA1 (0x0002u) /* I2C Own Address 1 */ 874 000000 #define UCOA0 (0x0001u) /* I2C Own Address 0 */ 875 000000 876 000000 #define UCSA9 (0x0200u) /* I2C Slave Address 9 */ 877 000000 #define UCSA8 (0x0100u) /* I2C Slave Address 8 */ 878 000000 #define UCSA7 (0x0080u) /* I2C Slave Address 7 */ 879 000000 #define UCSA6 (0x0040u) /* I2C Slave Address 6 */ 880 000000 #define UCSA5 (0x0020u) /* I2C Slave Address 5 */ 881 000000 #define UCSA4 (0x0010u) /* I2C Slave Address 4 */ 882 000000 #define UCSA3 (0x0008u) /* I2C - 4e-configLP - Page 29 Slave Address 3 */ 883 000000 #define UCSA2 (0x0004u) /* I2C Slave Address 2 */ 884 000000 #define UCSA1 (0x0002u) /* I2C Slave Address 1 */ 885 000000 #define UCSA0 (0x0001u) /* I2C Slave Address 0 */ 886 000000 887 000000 /*********************************************** ************* 888 000000 * WATCHDOG TIMER 889 000000 ************************************************ ************/ 890 000000 #define __MSP430_HAS_WDT__ /* Definition to show that Module is available */ 891 000000 892 000000 #define WDTCTL_ (0x0120u) /* Watchdog Timer Control */ 893 000000 DEFW( WDTCTL , WDTCTL_) 894 000000 /* The bit names have been prefixed with "WDT" */ 895 000000 #define WDTIS0 (0x0001u) 896 000000 #define WDTIS1 (0x0002u) 897 000000 #define WDTSSEL (0x0004u) 898 000000 #define WDTCNTCL (0x0008u) 899 000000 #define WDTTMSEL (0x0010u) 900 000000 #define WDTNMI (0x0020u) 901 000000 #define WDTNMIES (0x0040u) 902 000000 #define WDTHOLD (0x0080u) 903 000000 904 000000 #define WDTPW (0x5A00u) 905 000000 906 000000 /* WDT-interval times [1ms] coded with Bits 0-2 */ 907 000000 /* WDT is clocked by fSMCLK (assumed 1MHz) */ 908 000000 #define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTC NTCL) /* 32ms interval (default) */ 909 000000 #define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTC NTCL+WDTIS0) /* 8ms " */ 910 000000 #define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTC NTCL+WDTIS1) /* 0.5ms " */ 911 000000 #define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTC NTCL+WDTIS1+WDTIS0) /* 0.064ms " */ 912 000000 /* WDT is clocked by fACLK (assumed 32KHz) */ 913 000000 #define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL) /* 1000ms " */ 914 000000 #define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL+WDTIS0) /* 250ms " */ 915 000000 #define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL+WDTIS1) /* 16ms " */ 916 000000 #define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */ 917 000000 /* Watchdog mode -> reset after expired time */ 918 000000 /* WDT is clocked by fSMCLK (assumed 1MHz) */ 919 000000 #define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */ 920 000000 #define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTI S0) /* 8ms " */ 921 000000 #define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTI S1) /* 0.5ms " */ 922 000000 #define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTI S1+WDTIS0) /* 0.064ms " - 4e-configLP - Page 30 */ 923 000000 /* WDT is clocked by fACLK (assumed 32KHz) */ 924 000000 #define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTS SEL) /* 1000ms " */ 925 000000 #define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTS SEL+WDTIS0) /* 250ms " */ 926 000000 #define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTS SEL+WDTIS1) /* 16ms " */ 927 000000 #define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTS SEL+WDTIS1+WDTIS0) /* 1.9ms " */ 928 000000 929 000000 /* INTERRUPT CONTROL */ 930 000000 /* These two bits are defined in the Special Function Registers */ 931 000000 /* #define WDTIE 0x01 */ 932 000000 /* #define WDTIFG 0x01 */ 933 000000 934 000000 /*********************************************** ************* 935 000000 * Calibration Data in Info Mem 936 000000 ************************************************ ************/ 937 000000 938 000000 #ifndef __DisableCalData 939 000000 940 000000 #define CALDCO_16MHZ_ (0x10F8u) /* DCOCTL Calibration Data for 16MHz */ 941 000000 READ_ONLY DEFC( CALDCO_16MHZ , CALDCO_16MHZ_ ) 942 000000 #define CALBC1_16MHZ_ (0x10F9u) /* BCSCTL1 Calibration Data for 16MHz */ 943 000000 READ_ONLY DEFC( CALBC1_16MHZ , CALBC1_16MHZ_ ) 944 000000 #define CALDCO_12MHZ_ (0x10FAu) /* DCOCTL Calibration Data for 12MHz */ 945 000000 READ_ONLY DEFC( CALDCO_12MHZ , CALDCO_12MHZ_ ) 946 000000 #define CALBC1_12MHZ_ (0x10FBu) /* BCSCTL1 Calibration Data for 12MHz */ 947 000000 READ_ONLY DEFC( CALBC1_12MHZ , CALBC1_12MHZ_ ) 948 000000 #define CALDCO_8MHZ_ (0x10FCu) /* DCOCTL Calibration Data for 8MHz */ 949 000000 READ_ONLY DEFC( CALDCO_8MHZ , CALDCO_8MHZ_) 950 000000 #define CALBC1_8MHZ_ (0x10FDu) /* BCSCTL1 Calibration Data for 8MHz */ 951 000000 READ_ONLY DEFC( CALBC1_8MHZ , CALBC1_8MHZ_) 952 000000 #define CALDCO_1MHZ_ (0x10FEu) /* DCOCTL Calibration Data for 1MHz */ 953 000000 READ_ONLY DEFC( CALDCO_1MHZ , CALDCO_1MHZ_) 954 000000 #define CALBC1_1MHZ_ (0x10FFu) /* BCSCTL1 Calibration Data for 1MHz */ 955 000000 READ_ONLY DEFC( CALBC1_1MHZ , CALBC1_1MHZ_) 956 000000 957 000000 #endif /* #ifndef __DisableCalData */ 958 000000 959 000000 /*********************************************** ************* 960 000000 * Interrupt Vectors (offset from 0xFFE0) 961 000000 ************************************************ ************/ 962 000000 963 000000 #define PORT1_VECTOR (2 * 2u) /* 0xFFE4 Port 1 */ 964 000000 #define PORT2_VECTOR (3 * 2u) /* 0xFFE6 Port 2 */ 965 000000 #define ADC10_VECTOR (5 * 2u) /* 0xFFEA ADC10 */ 966 000000 #define USCIAB0TX_VECTOR (6 * 2u) /* 0xFFEC USCI A0/B0 Transmit */ 967 000000 #define USCIAB0RX_VECTOR (7 * 2u) /* 0xFFEE USCI A0/B0 Receive */ 968 000000 #define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 - 4e-configLP - Page 31 Timer0)A CC1, TA0 */ 969 000000 #define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */ 970 000000 #define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ 971 000000 #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ 972 000000 #define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8 Timer1_A CC1-4, TA1 */ 973 000000 #define TIMER1_A0_VECTOR (13 * 2u) /* 0xFFFA Timer1_A CC0 */ 974 000000 #define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */ 975 000000 #define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */ 976 000000 977 000000 /*********************************************** ************* 978 000000 * End of Modules 979 000000 ************************************************ ************/ 980 000000 #pragma language=default 981 000000 982 000000 #endif /* #ifndef __MSP430G2553 */ 983 000000 986 000000 987 000000 #elif defined (__MSP430G2203__) 988 000000 #include "msp430g2203.h" 990 000000 #elif defined (__MSP430G2303__) 991 000000 #include "msp430g2303.h" 993 000000 #elif defined (__MSP430G2403__) 994 000000 #include "msp430g2403.h" 996 000000 #elif defined (__MSP430G2233__) 997 000000 #include "msp430g2233.h" 999 000000 #elif defined (__MSP430G2333__) 1000 000000 #include "msp430g2333.h" 1002 000000 #elif defined (__MSP430G2433__) 1003 000000 #include "msp430g2433.h" 1005 000000 #elif defined (__MSP430G2533__) 1006 000000 #include "msp430g2533.h" 1008 000000 #elif defined (__MSP430BT5190__) 1009 000000 #include "msp430bt5190.h" 1014 000000 #elif defined (__MSP430GENERIC__) 1015 000000 #error "msp430 generic device does not have a default include file" 1017 000000 #elif defined (__MSP430XGENERIC__) 1018 000000 #error "msp430X generic device does not have a default include file" 1024 000000 #else 1025 000000 #error "Failed to match a default include file" 1026 000000 #endif 1027 000000 1028 000000 #endif /* #ifndef __msp430 */ 1029 000000 8 000000 #include "4e-CF430G2553forth.h" ; header macros and register defs 1 000000 ; ---------------------------------------------- ------------------------ 2 000000 ; 4e4th is a Forth based on CamelForth 3 000000 ; for the Texas Instruments MSP430 4 000000 ; 5 000000 ; This program is free software; you can redistribute it and/or modify 6 000000 ; it under the terms of the GNU General Public License as published by 7 000000 ; the Free Software Foundation; either version 3 of the License, or 8 000000 ; (at your option) any later version. 9 000000 ; 10 000000 ; This program is distributed in the hope that it will be useful, 11 000000 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 000000 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 000000 ; GNU General Public License for more details. - 4e-configLP - Page 32 14 000000 ; 15 000000 ; You should have received a copy of the GNU General Public License 16 000000 ; along with this program. If not, see . 17 000000 ; 18 000000 ; See LICENSE TERMS in Brads file readme.txt as well. 19 000000 20 000000 ; ---------------------------------------------- ------------------------ 21 000000 ; 4e-CF430G2553forth.h: - Register, Model, Macro declarations - MSP430G2553 22 000000 ; ---------------------------------------------- ------------------------ 23 000000 24 000000 // ; FORTH MEMORY USAGE 25 000000 // ; for Flash memory operations - this includes information and main 26 000000 // ; ROM, but not the main ROM used by the kernel (above E000h) 27 000000 #define INFOSTART (0x1000) // ok mk 28 000000 #define INFOEND (0x10FF) // ok mk 29 000000 #define RAMSTART (0x0200) // ok mk 30 000000 #define RAMEND (0x0400) // ok mk 31 000000 #define USERFLASHSTART (0xC000) // ok mk 32 000000 #define USERFLASHEND (0xD7FF) // muss übereinstimmen mit -P CODE linker 33 000000 // D800-FDFF 34 000000 #define ISRSTART (0xFE00) 35 000000 #define ISREND (0xFFDF) 36 000000 #define MAINSEG (512) // wozu ?? mk 37 000000 #define INFOSEG (128) // ?? mk 38 000000 39 000000 // ; FORTH REGISTER USAGE 40 000000 41 000000 // ; Forth virtual machine 42 000000 // PC = R00 43 000000 #define RSP SP // R01 44 000000 // R02 = SR statusregister 45 000000 // R03 = CG constantgenerator 46 000000 #define PSP R4 47 000000 #define IP R5 48 000000 #define W R6 49 000000 #define TOS R7 50 000000 51 000000 // ; Loop parameters in registers 52 000000 #define INDEX R8 53 000000 #define LIMIT R9 54 000000 55 000000 // ; Scratch registers 56 000000 #define X R10 57 000000 #define Y R11 58 000000 #define Q R12 59 000000 #define T R13 60 000000 // nc R14 61 000000 // nc R15 62 000000 63 000000 64 000000 // ; T.I. Integer Subroutines Definitions 65 000000 #define IROP1 TOS 66 000000 #define IROP2L R10 67 000000 #define IROP2M R11 68 000000 #define IRACL R12 69 000000 #define IRACM R13 70 000000 #define IRBT W 71 000000 72 000000 // ; INDIRECT-THREADED NEXT 73 000000 78 000000 79 000000 // ; BRANCH DESTINATION (RELATIVE BRANCH) 80 000000 // ; For relative branch addresses, i.e., a branch is ADD @IP,IP 81 000000 85 000000 86 000000 // ; HEADER CONSTRUCTION MACROS 87 000000 - 4e-configLP - Page 33 102 000000 111 000000 126 000000 9 000000 10 000000 11 000000 ; production fuse bits 12 000000 FFFF PROFUSE: DW 0xFFFF ; burn fuse to prohibit WIPE 13 000002 14 000002 15 000002 1D version: DB (verend-ver0) 16 000003 204D53503433*ver0: DB ' MSP430G2553 4e4th LaunchPad ' 17 000020 EVEN 0x20 ; use blank as padding byte 18 000020 verend: 19 000020 20 000020 16 stamp: DB (stampend-stamp0) 21 000021 446563203230*stamp0: DB __date__,' ',__time__ 22 000037 stampend: 23 000037 24 000037 25 000037 ; We #include the following source files, rather than compiling them 26 000037 ; separately, so that they can inherit the value of 'link'. 27 000037 28 000037 #include "4e-core430.s43" 1 000037 ; ---------------------------------------------- ------------------------ 2 000037 ; 4e4th is a Forth based on CamelForth 3 000037 ; for the Texas Instruments MSP430 4 000037 ; 5 000037 ; This program is free software; you can redistribute it and/or modify 6 000037 ; it under the terms of the GNU General Public License as published by 7 000037 ; the Free Software Foundation; either version 3 of the License, or 8 000037 ; (at your option) any later version. 9 000037 ; 10 000037 ; This program is distributed in the hope that it will be useful, 11 000037 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 000037 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 000037 ; GNU General Public License for more details. 14 000037 ; 15 000037 ; You should have received a copy of the GNU General Public License 16 000037 ; along with this program. If not, see . 17 000037 ; 18 000037 ; See LICENSE TERMS in Brads file readme.txt as well. 19 000037 20 000037 ; ---------------------------------------------- ------------------------ 21 000037 ; 4e-core430.s43 - Machine Language Primitives 22 000037 ; ---------------------------------------------- ------------------------ 23 000037 24 000037 ; Revision History 25 000037 ; 1 mar 09 bjr - changed Flash write and erase primitives to correctly 26 000037 ; write RAM outside Info Flash and Main Flash address limits. 27 000037 28 000037 29 000000 EXTERN UP,UAREA,PADAREA,LSTACK,PSTACK,R STACK 30 000000 EXTERN TIBAREA,RAMDICT,ROMDICT 31 000000 EXTERN TIB_SIZE,UAREA_SIZE,VARAREA,VAR_ SIZE,nullirq 32 000037 - 4e-configLP - Page 34 33 000037 34 000037 35 000037 ; ---------------------------------------------- ------------------------ 36 000037 ; INTERPRETER LOGIC 37 000037 ; ITC NEXT is defined as 38 000037 ; MOV @IP+,W ; 2 fetch word address into W 39 000037 ; MOV @W+,PC ; 2 fetch code address into PC, W=PFA 40 000037 41 000037 ;C EXECUTE i*x xt -- j*x execute Forth word at 'xt' 42 000037 HEADER EXECUTE,7,'EXECUTE',DOCODE 42.1 000000 PUBLIC EXECUTE 42.2 000037 0000 DW link 42.3 000039 FF DB 0FFh ; not immediate 42.4 00003A link SET $ 42.5 00003A 07 DB 7 42.6 00003B 455845435554* DB 'EXECUTE' 42.7 000042 EVEN 42.8 000042 IF 'DOCODE'='DOCODE' 42.9 000042 .... EXECUTE: DW $+2 42.10 000044 ELSE 42.11 000044 EXECUTE: DW DOCODE 42.12 000044 ENDIF 42.13 000044 ENDM 43 000044 0647 MOV TOS,W ; 1 put word address into W 44 000046 3744 MOV @PSP+,TOS ; 2 fetch new TOS 45 000048 3046 MOV @W+,PC ; 2 fetch code address into PC, W=PFA 46 00004A 47 00004A ;Z lit -- x fetch inline literal to stack 48 00004A ; This is the primtive compiled by LITERAL. 49 00004A HEADER lit,3,'lit',DOCODE 49.1 000000 PUBLIC lit 49.2 00004A .... DW link 49.3 00004C FF DB 0FFh ; not immediate 49.4 00004D link SET $ 49.5 00004D 03 DB 3 49.6 00004E 6C6974 DB 'lit' 49.7 000051 00 EVEN 49.8 000052 IF 'DOCODE'='DOCODE' 49.9 000052 .... lit: DW $+2 49.10 000054 ELSE 49.11 000054 lit: DW DOCODE 49.12 000054 ENDIF 49.13 000054 ENDM 50 000054 2483 SUB #2,PSP ; 1 push old TOS.. 51 000056 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 52 00005A 3745 MOV @IP+,TOS ; 2 fetch new TOS value 53 00005C NEXT ; 4 53.1 00005C 3645 MOV @IP+,W // ; fetch word address into W 53.2 00005E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 53.3 000060 ENDM 54 000060 55 000060 ;C EXIT -- exit a colon definition 56 000060 HEADER EXIT,4,'EXIT',DOCODE 56.1 000000 PUBLIC EXIT 56.2 000060 .... DW link 56.3 000062 FF DB 0FFh ; not immediate 56.4 000063 link SET $ 56.5 000063 04 DB 4 56.6 000064 45584954 DB 'EXIT' 56.7 000068 EVEN 56.8 000068 IF 'DOCODE'='DOCODE' 56.9 000068 .... EXIT: DW $+2 56.10 00006A ELSE 56.11 00006A EXIT: DW DOCODE 56.12 00006A ENDIF 56.13 00006A ENDM 57 00006A 3541 MOV @RSP+,IP ; 2 pop old IP from - 4e-configLP - Page 35 return stack 58 00006C NEXT ; 4 58.1 00006C 3645 MOV @IP+,W // ; fetch word address into W 58.2 00006E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 58.3 000070 ENDM 59 000070 60 000070 ; ---------------------------------------------- ------------------------ 61 000070 ; DEFINING WORDS - ROMable ITC model 62 000070 63 000070 ; DOCOLON enters a new high-level thread (colon definition.) 64 000070 ; (internal code fragment, not a Forth word) 65 000000 PUBLIC DOCOLON 66 000070 DOCOLON: 67 000070 0512 PUSH IP ; 3 save old IP on return stack 68 000072 0546 MOV W,IP ; 1 set new IP to PFA 69 000074 NEXT ; 4 69.1 000074 3645 MOV @IP+,W // ; fetch word address into W 69.2 000076 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 69.3 000078 ENDM 70 000078 71 000078 ;C VARIABLE -- define a Forth VARIABLE 72 000078 ; CREATE CELL ALLOT ; 73 000078 ; Action of ROMable variable is the same as CREATE; it builds a 74 000078 ; constant holding the RAM address. See CREATE in hilvl430.s43. 75 000078 HEADER VARIABLE,8,'VARIABLE',DOCOLON 75.1 000000 PUBLIC VARIABLE 75.2 000078 .... DW link 75.3 00007A FF DB 0FFh ; not immediate 75.4 00007B link SET $ 75.5 00007B 08 DB 8 75.6 00007C 564152494142* DB 'VARIABLE' 75.7 000084 EVEN 75.8 000084 IF 'DOCOLON'='DOCODE' 75.9 000084 VARIABLE: DW $+2 75.10 000084 ELSE 75.11 000084 .... VARIABLE: DW DOCOLON 75.12 000086 ENDIF 75.13 000086 ENDM 76 000086 ............* DW CREATE,CELL,ALLOT,EXIT 77 00008E 78 00008E ;C CONSTANT -- define a Forth constant 79 00008E ; (machine code fragment) 81 00008E ; Note that the constant is stored in Code space. 82 00008E HEADER CONSTANT,8,'CONSTANT',DOCOLON 82.1 000000 PUBLIC CONSTANT 82.2 00008E .... DW link 82.3 000090 FF DB 0FFh ; not immediate 82.4 000091 link SET $ 82.5 000091 08 DB 8 82.6 000092 434F4E535441* DB 'CONSTANT' 82.7 00009A EVEN 82.8 00009A IF 'DOCOLON'='DOCODE' 82.9 00009A CONSTANT: DW $+2 82.10 00009A ELSE 82.11 00009A .... CONSTANT: DW DOCOLON 82.12 00009C ENDIF 82.13 00009C ENDM 83 00009C ............ DW BUILDS,ICOMMA,XDOES 84 0000A2 ; DOCON, code action of CONSTANT, 85 0000A2 ; entered with W=Parameter Field Adrs 86 0000A2 ; This is also the action of VARIABLE (Harvard model) 87 0000A2 ; This is also the action of CREATE (Harvard - 4e-configLP - Page 36 model) 88 000000 PUBLIC DOCON 89 000000 PUBLIC docreate 90 000000 PUBLIC DOVAR 91 0000A2 docreate: ; -- a-addr ; ROMable CREATE fetches address from PFA 92 0000A2 DOVAR: ; -- a-addr ; ROMable VARIABLE fetches address from PFA 93 0000A2 DOCON: ; -- x ; CONSTANT fetches cell from PFA to TOS 94 0000A2 2483 SUB #2,PSP ; make room on stack 95 0000A4 84470000 MOV TOS,0(PSP) 96 0000A8 2746 MOV @W,TOS ; fetch from parameter field to TOS 97 0000AA NEXT 97.1 0000AA 3645 MOV @IP+,W // ; fetch word address into W 97.2 0000AC 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 97.3 0000AE ENDM 98 0000AE 99 0000AE ; DOCREATE's action is for a table in RAM. 100 0000AE ; DOROM is the code action for a table in ROM; 101 0000AE ; it returns the address of the parameter field. 102 000000 PUBLIC DOROM 103 0000AE DOROM: ; -- a-addr ; Table in ROM: get PFA into TOS 104 0000AE 2483 SUB #2,PSP 105 0000B0 84470000 MOV TOS,0(PSP) 106 0000B4 0746 MOV W,TOS 107 0000B6 NEXT 107.1 0000B6 3645 MOV @IP+,W // ; fetch word address into W 107.2 0000B8 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 107.3 0000BA ENDM 108 0000BA 109 0000BA ;Z USER n -- define user variable 'n' 110 0000BA ; (machine code fragment) Flashable model 111 0000BA HEADER USER,4,'USER',DOCOLON 111.1 000000 PUBLIC USER 111.2 0000BA .... DW link 111.3 0000BC FF DB 0FFh ; not immediate 111.4 0000BD link SET $ 111.5 0000BD 04 DB 4 111.6 0000BE 55534552 DB 'USER' 111.7 0000C2 EVEN 111.8 0000C2 IF 'DOCOLON'='DOCODE' 111.9 0000C2 USER: DW $+2 111.10 0000C2 ELSE 111.11 0000C2 .... USER: DW DOCOLON 111.12 0000C4 ENDIF 111.13 0000C4 ENDM 112 0000C4 ............ DW BUILDS,ICOMMA,XDOES 113 000000 PUBLIC DOUSER 114 0000CA DOUSER: ; -- a-addr ; add constant to User Pointer, result in TOS 115 0000CA 2483 SUB #2,PSP 116 0000CC 84470000 MOV TOS,0(PSP) 117 0000D0 2746 MOV @W,TOS 118 0000D2 1752.... ADD &UP,TOS 119 0000D6 NEXT 119.1 0000D6 3645 MOV @IP+,W // ; fetch word address into W 119.2 0000D8 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 119.3 0000DA ENDM 120 0000DA 121 0000DA ; DOALIAS used to build a word which performs the action of 122 0000DA ; another word. Its action is to fetch the "alias" CFA from 123 0000DA ; the parameter field, and execute that, e.g. - 4e-configLP - Page 37 DOES> I@ EXECUTE ; 124 0000DA ; This is currently used only within the Forth kernel. 125 000000 PUBLIC DOALIAS 126 0000DA DOALIAS: ; -- ; fetch CFA of word to execute 127 0000DA 2646 MOV @W,W ; 2 fetch from parameter field to W 128 0000DC 3046 MOV @W+,PC ; 2 fetch code address into PC, W=PFA 129 0000DE 130 0000DE ; DODOES is the code action of a DOES> clause. For ITC Forth: 131 0000DE ; defined word: CFA: doescode 132 0000DE ; PFA: parameter field 133 0000DE ; 134 0000DE ; doescode: MOV #DODOES,PC ; 16-bit direct jump, in two cells 135 0000DE ; high-level thread 136 0000DE ; 137 0000DE ; Note that we use JMP DODOES instead of CALL #DODOES because we can 138 0000DE ; efficiently obtain the thread address. DODOES is entered with W=PFA. 139 0000DE ; It enters the high-level thread with the address of the parameter 140 0000DE ; field on top of stack. 141 0000DE 142 000000 PUBLIC dodoes 143 0000DE dodoes: ; -- a-addr ; 3 for MOV #DODOES,PC 144 0000DE 2483 SUB #2,PSP ; 1 make room on stack 145 0000E0 84470000 MOV TOS,0(PSP) ; 4 146 0000E4 0746 MOV W,TOS ; 1 put defined word's PFA in TOS 147 0000E6 0512 PUSH IP ; 3 save old IP on return stack 148 0000E8 1546FEFF MOV -2(W),IP ; 3 fetch adrs of doescode from defined word 149 0000EC 2552 ADD #4,IP ; 1 skip MOV instruction to get thread adrs 150 0000EE NEXT ; 4 150.1 0000EE 3645 MOV @IP+,W // ; fetch word address into W 150.2 0000F0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 150.3 0000F2 ENDM 151 0000F2 152 0000F2 ; OPTION 1 ; OPTION 2 153 0000F2 ; MOV #DODOES,PC 3 ; CALL #DODOES 5 154 0000F2 ; ... ; ... 155 0000F2 ; PUSH IP 3 ; POP W 2 156 0000F2 ; MOVE -2(W),IP 3 ; PUSH IP 3 157 0000F2 ; ADD #4,IP 1 ; MOV W,IP 1 158 0000F2 159 0000F2 160 0000F2 ; ---------------------------------------------- ------------------------ 161 0000F2 ; STACK OPERATIONS 162 0000F2 163 0000F2 ;C DUP x -- x x duplicate top of stack 164 0000F2 HEADER DUP,3,'DUP',DOCODE 164.1 000000 PUBLIC DUP 164.2 0000F2 .... DW link 164.3 0000F4 FF DB 0FFh ; not immediate 164.4 0000F5 link SET $ 164.5 0000F5 03 DB 3 164.6 0000F6 445550 DB 'DUP' 164.7 0000F9 00 EVEN 164.8 0000FA IF 'DOCODE'='DOCODE' 164.9 0000FA .... DUP: DW $+2 - 4e-configLP - Page 38 164.10 0000FC ELSE 164.11 0000FC DUP: DW DOCODE 164.12 0000FC ENDIF 164.13 0000FC ENDM 165 0000FC 2483 PUSHTOS: SUB #2,PSP ; 1 push old TOS.. 166 0000FE 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 167 000102 NEXT ; 4 167.1 000102 3645 MOV @IP+,W // ; fetch word address into W 167.2 000104 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 167.3 000106 ENDM 168 000106 169 000106 ;C ?DUP x -- 0 | x x DUP if nonzero 170 000106 HEADER QDUP,4,'?DUP',DOCODE 170.1 000000 PUBLIC QDUP 170.2 000106 .... DW link 170.3 000108 FF DB 0FFh ; not immediate 170.4 000109 link SET $ 170.5 000109 04 DB 4 170.6 00010A 3F445550 DB '?DUP' 170.7 00010E EVEN 170.8 00010E IF 'DOCODE'='DOCODE' 170.9 00010E .... QDUP: DW $+2 170.10 000110 ELSE 170.11 000110 QDUP: DW DOCODE 170.12 000110 ENDIF 170.13 000110 ENDM 171 000110 0793 CMP #0,TOS ; 1 test for TOS nonzero 172 000112 F423 JNZ PUSHTOS ; 2 173 000114 NODUP: NEXT ; 4 173.1 000114 3645 MOV @IP+,W // ; fetch word address into W 173.2 000116 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 173.3 000118 ENDM 174 000118 175 000118 ;C DROP x -- drop top of stack 176 000118 HEADER DROP,4,'DROP',DOCODE 176.1 000000 PUBLIC DROP 176.2 000118 .... DW link 176.3 00011A FF DB 0FFh ; not immediate 176.4 00011B link SET $ 176.5 00011B 04 DB 4 176.6 00011C 44524F50 DB 'DROP' 176.7 000120 EVEN 176.8 000120 IF 'DOCODE'='DOCODE' 176.9 000120 .... DROP: DW $+2 176.10 000122 ELSE 176.11 000122 DROP: DW DOCODE 176.12 000122 ENDIF 176.13 000122 ENDM 177 000122 3744 MOV @PSP+,TOS ; 2 178 000124 NEXT ; 4 178.1 000124 3645 MOV @IP+,W // ; fetch word address into W 178.2 000126 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 178.3 000128 ENDM 179 000128 180 000128 ;C SWAP x1 x2 -- x2 x1 swap top two items 181 000128 HEADER SWAP,4,'SWAP',DOCODE 181.1 000000 PUBLIC SWAP 181.2 000128 .... DW link 181.3 00012A FF DB 0FFh ; not immediate 181.4 00012B link SET $ 181.5 00012B 04 DB 4 181.6 00012C 53574150 DB 'SWAP' - 4e-configLP - Page 39 181.7 000130 EVEN 181.8 000130 IF 'DOCODE'='DOCODE' 181.9 000130 .... SWAP: DW $+2 181.10 000132 ELSE 181.11 000132 SWAP: DW DOCODE 181.12 000132 ENDIF 181.13 000132 ENDM 182 000132 2644 MOV @PSP,W ; 2 183 000134 84470000 MOV TOS,0(PSP) ; 4 184 000138 0746 MOV W,TOS ; 1 185 00013A NEXT ; 4 185.1 00013A 3645 MOV @IP+,W // ; fetch word address into W 185.2 00013C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 185.3 00013E ENDM 186 00013E 187 00013E ;C OVER x1 x2 -- x1 x2 x1 per stack diagram 188 00013E HEADER OVER,4,'OVER',DOCODE 188.1 000000 PUBLIC OVER 188.2 00013E .... DW link 188.3 000140 FF DB 0FFh ; not immediate 188.4 000141 link SET $ 188.5 000141 04 DB 4 188.6 000142 4F564552 DB 'OVER' 188.7 000146 EVEN 188.8 000146 IF 'DOCODE'='DOCODE' 188.9 000146 .... OVER: DW $+2 188.10 000148 ELSE 188.11 000148 OVER: DW DOCODE 188.12 000148 ENDIF 188.13 000148 ENDM 189 000148 2644 MOV @PSP,W ; 2 190 00014A 2483 SUB #2,PSP ; 2 191 00014C 84470000 MOV TOS,0(PSP) ; 4 192 000150 0746 MOV W,TOS ; 1 193 000152 NEXT ; 4 193.1 000152 3645 MOV @IP+,W // ; fetch word address into W 193.2 000154 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 193.3 000156 ENDM 194 000156 195 000156 ;C ROT x1 x2 x3 -- x2 x3 x1 per stack diagram 196 000156 HEADER ROT,3,'ROT',DOCODE 196.1 000000 PUBLIC ROT 196.2 000156 .... DW link 196.3 000158 FF DB 0FFh ; not immediate 196.4 000159 link SET $ 196.5 000159 03 DB 3 196.6 00015A 524F54 DB 'ROT' 196.7 00015D 00 EVEN 196.8 00015E IF 'DOCODE'='DOCODE' 196.9 00015E .... ROT: DW $+2 196.10 000160 ELSE 196.11 000160 ROT: DW DOCODE 196.12 000160 ENDIF 196.13 000160 ENDM 197 000160 2644 MOV @PSP,W ; 2 fetch x2 198 000162 84470000 MOV TOS,0(PSP) ; 4 store x3 199 000166 17440200 MOV 2(PSP),TOS ; 3 fetch x1 200 00016A 84460200 MOV W,2(PSP) ; 4 store x2 201 00016E NEXT ; 4 201.1 00016E 3645 MOV @IP+,W // ; fetch word address into W 201.2 000170 3046 MOV @W+,PC // ; fetch code address into PC, - 4e-configLP - Page 40 W=PFA 201.3 000172 ENDM 202 000172 203 000172 ;X NIP x1 x2 -- x2 per stack diagram 204 000172 HEADER NIP,3,'NIP',DOCODE 204.1 000000 PUBLIC NIP 204.2 000172 .... DW link 204.3 000174 FF DB 0FFh ; not immediate 204.4 000175 link SET $ 204.5 000175 03 DB 3 204.6 000176 4E4950 DB 'NIP' 204.7 000179 00 EVEN 204.8 00017A IF 'DOCODE'='DOCODE' 204.9 00017A .... NIP: DW $+2 204.10 00017C ELSE 204.11 00017C NIP: DW DOCODE 204.12 00017C ENDIF 204.13 00017C ENDM 205 00017C 2453 ADD #2,PSP ; 1 206 00017E NEXT ; 4 206.1 00017E 3645 MOV @IP+,W // ; fetch word address into W 206.2 000180 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 206.3 000182 ENDM 207 000182 ; Das funktioniert, weil TOS im Register ist. 208 000182 ; TOS beleibt dort unverändert, derweil der PSP um eins erhöht wird. 209 000182 ; Das entspricht einem DROP ohne den TOS neu zu laden. 210 000182 ; cool. mk 211 000182 212 000182 ;C >R x -- R: -- x push to return stack 213 000182 HEADER TOR,2,'>R',DOCODE 213.1 000000 PUBLIC TOR 213.2 000182 .... DW link 213.3 000184 FF DB 0FFh ; not immediate 213.4 000185 link SET $ 213.5 000185 02 DB 2 213.6 000186 3E52 DB '>R' 213.7 000188 EVEN 213.8 000188 IF 'DOCODE'='DOCODE' 213.9 000188 .... TOR: DW $+2 213.10 00018A ELSE 213.11 00018A TOR: DW DOCODE 213.12 00018A ENDIF 213.13 00018A ENDM 214 00018A 0712 PUSH TOS 215 00018C 3744 MOV @PSP+,TOS 216 00018E NEXT 216.1 00018E 3645 MOV @IP+,W // ; fetch word address into W 216.2 000190 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 216.3 000192 ENDM 217 000192 218 000192 ;C R> -- x R: x -- pop from return stack 219 000192 HEADER RFROM,2,'R>',DOCODE 219.1 000000 PUBLIC RFROM 219.2 000192 .... DW link 219.3 000194 FF DB 0FFh ; not immediate 219.4 000195 link SET $ 219.5 000195 02 DB 2 219.6 000196 523E DB 'R>' 219.7 000198 EVEN 219.8 000198 IF 'DOCODE'='DOCODE' 219.9 000198 .... RFROM: DW $+2 219.10 00019A ELSE 219.11 00019A RFROM: DW DOCODE 219.12 00019A ENDIF 219.13 00019A ENDM 220 00019A 2483 SUB #2,PSP ; 2 - 4e-configLP - Page 41 221 00019C 84470000 MOV TOS,0(PSP) ; 4 222 0001A0 3741 MOV @RSP+,TOS 223 0001A2 NEXT 223.1 0001A2 3645 MOV @IP+,W // ; fetch word address into W 223.2 0001A4 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 223.3 0001A6 ENDM 224 0001A6 225 0001A6 ;C R@ -- x R: x -- x fetch from rtn stk 226 0001A6 HEADER RFETCH,2,'R@',DOCODE 226.1 000000 PUBLIC RFETCH 226.2 0001A6 .... DW link 226.3 0001A8 FF DB 0FFh ; not immediate 226.4 0001A9 link SET $ 226.5 0001A9 02 DB 2 226.6 0001AA 5240 DB 'R@' 226.7 0001AC EVEN 226.8 0001AC IF 'DOCODE'='DOCODE' 226.9 0001AC .... RFETCH: DW $+2 226.10 0001AE ELSE 226.11 0001AE RFETCH: DW DOCODE 226.12 0001AE ENDIF 226.13 0001AE ENDM 227 0001AE 2483 SUB #2,PSP 228 0001B0 84470000 MOV TOS,0(PSP) 229 0001B4 2741 MOV @RSP,TOS 230 0001B6 NEXT 230.1 0001B6 3645 MOV @IP+,W // ; fetch word address into W 230.2 0001B8 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 230.3 0001BA ENDM 231 0001BA 232 0001BA ;Z SP@ -- a-addr get data stack pointer 233 0001BA HEADER SPFETCH,3,'SP@',DOCODE 233.1 000000 PUBLIC SPFETCH 233.2 0001BA .... DW link 233.3 0001BC FF DB 0FFh ; not immediate 233.4 0001BD link SET $ 233.5 0001BD 03 DB 3 233.6 0001BE 535040 DB 'SP@' 233.7 0001C1 00 EVEN 233.8 0001C2 IF 'DOCODE'='DOCODE' 233.9 0001C2 .... SPFETCH: DW $+2 233.10 0001C4 ELSE 233.11 0001C4 SPFETCH: DW DOCODE 233.12 0001C4 ENDIF 233.13 0001C4 ENDM 234 0001C4 2483 SUB #2,PSP 235 0001C6 84470000 MOV TOS,0(PSP) 236 0001CA 0744 MOV PSP,TOS 237 0001CC NEXT 237.1 0001CC 3645 MOV @IP+,W // ; fetch word address into W 237.2 0001CE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 237.3 0001D0 ENDM 238 0001D0 239 0001D0 ;Z SP! a-addr -- set data stack pointer 240 0001D0 HEADER SPSTORE,3,'SP!',DOCODE 240.1 000000 PUBLIC SPSTORE 240.2 0001D0 .... DW link 240.3 0001D2 FF DB 0FFh ; not immediate 240.4 0001D3 link SET $ 240.5 0001D3 03 DB 3 240.6 0001D4 535021 DB 'SP!' 240.7 0001D7 00 EVEN 240.8 0001D8 IF 'DOCODE'='DOCODE' 240.9 0001D8 .... SPSTORE: DW $+2 240.10 0001DA ELSE 240.11 0001DA SPSTORE: DW DOCODE 240.12 0001DA ENDIF 240.13 0001DA ENDM 241 0001DA 0447 MOV TOS,PSP - 4e-configLP - Page 42 242 0001DC 3744 MOV @PSP+,TOS ; 2 243 0001DE NEXT 243.1 0001DE 3645 MOV @IP+,W // ; fetch word address into W 243.2 0001E0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 243.3 0001E2 ENDM 244 0001E2 245 0001E2 ;Z RP@ -- a-addr get return stack pointer 246 0001E2 HEADER RPFETCH,3,'RP@',DOCODE 246.1 000000 PUBLIC RPFETCH 246.2 0001E2 .... DW link 246.3 0001E4 FF DB 0FFh ; not immediate 246.4 0001E5 link SET $ 246.5 0001E5 03 DB 3 246.6 0001E6 525040 DB 'RP@' 246.7 0001E9 00 EVEN 246.8 0001EA IF 'DOCODE'='DOCODE' 246.9 0001EA .... RPFETCH: DW $+2 246.10 0001EC ELSE 246.11 0001EC RPFETCH: DW DOCODE 246.12 0001EC ENDIF 246.13 0001EC ENDM 247 0001EC 2483 SUB #2,PSP 248 0001EE 84470000 MOV TOS,0(PSP) 249 0001F2 0741 MOV RSP,TOS 250 0001F4 NEXT 250.1 0001F4 3645 MOV @IP+,W // ; fetch word address into W 250.2 0001F6 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 250.3 0001F8 ENDM 251 0001F8 252 0001F8 ;Z RP! a-addr -- set return stack pointer 253 0001F8 HEADER RPSTORE,3,'RP!',DOCODE 253.1 000000 PUBLIC RPSTORE 253.2 0001F8 .... DW link 253.3 0001FA FF DB 0FFh ; not immediate 253.4 0001FB link SET $ 253.5 0001FB 03 DB 3 253.6 0001FC 525021 DB 'RP!' 253.7 0001FF 00 EVEN 253.8 000200 IF 'DOCODE'='DOCODE' 253.9 000200 .... RPSTORE: DW $+2 253.10 000202 ELSE 253.11 000202 RPSTORE: DW DOCODE 253.12 000202 ENDIF 253.13 000202 ENDM 254 000202 0147 MOV TOS,RSP 255 000204 3744 MOV @PSP+,TOS ; 2 256 000206 NEXT 256.1 000206 3645 MOV @IP+,W // ; fetch word address into W 256.2 000208 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 256.3 00020A ENDM 257 00020A 258 00020A ;X TUCK x1 x2 -- x2 x1 x2 per stack diagram 259 00020A HEADER TUCK,4,'TUCK',DOCOLON 259.1 000000 PUBLIC TUCK 259.2 00020A .... DW link 259.3 00020C FF DB 0FFh ; not immediate 259.4 00020D link SET $ 259.5 00020D 04 DB 4 259.6 00020E 5455434B DB 'TUCK' 259.7 000212 EVEN 259.8 000212 IF 'DOCOLON'='DOCODE' 259.9 000212 TUCK: DW $+2 259.10 000212 ELSE 259.11 000212 .... TUCK: DW DOCOLON 259.12 000214 ENDIF 259.13 000214 ENDM 260 000214 ............ DC16 SWAP,OVER,EXIT 261 00021A 262 00021A ; ---------------------------------------------- - 4e-configLP - Page 43 ------------------------ 263 00021A ; MEMORY OPERATIONS 264 00021A 265 00021A ;C @ a-addr -- x fetch cell from memory 266 00021A HEADER FETCH,1,'@',DOCODE 266.1 000000 PUBLIC FETCH 266.2 00021A .... DW link 266.3 00021C FF DB 0FFh ; not immediate 266.4 00021D link SET $ 266.5 00021D 01 DB 1 266.6 00021E 40 DB '@' 266.7 00021F 00 EVEN 266.8 000220 IF 'DOCODE'='DOCODE' 266.9 000220 .... FETCH: DW $+2 266.10 000222 ELSE 266.11 000222 FETCH: DW DOCODE 266.12 000222 ENDIF 266.13 000222 ENDM 267 000222 2747 MOV @TOS,TOS 268 000224 NEXT 268.1 000224 3645 MOV @IP+,W // ; fetch word address into W 268.2 000226 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 268.3 000228 ENDM 269 000228 270 000228 ;C ! x a-addr -- store cell in memory 271 000228 HEADER STORE,1,'!',DOCODE 271.1 000000 PUBLIC STORE 271.2 000228 .... DW link 271.3 00022A FF DB 0FFh ; not immediate 271.4 00022B link SET $ 271.5 00022B 01 DB 1 271.6 00022C 21 DB '!' 271.7 00022D 00 EVEN 271.8 00022E IF 'DOCODE'='DOCODE' 271.9 00022E .... STORE: DW $+2 271.10 000230 ELSE 271.11 000230 STORE: DW DOCODE 271.12 000230 ENDIF 271.13 000230 ENDM 272 000230 B7440000 MOV @PSP+,0(TOS) 273 000234 3744 MOV @PSP+,TOS 274 000236 NEXT 274.1 000236 3645 MOV @IP+,W // ; fetch word address into W 274.2 000238 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 274.3 00023A ENDM 275 00023A 276 00023A ;C C@ c-addr -- char fetch char from memory 277 00023A HEADER CFETCH,2,'C@',DOCODE 277.1 000000 PUBLIC CFETCH 277.2 00023A .... DW link 277.3 00023C FF DB 0FFh ; not immediate 277.4 00023D link SET $ 277.5 00023D 02 DB 2 277.6 00023E 4340 DB 'C@' 277.7 000240 EVEN 277.8 000240 IF 'DOCODE'='DOCODE' 277.9 000240 .... CFETCH: DW $+2 277.10 000242 ELSE 277.11 000242 CFETCH: DW DOCODE 277.12 000242 ENDIF 277.13 000242 ENDM 278 000242 6747 MOV.B @TOS,TOS 279 000244 NEXT 279.1 000244 3645 MOV @IP+,W // ; fetch word address into W 279.2 000246 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 279.3 000248 ENDM 280 000248 281 000248 ;C C! char c-addr -- store char in memory - 4e-configLP - Page 44 282 000248 HEADER CSTORE,2,'C!',DOCODE 282.1 000000 PUBLIC CSTORE 282.2 000248 .... DW link 282.3 00024A FF DB 0FFh ; not immediate 282.4 00024B link SET $ 282.5 00024B 02 DB 2 282.6 00024C 4321 DB 'C!' 282.7 00024E EVEN 282.8 00024E IF 'DOCODE'='DOCODE' 282.9 00024E .... CSTORE: DW $+2 282.10 000250 ELSE 282.11 000250 CSTORE: DW DOCODE 282.12 000250 ENDIF 282.13 000250 ENDM 283 000250 3644 MOV @PSP+,W 284 000252 C7460000 MOV.B W,0(TOS) 285 000256 3744 MOV @PSP+,TOS 286 000258 NEXT 286.1 000258 3645 MOV @IP+,W // ; fetch word address into W 286.2 00025A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 286.3 00025C ENDM 287 00025C 288 00025C ; FLASH MEMORY OPERATIONS 289 00025C ; Note that an I! or IC! to a RAM address >FLASHSTART will work -- it 290 00025C ; will enable the flash, write the RAM, and then disable the flash. 291 00025C ; An FLERASE to a RAM address will merely clear that one RAM cell. 292 00025C 293 00025C ;Z FLERASE a-addr n -- erase n bytes of flash, full segment sizes. 294 00025C HEADER FLERASE,7,'FLERASE',DOCODE 294.1 000000 PUBLIC FLERASE 294.2 00025C .... DW link 294.3 00025E FF DB 0FFh ; not immediate 294.4 00025F link SET $ 294.5 00025F 07 DB 7 294.6 000260 464C45524153* DB 'FLERASE' 294.7 000267 00 EVEN 294.8 000268 IF 'DOCODE'='DOCODE' 294.9 000268 .... FLERASE: DW $+2 294.10 00026A ELSE 294.11 00026A FLERASE: DW DOCODE 294.12 00026A ENDIF 294.13 00026A ENDM 295 00026A 3644 MOV @PSP+,W ; get address in W 296 00026C 0756 ADD W,TOS ; TOS=end adrs (first unerased adrs) 297 00026E FLE_1: 298 00026E 0697 CMP TOS,W ; adr-end 299 000270 2E2C JC FLE_X ; if no borrow, adr>=end, do not erase 300 000272 ; is it within Main flash? 301 000272 369000C0 CMP #USERFLASHSTART,W ; flash start 302 000276 0328 JNC FLE_VEC ; if borrow, adrend, check if vec 305 00027E 306 00027E FLE_VEC 307 00027E ; danger!! only for MSPG2553 apps 308 00027E ; is it within interrupt vector flash? 309 00027E 369000FE CMP #ISRSTART,W ; flash start 310 000282 0328 JNC FLE_INFO ; if borrow, adrend, check if Info 313 00028A ; /danger 314 00028A 315 00028A FLE_INFO: ; is it within Info flash? 316 00028A 36900010 CMP #INFOSTART,W 317 00028E 1F28 JNC FLE_X ; if borrow, adrend, do not erase 320 000296 FLE_OK: ; Address is either in Main flash, or in Info flash. 321 000296 ; Segment Erase from flash. 322 000296 ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. 323 000296 ; Per section 5.3.2 of MSP430 Family User's Guide 324 000296 0212 PUSH sr 325 000298 32C2 DINT ; Disable interrupts 326 00029A B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 327 0002A0 B24002A52801 MOV #FWKEY+ERASE,&FCTL1 ; Enable segment erase 328 0002A6 B6430000 MOV #-1,0(W) ; Dummy write in segment to erase 329 0002AA B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear erase command. 330 0002B0 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Done, set LOCK 331 0002B6 ; EINT ; Enable interrupts 332 0002B6 3241 POP sr 333 0002B8 ; Advance flash pointer by 512 bytes or 128 bytes 334 0002B8 ; is it within Main flash? 335 0002B8 369000C0 CMP #USERFLASHSTART,W 336 0002BC 0528 JNC FL_INFO ; if borrow, adrend, must be Info 339 0002C4 36508001 ADD #(MAINSEG-INFOSEG),W 340 0002C8 36508000 FL_INFO: ADD #INFOSEG,W 341 0002CC D03F JMP FLE_1 ; continue till past end or outside limits 342 0002CE 3744 FLE_X: MOV @PSP+,TOS 343 0002D0 NEXT 343.1 0002D0 3645 MOV @IP+,W // ; fetch word address into W 343.2 0002D2 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 343.3 0002D4 ENDM 344 0002D4 345 0002D4 ; Program Space (Flash) operators 346 0002D4 347 0002D4 ;Z I! x a-addr -- store cell in Instruction memory 348 0002D4 HEADER ISTORE,2,'I!',DOCODE 348.1 000000 PUBLIC ISTORE 348.2 0002D4 .... DW link 348.3 0002D6 FF DB 0FFh ; not immediate 348.4 0002D7 link SET $ 348.5 0002D7 02 DB 2 - 4e-configLP - Page 46 348.6 0002D8 4921 DB 'I!' 348.7 0002DA EVEN 348.8 0002DA IF 'DOCODE'='DOCODE' 348.9 0002DA .... ISTORE: DW $+2 348.10 0002DC ELSE 348.11 0002DC ISTORE: DW DOCODE 348.12 0002DC ENDIF 348.13 0002DC ENDM 349 0002DC 3644 MOV @PSP+,W ; get data to write 350 0002DE 17B3 BIT #1,TOS 351 0002E0 1F20 JNZ IST_X ; if not even address, do not write 352 0002E2 2697 CMP @TOS,W 353 0002E4 1D24 JZ IST_X ; if memory is desired value, do not write 354 0002E6 ; is it within Main flash? 355 0002E6 379000C0 CMP #USERFLASHSTART,TOS 356 0002EA 0328 JNC IST_INFO ; if borrow, adrend, check if Info 359 0002F2 IST_INFO: ; is it within Info flash? 360 0002F2 37900010 CMP #INFOSTART,TOS 361 0002F6 0B28 JNC IST_RAM ; if borrow, adrend, assume it's RAM 364 0002FE IST_OK: ; Address is either in Main flash, or in Info flash. 365 0002FE ; Byte/word write from flash. 366 0002FE ; Assumes location to write is already erased 367 0002FE ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. 368 0002FE ; Per section 5.3.3 of MSP430 Family User's Guide 369 0002FE 0212 PUSH sr 370 000300 32C2 DINT ; Disable interrupts 371 000302 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 372 000308 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 373 00030E IST_RAM: ; If RAM, jump here to write. FCTL1,FCTL3,EINT are superfluous 374 00030E 87460000 MOV W,0(TOS) ; Write word to flash location 375 000312 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 376 000318 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 377 00031E ; EINT ; Enable interrupts 378 00031E 3241 POP sr 379 000320 3744 IST_X: MOV @PSP+,TOS ; pop new TOS 380 000322 NEXT 380.1 000322 3645 MOV @IP+,W // ; fetch word address into W 380.2 000324 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 380.3 000326 ENDM 381 000326 382 000326 ; write vector area - or any flash location. !! dangerous!! 383 000326 ;Z VEC! x adr -- store x to top most - 4e-configLP - Page 47 segment 384 000326 HEADER VECSTORE,4,'VEC!',DOCODE 384.1 000000 PUBLIC VECSTORE 384.2 000326 .... DW link 384.3 000328 FF DB 0FFh ; not immediate 384.4 000329 link SET $ 384.5 000329 04 DB 4 384.6 00032A 56454321 DB 'VEC!' 384.7 00032E EVEN 384.8 00032E IF 'DOCODE'='DOCODE' 384.9 00032E .... VECSTORE: DW $+2 384.10 000330 ELSE 384.11 000330 VECSTORE: DW DOCODE 384.12 000330 ENDIF 384.13 000330 ENDM 385 000330 3644 MOV @PSP+,W ; get data to write 386 000332 17B3 BIT #1,TOS 387 000334 F523 JNZ IST_X ; if not even address, do not write 388 000336 2697 CMP @TOS,W 389 000338 1124 JZ IST_X2 ; if memory is desired value, do not write 390 00033A 0212 PUSH sr 391 00033C 32C2 DINT ; Disable interrupts 392 00033E B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 393 000344 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 394 00034A 87460000 MOV W,0(TOS) ; Write word to flash location 395 00034E B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 396 000354 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 397 00035A ; EINT ; Enable interrupts 398 00035A 3241 POP sr 399 00035C 3744 IST_X2: MOV @PSP+,TOS ; pop new TOS 400 00035E NEXT 400.1 00035E 3645 MOV @IP+,W // ; fetch word address into W 400.2 000360 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 400.3 000362 ENDM 401 000362 402 000362 403 000362 404 000362 ;Z IC! x a-addr -- store char in Instruction memory 405 000362 HEADER ICSTORE,3,'IC!',DOCODE 405.1 000000 PUBLIC ICSTORE 405.2 000362 .... DW link 405.3 000364 FF DB 0FFh ; not immediate 405.4 000365 link SET $ 405.5 000365 03 DB 3 405.6 000366 494321 DB 'IC!' 405.7 000369 00 EVEN 405.8 00036A IF 'DOCODE'='DOCODE' 405.9 00036A .... ICSTORE: DW $+2 405.10 00036C ELSE 405.11 00036C ICSTORE: DW DOCODE 405.12 00036C ENDIF 405.13 00036C ENDM 406 00036C 3644 MOV @PSP+,W ; get data to write 407 00036E 6697 CMP.B @TOS,W 408 000370 D727 JZ IST_X ; if memory is desired value, do not write 409 000372 ; is it within Main flash? 410 000372 379000C0 CMP #USERFLASHSTART,TOS - 4e-configLP - Page 48 411 000376 0328 JNC ICST_INFO ; if borrow, adrend, check if Info 414 00037E ICST_INFO: ; is it within Info flash? 415 00037E 37900010 CMP #INFOSTART,TOS 416 000382 0B28 JNC ICST_RAM ; if borrow, adrend, assume it's RAM 419 00038A ICST_OK: ; Address is either in Main flash, or in Info flash. 420 00038A ; Byte/word write from flash. 421 00038A ; Assumes location to write is already erased 422 00038A ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. 423 00038A ; Per section 5.3.3 of MSP430 Family User's Guide 424 00038A 0212 PUSH sr 425 00038C 32C2 DINT ; Disable interrupts 426 00038E B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 427 000394 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 428 00039A ICST_RAM: ; If RAM, jump here to write. FCTL1,FCTL3,EINT are superfluous 429 00039A C7460000 MOV.B W,0(TOS) ; Write byte to flash location 430 00039E B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 431 0003A4 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 432 0003AA ; EINT ; Enable interrupts 433 0003AA 3241 POP sr 434 0003AC B93F JMP IST_X 435 0003AE 436 0003AE /* 437 0003AE ;Z I@ a-addr -- x fetch cell from Instruction memory 438 0003AE HEADER IFETCH,2,'I@',FETCH+2 439 0003AE 440 0003AE ;Z IC@ a-addr -- x fetch char from Instruction memory 441 0003AE HEADER ICFETCH,3,'IC@',CFETCH+2 442 0003AE */ 443 0003AE #define IFETCH FETCH 444 0003AE #define ICFETCH CFETCH 445 0003AE 446 0003AE 447 0003AE 448 0003AE ;Z D->I c-addr1 c-addr2 u -- move Data->Code 449 0003AE ; Block move from Data space to Code space. Flashable. 450 0003AE ; For the MSP430, this uses a "smart" algorithm that uses word writes, 451 0003AE ; rather than byte writes, whenever possible. Note that byte reads 452 0003AE ; are used for the source, so it need not be aligned. 453 0003AE HEADER DTOI,4,'D->I',DOCODE 453.1 000000 PUBLIC DTOI 453.2 0003AE .... DW link 453.3 0003B0 FF DB 0FFh ; not immediate 453.4 0003B1 link SET $ 453.5 0003B1 04 DB 4 453.6 0003B2 442D3E49 DB 'D->I' - 4e-configLP - Page 49 453.7 0003B6 EVEN 453.8 0003B6 IF 'DOCODE'='DOCODE' 453.9 0003B6 .... DTOI: DW $+2 453.10 0003B8 ELSE 453.11 0003B8 DTOI: DW DOCODE 453.12 0003B8 ENDIF 453.13 0003B8 ENDM 454 0003B8 3644 MOV @PSP+,W ; dest adrs 455 0003BA 3A44 MOV @PSP+,X ; src adrs 456 0003BC 0793 CMP #0,TOS 457 0003BE 2124 JZ DTOI_X 458 0003C0 DTOI_LOOP: ; Begin flash write sequence 459 0003C0 0212 PUSH sr 460 0003C2 32C2 DINT ; Disable interrupts 461 0003C4 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 462 0003CA B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 463 0003D0 ; If length is 1, or dest. address is odd, do a byte write. 464 0003D0 ; Else, do a word write. 465 0003D0 1793 CMP #1,TOS 466 0003D2 0B24 JZ DTOI_BYTE 467 0003D4 16B3 BIT #1,W 468 0003D6 0920 JNZ DTOI_BYTE 469 0003D8 7B4A DTOI_WORD: MOV.B @X+,Y ; get low byte of word 470 0003DA 7C4A MOV.B @X+,Q ; get high byte of word 471 0003DC 8C10 SWPB Q 472 0003DE 0BDC BIS Q,Y ; merge bytes 473 0003E0 864B0000 MOV.W Y,0(W) ; write byte to dest 474 0003E4 2653 ADD #2,W 475 0003E6 1783 SUB #1,TOS ; another 1 will be subtracted below 476 0003E8 033C JMP DTOI_END 477 0003EA F64A0000 DTOI_BYTE: MOV.B @X+,0(W) ; copy byte from src to dest 478 0003EE 1653 ADD #1,W 479 0003F0 DTOI_END: ; End flash write sequence 480 0003F0 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 481 0003F6 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 482 0003FC ; EINT ; Enable interrupts 483 0003FC 3241 POP sr 484 0003FE 1783 SUB #1,TOS 485 000400 DF23 JNZ DTOI_LOOP 486 000402 3744 DTOI_X: MOV @PSP+,TOS ; pop new TOS 487 000404 NEXT 487.1 000404 3645 MOV @IP+,W // ; fetch word address into W 487.2 000406 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 487.3 000408 ENDM 488 000408 489 000408 ; ---------------------------------------------- ------------------------ 490 000408 ; ARITHMETIC OPERATIONS 491 000408 492 000408 ;C + n1/u1 n2/u2 -- n3/u3 add n1+n2 493 000408 HEADER PLUS,1,'+',DOCODE 493.1 000000 PUBLIC PLUS 493.2 000408 .... DW link 493.3 00040A FF DB 0FFh ; not immediate 493.4 00040B link SET $ 493.5 00040B 01 DB 1 493.6 00040C 2B DB '+' 493.7 00040D 00 EVEN 493.8 00040E IF 'DOCODE'='DOCODE' 493.9 00040E .... PLUS: DW $+2 - 4e-configLP - Page 50 493.10 000410 ELSE 493.11 000410 PLUS: DW DOCODE 493.12 000410 ENDIF 493.13 000410 ENDM 494 000410 3754 ADD @PSP+,TOS 495 000412 NEXT 495.1 000412 3645 MOV @IP+,W // ; fetch word address into W 495.2 000414 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 495.3 000416 ENDM 496 000416 497 000416 ;C +! n/u a-addr -- add cell to memory 498 000416 HEADER PLUSSTORE,2,'+!',DOCODE 498.1 000000 PUBLIC PLUSSTORE 498.2 000416 .... DW link 498.3 000418 FF DB 0FFh ; not immediate 498.4 000419 link SET $ 498.5 000419 02 DB 2 498.6 00041A 2B21 DB '+!' 498.7 00041C EVEN 498.8 00041C IF 'DOCODE'='DOCODE' 498.9 00041C .... PLUSSTORE: DW $+2 498.10 00041E ELSE 498.11 00041E PLUSSTORE: DW DOCODE 498.12 00041E ENDIF 498.13 00041E ENDM 499 00041E B7540000 ADD @PSP+,0(TOS) 500 000422 3744 MOV @PSP+,TOS 501 000424 NEXT 501.1 000424 3645 MOV @IP+,W // ; fetch word address into W 501.2 000426 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 501.3 000428 ENDM 502 000428 503 000428 ;X M+ d n -- d add single to double 504 000428 HEADER MPLUS,2,'M+',DOCODE 504.1 000000 PUBLIC MPLUS 504.2 000428 .... DW link 504.3 00042A FF DB 0FFh ; not immediate 504.4 00042B link SET $ 504.5 00042B 02 DB 2 504.6 00042C 4D2B DB 'M+' 504.7 00042E EVEN 504.8 00042E IF 'DOCODE'='DOCODE' 504.9 00042E .... MPLUS: DW $+2 504.10 000430 ELSE 504.11 000430 MPLUS: DW DOCODE 504.12 000430 ENDIF 504.13 000430 ENDM 505 000430 84570200 ADD TOS,2(PSP) 506 000434 84630000 ADDC #0,0(PSP) 507 000438 3744 MOV @PSP+,TOS 508 00043A NEXT 508.1 00043A 3645 MOV @IP+,W // ; fetch word address into W 508.2 00043C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 508.3 00043E ENDM 509 00043E 510 00043E ;C - n1/u1 n2/u2 -- n3/u3 subtract n1-n2 511 00043E HEADER MINUS,1,'-',DOCODE 511.1 000000 PUBLIC MINUS 511.2 00043E .... DW link 511.3 000440 FF DB 0FFh ; not immediate 511.4 000441 link SET $ 511.5 000441 01 DB 1 511.6 000442 2D DB '-' 511.7 000443 00 EVEN 511.8 000444 IF 'DOCODE'='DOCODE' 511.9 000444 .... MINUS: DW $+2 511.10 000446 ELSE 511.11 000446 MINUS: DW DOCODE 511.12 000446 ENDIF - 4e-configLP - Page 51 511.13 000446 ENDM 512 000446 3644 MOV @PSP+,W 513 000448 0687 SUB TOS,W 514 00044A 0746 MOV W,TOS 515 00044C NEXT 515.1 00044C 3645 MOV @IP+,W // ; fetch word address into W 515.2 00044E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 515.3 000450 ENDM 516 000450 517 000450 ;C AND x1 x2 -- x3 logical AND 518 000450 HEADER ANDD,3,'AND',DOCODE 518.1 000000 PUBLIC ANDD 518.2 000450 .... DW link 518.3 000452 FF DB 0FFh ; not immediate 518.4 000453 link SET $ 518.5 000453 03 DB 3 518.6 000454 414E44 DB 'AND' 518.7 000457 00 EVEN 518.8 000458 IF 'DOCODE'='DOCODE' 518.9 000458 .... ANDD: DW $+2 518.10 00045A ELSE 518.11 00045A ANDD: DW DOCODE 518.12 00045A ENDIF 518.13 00045A ENDM 519 00045A 37F4 AND @PSP+,TOS 520 00045C NEXT 520.1 00045C 3645 MOV @IP+,W // ; fetch word address into W 520.2 00045E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 520.3 000460 ENDM 521 000460 522 000460 ;C OR x1 x2 -- x3 logical OR 523 000460 HEADER ORR,2,'OR',DOCODE 523.1 000000 PUBLIC ORR 523.2 000460 .... DW link 523.3 000462 FF DB 0FFh ; not immediate 523.4 000463 link SET $ 523.5 000463 02 DB 2 523.6 000464 4F52 DB 'OR' 523.7 000466 EVEN 523.8 000466 IF 'DOCODE'='DOCODE' 523.9 000466 .... ORR: DW $+2 523.10 000468 ELSE 523.11 000468 ORR: DW DOCODE 523.12 000468 ENDIF 523.13 000468 ENDM 524 000468 37D4 BIS @PSP+,TOS 525 00046A NEXT 525.1 00046A 3645 MOV @IP+,W // ; fetch word address into W 525.2 00046C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 525.3 00046E ENDM 526 00046E 527 00046E ;C XOR x1 x2 -- x3 logical XOR 528 00046E HEADER XORR,3,'XOR',DOCODE 528.1 000000 PUBLIC XORR 528.2 00046E .... DW link 528.3 000470 FF DB 0FFh ; not immediate 528.4 000471 link SET $ 528.5 000471 03 DB 3 528.6 000472 584F52 DB 'XOR' 528.7 000475 00 EVEN 528.8 000476 IF 'DOCODE'='DOCODE' 528.9 000476 .... XORR: DW $+2 528.10 000478 ELSE 528.11 000478 XORR: DW DOCODE 528.12 000478 ENDIF 528.13 000478 ENDM 529 000478 37E4 XOR @PSP+,TOS 530 00047A NEXT 530.1 00047A 3645 MOV @IP+,W // ; fetch word address - 4e-configLP - Page 52 into W 530.2 00047C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 530.3 00047E ENDM 531 00047E 532 00047E ;C INVERT x1 -- x2 bitwise inversion 533 00047E HEADER INVERT,6,'INVERT',DOCODE 533.1 000000 PUBLIC INVERT 533.2 00047E .... DW link 533.3 000480 FF DB 0FFh ; not immediate 533.4 000481 link SET $ 533.5 000481 06 DB 6 533.6 000482 494E56455254 DB 'INVERT' 533.7 000488 EVEN 533.8 000488 IF 'DOCODE'='DOCODE' 533.9 000488 .... INVERT: DW $+2 533.10 00048A ELSE 533.11 00048A INVERT: DW DOCODE 533.12 00048A ENDIF 533.13 00048A ENDM 534 00048A 37E3 XOR #-1,TOS 535 00048C NEXT 535.1 00048C 3645 MOV @IP+,W // ; fetch word address into W 535.2 00048E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 535.3 000490 ENDM 536 000490 537 000490 ;C NEGATE x1 -- x2 two's complement 538 000490 HEADER NEGATE,6,'NEGATE',DOCODE 538.1 000000 PUBLIC NEGATE 538.2 000490 .... DW link 538.3 000492 FF DB 0FFh ; not immediate 538.4 000493 link SET $ 538.5 000493 06 DB 6 538.6 000494 4E4547415445 DB 'NEGATE' 538.7 00049A EVEN 538.8 00049A IF 'DOCODE'='DOCODE' 538.9 00049A .... NEGATE: DW $+2 538.10 00049C ELSE 538.11 00049C NEGATE: DW DOCODE 538.12 00049C ENDIF 538.13 00049C ENDM 539 00049C 37E3 XOR #-1,TOS 540 00049E 1753 ADD #1,TOS 541 0004A0 NEXT 541.1 0004A0 3645 MOV @IP+,W // ; fetch word address into W 541.2 0004A2 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 541.3 0004A4 ENDM 542 0004A4 543 0004A4 ;C 1+ n1/u1 -- n2/u2 add 1 to TOS 544 0004A4 HEADER ONEPLUS,2,'1+',DOCODE 544.1 000000 PUBLIC ONEPLUS 544.2 0004A4 .... DW link 544.3 0004A6 FF DB 0FFh ; not immediate 544.4 0004A7 link SET $ 544.5 0004A7 02 DB 2 544.6 0004A8 312B DB '1+' 544.7 0004AA EVEN 544.8 0004AA IF 'DOCODE'='DOCODE' 544.9 0004AA .... ONEPLUS: DW $+2 544.10 0004AC ELSE 544.11 0004AC ONEPLUS: DW DOCODE 544.12 0004AC ENDIF 544.13 0004AC ENDM 545 0004AC 1753 ADD #1,TOS 546 0004AE NEXT 546.1 0004AE 3645 MOV @IP+,W // ; fetch word address into W 546.2 0004B0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 546.3 0004B2 ENDM 547 0004B2 548 0004B2 ;C 1- n1/u1 -- n2/u2 subtract 1 from - 4e-configLP - Page 53 TOS 549 0004B2 HEADER ONEMINUS,2,'1-',DOCODE 549.1 000000 PUBLIC ONEMINUS 549.2 0004B2 .... DW link 549.3 0004B4 FF DB 0FFh ; not immediate 549.4 0004B5 link SET $ 549.5 0004B5 02 DB 2 549.6 0004B6 312D DB '1-' 549.7 0004B8 EVEN 549.8 0004B8 IF 'DOCODE'='DOCODE' 549.9 0004B8 .... ONEMINUS: DW $+2 549.10 0004BA ELSE 549.11 0004BA ONEMINUS: DW DOCODE 549.12 0004BA ENDIF 549.13 0004BA ENDM 550 0004BA 1783 SUB #1,TOS 551 0004BC NEXT 551.1 0004BC 3645 MOV @IP+,W // ; fetch word address into W 551.2 0004BE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 551.3 0004C0 ENDM 552 0004C0 553 0004C0 ;Z >< x1 -- x2 swap bytes (not ANSI) 554 0004C0 HEADER SWAPBYTES,2,'><',DOCODE 554.1 000000 PUBLIC SWAPBYTES 554.2 0004C0 .... DW link 554.3 0004C2 FF DB 0FFh ; not immediate 554.4 0004C3 link SET $ 554.5 0004C3 02 DB 2 554.6 0004C4 3E3C DB '><' 554.7 0004C6 EVEN 554.8 0004C6 IF 'DOCODE'='DOCODE' 554.9 0004C6 .... SWAPBYTES: DW $+2 554.10 0004C8 ELSE 554.11 0004C8 SWAPBYTES: DW DOCODE 554.12 0004C8 ENDIF 554.13 0004C8 ENDM 555 0004C8 8710 SWPB TOS 556 0004CA NEXT 556.1 0004CA 3645 MOV @IP+,W // ; fetch word address into W 556.2 0004CC 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 556.3 0004CE ENDM 557 0004CE 558 0004CE ;C 2* x1 -- x2 arithmetic left shift 559 0004CE HEADER TWOSTAR,2,'2*',DOCODE 559.1 000000 PUBLIC TWOSTAR 559.2 0004CE .... DW link 559.3 0004D0 FF DB 0FFh ; not immediate 559.4 0004D1 link SET $ 559.5 0004D1 02 DB 2 559.6 0004D2 322A DB '2*' 559.7 0004D4 EVEN 559.8 0004D4 IF 'DOCODE'='DOCODE' 559.9 0004D4 .... TWOSTAR: DW $+2 559.10 0004D6 ELSE 559.11 0004D6 TWOSTAR: DW DOCODE 559.12 0004D6 ENDIF 559.13 0004D6 ENDM 560 0004D6 0757 ADD TOS,TOS 561 0004D8 NEXT 561.1 0004D8 3645 MOV @IP+,W // ; fetch word address into W 561.2 0004DA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 561.3 0004DC ENDM 562 0004DC 563 0004DC ;C 2/ x1 -- x2 arithmetic right shift 564 0004DC HEADER TWOSLASH,2,'2/',DOCODE 564.1 000000 PUBLIC TWOSLASH 564.2 0004DC .... DW link 564.3 0004DE FF DB 0FFh ; not immediate 564.4 0004DF link SET $ - 4e-configLP - Page 54 564.5 0004DF 02 DB 2 564.6 0004E0 322F DB '2/' 564.7 0004E2 EVEN 564.8 0004E2 IF 'DOCODE'='DOCODE' 564.9 0004E2 .... TWOSLASH: DW $+2 564.10 0004E4 ELSE 564.11 0004E4 TWOSLASH: DW DOCODE 564.12 0004E4 ENDIF 564.13 0004E4 ENDM 565 0004E4 0711 RRA TOS 566 0004E6 NEXT 566.1 0004E6 3645 MOV @IP+,W // ; fetch word address into W 566.2 0004E8 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 566.3 0004EA ENDM 567 0004EA 568 0004EA ;C LSHIFT x1 u -- x2 logical L shift u places 569 0004EA HEADER LSHIFT,6,'LSHIFT',DOCODE 569.1 000000 PUBLIC LSHIFT 569.2 0004EA .... DW link 569.3 0004EC FF DB 0FFh ; not immediate 569.4 0004ED link SET $ 569.5 0004ED 06 DB 6 569.6 0004EE 4C5348494654 DB 'LSHIFT' 569.7 0004F4 EVEN 569.8 0004F4 IF 'DOCODE'='DOCODE' 569.9 0004F4 .... LSHIFT: DW $+2 569.10 0004F6 ELSE 569.11 0004F6 LSHIFT: DW DOCODE 569.12 0004F6 ENDIF 569.13 0004F6 ENDM 570 0004F6 3644 MOV @PSP+,W 571 0004F8 37F01F00 AND #1Fh,TOS ; no need to shift more than 16 572 0004FC 0324 JZ LSH_X 573 0004FE 0656 LSH_1: ADD W,W 574 000500 1783 SUB #1,TOS 575 000502 FD23 JNZ LSH_1 576 000504 0746 LSH_X: MOV W,TOS 577 000506 NEXT 577.1 000506 3645 MOV @IP+,W // ; fetch word address into W 577.2 000508 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 577.3 00050A ENDM 578 00050A 579 00050A ;C RSHIFT x1 u -- x2 logical R shift u places 580 00050A HEADER RSHIFT,6,'RSHIFT',DOCODE 580.1 000000 PUBLIC RSHIFT 580.2 00050A .... DW link 580.3 00050C FF DB 0FFh ; not immediate 580.4 00050D link SET $ 580.5 00050D 06 DB 6 580.6 00050E 525348494654 DB 'RSHIFT' 580.7 000514 EVEN 580.8 000514 IF 'DOCODE'='DOCODE' 580.9 000514 .... RSHIFT: DW $+2 580.10 000516 ELSE 580.11 000516 RSHIFT: DW DOCODE 580.12 000516 ENDIF 580.13 000516 ENDM 581 000516 3644 MOV @PSP+,W 582 000518 37F01F00 AND #1Fh,TOS ; no need to shift more than 16 583 00051C 0424 JZ RSH_X 584 00051E 12C3 RSH_1: CLRC 585 000520 0610 RRC W 586 000522 1783 SUB #1,TOS 587 000524 FC23 JNZ RSH_1 588 000526 0746 RSH_X: MOV W,TOS 589 000528 NEXT 589.1 000528 3645 MOV @IP+,W // ; fetch word address into W - 4e-configLP - Page 55 589.2 00052A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 589.3 00052C ENDM 590 00052C 591 00052C ; ---------------------------------------------- ------------------------ 592 00052C ; COMPARISON OPERATIONS 593 00052C 594 00052C ;C 0= n/u -- flag return true if TOS=0 595 00052C HEADER ZEROEQUAL,2,'0=',DOCODE 595.1 000000 PUBLIC ZEROEQUAL 595.2 00052C .... DW link 595.3 00052E FF DB 0FFh ; not immediate 595.4 00052F link SET $ 595.5 00052F 02 DB 2 595.6 000530 303D DB '0=' 595.7 000532 EVEN 595.8 000532 IF 'DOCODE'='DOCODE' 595.9 000532 .... ZEROEQUAL: DW $+2 595.10 000534 ELSE 595.11 000534 ZEROEQUAL: DW DOCODE 595.12 000534 ENDIF 595.13 000534 ENDM 596 000534 1783 SUB #1,TOS ; borrow (clear cy) if TOS was 0 597 000536 0777 SUBC TOS,TOS ; TOS=-1 if borrow was set 598 000538 NEXT 598.1 000538 3645 MOV @IP+,W // ; fetch word address into W 598.2 00053A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 598.3 00053C ENDM 599 00053C 600 00053C ;C 0< n -- flag true if TOS negative 601 00053C HEADER ZEROLESS,2,'0<',DOCODE 601.1 000000 PUBLIC ZEROLESS 601.2 00053C .... DW link 601.3 00053E FF DB 0FFh ; not immediate 601.4 00053F link SET $ 601.5 00053F 02 DB 2 601.6 000540 303C DB '0<' 601.7 000542 EVEN 601.8 000542 IF 'DOCODE'='DOCODE' 601.9 000542 .... ZEROLESS: DW $+2 601.10 000544 ELSE 601.11 000544 ZEROLESS: DW DOCODE 601.12 000544 ENDIF 601.13 000544 ENDM 602 000544 0757 ADD TOS,TOS ; set cy if TOS negative 603 000546 0777 SUBC TOS,TOS ; TOS=-1 if carry was clear 604 000548 37E3 XOR #-1,TOS ; TOS=-1 if carry was set 605 00054A NEXT 605.1 00054A 3645 MOV @IP+,W // ; fetch word address into W 605.2 00054C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 605.3 00054E ENDM 606 00054E 607 00054E ;C = x1 x2 -- flag test x1=x2 608 00054E HEADER EQUAL,1,'=',DOCODE 608.1 000000 PUBLIC EQUAL 608.2 00054E .... DW link 608.3 000550 FF DB 0FFh ; not immediate 608.4 000551 link SET $ 608.5 000551 01 DB 1 608.6 000552 3D DB '=' 608.7 000553 00 EVEN 608.8 000554 IF 'DOCODE'='DOCODE' 608.9 000554 .... EQUAL: DW $+2 608.10 000556 ELSE 608.11 000556 EQUAL: DW DOCODE 608.12 000556 ENDIF - 4e-configLP - Page 56 608.13 000556 ENDM 609 000556 3644 MOV @PSP+,W 610 000558 0687 SUB TOS,W ; x1-x2 in W, flags set 611 00055A 1124 JZ TOSTRUE 612 00055C 0743 TOSFALSE: MOV #0,TOS 613 00055E NEXT 613.1 00055E 3645 MOV @IP+,W // ; fetch word address into W 613.2 000560 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 613.3 000562 ENDM 614 000562 615 000562 ;X <> x1 x2 -- flag test not eq (not ANSI) 616 000562 HEADER NOTEQUAL,2,'<>',DOCOLON 616.1 000000 PUBLIC NOTEQUAL 616.2 000562 .... DW link 616.3 000564 FF DB 0FFh ; not immediate 616.4 000565 link SET $ 616.5 000565 02 DB 2 616.6 000566 3C3E DB '<>' 616.7 000568 EVEN 616.8 000568 IF 'DOCOLON'='DOCODE' 616.9 000568 NOTEQUAL: DW $+2 616.10 000568 ELSE 616.11 000568 .... NOTEQUAL: DW DOCOLON 616.12 00056A ENDIF 616.13 00056A ENDM 617 00056A ............ DW EQUAL,ZEROEQUAL,EXIT 618 000570 619 000570 ;C < n1 n2 -- flag test n1 n1 n2 -- flag test n1>n2, signed 628 000584 HEADER GREATER,1,'>',DOCOLON 628.1 000000 PUBLIC GREATER 628.2 000584 .... DW link 628.3 000586 FF DB 0FFh ; not immediate 628.4 000587 link SET $ 628.5 000587 01 DB 1 628.6 000588 3E DB '>' 628.7 000589 00 EVEN 628.8 00058A IF 'DOCOLON'='DOCODE' 628.9 00058A GREATER: DW $+2 628.10 00058A ELSE 628.11 00058A .... GREATER: DW DOCOLON 628.12 00058C ENDIF 628.13 00058C ENDM 629 00058C ............ DW SWAP,LESS,EXIT 630 000592 631 000592 ;C U< u1 u2 -- flag test u1 u1 u2 -- flag u1>u2 unsgd (not ANSI) 639 0005A2 HEADER UGREATER,2,'U>',DOCOLON 639.1 000000 PUBLIC UGREATER 639.2 0005A2 .... DW link 639.3 0005A4 FF DB 0FFh ; not immediate 639.4 0005A5 link SET $ 639.5 0005A5 02 DB 2 639.6 0005A6 553E DB 'U>' 639.7 0005A8 EVEN 639.8 0005A8 IF 'DOCOLON'='DOCODE' 639.9 0005A8 UGREATER: DW $+2 639.10 0005A8 ELSE 639.11 0005A8 .... UGREATER: DW DOCOLON 639.12 0005AA ENDIF 639.13 0005AA ENDM 640 0005AA ............ DW SWAP,ULESS,EXIT 641 0005B0 642 0005B0 ;C RLA n1 -- n2 f rotate left through carry, true if carry set 643 0005B0 HEADER RLAA,3,'RLA',DOCODE 643.1 000000 PUBLIC RLAA 643.2 0005B0 .... DW link 643.3 0005B2 FF DB 0FFh ; not immediate 643.4 0005B3 link SET $ 643.5 0005B3 03 DB 3 643.6 0005B4 524C41 DB 'RLA' 643.7 0005B7 00 EVEN 643.8 0005B8 IF 'DOCODE'='DOCODE' 643.9 0005B8 .... RLAA: DW $+2 643.10 0005BA ELSE 643.11 0005BA RLAA: DW DOCODE 643.12 0005BA ENDIF 643.13 0005BA ENDM 644 0005BA 0757 RLA TOS ; shift left 645 0005BC 0212 PUSH SR 646 0005BE 2483 SUB #2,PSP ; 1 push old TOS.. 647 0005C0 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 648 0005C4 3241 POP SR 649 0005C6 DB2F JC TOSTRUE 650 0005C8 C93F JMP TOSFALSE 651 0005CA 652 0005CA 653 0005CA 654 0005CA ; ---------------------------------------------- ------------------------ 655 0005CA ; LOOP AND BRANCH OPERATIONS 656 0005CA ; These use relative branch addresses: a branch is ADD @IP,IP 657 0005CA 658 0005CA ;Z branch -- branch always 659 0005CA HEADER bran,6,'branch',DOCODE 659.1 000000 PUBLIC bran 659.2 0005CA .... DW link 659.3 0005CC FF DB 0FFh ; not immediate - 4e-configLP - Page 58 659.4 0005CD link SET $ 659.5 0005CD 06 DB 6 659.6 0005CE 6272616E6368 DB 'branch' 659.7 0005D4 EVEN 659.8 0005D4 IF 'DOCODE'='DOCODE' 659.9 0005D4 .... bran: DW $+2 659.10 0005D6 ELSE 659.11 0005D6 bran: DW DOCODE 659.12 0005D6 ENDIF 659.13 0005D6 ENDM 660 0005D6 2555 dobran: ADD @IP,IP ; 2 661 0005D8 NEXT ; 4 661.1 0005D8 3645 MOV @IP+,W // ; fetch word address into W 661.2 0005DA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 661.3 0005DC ENDM 662 0005DC 663 0005DC ;Z ?branch x -- branch if TOS zero 664 0005DC HEADER qbran,7,'?branch',DOCODE 664.1 000000 PUBLIC qbran 664.2 0005DC .... DW link 664.3 0005DE FF DB 0FFh ; not immediate 664.4 0005DF link SET $ 664.5 0005DF 07 DB 7 664.6 0005E0 3F6272616E63* DB '?branch' 664.7 0005E7 00 EVEN 664.8 0005E8 IF 'DOCODE'='DOCODE' 664.9 0005E8 .... qbran: DW $+2 664.10 0005EA ELSE 664.11 0005EA qbran: DW DOCODE 664.12 0005EA ENDIF 664.13 0005EA ENDM 665 0005EA 0753 ADD #0,TOS ; 1 test TOS value 666 0005EC 3744 MOV @PSP+,TOS ; 2 pop new TOS value (doesn't change flags) 667 0005EE F327 JZ dobran ; 2 if TOS was zero, take the branch 668 0005F0 2553 ADD #2,IP ; 1 else skip the branch destination 669 0005F2 NEXT ; 4 669.1 0005F2 3645 MOV @IP+,W // ; fetch word address into W 669.2 0005F4 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 669.3 0005F6 ENDM 670 0005F6 671 0005F6 ;Z (do) n1|u1 n2|u2 -- R: -- sys1 sys2 run-time code for DO 672 0005F6 ; '83 and ANSI standard loops terminate when the boundary of 673 0005F6 ; limit-1 and limit is crossed, in either direction. This can 674 0005F6 ; be conveniently implemented by making the limit 8000h, so that 675 0005F6 ; arithmetic overflow logic can detect crossing. I learned this 676 0005F6 ; trick from Laxen & Perry F83. 677 0005F6 ; fudge factor = 8000h-limit, to be added to the start value. 678 0005F6 HEADER xdo,4,'(do)',DOCODE 678.1 000000 PUBLIC xdo 678.2 0005F6 .... DW link 678.3 0005F8 FF DB 0FFh ; not immediate 678.4 0005F9 link SET $ 678.5 0005F9 04 DB 4 678.6 0005FA 28646F29 DB '(do)' 678.7 0005FE EVEN 678.8 0005FE IF 'DOCODE'='DOCODE' 678.9 0005FE .... xdo: DW $+2 678.10 000600 ELSE 678.11 000600 xdo: DW DOCODE 678.12 000600 ENDIF 678.13 000600 ENDM 679 000600 2182 SUB #4,RSP ; push old loop values on - 4e-configLP - Page 59 return stack 680 000602 81490200 MOV LIMIT,2(RSP) 681 000606 81480000 MOV INDEX,0(RSP) 682 00060A 39400080 MOV #8000h,LIMIT ; compute 8000h-limit "fudge factor" 683 00060E 3984 SUB @PSP+,LIMIT 684 000610 0847 MOV TOS,INDEX ; loop ctr = index+fudge 685 000612 0859 ADD LIMIT,INDEX 686 000614 3744 MOV @PSP+,TOS ; pop new TOS 687 000616 NEXT 687.1 000616 3645 MOV @IP+,W // ; fetch word address into W 687.2 000618 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 687.3 00061A ENDM 688 00061A 689 00061A ;Z (loop) R: sys1 sys2 -- | sys1 sys2 run-time code for LOOP 690 00061A ; Add 1 to the loop index. If loop terminates, clean up the 691 00061A ; return stack and skip the branch. Else take the inline branch. 692 00061A ; Note that LOOP terminates when index=8000h. 693 00061A HEADER xloop,6,'(loop)',DOCODE 693.1 000000 PUBLIC xloop 693.2 00061A .... DW link 693.3 00061C FF DB 0FFh ; not immediate 693.4 00061D link SET $ 693.5 00061D 06 DB 6 693.6 00061E 286C6F6F7029 DB '(loop)' 693.7 000624 EVEN 693.8 000624 IF 'DOCODE'='DOCODE' 693.9 000624 .... xloop: DW $+2 693.10 000626 ELSE 693.11 000626 xloop: DW DOCODE 693.12 000626 ENDIF 693.13 000626 ENDM 694 000626 1853 ADD #1,INDEX 695 000628 32B00001 BIT #100h,SR ; is overflow bit set? 696 00062C D427 JZ dobran ; no overflow = loop 697 00062E 2553 ADD #2,IP ; overflow = loop done, skip branch ofs 698 000630 3841 MOV @RSP+,INDEX ; restore old loop values 699 000632 3941 MOV @RSP+,LIMIT 700 000634 NEXT 700.1 000634 3645 MOV @IP+,W // ; fetch word address into W 700.2 000636 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 700.3 000638 ENDM 701 000638 702 000638 ;Z (+loop) n -- R: sys1 sys2 -- | sys1 sys2 run-time code for +LOOP 703 000638 ; Add n to the loop index. If loop terminates, clean up the 704 000638 ; return stack and skip the branch. Else take the inline branch. 705 000638 HEADER xplusloop,7,'(+loop)',DOCODE 705.1 000000 PUBLIC xplusloop 705.2 000638 .... DW link 705.3 00063A FF DB 0FFh ; not immediate 705.4 00063B link SET $ 705.5 00063B 07 DB 7 705.6 00063C 282B6C6F6F70* DB '(+loop)' 705.7 000643 00 EVEN 705.8 000644 IF 'DOCODE'='DOCODE' 705.9 000644 .... xplusloop: DW $+2 705.10 000646 ELSE 705.11 000646 xplusloop: DW DOCODE - 4e-configLP - Page 60 705.12 000646 ENDIF 705.13 000646 ENDM 706 000646 0857 ADD TOS,INDEX 707 000648 3744 MOV @PSP+,TOS ; get new TOS, doesn't change flags 708 00064A 32B00001 BIT #100h,SR ; is overflow bit set? 709 00064E C327 JZ dobran ; no overflow = loop 710 000650 2553 ADD #2,IP ; overflow = loop done, skip branch ofs 711 000652 3841 MOV @RSP+,INDEX ; restore old loop values 712 000654 3941 MOV @RSP+,LIMIT 713 000656 NEXT 713.1 000656 3645 MOV @IP+,W // ; fetch word address into W 713.2 000658 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 713.3 00065A ENDM 714 00065A 715 00065A ;C I -- n R: sys1 sys2 -- sys1 sys2 get the innermost loop index 716 00065A HEADER II,1,'I',DOCODE 716.1 000000 PUBLIC II 716.2 00065A .... DW link 716.3 00065C FF DB 0FFh ; not immediate 716.4 00065D link SET $ 716.5 00065D 01 DB 1 716.6 00065E 49 DB 'I' 716.7 00065F 00 EVEN 716.8 000660 IF 'DOCODE'='DOCODE' 716.9 000660 .... II: DW $+2 716.10 000662 ELSE 716.11 000662 II: DW DOCODE 716.12 000662 ENDIF 716.13 000662 ENDM 717 000662 2483 SUB #2,PSP ; make room in TOS 718 000664 84470000 MOV TOS,0(PSP) 719 000668 0748 MOV INDEX,TOS ; index = loopctr - fudge 720 00066A 0789 SUB LIMIT,TOS 721 00066C NEXT 721.1 00066C 3645 MOV @IP+,W // ; fetch word address into W 721.2 00066E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 721.3 000670 ENDM 722 000670 723 000670 ;C J -- n R: 4*sys -- 4*sys get the second loop index 724 000670 HEADER JJ,1,'J',DOCODE 724.1 000000 PUBLIC JJ 724.2 000670 .... DW link 724.3 000672 FF DB 0FFh ; not immediate 724.4 000673 link SET $ 724.5 000673 01 DB 1 724.6 000674 4A DB 'J' 724.7 000675 00 EVEN 724.8 000676 IF 'DOCODE'='DOCODE' 724.9 000676 .... JJ: DW $+2 724.10 000678 ELSE 724.11 000678 JJ: DW DOCODE 724.12 000678 ENDIF 724.13 000678 ENDM 725 000678 2483 SUB #2,PSP ; make room in TOS 726 00067A 84470000 MOV TOS,0(PSP) 727 00067E 2741 MOV @RSP,TOS ; index = loopctr - fudge 728 000680 17810200 SUB 2(RSP),TOS 729 000684 NEXT 729.1 000684 3645 MOV @IP+,W // ; fetch word address - 4e-configLP - Page 61 into W 729.2 000686 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 729.3 000688 ENDM 730 000688 731 000688 ;C UNLOOP -- R: sys1 sys2 -- drop loop parms 732 000688 HEADER UNLOOP,6,'UNLOOP',DOCODE 732.1 000000 PUBLIC UNLOOP 732.2 000688 .... DW link 732.3 00068A FF DB 0FFh ; not immediate 732.4 00068B link SET $ 732.5 00068B 06 DB 6 732.6 00068C 554E4C4F4F50 DB 'UNLOOP' 732.7 000692 EVEN 732.8 000692 IF 'DOCODE'='DOCODE' 732.9 000692 .... UNLOOP: DW $+2 732.10 000694 ELSE 732.11 000694 UNLOOP: DW DOCODE 732.12 000694 ENDIF 732.13 000694 ENDM 733 000694 3841 MOV @RSP+,INDEX ; restore old loop values 734 000696 3941 MOV @RSP+,LIMIT 735 000698 NEXT 735.1 000698 3645 MOV @IP+,W // ; fetch word address into W 735.2 00069A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 735.3 00069C ENDM 736 00069C 737 00069C ; ---------------------------------------------- ------------------------ 738 00069C ; MULTIPLY AND DIVIDE 739 00069C 740 00069C ;C UM* u1 u2 -- ud unsigned 16x16->32 mult. 741 00069C HEADER UMSTAR,3,'UM*',DOCODE 741.1 000000 PUBLIC UMSTAR 741.2 00069C .... DW link 741.3 00069E FF DB 0FFh ; not immediate 741.4 00069F link SET $ 741.5 00069F 03 DB 3 741.6 0006A0 554D2A DB 'UM*' 741.7 0006A3 00 EVEN 741.8 0006A4 IF 'DOCODE'='DOCODE' 741.9 0006A4 .... UMSTAR: DW $+2 741.10 0006A6 ELSE 741.11 0006A6 UMSTAR: DW DOCODE 741.12 0006A6 ENDIF 741.13 0006A6 ENDM 742 0006A6 ; IROP1 = TOS register 743 0006A6 2A44 MOV @PSP,IROP2L ; get u1, leave room on stack 744 0006A8 ; 745 0006A8 ; T.I. SIGNED MULTIPLY SUBROUTINE: IROP1 x IROP2L -> IRACM|IRACL 746 0006A8 0C43 MPYU: CLR IRACL ; 0 -> LSBs RESULT 747 0006AA 0D43 CLR IRACM ; 0 -> MSBs RESULT 748 0006AC ; UNSIGNED MULTIPLY AND ACCUMULATE SUBROUTINE: 749 0006AC ; (IROP1 x IROP2L) + IRACM|IRACL -> IRACM|IRACL 750 0006AC 0B43 MACU: CLR IROP2M ; MSBs MULTIPLIER 751 0006AE 1643 MOV #1,IRBT ; BIT TEST REGISTER 752 0006B0 07B6 L$002: BIT IRBT,IROP1 ; TEST ACTUAL BIT 753 0006B2 0224 JZ L$01 ; IF 0: DO NOTHING 754 0006B4 0C5A ADD IROP2L,IRACL ; IF 1: ADD MULTIPLIER TO RESULT 755 0006B6 0D6B ADDC IROP2M,IRACM 756 0006B8 0A5A L$01: RLA IROP2L ; MULTIPLIER x 2 757 0006BA 0B6B RLC IROP2M 758 0006BC ; 759 0006BC 0656 RLA IRBT ; NEXT BIT TO TEST 760 0006BE F82B JNC L$002 ; IF BIT IN CARRY: FINISHED 761 0006C0 ; END T.I. ROUTINE section 5.1.1 of MSP430 Family Application Reports 762 0006C0 844C0000 MOV IRACL,0(PSP) ; low result on - 4e-configLP - Page 62 stack 763 0006C4 074D MOV IRACM,TOS ; high result in TOS 764 0006C6 NEXT 764.1 0006C6 3645 MOV @IP+,W // ; fetch word address into W 764.2 0006C8 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 764.3 0006CA ENDM 765 0006CA 766 0006CA ;C UM/MOD ud u1 -- u2 u3 unsigned 32/16->16 767 0006CA HEADER UMSLASHMOD,6,'UM/MOD',DOCODE 767.1 000000 PUBLIC UMSLASHMOD 767.2 0006CA .... DW link 767.3 0006CC FF DB 0FFh ; not immediate 767.4 0006CD link SET $ 767.5 0006CD 06 DB 6 767.6 0006CE 554D2F4D4F44 DB 'UM/MOD' 767.7 0006D4 EVEN 767.8 0006D4 IF 'DOCODE'='DOCODE' 767.9 0006D4 .... UMSLASHMOD: DW $+2 767.10 0006D6 ELSE 767.11 0006D6 UMSLASHMOD: DW DOCODE 767.12 0006D6 ENDIF 767.13 0006D6 ENDM 768 0006D6 ; IROP1 = TOS register 769 0006D6 3B44 MOV @PSP+,IROP2M ; get ud hi 770 0006D8 2A44 MOV @PSP,IROP2L ; get ud lo, leave room on stack 771 0006DA ; 772 0006DA ; T.I. UNSIGNED DIVISION SUBROUTINE 32-BIT BY 16-BIT 773 0006DA ; IROP2M|IROP2L : IROP1 -> IRACL REMAINDER IN IROP2M 774 0006DA ; RETURN: CARRY = 0: OK CARRY = 1: QUOTIENT > 16 BITS 775 0006DA 0C43 DIVIDE: CLR IRACL ; CLEAR RESULT 776 0006DC 36401100 MOV #17,IRBT ; INITIALIZE LOOP COUNTER 777 0006E0 0B97 DIV1: CMP IROP1,IROP2M ; 778 0006E2 0128 JLO DIV2 779 0006E4 0B87 SUB IROP1,IROP2M 780 0006E6 0C6C DIV2: RLC IRACL 781 0006E8 092C JC DIV4 ; Error: result > 16 bits 782 0006EA 1683 DEC IRBT ; Decrement loop counter 783 0006EC 0624 JZ DIV3 ; Is 0: terminate w/o error 784 0006EE 0A5A RLA IROP2L 785 0006F0 0B6B RLC IROP2M 786 0006F2 F62B JNC DIV1 787 0006F4 0B87 SUB IROP1,IROP2M 788 0006F6 12D3 SETC 789 0006F8 F63F JMP DIV2 790 0006FA 12C3 DIV3: CLRC ; No error, C = 0 791 0006FC DIV4: ; Error indication in C 792 0006FC ; END T.I. ROUTINE Section 5.1.5 of MSP430 Family Application Reports 793 0006FC 844B0000 MOV IROP2M,0(PSP) ; remainder on stack 794 000700 074C MOV IRACL,TOS ; quotient in TOS 795 000702 NEXT 795.1 000702 3645 MOV @IP+,W // ; fetch word address into W 795.2 000704 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 795.3 000706 ENDM 796 000706 797 000706 ; ---------------------------------------------- ------------------------ 798 000706 ; BLOCK AND STRING OPERATIONS 799 000706 800 000706 ;C FILL c-addr u char -- fill memory with char 801 000706 HEADER FILL,4,'FILL',DOCODE - 4e-configLP - Page 63 801.1 000000 PUBLIC FILL 801.2 000706 .... DW link 801.3 000708 FF DB 0FFh ; not immediate 801.4 000709 link SET $ 801.5 000709 04 DB 4 801.6 00070A 46494C4C DB 'FILL' 801.7 00070E EVEN 801.8 00070E IF 'DOCODE'='DOCODE' 801.9 00070E .... FILL: DW $+2 801.10 000710 ELSE 801.11 000710 FILL: DW DOCODE 801.12 000710 ENDIF 801.13 000710 ENDM 802 000710 3A44 MOV @PSP+,X ; count 803 000712 3644 MOV @PSP+,W ; address 804 000714 0A93 CMP #0,X 805 000716 0524 JZ FILL_X 806 000718 C6470000 FILL_1: MOV.B TOS,0(W) ; store char in memory 807 00071C 1653 ADD #1,W 808 00071E 1A83 SUB #1,X 809 000720 FB23 JNZ FILL_1 810 000722 3744 FILL_X: MOV @PSP+,TOS ; pop new TOS 811 000724 NEXT 811.1 000724 3645 MOV @IP+,W // ; fetch word address into W 811.2 000726 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 811.3 000728 ENDM 812 000728 813 000728 ;X CMOVE c-addr1 c-addr2 u -- move from bottom 814 000728 ; as defined in the ANSI optional String word set 815 000728 ; On byte machines, CMOVE and CMOVE> are logical 816 000728 ; factors of MOVE. They are easy to implement on 817 000728 ; CPUs which have a block-move instruction. 818 000728 HEADER CMOVE,5,'CMOVE',DOCODE 818.1 000000 PUBLIC CMOVE 818.2 000728 .... DW link 818.3 00072A FF DB 0FFh ; not immediate 818.4 00072B link SET $ 818.5 00072B 05 DB 5 818.6 00072C 434D4F5645 DB 'CMOVE' 818.7 000731 00 EVEN 818.8 000732 IF 'DOCODE'='DOCODE' 818.9 000732 .... CMOVE: DW $+2 818.10 000734 ELSE 818.11 000734 CMOVE: DW DOCODE 818.12 000734 ENDIF 818.13 000734 ENDM 819 000734 3644 MOV @PSP+,W ; dest adrs 820 000736 3A44 MOV @PSP+,X ; src adrs 821 000738 0793 CMP #0,TOS 822 00073A 0524 JZ CMOVE_X 823 00073C F64A0000 CMOVE_1: MOV.B @X+,0(W) ; copy byte 824 000740 1653 ADD #1,W 825 000742 1783 SUB #1,TOS 826 000744 FB23 JNZ CMOVE_1 827 000746 3744 CMOVE_X: MOV @PSP+,TOS ; pop new TOS 828 000748 NEXT 828.1 000748 3645 MOV @IP+,W // ; fetch word address into W 828.2 00074A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 828.3 00074C ENDM 829 00074C 830 00074C ;X CMOVE> c-addr1 c-addr2 u -- move from top 831 00074C ; as defined in the ANSI optional String word set 832 00074C HEADER CMOVEUP,6,'CMOVE>',DOCODE 832.1 000000 PUBLIC CMOVEUP 832.2 00074C .... DW link 832.3 00074E FF DB 0FFh ; not immediate 832.4 00074F link SET $ - 4e-configLP - Page 64 832.5 00074F 06 DB 6 832.6 000750 434D4F56453E DB 'CMOVE>' 832.7 000756 EVEN 832.8 000756 IF 'DOCODE'='DOCODE' 832.9 000756 .... CMOVEUP: DW $+2 832.10 000758 ELSE 832.11 000758 CMOVEUP: DW DOCODE 832.12 000758 ENDIF 832.13 000758 ENDM 833 000758 3644 MOV @PSP+,W ; dest adrs 834 00075A 3A44 MOV @PSP+,X ; src adrs 835 00075C 0793 CMP #0,TOS 836 00075E 0824 JZ CMOVU_X 837 000760 0657 ADD TOS,W ; start at end 838 000762 0A57 ADD TOS,X 839 000764 1A83 CMOVU_1: SUB #1,X 840 000766 1683 SUB #1,W 841 000768 E64A0000 MOV.B @X,0(W) ; copy byte 842 00076C 1783 SUB #1,TOS 843 00076E FA23 JNZ CMOVU_1 844 000770 3744 CMOVU_X: MOV @PSP+,TOS ; pop new TOS 845 000772 NEXT 845.1 000772 3645 MOV @IP+,W // ; fetch word address into W 845.2 000774 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 845.3 000776 ENDM 846 000776 847 000776 ;Z I->D c-addr1 c-addr2 u -- move Code->Data 848 000776 ; Block move from Code space to Data space. 849 000776 ; On the MSP430, this is the same as CMOVE. 850 000776 HEADER ITOD,4,'I->D',CMOVE+2 850.1 000000 PUBLIC ITOD 850.2 000776 .... DW link 850.3 000778 FF DB 0FFh ; not immediate 850.4 000779 link SET $ 850.5 000779 04 DB 4 850.6 00077A 492D3E44 DB 'I->D' 850.7 00077E EVEN 850.8 00077E IF 'CMOVE+2'='DOCODE' 850.9 00077E ITOD: DW $+2 850.10 00077E ELSE 850.11 00077E .... ITOD: DW CMOVE+2 850.12 000780 ENDIF 850.13 000780 ENDM 851 000780 852 000780 ;Z SKIP c-addr u c -- c-addr' u' skip matching chars 853 000780 ; Although SKIP, SCAN, and S= are perhaps not the ideal factors 854 000780 ; of WORD and FIND, they closely follow the string operations 855 000780 ; available on many CPUs, and so are easy to implement and fast. 856 000780 HEADER SKIP,4,'SKIP',DOCODE 856.1 000000 PUBLIC SKIP 856.2 000780 .... DW link 856.3 000782 FF DB 0FFh ; not immediate 856.4 000783 link SET $ 856.5 000783 04 DB 4 856.6 000784 534B4950 DB 'SKIP' 856.7 000788 EVEN 856.8 000788 IF 'DOCODE'='DOCODE' 856.9 000788 .... SKIP: DW $+2 856.10 00078A ELSE 856.11 00078A SKIP: DW DOCODE 856.12 00078A ENDIF 856.13 00078A ENDM 857 00078A 3A44 MOV @PSP+,X ; get count 858 00078C 2644 MOV @PSP,W ; get address, leave space on stack 859 00078E 0A93 CMP #0,X 860 000790 0524 JZ SKIP_X 861 000792 6796 SKIP_1: CMP.B @W,TOS ; does character match? 862 000794 0320 JNZ SKIP_X ; no, we are - 4e-configLP - Page 65 done 863 000796 1653 ADD #1,W 864 000798 1A83 SUB #1,X 865 00079A FB23 JNZ SKIP_1 866 00079C 84460000 SKIP_X: MOV W,0(PSP) ; store updated address on stack 867 0007A0 074A MOV X,TOS ; updated count to TOS 868 0007A2 NEXT 868.1 0007A2 3645 MOV @IP+,W // ; fetch word address into W 868.2 0007A4 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 868.3 0007A6 ENDM 869 0007A6 870 0007A6 ;Z SCAN c-addr u c -- c-addr' u' find matching char 871 0007A6 HEADER SCAN,4,'SCAN',DOCODE 871.1 000000 PUBLIC SCAN 871.2 0007A6 .... DW link 871.3 0007A8 FF DB 0FFh ; not immediate 871.4 0007A9 link SET $ 871.5 0007A9 04 DB 4 871.6 0007AA 5343414E DB 'SCAN' 871.7 0007AE EVEN 871.8 0007AE IF 'DOCODE'='DOCODE' 871.9 0007AE .... SCAN: DW $+2 871.10 0007B0 ELSE 871.11 0007B0 SCAN: DW DOCODE 871.12 0007B0 ENDIF 871.13 0007B0 ENDM 872 0007B0 3A44 MOV @PSP+,X ; get count 873 0007B2 2644 MOV @PSP,W ; get address, leave space on stack 874 0007B4 0A93 CMP #0,X 875 0007B6 0524 JZ SCAN_X 876 0007B8 6796 SCAN_1: CMP.B @W,TOS ; does character match? 877 0007BA 0324 JZ SCAN_X ; yes, we are done 878 0007BC 1653 ADD #1,W 879 0007BE 1A83 SUB #1,X 880 0007C0 FB23 JNZ SCAN_1 881 0007C2 84460000 SCAN_X: MOV W,0(PSP) ; store updated address on stack 882 0007C6 074A MOV X,TOS ; updated count to TOS 883 0007C8 NEXT 883.1 0007C8 3645 MOV @IP+,W // ; fetch word address into W 883.2 0007CA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 883.3 0007CC ENDM 884 0007CC 885 0007CC ;Z S= c-addr1 c-addr2 u -- n string compare 886 0007CC ;Z S= n<0: s10: s1>s2 887 0007CC HEADER SEQUAL,2,'S=',DOCODE 887.1 000000 PUBLIC SEQUAL 887.2 0007CC .... DW link 887.3 0007CE FF DB 0FFh ; not immediate 887.4 0007CF link SET $ 887.5 0007CF 02 DB 2 887.6 0007D0 533D DB 'S=' 887.7 0007D2 EVEN 887.8 0007D2 IF 'DOCODE'='DOCODE' 887.9 0007D2 .... SEQUAL: DW $+2 887.10 0007D4 ELSE 887.11 0007D4 SEQUAL: DW DOCODE 887.12 0007D4 ENDIF 887.13 0007D4 ENDM 888 0007D4 3644 MOV @PSP+,W ; adrs2 889 0007D6 3A44 MOV @PSP+,X ; adrs1 890 0007D8 0793 CMP #0,TOS 891 0007DA 0A24 JZ SEQU_X 892 0007DC FA960000 SEQU_1: CMP.B @W+,0(X) ; compare char1-char - 4e-configLP - Page 66 2 893 0007E0 0420 JNZ SMISMATCH 894 0007E2 1A53 ADD #1,X 895 0007E4 1783 SUB #1,TOS 896 0007E6 FA23 JNZ SEQU_1 897 0007E8 ; no mismatch found, strings are equal, TOS=0 898 0007E8 033C JMP SEQU_X 899 0007EA ; mismatch found, CY clear if borrow set (s10: s1>s2 907 0007F4 ; For Harvard model, c-addr1 is Data, c-addr2 is Header. 908 0007F4 ; On MSP430, both use the same fetch instruction , so N= is the same as S=. 909 0007F4 HEADER NEQUAL,2,'N=',SEQUAL+2 909.1 000000 PUBLIC NEQUAL 909.2 0007F4 .... DW link 909.3 0007F6 FF DB 0FFh ; not immediate 909.4 0007F7 link SET $ 909.5 0007F7 02 DB 2 909.6 0007F8 4E3D DB 'N=' 909.7 0007FA EVEN 909.8 0007FA IF 'SEQUAL+2'='DOCODE' 909.9 0007FA NEQUAL: DW $+2 909.10 0007FA ELSE 909.11 0007FA .... NEQUAL: DW SEQUAL+2 909.12 0007FC ENDIF 909.13 0007FC ENDM 910 0007FC 911 0007FC ; ---------------------------------------------- ------------------------ 912 0007FC ; TERMINAL I/O 913 0007FC 914 000000 PUBLIC DOKEY,DOEMIT 915 0007FC 916 0007FC /* 917 0007FC ;C EMIT c -- output character to console; core routine 918 0007FC HEADER EMIT,4,'EMIT',DOCODE 919 0007FC EMITLOOP: 920 0007FC BIT.B #UCA0TXIFG,&IFG2 921 0007FC JZ EMITLOOP 922 0007FC MOV.B TOS,&UCA0TXBUF 923 0007FC MOV @PSP+,TOS 924 0007FC NEXT 925 0007FC 926 0007FC ;C KEY -- c get character from keyboard; core routine 927 0007FC HEADER KEY,3,'KEY',DOCODE 928 0007FC KEYLOOP: 929 0007FC BIT.B #UCA0RXIFG,&IFG2 930 0007FC JZ KEYLOOP 931 0007FC SUB #2,PSP ; 1 push old TOS.. 932 0007FC MOV TOS,0(PSP) ; 4 ..onto stack 933 0007FC MOV.B &UCA0RXBUF,TOS ; read character into TOS 934 0007FC donoop1: 935 0007FC donext1: NEXT 936 0007FC */ - 4e-configLP - Page 67 937 0007FC 938 0007FC ;C (EMIT) c -- output character to console; core routine 939 0007FC HEADER DOEMIT,6,'(EMIT)',DOCODE 939.1 0007FC PUBLIC DOEMIT 939.2 0007FC .... DW link 939.3 0007FE FF DB 0FFh ; not immediate 939.4 0007FF link SET $ 939.5 0007FF 06 DB 6 939.6 000800 28454D495429 DB '(EMIT)' 939.7 000806 EVEN 939.8 000806 IF 'DOCODE'='DOCODE' 939.9 000806 .... DOEMIT: DW $+2 939.10 000808 ELSE 939.11 000808 DOEMIT: DW DOCODE 939.12 000808 ENDIF 939.13 000808 ENDM 940 000808 EMITLOOPx: 941 000808 E2B30300 BIT.B #UCA0TXIFG,&IFG2 942 00080C FD27 JZ EMITLOOPx 943 00080E C2476700 MOV.B TOS,&UCA0TXBUF 944 000812 3744 MOV @PSP+,TOS 945 000814 NEXT 945.1 000814 3645 MOV @IP+,W // ; fetch word address into W 945.2 000816 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 945.3 000818 ENDM 946 000818 947 000818 ;C (KEY) -- c get character from keyboard; core routine 948 000818 HEADER DOKEY,5,'(KEY)',DOCODE 948.1 000818 PUBLIC DOKEY 948.2 000818 .... DW link 948.3 00081A FF DB 0FFh ; not immediate 948.4 00081B link SET $ 948.5 00081B 05 DB 5 948.6 00081C 284B455929 DB '(KEY)' 948.7 000821 00 EVEN 948.8 000822 IF 'DOCODE'='DOCODE' 948.9 000822 .... DOKEY: DW $+2 948.10 000824 ELSE 948.11 000824 DOKEY: DW DOCODE 948.12 000824 ENDIF 948.13 000824 ENDM 949 000824 KEYLOOPx: 950 000824 D2B30300 BIT.B #UCA0RXIFG,&IFG2 951 000828 FD27 JZ KEYLOOPx 952 00082A 2483 SUB #2,PSP ; 1 push old TOS.. 953 00082C 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 954 000830 57426600 MOV.B &UCA0RXBUF,TOS ; read character into TOS 955 000834 donoop: 956 000834 donext: NEXT 956.1 000834 3645 MOV @IP+,W // ; fetch word address into W 956.2 000836 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 956.3 000838 ENDM 957 000838 958 000838 959 000838 ;C KEY -- c get character from keyboard; vectored 960 000838 HEADER KEY,3,'KEY',DOCOLON 960.1 000000 PUBLIC KEY 960.2 000838 .... DW link 960.3 00083A FF DB 0FFh ; not immediate 960.4 00083B link SET $ 960.5 00083B 03 DB 3 960.6 00083C 4B4559 DB 'KEY' 960.7 00083F 00 EVEN 960.8 000840 IF 'DOCOLON'='DOCODE' 960.9 000840 KEY: DW $+2 960.10 000840 ELSE - 4e-configLP - Page 68 960.11 000840 .... KEY: DW DOCOLON 960.12 000842 ENDIF 960.13 000842 ENDM 961 000842 ............* DW USERKEY,FETCH,EXECUTE,EXIT 962 00084A 963 00084A ;C EMIT c -- output character to console; vectored 964 00084A HEADER EMIT,4,'EMIT',DOCOLON 964.1 000000 PUBLIC EMIT 964.2 00084A .... DW link 964.3 00084C FF DB 0FFh ; not immediate 964.4 00084D link SET $ 964.5 00084D 04 DB 4 964.6 00084E 454D4954 DB 'EMIT' 964.7 000852 EVEN 964.8 000852 IF 'DOCOLON'='DOCODE' 964.9 000852 EMIT: DW $+2 964.10 000852 ELSE 964.11 000852 .... EMIT: DW DOCOLON 964.12 000854 ENDIF 964.13 000854 ENDM 965 000854 ............* DW USEREMIT,FETCH,EXECUTE,EXIT 966 00085C 967 00085C ;X KEY? -- f return true if char waiting 968 00085C HEADER KEYQ,4,'KEY?',DOCODE 968.1 000000 PUBLIC KEYQ 968.2 00085C .... DW link 968.3 00085E FF DB 0FFh ; not immediate 968.4 00085F link SET $ 968.5 00085F 04 DB 4 968.6 000860 4B45593F DB 'KEY?' 968.7 000864 EVEN 968.8 000864 IF 'DOCODE'='DOCODE' 968.9 000864 .... KEYQ: DW $+2 968.10 000866 ELSE 968.11 000866 KEYQ: DW DOCODE 968.12 000866 ENDIF 968.13 000866 ENDM 969 000866 2483 SUB #2,PSP ; 1 push old TOS.. 970 000868 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 971 00086C D2B30300 BIT.B #UCA0RXIFG,&IFG2 972 000870 8622 JNZ TOSTRUE 973 000872 743E JMP TOSFALSE 974 000874 975 000874 ;X ZERO -- 0 put zero on stack. Often usesd word. 976 000874 HEADER ZERO,4,'ZERO',DOCON 976.1 000000 PUBLIC ZERO 976.2 000874 .... DW link 976.3 000876 FF DB 0FFh ; not immediate 976.4 000877 link SET $ 976.5 000877 04 DB 4 976.6 000878 5A45524F DB 'ZERO' 976.7 00087C EVEN 976.8 00087C IF 'DOCON'='DOCODE' 976.9 00087C ZERO: DW $+2 976.10 00087C ELSE 976.11 00087C .... ZERO: DW DOCON 976.12 00087E ENDIF 976.13 00087E ENDM 977 00087E 0000 DW 0 978 000880 979 000880 ; ---------------------------------------------- ------------------------ 980 000880 981 000880 /* 982 000880 ; DEBUG FORTH EXECUTION 983 000880 ; debug serieal 984 000880 PUBLIC DEBUGIP 985 000880 DEBUGIP: 986 000880 ; DW DOTID 987 000880 DEBUG1: 988 000880 ; DW TASK 989 000880 DW KEY ; 1@A0 test 1=rot,@=grün,A=beide,0=a us - 4e-configLP - Page 69 990 000880 DW DUP ;,DOTS,CR 991 000880 DW STORELEDS 992 000880 ; DW COLD 993 000880 DW EMIT 994 000880 DW lit,0,qbran 995 000880 DW DEBUG1-$ 996 000880 DW bran,-2 997 000880 998 000880 /* 999 000880 ; debugging only 1000 000880 HEADLESS CREATE,DOCOLON 1001 000880 HEADLESS ALLOT,DOCOLON 1002 000880 HEADLESS BUILDS,DOCOLON 1003 000880 HEADLESS ICOMMA,DOCOLON 1004 000880 HEADLESS XDOES,DOCOLON 1005 000880 HEADLESS IHERE,DOCOLON 1006 000880 HEADLESS IALLOT,DOCOLON 1007 000880 HEADLESS CELL,DOCOLON 1008 000880 HEADLESS PJOUT,DOCOLON 1009 000880 */ 1010 000880 1011 000880 1012 000880 ; for debug map only: 1013 000880 CamelForthEnd: 29 000880 #include "4e-deps430.s43" 1 000880 ; ---------------------------------------------- ------------------------ 2 000880 ; 4e4th is a Forth based on CamelForth 3 000880 ; for the Texas Instruments MSP430 4 000880 ; 5 000880 ; This program is free software; you can redistribute it and/or modify 6 000880 ; it under the terms of the GNU General Public License as published by 7 000880 ; the Free Software Foundation; either version 3 of the License, or 8 000880 ; (at your option) any later version. 9 000880 ; 10 000880 ; This program is distributed in the hope that it will be useful, 11 000880 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 000880 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 000880 ; GNU General Public License for more details. 14 000880 ; 15 000880 ; You should have received a copy of the GNU General Public License 16 000880 ; along with this program. If not, see . 17 000880 ; 18 000880 ; See LICENSE TERMS in Brads file readme.txt as well. 19 000880 20 000880 ; ---------------------------------------------- ------------------------ 21 000880 ; 4e-deps430.s43: CPU and Model Dependencies 22 000880 ; ---------------------------------------------- ------------------------ 23 000880 24 000880 ; Forth words are documented as follows: 25 000880 ;x NAME stack -- stack description 26 000880 ; where x=C for ANS Forth Core words, X for ANS 27 000880 ; Extensions, Z for internal or private words. 28 000880 ; 29 000880 ; Indirect-Threaded Forth model for T.I. MSP430 30 000880 ; cell size is 16 bits (2 bytes) 31 000880 ; char size is 8 bits (1 byte) 32 000880 ; address unit is 8 bits (1 byte), i.e., addresses are byte-aligned. 33 000880 ; ---------------------------------------------- ------------------------ 34 000880 - 4e-configLP - Page 70 35 000880 ; ---------------------------------------------- ------------------------ 36 000880 ; ALIGNMENT AND PORTABILITY OPERATORS 37 000880 ; Many of these are synonyms for other words, 38 000880 ; and so are defined as CODE words. 39 000880 40 000880 ;C ALIGN -- align HERE 41 000880 ; IHERE 1 AND IALLOT ; 42 000880 HEADER ALIGNN,5,'ALIGN',DOCOLON 42.1 000000 PUBLIC ALIGNN 42.2 000880 .... DW link 42.3 000882 FF DB 0FFh ; not immediate 42.4 000883 link SET $ 42.5 000883 05 DB 5 42.6 000884 414C49474E DB 'ALIGN' 42.7 000889 00 EVEN 42.8 00088A IF 'DOCOLON'='DOCODE' 42.9 00088A ALIGNN: DW $+2 42.10 00088A ELSE 42.11 00088A .... ALIGNN: DW DOCOLON 42.12 00088C ENDIF 42.13 00088C ENDM 43 00088C ........0100* DW IHERE,lit,1,ANDD,IALLOT,EXIT 44 000898 45 000898 ;C ALIGNED addr -- a-addr align given addr 46 000898 ; DUP 1 AND + ; 47 000898 HEADER ALIGNED,7,'ALIGNED',DOCOLON 47.1 000000 PUBLIC ALIGNED 47.2 000898 .... DW link 47.3 00089A FF DB 0FFh ; not immediate 47.4 00089B link SET $ 47.5 00089B 07 DB 7 47.6 00089C 414C49474E45* DB 'ALIGNED' 47.7 0008A3 00 EVEN 47.8 0008A4 IF 'DOCOLON'='DOCODE' 47.9 0008A4 ALIGNED: DW $+2 47.10 0008A4 ELSE 47.11 0008A4 .... ALIGNED: DW DOCOLON 47.12 0008A6 ENDIF 47.13 0008A6 ENDM 48 0008A6 ........0100* DW DUP,lit,1,ANDD,PLUS,EXIT 49 0008B2 50 0008B2 ;Z CELL -- n size of one cell 51 0008B2 HEADER CELL,4,'CELL',DOCON 51.1 000000 PUBLIC CELL 51.2 0008B2 .... DW link 51.3 0008B4 FF DB 0FFh ; not immediate 51.4 0008B5 link SET $ 51.5 0008B5 04 DB 4 51.6 0008B6 43454C4C DB 'CELL' 51.7 0008BA EVEN 51.8 0008BA IF 'DOCON'='DOCODE' 51.9 0008BA CELL: DW $+2 51.10 0008BA ELSE 51.11 0008BA .... CELL: DW DOCON 51.12 0008BC ENDIF 51.13 0008BC ENDM 52 0008BC 0200 dw 2 53 0008BE 54 0008BE ;C CELL+ a-addr1 -- a-addr2 add cell size 55 0008BE ; 2 + ; 56 0008BE HEADER CELLPLUS,5,'CELL+',DOCODE 56.1 000000 PUBLIC CELLPLUS 56.2 0008BE .... DW link 56.3 0008C0 FF DB 0FFh ; not immediate 56.4 0008C1 link SET $ 56.5 0008C1 05 DB 5 56.6 0008C2 43454C4C2B DB 'CELL+' 56.7 0008C7 00 EVEN 56.8 0008C8 IF 'DOCODE'='DOCODE' 56.9 0008C8 .... CELLPLUS: DW $+2 56.10 0008CA ELSE 56.11 0008CA CELLPLUS: DW DOCODE - 4e-configLP - Page 71 56.12 0008CA ENDIF 56.13 0008CA ENDM 57 0008CA 2753 ADD #2,TOS 58 0008CC B33F JMP donext 59 0008CE 60 0008CE ;C CELLS n1 -- n2 cells->adrs units 61 0008CE HEADER CELLS,5,'CELLS',TWOSTAR+2 61.1 000000 PUBLIC CELLS 61.2 0008CE .... DW link 61.3 0008D0 FF DB 0FFh ; not immediate 61.4 0008D1 link SET $ 61.5 0008D1 05 DB 5 61.6 0008D2 43454C4C53 DB 'CELLS' 61.7 0008D7 00 EVEN 61.8 0008D8 IF 'TWOSTAR+2'='DOCODE' 61.9 0008D8 CELLS: DW $+2 61.10 0008D8 ELSE 61.11 0008D8 .... CELLS: DW TWOSTAR+2 61.12 0008DA ENDIF 61.13 0008DA ENDM 62 0008DA 63 0008DA ;C CHAR+ c-addr1 -- c-addr2 add char size 64 0008DA HEADER CHARPLUS,5,'CHAR+',ONEPLUS+2 64.1 000000 PUBLIC CHARPLUS 64.2 0008DA .... DW link 64.3 0008DC FF DB 0FFh ; not immediate 64.4 0008DD link SET $ 64.5 0008DD 05 DB 5 64.6 0008DE 434841522B DB 'CHAR+' 64.7 0008E3 00 EVEN 64.8 0008E4 IF 'ONEPLUS+2'='DOCODE' 64.9 0008E4 CHARPLUS: DW $+2 64.10 0008E4 ELSE 64.11 0008E4 .... CHARPLUS: DW ONEPLUS+2 64.12 0008E6 ENDIF 64.13 0008E6 ENDM 65 0008E6 66 0008E6 ;C CHARS n1 -- n2 chars->adrs units 67 0008E6 HEADER CHARS,5,'CHARS',donoop 67.1 000000 PUBLIC CHARS 67.2 0008E6 .... DW link 67.3 0008E8 FF DB 0FFh ; not immediate 67.4 0008E9 link SET $ 67.5 0008E9 05 DB 5 67.6 0008EA 4348415253 DB 'CHARS' 67.7 0008EF 00 EVEN 67.8 0008F0 IF 'donoop'='DOCODE' 67.9 0008F0 CHARS: DW $+2 67.10 0008F0 ELSE 67.11 0008F0 .... CHARS: DW donoop 67.12 0008F2 ENDIF 67.13 0008F2 ENDM 68 0008F2 69 0008F2 ;C >BODY xt -- a-addr adrs of CREATE data 70 0008F2 ; 2+ ; 8086 (3 byte CALL) 71 0008F2 HEADER TOBODY,5,'>BODY',CELLPLUS+2 71.1 000000 PUBLIC TOBODY 71.2 0008F2 .... DW link 71.3 0008F4 FF DB 0FFh ; not immediate 71.4 0008F5 link SET $ 71.5 0008F5 05 DB 5 71.6 0008F6 3E424F4459 DB '>BODY' 71.7 0008FB 00 EVEN 71.8 0008FC IF 'CELLPLUS+2'='DOCODE' 71.9 0008FC TOBODY: DW $+2 71.10 0008FC ELSE 71.11 0008FC .... TOBODY: DW CELLPLUS+2 71.12 0008FE ENDIF 71.13 0008FE ENDM 72 0008FE 73 0008FE ;X COMPILE, xt -- append execution token 74 0008FE ; I called this word ,XT before I discovered - 4e-configLP - Page 72 that it is defined in the 75 0008FE ; ANSI standard as COMPILE,. On a DTC Forth this simply appends xt 76 0008FE ; (like , ) but on an STC Forth this must append 'CALL xt'. 77 0008FE HEADER COMMAXT,8,'COMPILE,',DOALIAS 77.1 000000 PUBLIC COMMAXT 77.2 0008FE .... DW link 77.3 000900 FF DB 0FFh ; not immediate 77.4 000901 link SET $ 77.5 000901 08 DB 8 77.6 000902 434F4D50494C* DB 'COMPILE,' 77.7 00090A EVEN 77.8 00090A IF 'DOALIAS'='DOCODE' 77.9 00090A COMMAXT: DW $+2 77.10 00090A ELSE 77.11 00090A .... COMMAXT: DW DOALIAS 77.12 00090C ENDIF 77.13 00090C ENDM 78 00090C .... DW ICOMMA 79 00090E 80 00090E ;Z !CF adrs cfa -- set code action of a word 81 00090E ; I! ; 82 00090E ; Indirect threaded model just stores adrs in cfa field. 83 00090E HEADER STORECF,3,'!CF',DOALIAS 83.1 000000 PUBLIC STORECF 83.2 00090E .... DW link 83.3 000910 FF DB 0FFh ; not immediate 83.4 000911 link SET $ 83.5 000911 03 DB 3 83.6 000912 214346 DB '!CF' 83.7 000915 00 EVEN 83.8 000916 IF 'DOALIAS'='DOCODE' 83.9 000916 STORECF: DW $+2 83.10 000916 ELSE 83.11 000916 .... STORECF: DW DOALIAS 83.12 000918 ENDIF 83.13 000918 ENDM 84 000918 .... DW ISTORE 85 00091A 86 00091A ;Z ,CF adrs -- append a code field 87 00091A ; IHERE !CF 2 IALLOT ; MSP430 VERSION (2 bytes) 88 00091A HEADER COMMACF,3,',CF',DOCOLON 88.1 000000 PUBLIC COMMACF 88.2 00091A .... DW link 88.3 00091C FF DB 0FFh ; not immediate 88.4 00091D link SET $ 88.5 00091D 03 DB 3 88.6 00091E 2C4346 DB ',CF' 88.7 000921 00 EVEN 88.8 000922 IF 'DOCOLON'='DOCODE' 88.9 000922 COMMACF: DW $+2 88.10 000922 ELSE 88.11 000922 .... COMMACF: DW DOCOLON 88.12 000924 ENDIF 88.13 000924 ENDM 89 000924 ............* DW IHERE,STORECF,lit,2,IALLOT,EXIT 90 000930 91 000930 ;Z ,CALL adrs -- append a subroutine CALL 92 000930 ; MSP430: 128x is call, Ad=11, Dreg=0000 (PC) thus append 12B0,adrs. 93 000930 HEADER COMMACALL,5,',CALL',DOCOLON 93.1 000000 PUBLIC COMMACALL 93.2 000930 .... DW link 93.3 000932 FF DB 0FFh ; not immediate 93.4 000933 link SET $ 93.5 000933 05 DB 5 93.6 000934 2C43414C4C DB ',CALL' 93.7 000939 00 EVEN 93.8 00093A IF 'DOCOLON'='DOCODE' 93.9 00093A COMMACALL: DW $+2 93.10 00093A ELSE 93.11 00093A .... COMMACALL: DW DOCOLON 93.12 00093C ENDIF - 4e-configLP - Page 73 93.13 00093C ENDM 94 00093C ....B012....* DW lit,12B0h,ICOMMA,ICOMMA,EXIT 95 000946 96 000946 ;Z ,JMP adrs -- append an absolute 16-bit JMP (MOV #xx,PC) 97 000946 ; MSP430: opcode 4, Sreg=0000, Ad=0, As=11 (immed), Dreg=0000 (PC) 98 000946 ; thus append 4030,adrs. 99 000946 HEADER COMMAJMP,4,',JMP',DOCOLON 99.1 000000 PUBLIC COMMAJMP 99.2 000946 .... DW link 99.3 000948 FF DB 0FFh ; not immediate 99.4 000949 link SET $ 99.5 000949 04 DB 4 99.6 00094A 2C4A4D50 DB ',JMP' 99.7 00094E EVEN 99.8 00094E IF 'DOCOLON'='DOCODE' 99.9 00094E COMMAJMP: DW $+2 99.10 00094E ELSE 99.11 00094E .... COMMAJMP: DW DOCOLON 99.12 000950 ENDIF 99.13 000950 ENDM 100 000950 ....3040....* DW lit,4030h,ICOMMA,ICOMMA,EXIT 101 00095A 102 00095A ;Z !COLON -- change code field to DOCOLON 103 00095A ; -2 IALLOT DOCOLON-adrs ,CF ; 104 00095A ; This should be used immediately after CREATE. 105 00095A ; This is made a distinct word, because on an STC 106 00095A ; Forth, colon definitions have no code field. 107 00095A HEADER STORCOLON,6,'!COLON',DOCOLON 107.1 000000 PUBLIC STORCOLON 107.2 00095A .... DW link 107.3 00095C FF DB 0FFh ; not immediate 107.4 00095D link SET $ 107.5 00095D 06 DB 6 107.6 00095E 21434F4C4F4E DB '!COLON' 107.7 000964 EVEN 107.8 000964 IF 'DOCOLON'='DOCODE' 107.9 000964 STORCOLON: DW $+2 107.10 000964 ELSE 107.11 000964 .... STORCOLON: DW DOCOLON 107.12 000966 ENDIF 107.13 000966 ENDM 108 000966 ....FEFF.... DW lit,-2,IALLOT 109 00096C ............* DW lit,DOCOLON,COMMACF,EXIT 110 000974 111 000974 ;Z ,EXIT -- append hi-level EXIT action 112 000974 ; ['] EXIT ,XT ; 113 000974 ; This is made a distinct word, because on an STC 114 000974 ; Forth, it appends a RET instruction, not an xt. 115 000974 HEADER CEXIT,5,',EXIT',DOCOLON 115.1 000000 PUBLIC CEXIT 115.2 000974 .... DW link 115.3 000976 FF DB 0FFh ; not immediate 115.4 000977 link SET $ 115.5 000977 05 DB 5 115.6 000978 2C45584954 DB ',EXIT' 115.7 00097D 00 EVEN 115.8 00097E IF 'DOCOLON'='DOCODE' 115.9 00097E CEXIT: DW $+2 115.10 00097E ELSE 115.11 00097E .... CEXIT: DW DOCOLON 115.12 000980 ENDIF 115.13 000980 ENDM 116 000980 ............* DW lit,EXIT,COMMAXT,EXIT 117 000988 118 000988 ; ---------------------------------------------- ------------------------ 119 000988 ; CONTROL STRUCTURES 120 000988 ; These words allow Forth control structure words - 4e-configLP - Page 74 121 000988 ; to be defined portably. 122 000988 123 000988 ;Z ,BRANCH xt -- append a branch instructio n 124 000988 ; xt is the branch operator to use, e.g. qbranch or (loop). 125 000988 ; It does NOT append the destination address. 126 000988 ; On the MSP430 this is equivalent to ,XT (above). 127 000988 HEADER COMMABRANCH,7,',BRANCH',DOALIAS 127.1 000000 PUBLIC COMMABRANCH 127.2 000988 .... DW link 127.3 00098A FF DB 0FFh ; not immediate 127.4 00098B link SET $ 127.5 00098B 07 DB 7 127.6 00098C 2C4252414E43* DB ',BRANCH' 127.7 000993 00 EVEN 127.8 000994 IF 'DOALIAS'='DOCODE' 127.9 000994 COMMABRANCH: DW $+2 127.10 000994 ELSE 127.11 000994 .... COMMABRANCH: DW DOALIAS 127.12 000996 ENDIF 127.13 000996 ENDM 128 000996 .... DW ICOMMA 129 000998 130 000998 ;Z ,DEST dest -- append a branch address 131 000998 ; IHERE - , ; 132 000998 ; This appends the given destination address to the branch instruction. 133 000998 ; The MSP430 uses relative addressing from the location of the offset cell, 134 000998 ; i.e., to branch to FOO the offset cell at $ contains FOO-$. 135 000998 HEADER COMMADEST,5,',DEST',DOCOLON 135.1 000000 PUBLIC COMMADEST 135.2 000998 .... DW link 135.3 00099A FF DB 0FFh ; not immediate 135.4 00099B link SET $ 135.5 00099B 05 DB 5 135.6 00099C 2C44455354 DB ',DEST' 135.7 0009A1 00 EVEN 135.8 0009A2 IF 'DOCOLON'='DOCODE' 135.9 0009A2 COMMADEST: DW $+2 135.10 0009A2 ELSE 135.11 0009A2 .... COMMADEST: DW DOCOLON 135.12 0009A4 ENDIF 135.13 0009A4 ENDM 136 0009A4 ............* DW IHERE,MINUS,ICOMMA,EXIT 137 0009AC 138 0009AC ;Z !DEST dest adrs -- change a branch dest'n 139 0009AC ; TUCK - SWAP I! ; 140 0009AC ; Changes the destination address found at 'adrs' to the given 'dest'. 141 0009AC ; The MSP430 uses relative addressing from the location of the offset cell, 142 0009AC ; i.e., to branch to FOO the offset cell at $ contains FOO-$. 143 0009AC HEADER STOREDEST,5,'!DEST',DOCOLON 143.1 000000 PUBLIC STOREDEST 143.2 0009AC .... DW link 143.3 0009AE FF DB 0FFh ; not immediate 143.4 0009AF link SET $ 143.5 0009AF 05 DB 5 143.6 0009B0 2144455354 DB '!DEST' 143.7 0009B5 00 EVEN 143.8 0009B6 IF 'DOCOLON'='DOCODE' 143.9 0009B6 STOREDEST: DW $+2 143.10 0009B6 ELSE 143.11 0009B6 .... STOREDEST: DW DOCOLON 143.12 0009B8 ENDIF 143.13 0009B8 ENDM 144 0009B8 ............* DW TUCK,MINUS,SWAP,ISTORE,EXIT 145 0009C2 146 0009C2 ;Z ,NONE -- append a null destination (Flashable) - 4e-configLP - Page 75 147 0009C2 ; CELL IALLOT ; 148 0009C2 ; When compiling in Flash ROM a branch to be resolved later, we must 149 0009C2 ; skip the cell so that it can be programmed at a later time. 150 0009C2 ; In general Flash memory can only be written once! 151 0009C2 ; ,NONE should be used wherever !DEST will resolve the branch. 152 0009C2 HEADER COMMANONE,5,',NONE',DOCOLON 152.1 000000 PUBLIC COMMANONE 152.2 0009C2 .... DW link 152.3 0009C4 FF DB 0FFh ; not immediate 152.4 0009C5 link SET $ 152.5 0009C5 05 DB 5 152.6 0009C6 2C4E4F4E45 DB ',NONE' 152.7 0009CB 00 EVEN 152.8 0009CC IF 'DOCOLON'='DOCODE' 152.9 0009CC COMMANONE: DW $+2 152.10 0009CC ELSE 152.11 0009CC .... COMMANONE: DW DOCOLON 152.12 0009CE ENDIF 152.13 0009CE ENDM 153 0009CE ............ DW CELL,IALLOT,EXIT 154 0009D4 155 0009D4 ; ---------------------------------------------- ------------------------ 156 0009D4 ; HEADER STRUCTURE 157 0009D4 ; The structure of the Forth dictionary headers (name, link, immediate 158 0009D4 ; flag, and "smudge" bit) does not necessarily differ across CPUs. This 159 0009D4 ; structure is not easily factored into distinct "portable" words; 160 0009D4 ; instead, it is implicit in the definitions of FIND and CREATE, and 161 0009D4 ; also in NFA>LFA, NFA>CFA, IMMED?, IMMEDIATE, HIDE, and REVEAL. 162 0009D4 ; These words must be (substantially) rewritten if either the header 163 0009D4 ; structure or its inherent assumptions are changed. 164 0009D4 ; ---------------------------------------------- ------------------------ 165 0009D4 30 0009D4 #include "4e-hilvl430.s43" 1 0009D4 ; ---------------------------------------------- ------------------------ 2 0009D4 ; 4e4th is a Forth based on CamelForth 3 0009D4 ; for the Texas Instruments MSP430 4 0009D4 ; 5 0009D4 ; This program is free software; you can redistribute it and/or modify 6 0009D4 ; it under the terms of the GNU General Public License as published by 7 0009D4 ; the Free Software Foundation; either version 3 of the License, or 8 0009D4 ; (at your option) any later version. 9 0009D4 ; 10 0009D4 ; This program is distributed in the hope that it will be useful, 11 0009D4 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 0009D4 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 0009D4 ; GNU General Public License for more details. 14 0009D4 ; 15 0009D4 ; You should have received a copy of the GNU General Public License 16 0009D4 ; along with this program. If not, see . 17 0009D4 ; 18 0009D4 ; See LICENSE TERMS in Brads file readme.txt as well. 19 0009D4 20 0009D4 ; ---------------------------------------------- ------------------------ - 4e-configLP - Page 76 21 0009D4 ; 4e-hilvl430.s43 - High Level Words 22 0009D4 ; ---------------------------------------------- ------------------------ 23 0009D4 24 0009D4 ; Forth words are documented as follows: 25 0009D4 ;x NAME stack -- stack description 26 0009D4 ; where x=C for ANS Forth Core words, X for ANS 27 0009D4 ; Extensions, Z for internal or private words. 28 0009D4 ; ---------------------------------------------- ------------------------ 29 0009D4 ; REVISION HISTORY 30 0009D4 31 0009D4 ; 17 November 2013 32 0009D4 ; Comments about making ISR in 4e4th 33 0009D4 ; 05 June 2013 34 0009D4 ; WORDS can stop and go now. 35 0009D4 ; 11 Jan 2013 made comments, new features and words: 36 0009D4 ; Indicate BASE in ok promt. 37 0009D4 ; 0U.R ( u n -- ) print u with n leading zeros. 38 0009D4 ; (VECWIPE) ( -- ) erase ISR flash. 39 0009D4 ; VECWIPE ( -- ) do (VECWIPE) and set default reset vector. 40 0009D4 ; cleaned up/added memory information words: 41 0009D4 ; RESETADR ( -- adr) reset vector address 42 0009D4 ; MEMBOT ( -- adr) bottom of USERflash 43 0009D4 ; MEMTOP ( -- adr) top of USERflash 44 0009D4 ; MEM ( -- u) unused bytes in flash 45 0009D4 ; UNUSED ( -- u) unused bytes in RAM 46 0009D4 ; VARBOT ( -- adr) bottom of variable area 47 0009D4 ; TOPSEG ( -- adr) bottom of top most flash segment 48 0009D4 ; VECBOT ( -- adr) bottom of interrupt vectors 49 0009D4 ; ? ( adr -- u ) display content of variable 50 0009D4 ; 08 Dez 2012 merged brads PARSE etc form camelforth/340 V4.1 51 0009D4 ; which fixes the empty string bug. 52 0009D4 ; Dez 2012 Added some features: 53 0009D4 ; Save variables to info-c and restore from there on COLD. 54 0009D4 ; Made upper most flash segment writable; you may write vectors now. 55 0009D4 ; VEC! (x adr -- ) store x to adr in top most segment 56 0009D4 ; VEC! will write _any_ flash location. !! dangerous!! 57 0009D4 ; VECWIPE will erase flash but not kernel, sets reset vector to boot 4e4th. 58 0009D4 ; Kernal is bigger now, user flash smaler; 59 0009D4 ; see: XLINK configuration file for MSP430G2553 4e-lnk430G2553.xcl 60 0009D4 ; 30 Mar 2012 mk fixed FM/MOD 61 0009D4 ; 26 Feb 2012 mk - adopted to MSP430G2553 62 0009D4 ; MEM ( -- n ) n = bytes left in flash 63 0009D4 ; FLASHEND constant MEMTOP 64 0009D4 ; FLASHSTART constant MEMBOT 65 0009D4 ; kernel at $E000, IDP = FLASHSTART = C000 66 0009D4 ; fixed backspace. 67 0009D4 ; ok promt at end of line. 68 0009D4 ; .S prints depth. 69 0009D4 ; 70 0009D4 ; 17 jan 09 bjr - changed label _DP to DDP for compatibility with token 71 0009D4 ; naming convention. Now uses DEST macro to compute branch offsets. - 4e-configLP - Page 77 72 0009D4 ; 11 jan 09 bjr - modified QUIT for Xon/Xoff flow control 73 0009D4 ; 4 jan 09 bjr - created from Camel86h.asm. 74 0009D4 75 0009D4 ; SYSTEM VARIABLES & CONSTANTS ================= = 76 0009D4 77 0009D4 ;Z u0 -- a-addr current user area adrs 78 0009D4 ; 0 USER U0 79 0009D4 HEADER U0,2,'U0',DOUSER 79.1 000000 PUBLIC U0 79.2 0009D4 .... DW link 79.3 0009D6 FF DB 0FFh ; not immediate 79.4 0009D7 link SET $ 79.5 0009D7 02 DB 2 79.6 0009D8 5530 DB 'U0' 79.7 0009DA EVEN 79.8 0009DA IF 'DOUSER'='DOCODE' 79.9 0009DA U0: DW $+2 79.10 0009DA ELSE 79.11 0009DA .... U0: DW DOUSER 79.12 0009DC ENDIF 79.13 0009DC ENDM 80 0009DC 0000 DW 0 81 0009DE 82 0009DE ;C >IN -- a-addr holds offset into TIB 83 0009DE ; 2 USER >IN 84 0009DE HEADER TOIN,3,'>IN',DOUSER 84.1 000000 PUBLIC TOIN 84.2 0009DE .... DW link 84.3 0009E0 FF DB 0FFh ; not immediate 84.4 0009E1 link SET $ 84.5 0009E1 03 DB 3 84.6 0009E2 3E494E DB '>IN' 84.7 0009E5 00 EVEN 84.8 0009E6 IF 'DOUSER'='DOCODE' 84.9 0009E6 TOIN: DW $+2 84.10 0009E6 ELSE 84.11 0009E6 .... TOIN: DW DOUSER 84.12 0009E8 ENDIF 84.13 0009E8 ENDM 85 0009E8 0200 DW 2 86 0009EA 87 0009EA ;C BASE -- a-addr holds conversion radix 88 0009EA ; 4 USER BASE 89 0009EA HEADER BASE,4,'BASE',DOUSER 89.1 000000 PUBLIC BASE 89.2 0009EA .... DW link 89.3 0009EC FF DB 0FFh ; not immediate 89.4 0009ED link SET $ 89.5 0009ED 04 DB 4 89.6 0009EE 42415345 DB 'BASE' 89.7 0009F2 EVEN 89.8 0009F2 IF 'DOUSER'='DOCODE' 89.9 0009F2 BASE: DW $+2 89.10 0009F2 ELSE 89.11 0009F2 .... BASE: DW DOUSER 89.12 0009F4 ENDIF 89.13 0009F4 ENDM 90 0009F4 0400 DW 4 91 0009F6 92 0009F6 ;C STATE -- a-addr holds compiler state 93 0009F6 ; 6 USER STATE 94 0009F6 HEADER STATE,5,'STATE',DOUSER 94.1 000000 PUBLIC STATE 94.2 0009F6 .... DW link 94.3 0009F8 FF DB 0FFh ; not immediate 94.4 0009F9 link SET $ 94.5 0009F9 05 DB 5 94.6 0009FA 5354415445 DB 'STATE' 94.7 0009FF 00 EVEN 94.8 000A00 IF 'DOUSER'='DOCODE' 94.9 000A00 STATE: DW $+2 94.10 000A00 ELSE - 4e-configLP - Page 78 94.11 000A00 .... STATE: DW DOUSER 94.12 000A02 ENDIF 94.13 000A02 ENDM 95 000A02 0600 DW 6 96 000A04 97 000A04 ;Z dp -- a-addr holds dictionary ptr 98 000A04 ; 8 USER DP 99 000A04 HEADER DDP,2,'DP',DOUSER 99.1 000000 PUBLIC DDP 99.2 000A04 .... DW link 99.3 000A06 FF DB 0FFh ; not immediate 99.4 000A07 link SET $ 99.5 000A07 02 DB 2 99.6 000A08 4450 DB 'DP' 99.7 000A0A EVEN 99.8 000A0A IF 'DOUSER'='DOCODE' 99.9 000A0A DDP: DW $+2 99.10 000A0A ELSE 99.11 000A0A .... DDP: DW DOUSER 99.12 000A0C ENDIF 99.13 000A0C ENDM 100 000A0C 0800 DW 8 101 000A0E 102 000A0E ;Z 'source -- a-addr two cells: len, adrs 103 000A0E ; 10 USER 'SOURCE 104 000A0E HEADER TICKSOURCE,7,'\'SOURCE',DOUSER 104.1 000000 PUBLIC TICKSOURCE 104.2 000A0E .... DW link 104.3 000A10 FF DB 0FFh ; not immediate 104.4 000A11 link SET $ 104.5 000A11 07 DB 7 104.6 000A12 27534F555243* DB '\'SOURCE' 104.7 000A19 00 EVEN 104.8 000A1A IF 'DOUSER'='DOCODE' 104.9 000A1A TICKSOURCE: DW $+2 104.10 000A1A ELSE 104.11 000A1A .... TICKSOURCE: DW DOUSER 104.12 000A1C ENDIF 104.13 000A1C ENDM 105 000A1C 0A00 DW 10 106 000A1E 107 000A1E ;Z latest -- a-addr last word in dict. 108 000A1E ; 14 USER LATEST 109 000A1E HEADER LATEST,6,'LATEST',DOUSER 109.1 000000 PUBLIC LATEST 109.2 000A1E .... DW link 109.3 000A20 FF DB 0FFh ; not immediate 109.4 000A21 link SET $ 109.5 000A21 06 DB 6 109.6 000A22 4C4154455354 DB 'LATEST' 109.7 000A28 EVEN 109.8 000A28 IF 'DOUSER'='DOCODE' 109.9 000A28 LATEST: DW $+2 109.10 000A28 ELSE 109.11 000A28 .... LATEST: DW DOUSER 109.12 000A2A ENDIF 109.13 000A2A ENDM 110 000A2A 0E00 DW 14 111 000A2C 112 000A2C ;Z hp -- a-addr HOLD pointer 113 000A2C ; 16 USER HP 114 000A2C HEADER HP,2,'HP',DOUSER 114.1 000000 PUBLIC HP 114.2 000A2C .... DW link 114.3 000A2E FF DB 0FFh ; not immediate 114.4 000A2F link SET $ 114.5 000A2F 02 DB 2 114.6 000A30 4850 DB 'HP' 114.7 000A32 EVEN 114.8 000A32 IF 'DOUSER'='DOCODE' 114.9 000A32 HP: DW $+2 114.10 000A32 ELSE 114.11 000A32 .... HP: DW DOUSER 114.12 000A34 ENDIF 114.13 000A34 ENDM - 4e-configLP - Page 79 115 000A34 1000 DW 16 116 000A36 117 000A36 ;Z LP -- a-addr Leave-stack pointer 118 000A36 ; 18 USER LP 119 000A36 HEADER LP,2,'LP',DOUSER 119.1 000000 PUBLIC LP 119.2 000A36 .... DW link 119.3 000A38 FF DB 0FFh ; not immediate 119.4 000A39 link SET $ 119.5 000A39 02 DB 2 119.6 000A3A 4C50 DB 'LP' 119.7 000A3C EVEN 119.8 000A3C IF 'DOUSER'='DOCODE' 119.9 000A3C LP: DW $+2 119.10 000A3C ELSE 119.11 000A3C .... LP: DW DOUSER 119.12 000A3E ENDIF 119.13 000A3E ENDM 120 000A3E 1200 DW 18 121 000A40 122 000A40 ;Z IDP -- a-addr ROM dictionary pointer 123 000A40 ; 20 USER IDP 124 000A40 HEADER IDP,3,'IDP',DOUSER 124.1 000000 PUBLIC IDP 124.2 000A40 .... DW link 124.3 000A42 FF DB 0FFh ; not immediate 124.4 000A43 link SET $ 124.5 000A43 03 DB 3 124.6 000A44 494450 DB 'IDP' 124.7 000A47 00 EVEN 124.8 000A48 IF 'DOUSER'='DOCODE' 124.9 000A48 IDP: DW $+2 124.10 000A48 ELSE 124.11 000A48 .... IDP: DW DOUSER 124.12 000A4A ENDIF 124.13 000A4A ENDM 125 000A4A 1400 DW 20 126 000A4C 127 000A4C ;Z NEWEST -- a-addr temporary LATEST storage 128 000A4C ; 22 USER NEWEST 129 000A4C HEADER NEWEST,6,'NEWEST',DOUSER 129.1 000000 PUBLIC NEWEST 129.2 000A4C .... DW link 129.3 000A4E FF DB 0FFh ; not immediate 129.4 000A4F link SET $ 129.5 000A4F 06 DB 6 129.6 000A50 4E4557455354 DB 'NEWEST' 129.7 000A56 EVEN 129.8 000A56 IF 'DOUSER'='DOCODE' 129.9 000A56 NEWEST: DW $+2 129.10 000A56 ELSE 129.11 000A56 .... NEWEST: DW DOUSER 129.12 000A58 ENDIF 129.13 000A58 ENDM 130 000A58 1600 DW 22 131 000A5A 132 000A5A ;Z APP -- a-addr app pointer ( was TURNKEY) 133 000A5A ; 24 USER APP 134 000A5A HEADER APP,3,'APP',DOUSER 134.1 000000 PUBLIC APP 134.2 000A5A .... DW link 134.3 000A5C FF DB 0FFh ; not immediate 134.4 000A5D link SET $ 134.5 000A5D 03 DB 3 134.6 000A5E 415050 DB 'APP' 134.7 000A61 00 EVEN 134.8 000A62 IF 'DOUSER'='DOCODE' 134.9 000A62 APP: DW $+2 134.10 000A62 ELSE 134.11 000A62 .... APP: DW DOUSER 134.12 000A64 ENDIF 134.13 000A64 ENDM 135 000A64 1800 DW 24 136 000A66 137 000A66 ;Z CAPS -- a-addr capitalize words - 4e-configLP - Page 80 pointer 138 000A66 ; 26 USER CAPS 139 000A66 HEADER CAPS,4,'CAPS',DOUSER 139.1 000000 PUBLIC CAPS 139.2 000A66 .... DW link 139.3 000A68 FF DB 0FFh ; not immediate 139.4 000A69 link SET $ 139.5 000A69 04 DB 4 139.6 000A6A 43415053 DB 'CAPS' 139.7 000A6E EVEN 139.8 000A6E IF 'DOUSER'='DOCODE' 139.9 000A6E CAPS: DW $+2 139.10 000A6E ELSE 139.11 000A6E .... CAPS: DW DOUSER 139.12 000A70 ENDIF 139.13 000A70 ENDM 140 000A70 1A00 DW 26 141 000A72 142 000A72 ;Z USERKEY -- a-addr KEY pointer 143 000A72 ; 28 USER KEY 144 000A72 HEADER USERKEY,7,'USERKEY',DOUSER 144.1 000000 PUBLIC USERKEY 144.2 000A72 .... DW link 144.3 000A74 FF DB 0FFh ; not immediate 144.4 000A75 link SET $ 144.5 000A75 07 DB 7 144.6 000A76 555345524B45* DB 'USERKEY' 144.7 000A7D 00 EVEN 144.8 000A7E IF 'DOUSER'='DOCODE' 144.9 000A7E USERKEY: DW $+2 144.10 000A7E ELSE 144.11 000A7E .... USERKEY: DW DOUSER 144.12 000A80 ENDIF 144.13 000A80 ENDM 145 000A80 1C00 DW 28 146 000A82 147 000A82 ;Z USEREMIT -- a-addr EMIT pointer 148 000A82 ; 30 USER EMIT 149 000A82 HEADER USEREMIT,8,'USEREMIT',DOUSER 149.1 000000 PUBLIC USEREMIT 149.2 000A82 .... DW link 149.3 000A84 FF DB 0FFh ; not immediate 149.4 000A85 link SET $ 149.5 000A85 08 DB 8 149.6 000A86 55534552454D* DB 'USEREMIT' 149.7 000A8E EVEN 149.8 000A8E IF 'DOUSER'='DOCODE' 149.9 000A8E USEREMIT: DW $+2 149.10 000A8E ELSE 149.11 000A8E .... USEREMIT: DW DOUSER 149.12 000A90 ENDIF 149.13 000A90 ENDM 150 000A90 1E00 DW 30 151 000A92 152 000A92 ;Z NEWLINE -- a-addr CR pointer 153 000A92 ; 32 USER 154 000A92 HEADER NEWLINE,7,'NEWLINE',DOUSER 154.1 000000 PUBLIC NEWLINE 154.2 000A92 .... DW link 154.3 000A94 FF DB 0FFh ; not immediate 154.4 000A95 link SET $ 154.5 000A95 07 DB 7 154.6 000A96 4E45574C494E* DB 'NEWLINE' 154.7 000A9D 00 EVEN 154.8 000A9E IF 'DOUSER'='DOCODE' 154.9 000A9E NEWLINE: DW $+2 154.10 000A9E ELSE 154.11 000A9E .... NEWLINE: DW DOUSER 154.12 000AA0 ENDIF 154.13 000AA0 ENDM 155 000AA0 2000 DW 32 156 000AA2 157 000AA2 ; 2 more for savety 34, 36 158 000AA2 159 000AA2 160 000AA2 161 000AA2 ;X PAD -- a-addr user PAD buffer - 4e-configLP - Page 81 162 000AA2 ; = end of hold area! 163 000AA2 HEADER PAD,3,'PAD',DOUSER 163.1 000000 PUBLIC PAD 163.2 000AA2 .... DW link 163.3 000AA4 FF DB 0FFh ; not immediate 163.4 000AA5 link SET $ 163.5 000AA5 03 DB 3 163.6 000AA6 504144 DB 'PAD' 163.7 000AA9 00 EVEN 163.8 000AAA IF 'DOUSER'='DOCODE' 163.9 000AAA PAD: DW $+2 163.10 000AAA ELSE 163.11 000AAA .... PAD: DW DOUSER 163.12 000AAC ENDIF 163.13 000AAC ENDM 164 000AAC .... DW PADAREA-UAREA 165 000AAE 166 000AAE ;Z l0 -- a-addr bottom of Leave stack 167 000AAE HEADER L0,2,'L0',DOUSER 167.1 000000 PUBLIC L0 167.2 000AAE .... DW link 167.3 000AB0 FF DB 0FFh ; not immediate 167.4 000AB1 link SET $ 167.5 000AB1 02 DB 2 167.6 000AB2 4C30 DB 'L0' 167.7 000AB4 EVEN 167.8 000AB4 IF 'DOUSER'='DOCODE' 167.9 000AB4 L0: DW $+2 167.10 000AB4 ELSE 167.11 000AB4 .... L0: DW DOUSER 167.12 000AB6 ENDIF 167.13 000AB6 ENDM 168 000AB6 .... DW LSTACK-UAREA 169 000AB8 170 000AB8 ;Z r0 -- a-addr end of return stack 171 000AB8 HEADER RZERO,2,'R0',DOUSER 171.1 000000 PUBLIC RZERO 171.2 000AB8 .... DW link 171.3 000ABA FF DB 0FFh ; not immediate 171.4 000ABB link SET $ 171.5 000ABB 02 DB 2 171.6 000ABC 5230 DB 'R0' 171.7 000ABE EVEN 171.8 000ABE IF 'DOUSER'='DOCODE' 171.9 000ABE RZERO: DW $+2 171.10 000ABE ELSE 171.11 000ABE .... RZERO: DW DOUSER 171.12 000AC0 ENDIF 171.13 000AC0 ENDM 172 000AC0 .... DW RSTACK-UAREA 173 000AC2 174 000AC2 ;Z s0 -- a-addr end of parameter stack 175 000AC2 HEADER S0,2,'S0',DOUSER 175.1 000000 PUBLIC S0 175.2 000AC2 .... DW link 175.3 000AC4 FF DB 0FFh ; not immediate 175.4 000AC5 link SET $ 175.5 000AC5 02 DB 2 175.6 000AC6 5330 DB 'S0' 175.7 000AC8 EVEN 175.8 000AC8 IF 'DOUSER'='DOCODE' 175.9 000AC8 S0: DW $+2 175.10 000AC8 ELSE 175.11 000AC8 .... S0: DW DOUSER 175.12 000ACA ENDIF 175.13 000ACA ENDM 176 000ACA .... DW PSTACK-UAREA 177 000ACC 178 000ACC ;X tib -- a-addr Terminal Input Buffer 179 000ACC ; HEX 80 USER TIB 8086: above user area 180 000ACC HEADER TIB,3,'TIB',DOUSER 180.1 000000 PUBLIC TIB - 4e-configLP - Page 82 180.2 000ACC .... DW link 180.3 000ACE FF DB 0FFh ; not immediate 180.4 000ACF link SET $ 180.5 000ACF 03 DB 3 180.6 000AD0 544942 DB 'TIB' 180.7 000AD3 00 EVEN 180.8 000AD4 IF 'DOUSER'='DOCODE' 180.9 000AD4 TIB: DW $+2 180.10 000AD4 ELSE 180.11 000AD4 .... TIB: DW DOUSER 180.12 000AD6 ENDIF 180.13 000AD6 ENDM 181 000AD6 .... DW TIBAREA-UAREA 182 000AD8 183 000AD8 ;Z tibsize -- n size of TIB 184 000AD8 HEADER TIBSIZE,7,'TIBSIZE',DOCON 184.1 000000 PUBLIC TIBSIZE 184.2 000AD8 .... DW link 184.3 000ADA FF DB 0FFh ; not immediate 184.4 000ADB link SET $ 184.5 000ADB 07 DB 7 184.6 000ADC 54494253495A* DB 'TIBSIZE' 184.7 000AE3 00 EVEN 184.8 000AE4 IF 'DOCON'='DOCODE' 184.9 000AE4 TIBSIZE: DW $+2 184.10 000AE4 ELSE 184.11 000AE4 .... TIBSIZE: DW DOCON 184.12 000AE6 ENDIF 184.13 000AE6 ENDM 185 000AE6 .... DW TIB_SIZE-2 ; 2 chars safety zone 186 000AE8 187 000AE8 ;C BL -- char an ASCII space 188 000AE8 HEADER BLANK,2,'BL',DOCON 188.1 000000 PUBLIC BLANK 188.2 000AE8 .... DW link 188.3 000AEA FF DB 0FFh ; not immediate 188.4 000AEB link SET $ 188.5 000AEB 02 DB 2 188.6 000AEC 424C DB 'BL' 188.7 000AEE EVEN 188.8 000AEE IF 'DOCON'='DOCODE' 188.9 000AEE BLANK: DW $+2 188.10 000AEE ELSE 188.11 000AEE .... BLANK: DW DOCON 188.12 000AF0 ENDIF 188.13 000AF0 ENDM 189 000AF0 2000 DW 20h 190 000AF2 191 000AF2 ;Z uinit -- addr initial values for user area 192 000AF2 HEADER UINIT,5,'UINIT',DOROM 192.1 000000 PUBLIC UINIT 192.2 000AF2 .... DW link 192.3 000AF4 FF DB 0FFh ; not immediate 192.4 000AF5 link SET $ 192.5 000AF5 05 DB 5 192.6 000AF6 55494E4954 DB 'UINIT' 192.7 000AFB 00 EVEN 192.8 000AFC IF 'DOROM'='DOCODE' 192.9 000AFC UINIT: DW $+2 192.10 000AFC ELSE 192.11 000AFC .... UINIT: DW DOROM 192.12 000AFE ENDIF 192.13 000AFE ENDM 193 000AFE uinitstart: 194 000AFE 000000000A00* DW 0,0,10,0 ; reserved,>IN,BASE,STAT E ; start in HEX mk 195 000B06 .... DW RAMDICT ; DP 196 000B08 00000000 DW 0,0 ; SOURCE init'd elsewhere 197 000B0C .... DW lastword ; LATEST 198 000B0E 00000000 DW 0,0 ; HP,LP init'd elsewhere 199 000B12 00C0 DW USERFLASHSTART ; IDP 200 000B14 0000 DW 0 ; NEWEST not init'd - 4e-configLP - Page 83 201 000B16 .... DW DOTCOLD ; APP vector; default is .COLD 202 000B18 FFFF DW -1 ; CAPS flag; default is TRUE 203 000B1A .... DW DOKEY ; KEY vector 204 000B1C .... DW DOEMIT ; EMIT vector 205 000B1E .... DW DOCR ; CR vector 206 000B20 uinitend: 207 000022 uareasize = uinitend-uinitstart 208 000B20 209 000B20 /* not there mk 210 000B20 ; RAM interrupt vectors, 15 vectors of 2 cells each 211 000B20 MOV #nullirq,PC 212 000B20 MOV #nullirq,PC 213 000B20 MOV #nullirq,PC 214 000B20 MOV #nullirq,PC 215 000B20 MOV #nullirq,PC 216 000B20 MOV #nullirq,PC 217 000B20 MOV #nullirq,PC 218 000B20 MOV #nullirq,PC 219 000B20 MOV #nullirq,PC 220 000B20 MOV #nullirq,PC 221 000B20 MOV #nullirq,PC 222 000B20 MOV #nullirq,PC 223 000B20 MOV #nullirq,PC 224 000B20 MOV #nullirq,PC 225 000B20 MOV #nullirq,PC 226 000B20 */ 227 000B20 228 000B20 ;Z #init -- n #bytes of user area init data 229 000B20 HEADER NINIT,5,'#INIT',DOCON 229.1 000000 PUBLIC NINIT 229.2 000B20 .... DW link 229.3 000B22 FF DB 0FFh ; not immediate 229.4 000B23 link SET $ 229.5 000B23 05 DB 5 229.6 000B24 23494E4954 DB '#INIT' 229.7 000B29 00 EVEN 229.8 000B2A IF 'DOCON'='DOCODE' 229.9 000B2A NINIT: DW $+2 229.10 000B2A ELSE 229.11 000B2A .... NINIT: DW DOCON 229.12 000B2C ENDIF 229.13 000B2C ENDM 230 000B2C 2200 DW uareasize 231 000B2E 232 000B2E 233 000000 EXTERN cor,infoB,AppU0,infoC,infoD 234 000B2E ;Z COR -- adr cause of reset 235 000B2E HEADER COR,3,'COR',DOCON 235.1 000000 PUBLIC COR 235.2 000B2E .... DW link 235.3 000B30 FF DB 0FFh ; not immediate 235.4 000B31 link SET $ 235.5 000B31 03 DB 3 235.6 000B32 434F52 DB 'COR' 235.7 000B35 00 EVEN 235.8 000B36 IF 'DOCON'='DOCODE' 235.9 000B36 COR: DW $+2 235.10 000B36 ELSE 235.11 000B36 .... COR: DW DOCON 235.12 000B38 ENDIF 235.13 000B38 ENDM 236 000B38 .... DW cor 237 000B3A 238 000B3A ;Z INFOB -- adr start of info B segment 239 000B3A HEADER INFOB,5,'INFOB',DOCON 239.1 000000 PUBLIC INFOB 239.2 000B3A .... DW link 239.3 000B3C FF DB 0FFh ; not immediate 239.4 000B3D link SET $ 239.5 000B3D 05 DB 5 239.6 000B3E 494E464F42 DB 'INFOB' 239.7 000B43 00 EVEN 239.8 000B44 IF 'DOCON'='DOCODE' - 4e-configLP - Page 84 239.9 000B44 INFOB: DW $+2 239.10 000B44 ELSE 239.11 000B44 .... INFOB: DW DOCON 239.12 000B46 ENDIF 239.13 000B46 ENDM 240 000B46 .... DW infoB 241 000B48 242 000B48 ;Z INFOC -- adr start of info C segment 243 000B48 HEADER INFOC,5,'INFOC',DOCON 243.1 000000 PUBLIC INFOC 243.2 000B48 .... DW link 243.3 000B4A FF DB 0FFh ; not immediate 243.4 000B4B link SET $ 243.5 000B4B 05 DB 5 243.6 000B4C 494E464F43 DB 'INFOC' 243.7 000B51 00 EVEN 243.8 000B52 IF 'DOCON'='DOCODE' 243.9 000B52 INFOC: DW $+2 243.10 000B52 ELSE 243.11 000B52 .... INFOC: DW DOCON 243.12 000B54 ENDIF 243.13 000B54 ENDM 244 000B54 .... DW infoC 245 000B56 246 000B56 ;Z INFOD -- adr start of info C segment 247 000B56 HEADER INFOD,5,'INFOD',DOCON 247.1 000000 PUBLIC INFOD 247.2 000B56 .... DW link 247.3 000B58 FF DB 0FFh ; not immediate 247.4 000B59 link SET $ 247.5 000B59 05 DB 5 247.6 000B5A 494E464F44 DB 'INFOD' 247.7 000B5F 00 EVEN 247.8 000B60 IF 'DOCON'='DOCODE' 247.9 000B60 INFOD: DW $+2 247.10 000B60 ELSE 247.11 000B60 .... INFOD: DW DOCON 247.12 000B62 ENDIF 247.13 000B62 ENDM 248 000B62 .... DW infoD 249 000B64 250 000B64 ;Z APPU0 -- adr start of Application user area 251 000B64 HEADER APPU0,5,'APPU0',DOCON 251.1 000000 PUBLIC APPU0 251.2 000B64 .... DW link 251.3 000B66 FF DB 0FFh ; not immediate 251.4 000B67 link SET $ 251.5 000B67 05 DB 5 251.6 000B68 4150505530 DB 'APPU0' 251.7 000B6D 00 EVEN 251.8 000B6E IF 'DOCON'='DOCODE' 251.9 000B6E APPU0: DW $+2 251.10 000B6E ELSE 251.11 000B6E .... APPU0: DW DOCON 251.12 000B70 ENDIF 251.13 000B70 ENDM 252 000B70 .... DW AppU0 253 000B72 254 000B72 255 000B72 ; ARITHMETIC OPERATORS ========================= = 256 000B72 257 000B72 ;C S>D n -- d single -> double prec. 258 000B72 ; DUP 0< ; 259 000B72 HEADER STOD,3,'S>D',DOCOLON 259.1 000000 PUBLIC STOD 259.2 000B72 .... DW link 259.3 000B74 FF DB 0FFh ; not immediate 259.4 000B75 link SET $ 259.5 000B75 03 DB 3 259.6 000B76 533E44 DB 'S>D' 259.7 000B79 00 EVEN 259.8 000B7A IF 'DOCOLON'='DOCODE' 259.9 000B7A STOD: DW $+2 - 4e-configLP - Page 85 259.10 000B7A ELSE 259.11 000B7A .... STOD: DW DOCOLON 259.12 000B7C ENDIF 259.13 000B7C ENDM 260 000B7C ............ DW DUP,ZEROLESS,EXIT 261 000B82 262 000B82 ;Z ?NEGATE n1 n2 -- n3 negate n1 if n2 negative 263 000B82 ; 0< IF NEGATE THEN ; ...a common factor 264 000B82 HEADER QNEGATE,7,'?NEGATE',DOCOLON 264.1 000000 PUBLIC QNEGATE 264.2 000B82 .... DW link 264.3 000B84 FF DB 0FFh ; not immediate 264.4 000B85 link SET $ 264.5 000B85 07 DB 7 264.6 000B86 3F4E45474154* DB '?NEGATE' 264.7 000B8D 00 EVEN 264.8 000B8E IF 'DOCOLON'='DOCODE' 264.9 000B8E QNEGATE: DW $+2 264.10 000B8E ELSE 264.11 000B8E .... QNEGATE: DW DOCOLON 264.12 000B90 ENDIF 264.13 000B90 ENDM 265 000B90 ........ DW ZEROLESS,qbran 266 000B94 DEST QNEG1 266.1 000B94 0400 DW QNEG1-$ 266.2 000B96 ENDM 267 000B96 .... DW NEGATE 268 000B98 .... QNEG1: DW EXIT 269 000B9A 270 000B9A ;C ABS n1 -- +n2 absolute value 271 000B9A ; DUP ?NEGATE ; 272 000B9A HEADER ABBS,3,'ABS',DOCOLON 272.1 000000 PUBLIC ABBS 272.2 000B9A .... DW link 272.3 000B9C FF DB 0FFh ; not immediate 272.4 000B9D link SET $ 272.5 000B9D 03 DB 3 272.6 000B9E 414253 DB 'ABS' 272.7 000BA1 00 EVEN 272.8 000BA2 IF 'DOCOLON'='DOCODE' 272.9 000BA2 ABBS: DW $+2 272.10 000BA2 ELSE 272.11 000BA2 .... ABBS: DW DOCOLON 272.12 000BA4 ENDIF 272.13 000BA4 ENDM 273 000BA4 ............ DW DUP,QNEGATE,EXIT 274 000BAA 275 000BAA ;X DNEGATE d1 -- d2 negate double precision 276 000BAA ; SWAP INVERT SWAP INVERT 1 M+ ; 277 000BAA HEADER DNEGATE,7,'DNEGATE',DOCOLON 277.1 000000 PUBLIC DNEGATE 277.2 000BAA .... DW link 277.3 000BAC FF DB 0FFh ; not immediate 277.4 000BAD link SET $ 277.5 000BAD 07 DB 7 277.6 000BAE 444E45474154* DB 'DNEGATE' 277.7 000BB5 00 EVEN 277.8 000BB6 IF 'DOCOLON'='DOCODE' 277.9 000BB6 DNEGATE: DW $+2 277.10 000BB6 ELSE 277.11 000BB6 .... DNEGATE: DW DOCOLON 277.12 000BB8 ENDIF 277.13 000BB8 ENDM 278 000BB8 ............* DW SWAP,INVERT,SWAP,INVERT,lit,1,MPLUS 279 000BC6 .... DW EXIT 280 000BC8 281 000BC8 ;Z ?DNEGATE d1 n -- d2 negate d1 if n negative 282 000BC8 ; 0< IF DNEGATE THEN ; ...a common factor 283 000BC8 HEADER QDNEGATE,8,'?DNEGATE',DOCOLON 283.1 000000 PUBLIC QDNEGATE 283.2 000BC8 .... DW link 283.3 000BCA FF DB 0FFh ; not immediate 283.4 000BCB link SET $ - 4e-configLP - Page 86 283.5 000BCB 08 DB 8 283.6 000BCC 3F444E454741* DB '?DNEGATE' 283.7 000BD4 EVEN 283.8 000BD4 IF 'DOCOLON'='DOCODE' 283.9 000BD4 QDNEGATE: DW $+2 283.10 000BD4 ELSE 283.11 000BD4 .... QDNEGATE: DW DOCOLON 283.12 000BD6 ENDIF 283.13 000BD6 ENDM 284 000BD6 ........ DW ZEROLESS,qbran 285 000BDA DEST DNEG1 285.1 000BDA 0400 DW DNEG1-$ 285.2 000BDC ENDM 286 000BDC .... DW DNEGATE 287 000BDE .... DNEG1: DW EXIT 288 000BE0 289 000BE0 ;X DABS d1 -- +d2 absolute value dbl.prec. 290 000BE0 ; DUP ?DNEGATE ; 291 000BE0 HEADER DABS,4,'DABS',DOCOLON 291.1 000000 PUBLIC DABS 291.2 000BE0 .... DW link 291.3 000BE2 FF DB 0FFh ; not immediate 291.4 000BE3 link SET $ 291.5 000BE3 04 DB 4 291.6 000BE4 44414253 DB 'DABS' 291.7 000BE8 EVEN 291.8 000BE8 IF 'DOCOLON'='DOCODE' 291.9 000BE8 DABS: DW $+2 291.10 000BE8 ELSE 291.11 000BE8 .... DABS: DW DOCOLON 291.12 000BEA ENDIF 291.13 000BEA ENDM 292 000BEA ............ DW DUP,QDNEGATE,EXIT 293 000BF0 294 000BF0 ;C M* n1 n2 -- d signed 16*16->32 multiply 295 000BF0 ; 2DUP XOR >R carries sign of the result 296 000BF0 ; SWAP ABS SWAP ABS UM* 297 000BF0 ; R> ?DNEGATE ; 298 000BF0 HEADER MSTAR,2,'M*',DOCOLON 298.1 000000 PUBLIC MSTAR 298.2 000BF0 .... DW link 298.3 000BF2 FF DB 0FFh ; not immediate 298.4 000BF3 link SET $ 298.5 000BF3 02 DB 2 298.6 000BF4 4D2A DB 'M*' 298.7 000BF6 EVEN 298.8 000BF6 IF 'DOCOLON'='DOCODE' 298.9 000BF6 MSTAR: DW $+2 298.10 000BF6 ELSE 298.11 000BF6 .... MSTAR: DW DOCOLON 298.12 000BF8 ENDIF 298.13 000BF8 ENDM 299 000BF8 ............ DW TWODUP,XORR,TOR 300 000BFE ............* DW SWAP,ABBS,SWAP,ABBS,UMSTAR 301 000C08 ............ DW RFROM,QDNEGATE,EXIT 302 000C0E 303 000C0E ;C SM/REM d1 n1 -- n2 n3 symmetric signed div 304 000C0E ; 2DUP XOR >R sign of quotient 305 000C0E ; OVER >R sign of remainder 306 000C0E ; ABS >R DABS R> UM/MOD 307 000C0E ; SWAP R> ?NEGATE 308 000C0E ; SWAP R> ?NEGATE ; 309 000C0E ; Ref. dpANS-6 section 3.2.2.1. 310 000C0E HEADER SMSLASHREM,6,'SM/REM',DOCOLON 310.1 000000 PUBLIC SMSLASHREM 310.2 000C0E .... DW link 310.3 000C10 FF DB 0FFh ; not immediate 310.4 000C11 link SET $ 310.5 000C11 06 DB 6 310.6 000C12 534D2F52454D DB 'SM/REM' 310.7 000C18 EVEN 310.8 000C18 IF 'DOCOLON'='DOCODE' 310.9 000C18 SMSLASHREM: DW $+2 310.10 000C18 ELSE - 4e-configLP - Page 87 310.11 000C18 .... SMSLASHREM: DW DOCOLON 310.12 000C1A ENDIF 310.13 000C1A ENDM 311 000C1A ............* DW TWODUP,XORR,TOR,OVER,TOR 312 000C24 ............* DW ABBS,TOR,DABS,RFROM,UMSLASHMOD 313 000C2E ............* DW SWAP,RFROM,QNEGATE,SWAP,RFROM,QNEGATE 314 000C3A .... DW EXIT 315 000C3C 316 000C3C ;C d1 n1 -- n2 n3 floored signed div'n 317 000C3C ; courtesy of Ed Smeda 318 000C3C ; DUP >R SM/REM 2DUP 1 < AND IF 319 000C3C ; SWAP R@ + SWAP 1- THEN 320 000C3C ; R> DROP ; 321 000C3C ; Ref. dpANS-6 section 3.2.2.1. 322 000C3C ; HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON 323 000C3C ; DW DUP,TOR,SMSLASHREM 324 000C3C ; DW TWODUP,lit,1,LESS,ANDD,qbran 325 000C3C ; DEST FMMOD1 326 000C3C ; DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS 327 000C3C ;FMMOD1: DW RFROM,DROP,EXIT 328 000C3C 329 000C3C ; Fixed FM/MOD, added 12 nov 2012 330 000C3C ;C FM/MOD d1 n1 -- n2 n3 floored signed div'n 331 000C3C ; Ching-Tang Tseng Mar 24 2012 332 000C3C ; DUP >R OVER OVER XOR >R 333 000C3C ; SM/REM 334 000C3C ; OVER R> 0< AND 335 000C3C ; IF SWAP R@ + SWAP 1 - 336 000C3C ; THEN R> DROP ; 337 000C3C ; 1 0 2 FM/MOD(OK) . . 0 1 ok 338 000C3C ; 7 0 9 FM/MOD(OK) . . 0 7 ok 339 000C3C ; Ref. dpANS-6 section 3.2.2.1. 340 000C3C HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON 340.1 000000 PUBLIC FMSLASHMOD 340.2 000C3C .... DW link 340.3 000C3E FF DB 0FFh ; not immediate 340.4 000C3F link SET $ 340.5 000C3F 06 DB 6 340.6 000C40 464D2F4D4F44 DB 'FM/MOD' 340.7 000C46 EVEN 340.8 000C46 IF 'DOCOLON'='DOCODE' 340.9 000C46 FMSLASHMOD: DW $+2 340.10 000C46 ELSE 340.11 000C46 .... FMSLASHMOD: DW DOCOLON 340.12 000C48 ENDIF 340.13 000C48 ENDM 341 000C48 ............* DW DUP,TOR,OVER,OVER,XORR,TOR 342 000C54 .... DW SMSLASHREM 343 000C56 ............* DW OVER,RFROM,ZEROLESS,ANDD,qbran 344 000C60 DEST FMMOD1 344.1 000C60 0C00 DW FMMOD1-$ 344.2 000C62 ENDM 345 000C62 ............* DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS 346 000C6C ............ FMMOD1: DW RFROM,DROP,EXIT 347 000C72 348 000C72 ;C * n1 n2 -- n3 signed multiply 349 000C72 ; M* DROP ; 350 000C72 HEADER STAR,1,'*',DOCOLON 350.1 000000 PUBLIC STAR 350.2 000C72 .... DW link 350.3 000C74 FF DB 0FFh ; not immediate 350.4 000C75 link SET $ 350.5 000C75 01 DB 1 350.6 000C76 2A DB '*' 350.7 000C77 00 EVEN 350.8 000C78 IF 'DOCOLON'='DOCODE' 350.9 000C78 STAR: DW $+2 350.10 000C78 ELSE 350.11 000C78 .... STAR: DW DOCOLON 350.12 000C7A ENDIF 350.13 000C7A ENDM 351 000C7A ............ DW MSTAR,DROP,EXIT 352 000C80 353 000C80 ;C /MOD n1 n2 -- n3 n4 signed divide/rem'dr 354 000C80 ; >R S>D R> FM/MOD ; - 4e-configLP - Page 88 355 000C80 HEADER SLASHMOD,4,'/MOD',DOCOLON 355.1 000000 PUBLIC SLASHMOD 355.2 000C80 .... DW link 355.3 000C82 FF DB 0FFh ; not immediate 355.4 000C83 link SET $ 355.5 000C83 04 DB 4 355.6 000C84 2F4D4F44 DB '/MOD' 355.7 000C88 EVEN 355.8 000C88 IF 'DOCOLON'='DOCODE' 355.9 000C88 SLASHMOD: DW $+2 355.10 000C88 ELSE 355.11 000C88 .... SLASHMOD: DW DOCOLON 355.12 000C8A ENDIF 355.13 000C8A ENDM 356 000C8A ............* DW TOR,STOD,RFROM,FMSLASHMOD,EXIT 357 000C94 358 000C94 ;C / n1 n2 -- n3 signed divide 359 000C94 ; /MOD nip ; 360 000C94 HEADER SLASH,1,'/',DOCOLON 360.1 000000 PUBLIC SLASH 360.2 000C94 .... DW link 360.3 000C96 FF DB 0FFh ; not immediate 360.4 000C97 link SET $ 360.5 000C97 01 DB 1 360.6 000C98 2F DB '/' 360.7 000C99 00 EVEN 360.8 000C9A IF 'DOCOLON'='DOCODE' 360.9 000C9A SLASH: DW $+2 360.10 000C9A ELSE 360.11 000C9A .... SLASH: DW DOCOLON 360.12 000C9C ENDIF 360.13 000C9C ENDM 361 000C9C ............ DW SLASHMOD,NIP,EXIT 362 000CA2 363 000CA2 ;C MOD n1 n2 -- n3 signed remainder 364 000CA2 ; /MOD DROP ; 365 000CA2 HEADER MODD,3,'MOD',DOCOLON 365.1 000000 PUBLIC MODD 365.2 000CA2 .... DW link 365.3 000CA4 FF DB 0FFh ; not immediate 365.4 000CA5 link SET $ 365.5 000CA5 03 DB 3 365.6 000CA6 4D4F44 DB 'MOD' 365.7 000CA9 00 EVEN 365.8 000CAA IF 'DOCOLON'='DOCODE' 365.9 000CAA MODD: DW $+2 365.10 000CAA ELSE 365.11 000CAA .... MODD: DW DOCOLON 365.12 000CAC ENDIF 365.13 000CAC ENDM 366 000CAC ............ DW SLASHMOD,DROP,EXIT 367 000CB2 368 000CB2 ;C */MOD n1 n2 n3 -- n4 n5 n1*n2/n3, rem" 369 000CB2 ; >R M* R> FM/MOD ; 370 000CB2 HEADER SSMOD,5,'*/MOD',DOCOLON 370.1 000000 PUBLIC SSMOD 370.2 000CB2 .... DW link 370.3 000CB4 FF DB 0FFh ; not immediate 370.4 000CB5 link SET $ 370.5 000CB5 05 DB 5 370.6 000CB6 2A2F4D4F44 DB '*/MOD' 370.7 000CBB 00 EVEN 370.8 000CBC IF 'DOCOLON'='DOCODE' 370.9 000CBC SSMOD: DW $+2 370.10 000CBC ELSE 370.11 000CBC .... SSMOD: DW DOCOLON 370.12 000CBE ENDIF 370.13 000CBE ENDM 371 000CBE ............* DW TOR,MSTAR,RFROM,FMSLASHMOD,EXIT 372 000CC8 373 000CC8 ;C */ n1 n2 n3 -- n4 n1*n2/n3 374 000CC8 ; */MOD nip ; 375 000CC8 HEADER STARSLASH,2,'*/',DOCOLON 375.1 000000 PUBLIC STARSLASH 375.2 000CC8 .... DW link 375.3 000CCA FF DB 0FFh ; not immediate 375.4 000CCB link SET $ - 4e-configLP - Page 89 375.5 000CCB 02 DB 2 375.6 000CCC 2A2F DB '*/' 375.7 000CCE EVEN 375.8 000CCE IF 'DOCOLON'='DOCODE' 375.9 000CCE STARSLASH: DW $+2 375.10 000CCE ELSE 375.11 000CCE .... STARSLASH: DW DOCOLON 375.12 000CD0 ENDIF 375.13 000CD0 ENDM 376 000CD0 ............ DW SSMOD,NIP,EXIT 377 000CD6 378 000CD6 ;C MAX n1 n2 -- n3 signed maximum 379 000CD6 ; 2DUP < IF SWAP THEN DROP ; 380 000CD6 HEADER MAX,3,'MAX',DOCOLON 380.1 000000 PUBLIC MAX 380.2 000CD6 .... DW link 380.3 000CD8 FF DB 0FFh ; not immediate 380.4 000CD9 link SET $ 380.5 000CD9 03 DB 3 380.6 000CDA 4D4158 DB 'MAX' 380.7 000CDD 00 EVEN 380.8 000CDE IF 'DOCOLON'='DOCODE' 380.9 000CDE MAX: DW $+2 380.10 000CDE ELSE 380.11 000CDE .... MAX: DW DOCOLON 380.12 000CE0 ENDIF 380.13 000CE0 ENDM 381 000CE0 ............ DW TWODUP,LESS,qbran 382 000CE6 DEST MAX1 382.1 000CE6 0400 DW MAX1-$ 382.2 000CE8 ENDM 383 000CE8 .... DW SWAP 384 000CEA ........ MAX1: DW DROP,EXIT 385 000CEE 386 000CEE ;C MIN n1 n2 -- n3 signed minimum 387 000CEE ; 2DUP > IF SWAP THEN DROP ; 388 000CEE HEADER MIN,3,'MIN',DOCOLON 388.1 000000 PUBLIC MIN 388.2 000CEE .... DW link 388.3 000CF0 FF DB 0FFh ; not immediate 388.4 000CF1 link SET $ 388.5 000CF1 03 DB 3 388.6 000CF2 4D494E DB 'MIN' 388.7 000CF5 00 EVEN 388.8 000CF6 IF 'DOCOLON'='DOCODE' 388.9 000CF6 MIN: DW $+2 388.10 000CF6 ELSE 388.11 000CF6 .... MIN: DW DOCOLON 388.12 000CF8 ENDIF 388.13 000CF8 ENDM 389 000CF8 ............ DW TWODUP,GREATER,qbran 390 000CFE DEST MIN1 390.1 000CFE 0400 DW MIN1-$ 390.2 000D00 ENDM 391 000D00 .... DW SWAP 392 000D02 ........ MIN1: DW DROP,EXIT 393 000D06 394 000D06 ; DOUBLE OPERATORS ============================= = 395 000D06 396 000D06 ;C 2@ a-addr -- x1 x2 fetch 2 cells 397 000D06 ; DUP CELL+ @ SWAP @ ; 398 000D06 ; the lower address will appear on top of stack 399 000D06 HEADER TWOFETCH,2,'2@',DOCOLON 399.1 000000 PUBLIC TWOFETCH 399.2 000D06 .... DW link 399.3 000D08 FF DB 0FFh ; not immediate 399.4 000D09 link SET $ 399.5 000D09 02 DB 2 399.6 000D0A 3240 DB '2@' 399.7 000D0C EVEN 399.8 000D0C IF 'DOCOLON'='DOCODE' 399.9 000D0C TWOFETCH: DW $+2 399.10 000D0C ELSE 399.11 000D0C .... TWOFETCH: DW DOCOLON 399.12 000D0E ENDIF 399.13 000D0E ENDM - 4e-configLP - Page 90 400 000D0E ............* DW DUP,CELLPLUS,FETCH,SWAP,FETCH,EXIT 401 000D1A 402 000D1A ;C 2! x1 x2 a-addr -- store 2 cells 403 000D1A ; SWAP OVER ! CELL+ ! ; 404 000D1A ; the top of stack is stored at the lower adrs 405 000D1A HEADER TWOSTORE,2,'2!',DOCOLON 405.1 000000 PUBLIC TWOSTORE 405.2 000D1A .... DW link 405.3 000D1C FF DB 0FFh ; not immediate 405.4 000D1D link SET $ 405.5 000D1D 02 DB 2 405.6 000D1E 3221 DB '2!' 405.7 000D20 EVEN 405.8 000D20 IF 'DOCOLON'='DOCODE' 405.9 000D20 TWOSTORE: DW $+2 405.10 000D20 ELSE 405.11 000D20 .... TWOSTORE: DW DOCOLON 405.12 000D22 ENDIF 405.13 000D22 ENDM 406 000D22 ............* DW SWAP,OVER,STORE,CELLPLUS,STORE,EXIT 407 000D2E 408 000D2E ;C 2DROP x1 x2 -- drop 2 cells 409 000D2E ; DROP DROP ; 410 000D2E HEADER TWODROP,5,'2DROP',DOCOLON 410.1 000000 PUBLIC TWODROP 410.2 000D2E .... DW link 410.3 000D30 FF DB 0FFh ; not immediate 410.4 000D31 link SET $ 410.5 000D31 05 DB 5 410.6 000D32 3244524F50 DB '2DROP' 410.7 000D37 00 EVEN 410.8 000D38 IF 'DOCOLON'='DOCODE' 410.9 000D38 TWODROP: DW $+2 410.10 000D38 ELSE 410.11 000D38 .... TWODROP: DW DOCOLON 410.12 000D3A ENDIF 410.13 000D3A ENDM 411 000D3A ............ DW DROP,DROP,EXIT 412 000D40 413 000D40 ;C 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2 cells 414 000D40 ; OVER OVER ; 415 000D40 HEADER TWODUP,4,'2DUP',DOCOLON 415.1 000000 PUBLIC TWODUP 415.2 000D40 .... DW link 415.3 000D42 FF DB 0FFh ; not immediate 415.4 000D43 link SET $ 415.5 000D43 04 DB 4 415.6 000D44 32445550 DB '2DUP' 415.7 000D48 EVEN 415.8 000D48 IF 'DOCOLON'='DOCODE' 415.9 000D48 TWODUP: DW $+2 415.10 000D48 ELSE 415.11 000D48 .... TWODUP: DW DOCOLON 415.12 000D4A ENDIF 415.13 000D4A ENDM 416 000D4A ............ DW OVER,OVER,EXIT 417 000D50 418 000D50 ;C 2SWAP x1 x2 x3 x4 -- x3 x4 x1 x2 per diagram 419 000D50 ; ROT >R ROT R> ; 420 000D50 HEADER TWOSWAP,5,'2SWAP',DOCOLON 420.1 000000 PUBLIC TWOSWAP 420.2 000D50 .... DW link 420.3 000D52 FF DB 0FFh ; not immediate 420.4 000D53 link SET $ 420.5 000D53 05 DB 5 420.6 000D54 3253574150 DB '2SWAP' 420.7 000D59 00 EVEN 420.8 000D5A IF 'DOCOLON'='DOCODE' 420.9 000D5A TWOSWAP: DW $+2 420.10 000D5A ELSE 420.11 000D5A .... TWOSWAP: DW DOCOLON 420.12 000D5C ENDIF 420.13 000D5C ENDM 421 000D5C ............* DW ROT,TOR,ROT,RFROM,EXIT 422 000D66 - 4e-configLP - Page 91 423 000D66 ;C 2OVER x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 424 000D66 ; >R >R 2DUP R> R> 2SWAP ; 425 000D66 HEADER TWOOVER,5,'2OVER',DOCOLON 425.1 000000 PUBLIC TWOOVER 425.2 000D66 .... DW link 425.3 000D68 FF DB 0FFh ; not immediate 425.4 000D69 link SET $ 425.5 000D69 05 DB 5 425.6 000D6A 324F564552 DB '2OVER' 425.7 000D6F 00 EVEN 425.8 000D70 IF 'DOCOLON'='DOCODE' 425.9 000D70 TWOOVER: DW $+2 425.10 000D70 ELSE 425.11 000D70 .... TWOOVER: DW DOCOLON 425.12 000D72 ENDIF 425.13 000D72 ENDM 426 000D72 ............* DW TOR,TOR,TWODUP,RFROM,RFROM 427 000D7C ........ DW TWOSWAP,EXIT 428 000D80 429 000D80 ; INPUT/OUTPUT ================================= = 430 000D80 431 000000 PUBLIC DOCR 432 000D80 433 000D80 ;C COUNT c-addr1 -- c-addr2 u counted->adr/le n 434 000D80 ; DUP CHAR+ SWAP C@ ; 435 000D80 HEADER COUNT,5,'COUNT',DOCOLON 435.1 000000 PUBLIC COUNT 435.2 000D80 .... DW link 435.3 000D82 FF DB 0FFh ; not immediate 435.4 000D83 link SET $ 435.5 000D83 05 DB 5 435.6 000D84 434F554E54 DB 'COUNT' 435.7 000D89 00 EVEN 435.8 000D8A IF 'DOCOLON'='DOCODE' 435.9 000D8A COUNT: DW $+2 435.10 000D8A ELSE 435.11 000D8A .... COUNT: DW DOCOLON 435.12 000D8C ENDIF 435.13 000D8C ENDM 436 000D8C ............* DW DUP,CHARPLUS,SWAP,CFETCH,EXIT 437 000D96 438 000D96 ;C DOCR -- output newline 439 000D96 ; 0D EMIT 0A EMIT ; 440 000D96 HEADER DOCR,4,'DOCR',DOCOLON 440.1 000D96 PUBLIC DOCR 440.2 000D96 .... DW link 440.3 000D98 FF DB 0FFh ; not immediate 440.4 000D99 link SET $ 440.5 000D99 04 DB 4 440.6 000D9A 444F4352 DB 'DOCR' 440.7 000D9E EVEN 440.8 000D9E IF 'DOCOLON'='DOCODE' 440.9 000D9E DOCR: DW $+2 440.10 000D9E ELSE 440.11 000D9E .... DOCR: DW DOCOLON 440.12 000DA0 ENDIF 440.13 000DA0 ENDM 441 000DA0 ....0D00....* DW lit,0dh,EMIT,lit,0ah,EMIT,EXIT 442 000DAE 443 000DAE ;C CR -- output newline 444 000DAE ; userkey @ execute ; 445 000DAE HEADER CR,2,'CR',DOCOLON 445.1 000000 PUBLIC CR 445.2 000DAE .... DW link 445.3 000DB0 FF DB 0FFh ; not immediate 445.4 000DB1 link SET $ 445.5 000DB1 02 DB 2 445.6 000DB2 4352 DB 'CR' 445.7 000DB4 EVEN 445.8 000DB4 IF 'DOCOLON'='DOCODE' 445.9 000DB4 CR: DW $+2 445.10 000DB4 ELSE 445.11 000DB4 .... CR: DW DOCOLON 445.12 000DB6 ENDIF - 4e-configLP - Page 92 445.13 000DB6 ENDM 446 000DB6 ............* DW NEWLINE,FETCH,EXECUTE,EXIT 447 000DBE 448 000DBE ;C SPACE -- output a space 449 000DBE ; BL EMIT ; 450 000DBE HEADER SPACE,5,'SPACE',DOCOLON 450.1 000000 PUBLIC SPACE 450.2 000DBE .... DW link 450.3 000DC0 FF DB 0FFh ; not immediate 450.4 000DC1 link SET $ 450.5 000DC1 05 DB 5 450.6 000DC2 5350414345 DB 'SPACE' 450.7 000DC7 00 EVEN 450.8 000DC8 IF 'DOCOLON'='DOCODE' 450.9 000DC8 SPACE: DW $+2 450.10 000DC8 ELSE 450.11 000DC8 .... SPACE: DW DOCOLON 450.12 000DCA ENDIF 450.13 000DCA ENDM 451 000DCA ............ DW BLANK,EMIT,EXIT 452 000DD0 453 000DD0 ;C SPACES n -- output n spaces 454 000DD0 ; BEGIN DUP WHILE SPACE 1- REPEAT DROP ; 455 000DD0 HEADER SPACES,6,'SPACES',DOCOLON 455.1 000000 PUBLIC SPACES 455.2 000DD0 .... DW link 455.3 000DD2 FF DB 0FFh ; not immediate 455.4 000DD3 link SET $ 455.5 000DD3 06 DB 6 455.6 000DD4 535041434553 DB 'SPACES' 455.7 000DDA EVEN 455.8 000DDA IF 'DOCOLON'='DOCODE' 455.9 000DDA SPACES: DW $+2 455.10 000DDA ELSE 455.11 000DDA .... SPACES: DW DOCOLON 455.12 000DDC ENDIF 455.13 000DDC ENDM 456 000DDC ........ SPCS1: DW DUP,qbran 457 000DE0 DEST SPCS2 457.1 000DE0 0A00 DW SPCS2-$ 457.2 000DE2 ENDM 458 000DE2 ............ DW SPACE,ONEMINUS,bran 459 000DE8 DEST SPCS1 459.1 000DE8 F4FF DW SPCS1-$ 459.2 000DEA ENDM 460 000DEA ........ SPCS2: DW DROP,EXIT 461 000DEE 462 000DEE ;Z umin u1 u2 -- u unsigned minimum 463 000DEE ; 2DUP U> IF SWAP THEN DROP ; 464 000DEE HEADER UMIN,4,'UMIN',DOCOLON 464.1 000000 PUBLIC UMIN 464.2 000DEE .... DW link 464.3 000DF0 FF DB 0FFh ; not immediate 464.4 000DF1 link SET $ 464.5 000DF1 04 DB 4 464.6 000DF2 554D494E DB 'UMIN' 464.7 000DF6 EVEN 464.8 000DF6 IF 'DOCOLON'='DOCODE' 464.9 000DF6 UMIN: DW $+2 464.10 000DF6 ELSE 464.11 000DF6 .... UMIN: DW DOCOLON 464.12 000DF8 ENDIF 464.13 000DF8 ENDM 465 000DF8 ............ DW TWODUP,UGREATER,qbran 466 000DFE DEST UMIN1 466.1 000DFE 0400 DW UMIN1-$ 466.2 000E00 ENDM 467 000E00 .... DW SWAP 468 000E02 ........ UMIN1: DW DROP,EXIT 469 000E06 470 000E06 ;Z umax u1 u2 -- u unsigned maximum 471 000E06 ; 2DUP U< IF SWAP THEN DROP ; 472 000E06 HEADER UMAX,4,'UMAX',DOCOLON 472.1 000000 PUBLIC UMAX 472.2 000E06 .... DW link 472.3 000E08 FF DB 0FFh ; not immediate 472.4 000E09 link SET $ - 4e-configLP - Page 93 472.5 000E09 04 DB 4 472.6 000E0A 554D4158 DB 'UMAX' 472.7 000E0E EVEN 472.8 000E0E IF 'DOCOLON'='DOCODE' 472.9 000E0E UMAX: DW $+2 472.10 000E0E ELSE 472.11 000E0E .... UMAX: DW DOCOLON 472.12 000E10 ENDIF 472.13 000E10 ENDM 473 000E10 ............ DW TWODUP,ULESS,qbran 474 000E16 DEST UMAX1 474.1 000E16 0400 DW UMAX1-$ 474.2 000E18 ENDM 475 000E18 .... DW SWAP 476 000E1A ........ UMAX1: DW DROP,EXIT 477 000E1E 478 000E1E ; C .ERR# n -- print error number 479 000E1E HEADER DOTERRN,5,'.ERR#',DOCOLON 479.1 000000 PUBLIC DOTERRN 479.2 000E1E .... DW link 479.3 000E20 FF DB 0FFh ; not immediate 479.4 000E21 link SET $ 479.5 000E21 05 DB 5 479.6 000E22 2E45525223 DB '.ERR#' 479.7 000E27 00 EVEN 479.8 000E28 IF 'DOCOLON'='DOCODE' 479.9 000E28 DOTERRN: DW $+2 479.10 000E28 ELSE 479.11 000E28 .... DOTERRN: DW DOCOLON 479.12 000E2A ENDIF 479.13 000E2A ENDM 480 000E2A ....1500.... DW lit,15H,EMIT ; emit a NAK ($15) 481 000E30 ....3F00.... DW lit,3FH,EMIT 482 000E36 ............* DW BASE,FETCH,TOR,DECIMAL 483 000E3E .... DW DOT 484 000E40 ............ DW RFROM,BASE,STORE 485 000E46 .... DW EXIT 486 000E48 487 000E48 ; C ?TIB adr1 adr2 -- error if line too long 488 000E48 HEADERLESS QTIB,4,'?TIB',DOCOLON 488.1 000000 PUBLIC QTIB 488.2 000E48 IF 'DOCOLON'='DOCODE' 488.3 000E48 QTIB: DW $+2 488.4 000E48 ELSE 488.5 000E48 .... QTIB: DW DOCOLON 488.6 000E4A ENDIF 488.7 000E4A ENDM 489 000E4A ........ DW GREATER,qbran 490 000E4E DEST QTIB1 490.1 000E4E 0C00 DW QTIB1-$ 490.2 000E50 ENDM 491 000E50 ....9601.... DW lit,406,DOTERRN 492 000E56 ........ DW CR,ABORT 493 000E5A .... QTIB1: DW EXIT 494 000E5C 495 000E5C ;C ACCEPT c-addr +n -- +n' get line from term'l 496 000E5C ; OVER + 1- OVER -- sa ea a 497 000E5C ; BEGIN KEY -- sa ea a c 498 000E5C ; DUP 0D <> WHILE 499 000E5C ; DUP EMIT -- sa ea a c 500 000E5C ; DUP 8 = IF DROP 1- >R OVER R> UMAX 501 000E5C ; ELSE OVER C! 1+ OVER UMIN 502 000E5C ; THEN -- sa ea a 503 000E5C ; REPEAT -- sa ea a c 504 000E5C ; DROP NIP SWAP - ; 505 000E5C HEADER ACCEPT,6,'ACCEPT',DOCOLON 505.1 000000 PUBLIC ACCEPT 505.2 000E5C .... DW link 505.3 000E5E FF DB 0FFh ; not immediate 505.4 000E5F link SET $ 505.5 000E5F 06 DB 6 505.6 000E60 414343455054 DB 'ACCEPT' 505.7 000E66 EVEN 505.8 000E66 IF 'DOCOLON'='DOCODE' - 4e-configLP - Page 94 505.9 000E66 ACCEPT: DW $+2 505.10 000E66 ELSE 505.11 000E66 .... ACCEPT: DW DOCOLON 505.12 000E68 ENDIF 505.13 000E68 ENDM 506 000E68 ............* DW OVER,PLUS,ONEMINUS,OVER 507 000E70 ACC1: ; DW KEY,DUP,lit,0DH,NOTEQUAL,qbran 508 000E70 .... DW KEY 509 000E72 ........0D00* DW DUP,lit,0DH,NOTEQUAL ; ( -- c f ) CR 510 000E7A ; DW OVER,lit,0AH,NOTEQUAL ; ( -- c f f ) LF 511 000E7A ; DW ANDD 512 000E7A .... DW qbran 513 000E7C DEST ACC5 513.1 000E7C 3A00 DW ACC5-$ 513.2 000E7E ENDM 514 000E7E ........ DW DUP,EMIT 515 000E82 ; DW DUP,STORELEDS ; testing 516 000E82 ........0800* DW DUP,lit,8,EQUAL,qbran ;mk BS received? 517 000E8C DEST ACC3 517.1 000E8C 1A00 DW ACC3-$ 517.2 000E8E ENDM 518 000E8E ............* DW DROP,ONEMINUS,TOR,OVER,RFROM,UMAX ;mk backspace handling 519 000E9A ........0800* DW SPACE,lit,8,EMIT ;mk $08 == BS (for tera term and hyterterminal) 520 000EA2 .... DW bran 521 000EA4 DEST ACC4 521.1 000EA4 0E00 DW ACC4-$ 521.2 000EA6 ENDM 522 000EA6 ; ( -- sa ea a c ) 523 000EA6 ............ ACC3: DW OVER,CSTORE,ONEPLUS 524 000EAC ; ( -- sa ea a+1 ) 525 000EAC ; DW OVER,UMIN ; einfacher zähler stillstand 526 000EAC ............ DW TWODUP,SWAP,QTIB ; line too long? 527 000EB2 .... ACC4: DW bran 528 000EB4 DEST ACC1 528.1 000EB4 BCFF DW ACC1-$ 528.2 000EB6 ENDM 529 000EB6 ............*ACC5: DW DROP,NIP,SWAP,MINUS,EXIT 530 000EC0 531 000EC0 ;C TYPE c-addr +n -- type line to term'l 532 000EC0 ; ?DUP IF 533 000EC0 ; OVER + SWAP DO I C@ EMIT LOOP 534 000EC0 ; ELSE DROP THEN ; 535 000EC0 HEADER TYP,4,'TYPE',DOCOLON 535.1 000000 PUBLIC TYP 535.2 000EC0 .... DW link 535.3 000EC2 FF DB 0FFh ; not immediate 535.4 000EC3 link SET $ 535.5 000EC3 04 DB 4 535.6 000EC4 54595045 DB 'TYPE' 535.7 000EC8 EVEN 535.8 000EC8 IF 'DOCOLON'='DOCODE' 535.9 000EC8 TYP: DW $+2 535.10 000EC8 ELSE 535.11 000EC8 .... TYP: DW DOCOLON 535.12 000ECA ENDIF 535.13 000ECA ENDM 536 000ECA ........ DW QDUP,qbran 537 000ECE DEST TYP4 537.1 000ECE 1800 DW TYP4-$ 537.2 000ED0 ENDM 538 000ED0 ............* DW OVER,PLUS,SWAP,xdo 539 000ED8 ............*TYP3: DW II,CFETCH,EMIT,xloop 540 000EE0 DEST TYP3 540.1 000EE0 F8FF DW TYP3-$ 540.2 000EE2 ENDM 541 000EE2 .... DW bran 542 000EE4 DEST TYP5 542.1 000EE4 0400 DW TYP5-$ 542.2 000EE6 ENDM - 4e-configLP - Page 95 543 000EE6 .... TYP4: DW DROP 544 000EE8 .... TYP5: DW EXIT 545 000EEA 546 000EEA #define ITYPE TYP 547 000EEA #define ICOUNT COUNT 548 000EEA 549 000EEA ; HARVARD MODEL EXTENSIONS (split Code & Data) 550 000EEA 551 000EEA /* 552 000EEA ;Z ICOUNT c-addr1 -- c-addr2 u counted->adr/le n 553 000EEA ; DUP CHAR+ SWAP IC@ ; from Code space 554 000EEA HEADER ICOUNT,6,'ICOUNT',DOCOLON 555 000EEA DW DUP,CHARPLUS,SWAP,ICFETCH,EXIT 556 000EEA 557 000EEA ;Z ITYPE c-addr +n -- type line to term'l 558 000EEA ; ?DUP IF from Code space 559 000EEA ; OVER + SWAP DO I IC@ EMIT LOOP 560 000EEA ; ELSE DROP THEN ; 561 000EEA HEADER ITYPE,5,'ITYPE',DOCOLON 562 000EEA DW QDUP,qbran 563 000EEA DEST ITYP4 564 000EEA DW OVER,PLUS,SWAP,xdo 565 000EEA ITYP3: DW II,ICFETCH,EMIT,xloop 566 000EEA DEST ITYP3 567 000EEA DW bran 568 000EEA DEST ITYP5 569 000EEA ITYP4: DW DROP 570 000EEA ITYP5: DW EXIT 571 000EEA */ 572 000EEA 573 000EEA 574 000EEA ;Z (IS") -- c-addr u run-time code for S" 575 000EEA ; R> ICOUNT 2DUP + ALIGNED >R ; 576 000EEA ; Harvard model, for string stored in Code space 577 000EEA ; e.g. as used by ." 578 000EEA HEADER XISQUOTE,5,'(IS")',DOCOLON 578.1 000000 PUBLIC XISQUOTE 578.2 000EEA .... DW link 578.3 000EEC FF DB 0FFh ; not immediate 578.4 000EED link SET $ 578.5 000EED 05 DB 5 578.6 000EEE 2849532229 DB '(IS")' 578.7 000EF3 00 EVEN 578.8 000EF4 IF 'DOCOLON'='DOCODE' 578.9 000EF4 XISQUOTE: DW $+2 578.10 000EF4 ELSE 578.11 000EF4 .... XISQUOTE: DW DOCOLON 578.12 000EF6 ENDIF 578.13 000EF6 ENDM 579 000EF6 ............* DW RFROM,ICOUNT,TWODUP,PLUS,ALIGNED,TOR 580 000F02 .... DW EXIT 581 000F04 582 000F04 ;Z (S") -- c-addr u run-time code for S" 583 000F04 ; R@ I@ get Data address 584 000F04 ; R> CELL+ DUP IC@ CHAR+ -- Dadr Radr+2 n+1 585 000F04 ; 2DUP + ALIGNED >R -- Dadr Iadr n+1 586 000F04 ; >R OVER R> I->D -- Dadr 587 000F04 ; COUNT ; 588 000F04 ; Harvard model, for string stored in Code space 589 000F04 ; which is copied to Data space. 590 000F04 HEADER XSQUOTE,4,'(S")',DOCOLON 590.1 000000 PUBLIC XSQUOTE 590.2 000F04 .... DW link 590.3 000F06 FF DB 0FFh ; not immediate 590.4 000F07 link SET $ 590.5 000F07 04 DB 4 - 4e-configLP - Page 96 590.6 000F08 28532229 DB '(S")' 590.7 000F0C EVEN 590.8 000F0C IF 'DOCOLON'='DOCODE' 590.9 000F0C XSQUOTE: DW $+2 590.10 000F0C ELSE 590.11 000F0C .... XSQUOTE: DW DOCOLON 590.12 000F0E ENDIF 590.13 000F0E ENDM 591 000F0E ........ DW RFETCH,IFETCH 592 000F12 ............* DW RFROM,CELLPLUS,DUP,ICFETCH,CHARPLUS 593 000F1C ............* DW TWODUP,PLUS,ALIGNED,TOR 594 000F24 ............* DW TOR,OVER,RFROM,ITOD,COUNT,EXIT 595 000F30 596 000F30 ;Z IS" -- compile in-line string 597 000F30 ; COMPILE (IS") [ HEX ] 598 000F30 ; 22 PARSE ( -- c-addr n ) 599 000F30 ; DUP >R IC, IHERE R@ D->I 600 000F30 ; R> IALLOT ALIGN ; IMMEDIATE 601 000F30 ; Harvard model: string is stored in Code space 602 000F30 IMMED ISQUOTE,3,'IS"',DOCOLON 602.1 000000 PUBLIC ISQUOTE 602.2 000F30 .... DW link 602.3 000F32 FE DB 0FEh // ; immediate (LSB=0) 602.4 000F33 link SET $ 602.5 000F33 03 DB 3 602.6 000F34 495322 DB 'IS"' 602.7 000F37 00 EVEN 602.8 000F38 IF 'DOCOLON'='DOCODE' 602.9 000F38 ISQUOTE: DW $+2 602.10 000F38 ELSE 602.11 000F38 .... ISQUOTE: DW DOCOLON 602.12 000F3A ENDIF 602.13 000F3A ENDM 603 000F3A ............ DW lit,XISQUOTE,COMMAXT 604 000F40 ....2200.... DW lit,22H,PARSE 605 000F46 ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI 606 000F52 ............* DW RFROM,IALLOT,ALIGNN,EXIT 607 000F5A 608 000F5A ;Z IS" -- compile in-line string OLD DEF'N 609 000F5A ; COMPILE (IS") [ HEX ] 610 000F5A ; 22 IWORD 611 000F5A ; IC@ 1+ ALIGNED IALLOT ; IMMEDIATE 612 000F5A ; Harvard model: string is stored in Code space 613 000F5A ; IMMED ISQUOTE,3,'IS"',DOCOLON 614 000F5A ; DW lit,XISQUOTE,COMMAXT 615 000F5A ; DW lit,22H,IWORD 616 000F5A ; DW ICFETCH,ONEPLUS,ALIGNED,IALLOT,EXIT 617 000F5A 618 000F5A ;C S" -- compile in-line string 619 000F5A ; COMPILE (S") [ HEX ] 620 000F5A ; HERE I, data address 621 000F5A ; 22 PARSE ( -- c-addr n ) 622 000F5A ; DUP >R IC, IHERE R@ D->I 623 000F5A ; R@ 1+ ALLOT reserve RAM space 624 000F5A ; R> IALLOT ALIGN ; IMMEDIATE 625 000F5A ; Harvard model: string is stored in Code space 626 000F5A IMMED SQUOTE,2,'S"',DOCOLON 626.1 000000 PUBLIC SQUOTE 626.2 000F5A .... DW link 626.3 000F5C FE DB 0FEh // ; immediate (LSB=0) 626.4 000F5D link SET $ 626.5 000F5D 02 DB 2 626.6 000F5E 5322 DB 'S"' 626.7 000F60 EVEN 626.8 000F60 IF 'DOCOLON'='DOCODE' 626.9 000F60 SQUOTE: DW $+2 626.10 000F60 ELSE 626.11 000F60 .... SQUOTE: DW DOCOLON 626.12 000F62 ENDIF - 4e-configLP - Page 97 626.13 000F62 ENDM 627 000F62 ............ DW lit,XSQUOTE,COMMAXT 628 000F68 ............* DW HERE,ICOMMA,lit,22H,PARSE 629 000F72 ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI 630 000F7E ............ DW RFETCH,ONEPLUS,ALLOT 631 000F84 ............* DW RFROM,IALLOT,ALIGNN,EXIT 632 000F8C 633 000F8C ;C S" -- compile in-line string OLD DEF'N 634 000F8C ; COMPILE (S") [ HEX ] 635 000F8C ; HERE I, data address 636 000F8C ; 22 IWORD 637 000F8C ; IC@ 1+ ALIGNED 638 000F8C ; DUP ALLOT IALLOT ; IMMEDIATE 639 000F8C ; Harvard model: string is stored in Code space 640 000F8C ; IMMED SQUOTE,2,'S"',DOCOLON 641 000F8C ; DW lit,XSQUOTE,COMMAXT 642 000F8C ; DW HERE,ICOMMA,lit,22H,IWORD 643 000F8C ; DW ICFETCH,ONEPLUS,ALIGNED 644 000F8C ; DW DUP,ALLOT,IALLOT,EXIT 645 000F8C 646 000F8C ;C ." -- compile string to print 647 000F8C ; POSTPONE IS" POSTPONE ITYPE ; IMMEDIATE 648 000F8C IMMED DOTQUOTE,2,'."',DOCOLON 648.1 000000 PUBLIC DOTQUOTE 648.2 000F8C .... DW link 648.3 000F8E FE DB 0FEh // ; immediate (LSB=0) 648.4 000F8F link SET $ 648.5 000F8F 02 DB 2 648.6 000F90 2E22 DB '."' 648.7 000F92 EVEN 648.8 000F92 IF 'DOCOLON'='DOCODE' 648.9 000F92 DOTQUOTE: DW $+2 648.10 000F92 ELSE 648.11 000F92 .... DOTQUOTE: DW DOCOLON 648.12 000F94 ENDIF 648.13 000F94 ENDM 649 000F94 .... DW ISQUOTE 650 000F96 ............ DW lit,ITYPE,COMMAXT 651 000F9C .... DW EXIT 652 000F9E 653 000F9E ;Z IWORD c -- c-addr WORD to Code space 654 000F9E ; WORD 655 000F9E ; IHERE TUCK OVER C@ CHAR+ D->I ; 656 000F9E HEADER IWORD,5,'IWORD',DOCOLON 656.1 000000 PUBLIC IWORD 656.2 000F9E .... DW link 656.3 000FA0 FF DB 0FFh ; not immediate 656.4 000FA1 link SET $ 656.5 000FA1 05 DB 5 656.6 000FA2 49574F5244 DB 'IWORD' 656.7 000FA7 00 EVEN 656.8 000FA8 IF 'DOCOLON'='DOCODE' 656.9 000FA8 IWORD: DW $+2 656.10 000FA8 ELSE 656.11 000FA8 .... IWORD: DW DOCOLON 656.12 000FAA ENDIF 656.13 000FAA ENDM 657 000FAA .... DW WORDD 658 000FAC ............*IWORD1: DW IHERE,TUCK,OVER,CFETCH 659 000FB4 ............ DW CHARPLUS,DTOI,EXIT 660 000FBA 661 000FBA ;Z IWORDC c -- c-addr maybe capitalize WORD to Code space 662 000FBA ; WORD CAPITALIZE 663 000FBA ; IHERE TUCK OVER C@ CHAR+ D->I ; 664 000FBA ; HEADER IWORDC,6,'IWORDC',DOCOLON 665 000FBA HEADLESS IWORDC, DOCOLON 665.1 000000 PUBLIC IWORDC 665.2 000FBA IF 'DOCOLON'='DOCODE' 665.3 000FBA IWORDC: DW $+2 665.4 000FBA ELSE 665.5 000FBA .... IWORDC: DW DOCOLON 665.6 000FBC ENDIF - 4e-configLP - Page 98 665.7 000FBC ENDM 666 000FBC ........ DW WORDD, CAPITALIZE 667 000FC0 .... DW bran 668 000FC2 DEST IWORD1 668.1 000FC2 EAFF DW IWORD1-$ 668.2 000FC4 ENDM 669 000FC4 670 000FC4 ; SEPARATE HEADER EXTENSIONS ARE NOT USED 671 000FC4 #define HCOUNT ICOUNT 672 000FC4 #define HTYPE ITYPE 673 000FC4 #define HWORD IWORDC 674 000FC4 675 000FC4 ; NUMERIC OUTPUT =============================== = 676 000FC4 ; Numeric conversion is done l.s.digit first, so 677 000FC4 ; the output buffer is built backwards in memory. 678 000FC4 679 000FC4 ; Some double-precision arithmetic operators are 680 000FC4 ; needed to implement ANSI numeric conversion. 681 000FC4 682 000FC4 ;Z UD/MOD ud1 u2 -- u3 ud4 32/16->32 divide 683 000FC4 ; >R 0 R@ UM/MOD ROT ROT R> UM/MOD ROT ; 684 000FC4 HEADER UDSLASHMOD,6,'UD/MOD',DOCOLON 684.1 000000 PUBLIC UDSLASHMOD 684.2 000FC4 .... DW link 684.3 000FC6 FF DB 0FFh ; not immediate 684.4 000FC7 link SET $ 684.5 000FC7 06 DB 6 684.6 000FC8 55442F4D4F44 DB 'UD/MOD' 684.7 000FCE EVEN 684.8 000FCE IF 'DOCOLON'='DOCODE' 684.9 000FCE UDSLASHMOD: DW $+2 684.10 000FCE ELSE 684.11 000FCE .... UDSLASHMOD: DW DOCOLON 684.12 000FD0 ENDIF 684.13 000FD0 ENDM 685 000FD0 ............* DW TOR,ZERO,RFETCH,UMSLASHMOD,ROT,ROT 686 000FDC ............* DW RFROM,UMSLASHMOD,ROT,EXIT 687 000FE4 688 000FE4 ;Z UD* ud1 d2 -- ud3 32*16->32 multiply 689 000FE4 ; DUP >R UM* DROP SWAP R> UM* ROT + ; 690 000FE4 HEADER UDSTAR,3,'UD*',DOCOLON 690.1 000000 PUBLIC UDSTAR 690.2 000FE4 .... DW link 690.3 000FE6 FF DB 0FFh ; not immediate 690.4 000FE7 link SET $ 690.5 000FE7 03 DB 3 690.6 000FE8 55442A DB 'UD*' 690.7 000FEB 00 EVEN 690.8 000FEC IF 'DOCOLON'='DOCODE' 690.9 000FEC UDSTAR: DW $+2 690.10 000FEC ELSE 690.11 000FEC .... UDSTAR: DW DOCOLON 690.12 000FEE ENDIF 690.13 000FEE ENDM 691 000FEE ............* DW DUP,TOR,UMSTAR,DROP 692 000FF6 ............* DW SWAP,RFROM,UMSTAR,ROT,PLUS,EXIT 693 001002 694 001002 ;C HOLD char -- add char to output string 695 001002 ; -1 HP +! HP @ C! ; 696 001002 HEADER HOLD,4,'HOLD',DOCOLON 696.1 000000 PUBLIC HOLD 696.2 001002 .... DW link 696.3 001004 FF DB 0FFh ; not immediate 696.4 001005 link SET $ 696.5 001005 04 DB 4 696.6 001006 484F4C44 DB 'HOLD' 696.7 00100A EVEN 696.8 00100A IF 'DOCOLON'='DOCODE' 696.9 00100A HOLD: DW $+2 - 4e-configLP - Page 99 696.10 00100A ELSE 696.11 00100A .... HOLD: DW DOCOLON 696.12 00100C ENDIF 696.13 00100C ENDM 697 00100C ....FFFF....* DW lit,-1,HP,PLUSSTORE 698 001014 ............* DW HP,FETCH,CSTORE,EXIT 699 00101C 700 00101C ;C <# -- begin numeric conversion 701 00101C ; PAD HP ! ; (initialize Hold Pointer) 702 00101C HEADER LESSNUM,2,'<#',DOCOLON 702.1 000000 PUBLIC LESSNUM 702.2 00101C .... DW link 702.3 00101E FF DB 0FFh ; not immediate 702.4 00101F link SET $ 702.5 00101F 02 DB 2 702.6 001020 3C23 DB '<#' 702.7 001022 EVEN 702.8 001022 IF 'DOCOLON'='DOCODE' 702.9 001022 LESSNUM: DW $+2 702.10 001022 ELSE 702.11 001022 .... LESSNUM: DW DOCOLON 702.12 001024 ENDIF 702.13 001024 ENDM 703 001024 ............* DW PAD,HP,STORE,EXIT 704 00102C 705 00102C ;Z >digit n -- c convert to 0..9A..Z 706 00102C ; [ HEX ] DUP 9 > 7 AND + 30 + ; 707 00102C HEADER TODIGIT,6,'>DIGIT',DOCOLON 707.1 000000 PUBLIC TODIGIT 707.2 00102C .... DW link 707.3 00102E FF DB 0FFh ; not immediate 707.4 00102F link SET $ 707.5 00102F 06 DB 6 707.6 001030 3E4449474954 DB '>DIGIT' 707.7 001036 EVEN 707.8 001036 IF 'DOCOLON'='DOCODE' 707.9 001036 TODIGIT: DW $+2 707.10 001036 ELSE 707.11 001036 .... TODIGIT: DW DOCOLON 707.12 001038 ENDIF 707.13 001038 ENDM 708 001038 ........0900* DW DUP,lit,9,GREATER,lit,7,ANDD,PLUS 709 001048 ....3000....* DW lit,30H,PLUS,EXIT 710 001050 711 001050 ;C # ud1 -- ud2 convert 1 digit of output 712 001050 ; BASE @ UD/MOD ROT >digit HOLD ; 713 001050 HEADER NUM,1,'#',DOCOLON 713.1 000000 PUBLIC NUM 713.2 001050 .... DW link 713.3 001052 FF DB 0FFh ; not immediate 713.4 001053 link SET $ 713.5 001053 01 DB 1 713.6 001054 23 DB '#' 713.7 001055 00 EVEN 713.8 001056 IF 'DOCOLON'='DOCODE' 713.9 001056 NUM: DW $+2 713.10 001056 ELSE 713.11 001056 .... NUM: DW DOCOLON 713.12 001058 ENDIF 713.13 001058 ENDM 714 001058 ............* DW BASE,FETCH,UDSLASHMOD,ROT,TODIGIT 715 001062 ........ DW HOLD,EXIT 716 001066 717 001066 ;C #S ud1 -- ud2 convert remaining digits 718 001066 ; BEGIN # 2DUP OR 0= UNTIL ; 719 001066 HEADER NUMS,2,'#S',DOCOLON 719.1 000000 PUBLIC NUMS 719.2 001066 .... DW link 719.3 001068 FF DB 0FFh ; not immediate 719.4 001069 link SET $ 719.5 001069 02 DB 2 719.6 00106A 2353 DB '#S' 719.7 00106C EVEN 719.8 00106C IF 'DOCOLON'='DOCODE' 719.9 00106C NUMS: DW $+2 - 4e-configLP - Page 100 719.10 00106C ELSE 719.11 00106C .... NUMS: DW DOCOLON 719.12 00106E ENDIF 719.13 00106E ENDM 720 00106E ............*NUMS1: DW NUM,TWODUP,ORR,ZEROEQUAL,qbran 721 001078 DEST NUMS1 721.1 001078 F6FF DW NUMS1-$ 721.2 00107A ENDM 722 00107A .... DW EXIT 723 00107C 724 00107C ;C #> ud1 -- c-addr u end conv., get string 725 00107C ; 2DROP HP @ PAD OVER - ; 726 00107C HEADER NUMGREATER,2,'#>',DOCOLON 726.1 000000 PUBLIC NUMGREATER 726.2 00107C .... DW link 726.3 00107E FF DB 0FFh ; not immediate 726.4 00107F link SET $ 726.5 00107F 02 DB 2 726.6 001080 233E DB '#>' 726.7 001082 EVEN 726.8 001082 IF 'DOCOLON'='DOCODE' 726.9 001082 NUMGREATER: DW $+2 726.10 001082 ELSE 726.11 001082 .... NUMGREATER: DW DOCOLON 726.12 001084 ENDIF 726.13 001084 ENDM 727 001084 ............* DW TWODROP,HP,FETCH,PAD,OVER,MINUS,EXIT 728 001092 729 001092 ;C SIGN n -- add minus sign if n<0 730 001092 ; 0< IF 2D HOLD THEN ; 731 001092 HEADER SIGN,4,'SIGN',DOCOLON 731.1 000000 PUBLIC SIGN 731.2 001092 .... DW link 731.3 001094 FF DB 0FFh ; not immediate 731.4 001095 link SET $ 731.5 001095 04 DB 4 731.6 001096 5349474E DB 'SIGN' 731.7 00109A EVEN 731.8 00109A IF 'DOCOLON'='DOCODE' 731.9 00109A SIGN: DW $+2 731.10 00109A ELSE 731.11 00109A .... SIGN: DW DOCOLON 731.12 00109C ENDIF 731.13 00109C ENDM 732 00109C ........ DW ZEROLESS,qbran 733 0010A0 DEST SIGN1 733.1 0010A0 0800 DW SIGN1-$ 733.2 0010A2 ENDM 734 0010A2 ....2D00.... DW lit,2DH,HOLD 735 0010A8 .... SIGN1: DW EXIT 736 0010AA 737 0010AA ;C U. u -- display u unsigned 738 0010AA ; <# 0 #S #> TYPE SPACE ; 739 0010AA HEADER UDOT,2,'U.',DOCOLON 739.1 000000 PUBLIC UDOT 739.2 0010AA .... DW link 739.3 0010AC FF DB 0FFh ; not immediate 739.4 0010AD link SET $ 739.5 0010AD 02 DB 2 739.6 0010AE 552E DB 'U.' 739.7 0010B0 EVEN 739.8 0010B0 IF 'DOCOLON'='DOCODE' 739.9 0010B0 UDOT: DW $+2 739.10 0010B0 ELSE 739.11 0010B0 .... UDOT: DW DOCOLON 739.12 0010B2 ENDIF 739.13 0010B2 ENDM 740 0010B2 ............* DW LESSNUM,ZERO,NUMS,NUMGREATER,TYP 741 0010BC ........ DW SPACE,EXIT 742 0010C0 743 0010C0 ;C . n -- display n signed 744 0010C0 ; <# DUP ABS 0 #S ROT SIGN #> TYPE SPACE ; 745 0010C0 HEADER DOT,1,'.',DOCOLON 745.1 000000 PUBLIC DOT 745.2 0010C0 .... DW link - 4e-configLP - Page 101 745.3 0010C2 FF DB 0FFh ; not immediate 745.4 0010C3 link SET $ 745.5 0010C3 01 DB 1 745.6 0010C4 2E DB '.' 745.7 0010C5 00 EVEN 745.8 0010C6 IF 'DOCOLON'='DOCODE' 745.9 0010C6 DOT: DW $+2 745.10 0010C6 ELSE 745.11 0010C6 .... DOT: DW DOCOLON 745.12 0010C8 ENDIF 745.13 0010C8 ENDM 746 0010C8 ............* DW LESSNUM,DUP,ABBS,ZERO,NUMS 747 0010D2 ............* DW ROT,SIGN,NUMGREATER,TYP,SPACE,EXIT 748 0010DE 749 0010DE ;C DECIMAL -- set number base to decimal 750 0010DE ; 10 BASE ! ; 751 0010DE HEADER DECIMAL,7,'DECIMAL',DOCOLON 751.1 000000 PUBLIC DECIMAL 751.2 0010DE .... DW link 751.3 0010E0 FF DB 0FFh ; not immediate 751.4 0010E1 link SET $ 751.5 0010E1 07 DB 7 751.6 0010E2 444543494D41* DB 'DECIMAL' 751.7 0010E9 00 EVEN 751.8 0010EA IF 'DOCOLON'='DOCODE' 751.9 0010EA DECIMAL: DW $+2 751.10 0010EA ELSE 751.11 0010EA .... DECIMAL: DW DOCOLON 751.12 0010EC ENDIF 751.13 0010EC ENDM 752 0010EC ....0A00....* DW lit,10,BASE,STORE,EXIT 753 0010F6 754 0010F6 ;X HEX -- set number base to hex 755 0010F6 ; 16 BASE ! ; 756 0010F6 HEADER HEX,3,'HEX',DOCOLON 756.1 000000 PUBLIC HEX 756.2 0010F6 .... DW link 756.3 0010F8 FF DB 0FFh ; not immediate 756.4 0010F9 link SET $ 756.5 0010F9 03 DB 3 756.6 0010FA 484558 DB 'HEX' 756.7 0010FD 00 EVEN 756.8 0010FE IF 'DOCOLON'='DOCODE' 756.9 0010FE HEX: DW $+2 756.10 0010FE ELSE 756.11 0010FE .... HEX: DW DOCOLON 756.12 001100 ENDIF 756.13 001100 ENDM 757 001100 ....1000....* DW lit,16,BASE,STORE,EXIT 758 00110A 759 00110A ; DICTIONARY MANAGEMENT ======================== = 760 00110A 761 00110A ;C HERE -- addr returns dictionary ptr 762 00110A ; DP @ ; 763 00110A HEADER HERE,4,'HERE',DOCOLON 763.1 000000 PUBLIC HERE 763.2 00110A .... DW link 763.3 00110C FF DB 0FFh ; not immediate 763.4 00110D link SET $ 763.5 00110D 04 DB 4 763.6 00110E 48455245 DB 'HERE' 763.7 001112 EVEN 763.8 001112 IF 'DOCOLON'='DOCODE' 763.9 001112 HERE: DW $+2 763.10 001112 ELSE 763.11 001112 .... HERE: DW DOCOLON 763.12 001114 ENDIF 763.13 001114 ENDM 764 001114 ............ DW DDP,FETCH,EXIT 765 00111A 766 00111A ;C ALLOT n -- allocate n bytes in dict 767 00111A ; DP +! ; 768 00111A HEADER ALLOT,5,'ALLOT',DOCOLON - 4e-configLP - Page 102 768.1 000000 PUBLIC ALLOT 768.2 00111A .... DW link 768.3 00111C FF DB 0FFh ; not immediate 768.4 00111D link SET $ 768.5 00111D 05 DB 5 768.6 00111E 414C4C4F54 DB 'ALLOT' 768.7 001123 00 EVEN 768.8 001124 IF 'DOCOLON'='DOCODE' 768.9 001124 ALLOT: DW $+2 768.10 001124 ELSE 768.11 001124 .... ALLOT: DW DOCOLON 768.12 001126 ENDIF 768.13 001126 ENDM 769 001126 ............ DW DDP,PLUSSTORE,EXIT 770 00112C 771 00112C ;C , x -- append cell to dict 772 00112C ; HERE ! 1 CELLS ALLOT ; 773 00112C HEADER COMMA,1,',',DOCOLON 773.1 000000 PUBLIC COMMA 773.2 00112C .... DW link 773.3 00112E FF DB 0FFh ; not immediate 773.4 00112F link SET $ 773.5 00112F 01 DB 1 773.6 001130 2C DB ',' 773.7 001131 00 EVEN 773.8 001132 IF 'DOCOLON'='DOCODE' 773.9 001132 COMMA: DW $+2 773.10 001132 ELSE 773.11 001132 .... COMMA: DW DOCOLON 773.12 001134 ENDIF 773.13 001134 ENDM 774 001134 ............* DW HERE,STORE,lit,1,CELLS,ALLOT,EXIT 775 001142 776 001142 ;C C, char -- append char to dict 777 001142 ; HERE C! 1 CHARS ALLOT ; 778 001142 HEADER CCOMMA,2,'C,',DOCOLON 778.1 000000 PUBLIC CCOMMA 778.2 001142 .... DW link 778.3 001144 FF DB 0FFh ; not immediate 778.4 001145 link SET $ 778.5 001145 02 DB 2 778.6 001146 432C DB 'C,' 778.7 001148 EVEN 778.8 001148 IF 'DOCOLON'='DOCODE' 778.9 001148 CCOMMA: DW $+2 778.10 001148 ELSE 778.11 001148 .... CCOMMA: DW DOCOLON 778.12 00114A ENDIF 778.13 00114A ENDM 779 00114A ............* DW HERE,CSTORE,lit,1,CHARS,ALLOT,EXIT 780 001158 781 001158 ; The following additional words support the 782 001158 ; "Harvard" model, with separate address spaces 783 001158 ; for Instructions (Code) and Data. ANSI 784 001158 ; requires DP to manage the Data space, so a 785 001158 ; separate Instruction Dictionary Pointer, IDP, 786 001158 ; is added to manage the Code space. Also added: 787 001158 ; I@ IC@ I! IC! I->D D->I (in the primitives ) 788 001158 ; ITYPE ICOUNT IWORD (above) 789 001158 ; IHERE IALLOT I, IC, (below) 790 001158 ; It should be possible to convert the Harvard 791 001158 ; implementation to a combined-code-and-data 792 001158 ; system, by equating these words to their 793 001158 ; Data-space counterparts. 794 001158 795 001158 ; on MSP430 we have Neumann, but 796 001158 ; I! IC! D->I (in the primitives) work on flash 797 001158 ; I@ IC@ alias @ C@ 798 001158 ; I->D alias CMOVE 799 001158 ; IWORD works on flash - 4e-configLP - Page 103 800 001158 ; IHERE IALLOT I, IC, work on flash 801 001158 802 001158 ;C IHERE -- addr returns Code dictionary ptr 803 001158 ; IDP @ ; 804 001158 HEADER IHERE,5,'IHERE',DOCOLON 804.1 000000 PUBLIC IHERE 804.2 001158 .... DW link 804.3 00115A FF DB 0FFh ; not immediate 804.4 00115B link SET $ 804.5 00115B 05 DB 5 804.6 00115C 4948455245 DB 'IHERE' 804.7 001161 00 EVEN 804.8 001162 IF 'DOCOLON'='DOCODE' 804.9 001162 IHERE: DW $+2 804.10 001162 ELSE 804.11 001162 .... IHERE: DW DOCOLON 804.12 001164 ENDIF 804.13 001164 ENDM 805 001164 ............ DW IDP,FETCH,EXIT 806 00116A 807 00116A ;C IALLOT n -- allocate n bytes in Code dict 808 00116A ; IDP +! ; 809 00116A HEADER IALLOT,6,'IALLOT',DOCOLON 809.1 000000 PUBLIC IALLOT 809.2 00116A .... DW link 809.3 00116C FF DB 0FFh ; not immediate 809.4 00116D link SET $ 809.5 00116D 06 DB 6 809.6 00116E 49414C4C4F54 DB 'IALLOT' 809.7 001174 EVEN 809.8 001174 IF 'DOCOLON'='DOCODE' 809.9 001174 IALLOT: DW $+2 809.10 001174 ELSE 809.11 001174 .... IALLOT: DW DOCOLON 809.12 001176 ENDIF 809.13 001176 ENDM 810 001176 ............ DW IDP,PLUSSTORE,EXIT 811 00117C 812 00117C ;C I, x -- append cell to Code dict 813 00117C ; IHERE I! 1 CELLS IALLOT ; 814 00117C HEADER ICOMMA,2,'I,',DOCOLON 814.1 000000 PUBLIC ICOMMA 814.2 00117C .... DW link 814.3 00117E FF DB 0FFh ; not immediate 814.4 00117F link SET $ 814.5 00117F 02 DB 2 814.6 001180 492C DB 'I,' 814.7 001182 EVEN 814.8 001182 IF 'DOCOLON'='DOCODE' 814.9 001182 ICOMMA: DW $+2 814.10 001182 ELSE 814.11 001182 .... ICOMMA: DW DOCOLON 814.12 001184 ENDIF 814.13 001184 ENDM 815 001184 ............* DW IHERE,ISTORE,lit,1,CELLS,IALLOT,EXIT 816 001192 817 001192 ;C IC, char -- append char to Code dict 818 001192 ; IHERE IC! 1 CHARS IALLOT ; 819 001192 HEADER ICCOMMA,3,'IC,',DOCOLON 819.1 000000 PUBLIC ICCOMMA 819.2 001192 .... DW link 819.3 001194 FF DB 0FFh ; not immediate 819.4 001195 link SET $ 819.5 001195 03 DB 3 819.6 001196 49432C DB 'IC,' 819.7 001199 00 EVEN 819.8 00119A IF 'DOCOLON'='DOCODE' 819.9 00119A ICCOMMA: DW $+2 819.10 00119A ELSE 819.11 00119A .... ICCOMMA: DW DOCOLON 819.12 00119C ENDIF 819.13 00119C ENDM 820 00119C ............* DW IHERE,ICSTORE,lit,1,CHARS,IALLOT,EXIT 821 0011AA - 4e-configLP - Page 104 822 0011AA ; SEPARATE HEADER EXTENSIONS ARE NOT USED 823 0011AA #define HHERE IHERE 824 0011AA #define HALLOT IALLOT 825 0011AA #define HCOMMA ICOMMA 826 0011AA #define HCCOMMA ICCOMMA 827 0011AA #define HCFETCH ICFETCH 828 0011AA #define HFETCH IFETCH 829 0011AA #define HCSTORE ICSTORE 830 0011AA #define HSTORE ISTORE 831 0011AA 832 0011AA ; INTERPRETER ================================== = 833 0011AA ; Note that NFA>LFA, NFA>CFA, IMMED?, and FIND 834 0011AA ; are dependent on the structure of the Forth 835 0011AA ; header. This may be common across many CPUs, 836 0011AA ; or it may be different. 837 0011AA 838 0011AA ; ?STACK -- 839 0011AA ; depth 0< abort" SUF" ; stack underflow 840 0011AA HEADER QSTACK,6,'?STACK',DOCOLON 840.1 000000 PUBLIC QSTACK 840.2 0011AA .... DW link 840.3 0011AC FF DB 0FFh ; not immediate 840.4 0011AD link SET $ 840.5 0011AD 06 DB 6 840.6 0011AE 3F535441434B DB '?STACK' 840.7 0011B4 EVEN 840.8 0011B4 IF 'DOCOLON'='DOCODE' 840.9 0011B4 QSTACK: DW $+2 840.10 0011B4 ELSE 840.11 0011B4 .... QSTACK: DW DOCOLON 840.12 0011B6 ENDIF 840.13 0011B6 ENDM 841 0011B6 ............ DW DEPTH,ZEROLESS,XISQUOTE 842 0011BC 03535546 DB 3,'SUF' 843 0011C0 ........ DW QABORT,EXIT 844 0011C4 845 0011C4 ;C SOURCE -- adr n current input buffer 846 0011C4 ; 'SOURCE 2@ ; length is at lower adrs 847 0011C4 HEADER SOURCE,6,'SOURCE',DOCOLON 847.1 000000 PUBLIC SOURCE 847.2 0011C4 .... DW link 847.3 0011C6 FF DB 0FFh ; not immediate 847.4 0011C7 link SET $ 847.5 0011C7 06 DB 6 847.6 0011C8 534F55524345 DB 'SOURCE' 847.7 0011CE EVEN 847.8 0011CE IF 'DOCOLON'='DOCODE' 847.9 0011CE SOURCE: DW $+2 847.10 0011CE ELSE 847.11 0011CE .... SOURCE: DW DOCOLON 847.12 0011D0 ENDIF 847.13 0011D0 ENDM 848 0011D0 ............ DW TICKSOURCE,TWOFETCH,EXIT 849 0011D6 850 0011D6 ;X /STRING a u n -- a+n u-n trim string 851 0011D6 ; ROT OVER + ROT ROT - ; 852 0011D6 HEADER SLASHSTRING,7,'/STRING',DOCOLON 852.1 000000 PUBLIC SLASHSTRING 852.2 0011D6 .... DW link 852.3 0011D8 FF DB 0FFh ; not immediate 852.4 0011D9 link SET $ 852.5 0011D9 07 DB 7 852.6 0011DA 2F535452494E* DB '/STRING' 852.7 0011E1 00 EVEN 852.8 0011E2 IF 'DOCOLON'='DOCODE' 852.9 0011E2 SLASHSTRING: DW $+2 852.10 0011E2 ELSE 852.11 0011E2 .... SLASHSTRING: DW DOCOLON 852.12 0011E4 ENDIF 852.13 0011E4 ENDM 853 0011E4 ............* DW ROT,OVER,PLUS,ROT,ROT,MINUS,EXIT 854 0011F2 855 0011F2 ;Z >counted src n dst -- copy to counted - 4e-configLP - Page 105 str 856 0011F2 ; 2DUP C! CHAR+ SWAP CMOVE ; 857 0011F2 HEADER TOCOUNTED,8,'>COUNTED',DOCOLON 857.1 000000 PUBLIC TOCOUNTED 857.2 0011F2 .... DW link 857.3 0011F4 FF DB 0FFh ; not immediate 857.4 0011F5 link SET $ 857.5 0011F5 08 DB 8 857.6 0011F6 3E434F554E54* DB '>COUNTED' 857.7 0011FE EVEN 857.8 0011FE IF 'DOCOLON'='DOCODE' 857.9 0011FE TOCOUNTED: DW $+2 857.10 0011FE ELSE 857.11 0011FE .... TOCOUNTED: DW DOCOLON 857.12 001200 ENDIF 857.13 001200 ENDM 858 001200 ............* DW TWODUP,CSTORE,CHARPLUS,SWAP,CMOVE,EXI T 859 00120C 860 00120C ;Z ADR>IN c-addr' -- set >IN to offset to given adr 861 00120C ; SOURCE -- adr' adr n 862 00120C ; ROT ROT - -- n adr'-adr 863 00120C ; MIN 0 MAX -- n' 864 00120C ; >IN ! ; 865 00120C HEADER ADRTOIN,6,'ADR>IN',DOCOLON 865.1 000000 PUBLIC ADRTOIN 865.2 00120C .... DW link 865.3 00120E FF DB 0FFh ; not immediate 865.4 00120F link SET $ 865.5 00120F 06 DB 6 865.6 001210 4144523E494E DB 'ADR>IN' 865.7 001216 EVEN 865.8 001216 IF 'DOCOLON'='DOCODE' 865.9 001216 ADRTOIN: DW $+2 865.10 001216 ELSE 865.11 001216 .... ADRTOIN: DW DOCOLON 865.12 001218 ENDIF 865.13 001218 ENDM 866 001218 ............* DW SOURCE,ROT,ROT,MINUS,MIN,lit,0,MAX 867 001228 ............ DW TOIN,STORE,EXIT 868 00122E 869 00122E ;X PARSE char -- c-addr n word delim'd by char 870 00122E ; SOURCE >IN @ /STRING -- c adr n 871 00122E ; OVER >R save adr of string start 872 00122E ; ROT SCAN -- adr" n" 873 00122E ; OVER SWAP IF CHAR+ THEN skip trailing delim. if any 874 00122E ; ADR>IN advance >IN -- adr" 875 00122E ; R> TUCK - ; -- adr n' 876 00122E HEADER PARSE,5,'PARSE',DOCOLON 876.1 000000 PUBLIC PARSE 876.2 00122E .... DW link 876.3 001230 FF DB 0FFh ; not immediate 876.4 001231 link SET $ 876.5 001231 05 DB 5 876.6 001232 5041525345 DB 'PARSE' 876.7 001237 00 EVEN 876.8 001238 IF 'DOCOLON'='DOCODE' 876.9 001238 PARSE: DW $+2 876.10 001238 ELSE 876.11 001238 .... PARSE: DW DOCOLON 876.12 00123A ENDIF 876.13 00123A ENDM 877 00123A ............* DW SOURCE,TOIN,FETCH,SLASHSTRING 878 001242 ............* DW OVER,TOR,ROT,SCAN 879 00124A ............ DW OVER,SWAP,qbran 880 001250 DEST PARSE1 880.1 001250 0400 DW PARSE1-$ 880.2 001252 ENDM 881 001252 .... DW ONEPLUS ; char+ 882 001254 .... PARSE1: DW ADRTOIN - 4e-configLP - Page 106 883 001256 ............* DW RFROM,TUCK,MINUS,EXIT 884 00125E 885 00125E ;C WORD char -- c-addr word delim'd by char 886 00125E ; DUP SOURCE >IN @ /STRING -- c c adr n 887 00125E ; ROT SKIP -- c adr' n' 888 00125E ; DROP ADR>IN PARSE -- adr" n" 889 00125E ; HERE >counted -- 890 00125E ; HERE -- a 891 00125E ; BL OVER COUNT + C! ; append trailing blank 892 00125E HEADER WORDD,4,'WORD',DOCOLON 892.1 000000 PUBLIC WORDD 892.2 00125E .... DW link 892.3 001260 FF DB 0FFh ; not immediate 892.4 001261 link SET $ 892.5 001261 04 DB 4 892.6 001262 574F5244 DB 'WORD' 892.7 001266 EVEN 892.8 001266 IF 'DOCOLON'='DOCODE' 892.9 001266 WORDD: DW $+2 892.10 001266 ELSE 892.11 001266 .... WORDD: DW DOCOLON 892.12 001268 ENDIF 892.13 001268 ENDM 893 001268 ............* DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING 894 001272 ........ DW ROT,SKIP 895 001276 ............ DW DROP,ADRTOIN,PARSE 896 00127C ............ DW HERE,TOCOUNTED,HERE 897 001282 ............* DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT 898 00128E 899 00128E ;C WORD char -- c-addr word delim'd by char OLD DEF'N 900 00128E ; DUP SOURCE >IN @ /STRING -- c c adr n 901 00128E ; DUP >R ROT SKIP -- c adr' n' 902 00128E ; OVER >R ROT SCAN -- adr" n" 903 00128E ; DUP IF CHAR- THEN skip trailing delim. 904 00128E ; R> R> ROT - >IN +! update >IN offset 905 00128E ; TUCK - -- adr' N 906 00128E ; HERE >counted -- 907 00128E ; HERE -- a 908 00128E ; BL OVER COUNT + C! ; append trailing blank 909 00128E ; HEADER WORDD,4,'WORD',DOCOLON 910 00128E ; DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING 911 00128E ; DW DUP,TOR,ROT,SKIP 912 00128E ; DW OVER,TOR,ROT,SCAN 913 00128E ; DW DUP,qbran 914 00128E ; DEST WORD1 915 00128E ; DW ONEMINUS ; char- 916 00128E ;WORD1: DW RFROM,RFROM,ROT,MINUS,TOIN,PLUSSTORE 917 00128E ; DW TUCK,MINUS 918 00128E ; DW HERE,TOCOUNTED,HERE 919 00128E ; DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT 920 00128E 921 00128E ;Z NFA>LFA nfa -- lfa name adr -> link field 922 00128E ; 3 - ; 923 00128E HEADER NFATOLFA,7,'NFA>LFA',DOCOLON 923.1 000000 PUBLIC NFATOLFA 923.2 00128E .... DW link 923.3 001290 FF DB 0FFh ; not immediate 923.4 001291 link SET $ 923.5 001291 07 DB 7 923.6 001292 4E46413E4C46* DB 'NFA>LFA' 923.7 001299 00 EVEN 923.8 00129A IF 'DOCOLON'='DOCODE' 923.9 00129A NFATOLFA: DW $+2 923.10 00129A ELSE - 4e-configLP - Page 107 923.11 00129A .... NFATOLFA: DW DOCOLON 923.12 00129C ENDIF 923.13 00129C ENDM 924 00129C ....0300....* DW lit,3,MINUS,EXIT 925 0012A4 926 0012A4 ;Z NFA>CFA nfa -- cfa name adr -> code field 927 0012A4 ; HCOUNT 7F AND + ALIGNED ; mask off 'smudge' bit 928 0012A4 HEADER NFATOCFA,7,'NFA>CFA',DOCOLON 928.1 000000 PUBLIC NFATOCFA 928.2 0012A4 .... DW link 928.3 0012A6 FF DB 0FFh ; not immediate 928.4 0012A7 link SET $ 928.5 0012A7 07 DB 7 928.6 0012A8 4E46413E4346* DB 'NFA>CFA' 928.7 0012AF 00 EVEN 928.8 0012B0 IF 'DOCOLON'='DOCODE' 928.9 0012B0 NFATOCFA: DW $+2 928.10 0012B0 ELSE 928.11 0012B0 .... NFATOCFA: DW DOCOLON 928.12 0012B2 ENDIF 928.13 0012B2 ENDM 929 0012B2 .... DW HCOUNT 930 0012B4 ....7F00....* DW lit,07FH,ANDD,PLUS,ALIGNED,EXIT 931 0012C0 932 0012C0 ;Z IMMED? nfa -- f fetch immediate flag 933 0012C0 ; 1- HC@ 1 AND 0= ; Flashable model, LSB=0 if immed 934 0012C0 HEADER IMMEDQ,6,'IMMED?',DOCOLON 934.1 000000 PUBLIC IMMEDQ 934.2 0012C0 .... DW link 934.3 0012C2 FF DB 0FFh ; not immediate 934.4 0012C3 link SET $ 934.5 0012C3 06 DB 6 934.6 0012C4 494D4D45443F DB 'IMMED?' 934.7 0012CA EVEN 934.8 0012CA IF 'DOCOLON'='DOCODE' 934.9 0012CA IMMEDQ: DW $+2 934.10 0012CA ELSE 934.11 0012CA .... IMMEDQ: DW DOCOLON 934.12 0012CC ENDIF 934.13 0012CC ENDM 935 0012CC ............* DW ONEMINUS,HCFETCH,lit,1,ANDD,ZEROEQUAL ,EXIT 936 0012DA 937 0012DA ;C FIND c-addr -- c-addr 0 if not found 938 0012DA ;C FIND c-addr -- xt 1 if immediate 939 0012DA ;C FIND c-addr -- xt -1 if "normal" 940 0012DA ; LATEST @ BEGIN -- a nfa 941 0012DA ; 2DUP OVER C@ CHAR+ -- a nfa a nfa n+1 942 0012DA ; N= -- a nfa f 943 0012DA ; DUP IF 944 0012DA ; DROP 945 0012DA ; NFA>LFA H@ DUP -- a link link 946 0012DA ; THEN 947 0012DA ; 0= UNTIL -- a nfa OR a 0 948 0012DA ; DUP IF 949 0012DA ; NIP DUP NFA>CFA -- nfa xt 950 0012DA ; SWAP IMMED? -- xt iflag 951 0012DA ; 0= 1 OR -- xt 1/-1 952 0012DA ; THEN ; 953 0012DA HEADER FIND,4,'FIND',DOCOLON 953.1 000000 PUBLIC FIND 953.2 0012DA .... DW link 953.3 0012DC FF DB 0FFh ; not immediate 953.4 0012DD link SET $ 953.5 0012DD 04 DB 4 953.6 0012DE 46494E44 DB 'FIND' 953.7 0012E2 EVEN 953.8 0012E2 IF 'DOCOLON'='DOCODE' 953.9 0012E2 FIND: DW $+2 953.10 0012E2 ELSE - 4e-configLP - Page 108 953.11 0012E2 .... FIND: DW DOCOLON 953.12 0012E4 ENDIF 953.13 0012E4 ENDM 954 0012E4 ........ DW LATEST,FETCH 955 0012E8 ............*FIND1: DW TWODUP,OVER,CFETCH,CHARPLUS 956 0012F0 ............ DW NEQUAL,DUP,qbran 957 0012F6 DEST FIND2 957.1 0012F6 0A00 DW FIND2-$ 957.2 0012F8 ENDM 958 0012F8 ............* DW DROP,NFATOLFA,HFETCH,DUP 959 001300 ........ FIND2: DW ZEROEQUAL,qbran 960 001304 DEST FIND1 960.1 001304 E4FF DW FIND1-$ 960.2 001306 ENDM 961 001306 ........ DW DUP,qbran 962 00130A DEST FIND3 962.1 00130A 1400 DW FIND3-$ 962.2 00130C ENDM 963 00130C ............ DW NIP,DUP,NFATOCFA 964 001312 ............* DW SWAP,IMMEDQ,ZEROEQUAL,lit,1,ORR 965 00131E .... FIND3: DW EXIT 966 001320 967 001320 ;C UPC char -- char capitalize character 968 001320 ; 969 001320 ; DUP [CHAR] a < OVER [CHAR] z > OR IF EXIT THEN 970 001320 ; [ CHAR A CHAR a - ] LITERAL + ; 971 001320 ; HEADER UPC,3,'UPC',DOCOLON 972 001320 HEADLESS UPC, DOCOLON 972.1 000000 PUBLIC UPC 972.2 001320 IF 'DOCOLON'='DOCODE' 972.3 001320 UPC: DW $+2 972.4 001320 ELSE 972.5 001320 .... UPC: DW DOCOLON 972.6 001322 ENDIF 972.7 001322 ENDM 973 001322 ........6100* DW DUP, lit, 'a', LESS, OVER, lit, 'z', GREATER 974 001332 ........ DW ORR, qbran 975 001336 DEST UPC1 975.1 001336 0400 DW UPC1-$ 975.2 001338 ENDM 976 001338 .... DW EXIT 977 00133A ....E0FF.... UPC1: DW lit, 'A'-'a', PLUS 978 001340 .... DW EXIT 979 001342 980 001342 ;C CAPITALIZE c-addr -- c-addr capitalize string 981 001342 ; 982 001342 ; CAPS @ IF DUP COUNT OVER + SWAP ?DO I c@ upc I c! LOOP THEN 983 001342 ; HEADER CAPITALIZE, 10, 'CAPITALIZE', DOCOLON 984 001342 HEADLESS CAPITALIZE, DOCOLON 984.1 000000 PUBLIC CAPITALIZE 984.2 001342 IF 'DOCOLON'='DOCODE' 984.3 001342 CAPITALIZE: DW $+2 984.4 001342 ELSE 984.5 001342 .... CAPITALIZE: DW DOCOLON 984.6 001344 ENDIF 984.7 001344 ENDM 985 001344 ............ DW CAPS, FETCH, qbran 986 00134A DEST CAPS2 986.1 00134A 1C00 DW CAPS2-$ 986.2 00134C ENDM 987 00134C ............* DW DUP, COUNT, OVER, PLUS, SWAP, xdo 988 001358 ............*CAPS1: DW II, CFETCH, UPC, II, CSTORE 989 001362 .... DW xloop 990 001364 DEST CAPS1 990.1 001364 F4FF DW CAPS1-$ 990.2 001366 ENDM 991 001366 .... CAPS2: DW EXIT 992 001368 993 001368 ;C LITERAL x -- append numeric literal 994 001368 ; STATE @ IF ['] LIT ,XT I, THEN ; IMMEDIATE 995 001368 ; This tests STATE so that it can also be - 4e-configLP - Page 109 used 996 001368 ; interpretively. (ANSI doesn't require this.) 997 001368 IMMED LITERAL,7,'LITERAL',DOCOLON 997.1 000000 PUBLIC LITERAL 997.2 001368 .... DW link 997.3 00136A FE DB 0FEh // ; immediate (LSB=0) 997.4 00136B link SET $ 997.5 00136B 07 DB 7 997.6 00136C 4C4954455241* DB 'LITERAL' 997.7 001373 00 EVEN 997.8 001374 IF 'DOCOLON'='DOCODE' 997.9 001374 LITERAL: DW $+2 997.10 001374 ELSE 997.11 001374 .... LITERAL: DW DOCOLON 997.12 001376 ENDIF 997.13 001376 ENDM 998 001376 ............ DW STATE,FETCH,qbran 999 00137C DEST LITER1 999.1 00137C 0A00 DW LITER1-$ 999.2 00137E ENDM 1000 00137E ............* DW lit,lit,COMMAXT,ICOMMA 1001 001386 .... LITER1: DW EXIT 1002 001388 1003 001388 ;Z DIGIT? c -- n -1 if c is a valid digit 1004 001388 ;Z DIGIT? c -- x 0 otherwise 1005 001388 ; [ HEX ] DUP 39 > 100 AND + silly looking 1006 001388 ; DUP 140 > 107 AND - 30 - but it works! 1007 001388 ; DUP BASE @ U< ; 1008 001388 HEADER DIGITQ,6,'DIGIT?',DOCOLON 1008.1 000000 PUBLIC DIGITQ 1008.2 001388 .... DW link 1008.3 00138A FF DB 0FFh ; not immediate 1008.4 00138B link SET $ 1008.5 00138B 06 DB 6 1008.6 00138C 44494749543F DB 'DIGIT?' 1008.7 001392 EVEN 1008.8 001392 IF 'DOCOLON'='DOCODE' 1008.9 001392 DIGITQ: DW $+2 1008.10 001392 ELSE 1008.11 001392 .... DIGITQ: DW DOCOLON 1008.12 001394 ENDIF 1008.13 001394 ENDM 1009 001394 ........3900* DW DUP,lit,39H,GREATER,lit,100H,ANDD,PLU S 1010 0013A4 ........4001* DW DUP,lit,140H,GREATER,lit,107H,ANDD 1011 0013B2 ........3000* DW MINUS,lit,30H,MINUS 1012 0013BA ............* DW DUP,BASE,FETCH,ULESS,EXIT 1013 0013C4 1014 0013C4 ;Z ?SIGN adr n -- adr' n' f get optional sign 1015 0013C4 ;Z advance adr/n if sign; return NZ if negative 1016 0013C4 ; OVER C@ -- adr n c 1017 0013C4 ; 2C - DUP ABS 1 = AND -- +=-1, -=+1, else 0 1018 0013C4 ; DUP IF 1+ -- +=0, -=+2 1019 0013C4 ; >R 1 /STRING R> -- adr' n' f 1020 0013C4 ; THEN ; 1021 0013C4 HEADER QSIGN,5,'?SIGN',DOCOLON 1021.1 000000 PUBLIC QSIGN 1021.2 0013C4 .... DW link 1021.3 0013C6 FF DB 0FFh ; not immediate 1021.4 0013C7 link SET $ 1021.5 0013C7 05 DB 5 1021.6 0013C8 3F5349474E DB '?SIGN' 1021.7 0013CD 00 EVEN 1021.8 0013CE IF 'DOCOLON'='DOCODE' 1021.9 0013CE QSIGN: DW $+2 1021.10 0013CE ELSE 1021.11 0013CE .... QSIGN: DW DOCOLON 1021.12 0013D0 ENDIF 1021.13 0013D0 ENDM - 4e-configLP - Page 110 1022 0013D0 ............* DW OVER,CFETCH,lit,2CH,MINUS,DUP,ABBS 1023 0013DE ....0100....* DW lit,1,EQUAL,ANDD,DUP,qbran 1024 0013EA DEST QSIGN1 1024.1 0013EA 0E00 DW QSIGN1-$ 1024.2 0013EC ENDM 1025 0013EC ............* DW ONEPLUS,TOR,lit,1,SLASHSTRING,RFROM 1026 0013F8 .... QSIGN1: DW EXIT 1027 0013FA 1028 0013FA ;C >NUMBER ud adr u -- ud' adr' u' 1029 0013FA ;C convert string to number 1030 0013FA ; BEGIN 1031 0013FA ; DUP WHILE 1032 0013FA ; OVER C@ DIGIT? 1033 0013FA ; 0= IF DROP EXIT THEN 1034 0013FA ; >R 2SWAP BASE @ UD* 1035 0013FA ; R> M+ 2SWAP 1036 0013FA ; 1 /STRING 1037 0013FA ; REPEAT ; 1038 0013FA HEADER TONUMBER,7,'>NUMBER',DOCOLON 1038.1 000000 PUBLIC TONUMBER 1038.2 0013FA .... DW link 1038.3 0013FC FF DB 0FFh ; not immediate 1038.4 0013FD link SET $ 1038.5 0013FD 07 DB 7 1038.6 0013FE 3E4E554D4245* DB '>NUMBER' 1038.7 001405 00 EVEN 1038.8 001406 IF 'DOCOLON'='DOCODE' 1038.9 001406 TONUMBER: DW $+2 1038.10 001406 ELSE 1038.11 001406 .... TONUMBER: DW DOCOLON 1038.12 001408 ENDIF 1038.13 001408 ENDM 1039 001408 ........ TONUM1: DW DUP,qbran 1040 00140C DEST TONUM3 1040.1 00140C 2C00 DW TONUM3-$ 1040.2 00140E ENDM 1041 00140E ............ DW OVER,CFETCH,DIGITQ 1042 001414 ........ DW ZEROEQUAL,qbran 1043 001418 DEST TONUM2 1043.1 001418 0600 DW TONUM2-$ 1043.2 00141A ENDM 1044 00141A ........ DW DROP,EXIT 1045 00141E ............*TONUM2: DW TOR,TWOSWAP,BASE,FETCH,UDSTAR 1046 001428 ............ DW RFROM,MPLUS,TWOSWAP 1047 00142E ....0100....* DW lit,1,SLASHSTRING,bran 1048 001436 DEST TONUM1 1048.1 001436 D2FF DW TONUM1-$ 1048.2 001438 ENDM 1049 001438 .... TONUM3: DW EXIT 1050 00143A 1051 00143A ;Z ?NUMBER c-addr -- n -1 string->number 1052 00143A ;Z ?NUMBER c-addr -- c-addr 0 if convert error 1053 00143A ; DUP 0 0 ROT COUNT -- ca ud adr n 1054 00143A ; ?SIGN >R >NUMBER -- ca ud adr' n' 1055 00143A ; IF R> 2DROP 2DROP 0 -- ca 0 (error) 1056 00143A ; ELSE 2DROP NIP R> 1057 00143A ; IF NEGATE THEN -1 -- n -1 (ok) 1058 00143A ; THEN ; 1059 00143A HEADER QNUMBER,7,'?NUMBER',DOCOLON 1059.1 000000 PUBLIC QNUMBER 1059.2 00143A .... DW link 1059.3 00143C FF DB 0FFh ; not immediate 1059.4 00143D link SET $ 1059.5 00143D 07 DB 7 1059.6 00143E 3F4E554D4245* DB '?NUMBER' 1059.7 001445 00 EVEN 1059.8 001446 IF 'DOCOLON'='DOCODE' 1059.9 001446 QNUMBER: DW $+2 1059.10 001446 ELSE 1059.11 001446 .... QNUMBER: DW DOCOLON 1059.12 001448 ENDIF 1059.13 001448 ENDM 1060 001448 ............* DW DUP,ZERO,DUP,ROT,COUNT 1061 001452 ............* DW QSIGN,TOR,TONUMBER,qbran - 4e-configLP - Page 111 1062 00145A DEST QNUM1 1062.1 00145A 1000 DW QNUM1-$ 1062.2 00145C ENDM 1063 00145C ............* DW RFROM,TWODROP,TWODROP,lit,0 1064 001466 .... DW bran 1065 001468 DEST QNUM3 1065.1 001468 1200 DW QNUM3-$ 1065.2 00146A ENDM 1066 00146A ............*QNUM1: DW TWODROP,NIP,RFROM,qbran 1067 001472 DEST QNUM2 1067.1 001472 0400 DW QNUM2-$ 1067.2 001474 ENDM 1068 001474 .... DW NEGATE 1069 001476 ....FFFF QNUM2: DW lit,-1 1070 00147A .... QNUM3: DW EXIT 1071 00147C 1072 00147C ;Z INTERPRET i*x c-addr u -- j*x interpret given buffer 1073 00147C ; This is a common factor of EVALUATE and QUIT. 1074 00147C ; ref. dpANS-6, 3.4 The Forth Text Interpreter 1075 00147C ; 'SOURCE 2! 0 >IN ! 1076 00147C ; BEGIN 1077 00147C ; BL WORD DUP C@ WHILE -- textadr 1078 00147C ; CAPITALIZE 1079 00147C ; FIND -- a 0/1/-1 1080 00147C ; ?DUP IF -- xt 1/-1 1081 00147C ; 1+ STATE @ 0= OR IMMED or interp? 1082 00147C ; IF EXECUTE ELSE ,XT THEN 1083 00147C ; ELSE -- textadr 1084 00147C ; ?NUMBER 1085 00147C ; IF POSTPONE LITERAL converted ok 1086 00147C ; ELSE COUNT TYPE 3F EMIT CR ABORT err 1087 00147C ; THEN 1088 00147C ; THEN 1089 00147C ; REPEAT DROP ; 1090 00147C HEADER INTERPRET,9,'INTERPRET',DOCOLON 1090.1 000000 PUBLIC INTERPRET 1090.2 00147C .... DW link 1090.3 00147E FF DB 0FFh ; not immediate 1090.4 00147F link SET $ 1090.5 00147F 09 DB 9 1090.6 001480 494E54455250* DB 'INTERPRET' 1090.7 001489 00 EVEN 1090.8 00148A IF 'DOCOLON'='DOCODE' 1090.9 00148A INTERPRET: DW $+2 1090.10 00148A ELSE 1090.11 00148A .... INTERPRET: DW DOCOLON 1090.12 00148C ENDIF 1090.13 00148C ENDM 1091 00148C ............* DW TICKSOURCE,TWOSTORE,ZERO,TOIN,STORE 1092 001496 .... INTER1: DW QSTACK ; ?stack prüft auf stck underflow mk 1093 001498 ............* DW BLANK,WORDD,DUP,CFETCH,qbran 1094 0014A2 DEST INTER9 1094.1 0014A2 4A00 DW INTER9-$ 1094.2 0014A4 ENDM 1095 0014A4 .... DW CAPITALIZE 1096 0014A6 ............ DW FIND,QDUP,qbran 1097 0014AC DEST INTER4 1097.1 0014AC 1C00 DW INTER4-$ 1097.2 0014AE ENDM 1098 0014AE ............* DW ONEPLUS,STATE,FETCH,ZEROEQUAL,ORR 1099 0014B8 .... DW qbran 1100 0014BA DEST INTER2 1100.1 0014BA 0800 DW INTER2-$ 1100.2 0014BC ENDM 1101 0014BC ........ DW EXECUTE,bran 1102 0014C0 DEST INTER3 1102.1 0014C0 0400 DW INTER3-$ 1102.2 0014C2 ENDM 1103 0014C2 .... INTER2: DW COMMAXT 1104 0014C4 .... INTER3: DW bran 1105 0014C6 DEST INTER8 1105.1 0014C6 2200 DW INTER8-$ - 4e-configLP - Page 112 1105.2 0014C8 ENDM 1106 0014C8 ........ INTER4: DW QNUMBER,qbran 1107 0014CC DEST INTER5 1107.1 0014CC 0800 DW INTER5-$ 1107.2 0014CE ENDM 1108 0014CE ........ DW LITERAL,bran 1109 0014D2 DEST INTER6 1109.1 0014D2 1600 DW INTER6-$ 1109.2 0014D4 ENDM 1110 0014D4 ........ INTER5: DW COUNT,TYP 1111 0014D8 ....1500.... DW lit,15H,EMIT ; emit a NAK ($15) 1112 0014DE ....3F00.... DW lit,3FH,EMIT 1113 0014E4 ; DW TOIN,FETCH,DOT 1114 0014E4 ........ DW CR,ABORT 1115 0014E8 INTER6: 1116 0014E8 .... INTER8: DW bran 1117 0014EA DEST INTER1 1117.1 0014EA ACFF DW INTER1-$ 1117.2 0014EC ENDM 1118 0014EC ........ INTER9: DW DROP,EXIT 1119 0014F0 1120 0014F0 ;C EVALUATE i*x c-addr u -- j*x interprt string 1121 0014F0 ; 'SOURCE 2@ >R >R >IN @ >R 1122 0014F0 ; INTERPRET 1123 0014F0 ; R> >IN ! R> R> 'SOURCE 2! ; 1124 0014F0 HEADER EVALUATE,8,'EVALUATE',DOCOLON 1124.1 000000 PUBLIC EVALUATE 1124.2 0014F0 .... DW link 1124.3 0014F2 FF DB 0FFh ; not immediate 1124.4 0014F3 link SET $ 1124.5 0014F3 08 DB 8 1124.6 0014F4 4556414C5541* DB 'EVALUATE' 1124.7 0014FC EVEN 1124.8 0014FC IF 'DOCOLON'='DOCODE' 1124.9 0014FC EVALUATE: DW $+2 1124.10 0014FC ELSE 1124.11 0014FC .... EVALUATE: DW DOCOLON 1124.12 0014FE ENDIF 1124.13 0014FE ENDM 1125 0014FE ............* DW TICKSOURCE,TWOFETCH,TOR,TOR 1126 001506 ............* DW TOIN,FETCH,TOR,INTERPRET 1127 00150E ............* DW RFROM,TOIN,STORE,RFROM,RFROM 1128 001518 ............ DW TICKSOURCE,TWOSTORE,EXIT 1129 00151E 1130 00151E #define PREFIXPROMPT 0 1131 00151E 1132 00151E ; C DOTSTATUS -- display system status 1133 00151E HEADLESS DOTSTATUS,DOCOLON 1133.1 000000 PUBLIC DOTSTATUS 1133.2 00151E IF 'DOCOLON'='DOCODE' 1133.3 00151E DOTSTATUS: DW $+2 1133.4 00151E ELSE 1133.5 00151E .... DOTSTATUS: DW DOCOLON 1133.6 001520 ENDIF 1133.7 001520 ENDM 1134 001520 ....1100.... DW lit,11H,EMIT ; send XON 1135 001526 .... DW CR 1136 001528 IF PREFIXPROMPT=1 1137 001528 DW XISQUOTE 1138 001528 DB 3,'OK ' ; for prefix prompt style 1139 001528 DW ITYPE 1140 001528 ENDIF 1141 001528 .... DW EXIT 1142 00152A 1143 00152A ; C PROMPT -- prompt user 1144 00152A HEADLESS PROMPT,DOCOLON 1144.1 000000 PUBLIC PROMPT 1144.2 00152A IF 'DOCOLON'='DOCODE' 1144.3 00152A PROMPT: DW $+2 1144.4 00152A ELSE 1144.5 00152A .... PROMPT: DW DOCOLON 1144.6 00152C ENDIF 1144.7 00152C ENDM 1145 00152C IF PREFIXPROMPT!=1 1146 00152C ............* DW STATE,FETCH,ZEROEQUAL,qbran - 4e-configLP - Page 113 1147 001534 DEST PROMPT1 1147.1 001534 2800 DW PROMPT1-$ 1147.2 001536 ENDM 1148 001536 ....0600.... DW lit,06H,EMIT ; send ACK 1149 00153C ............* DW BASE,FETCH,DUP,HEX,lit,'$',EMIT,lit ,02,ZEROUDOTR,BASE,STORE 1150 001554 .... DW XISQUOTE 1151 001556 036F6B20 DB 3,'ok ' ; for traditional Forth style 1152 00155A .... DW ITYPE 1153 00155C ENDIF 1154 00155C .... PROMPT1:DW EXIT 1155 00155E 1156 00155E 1157 00155E ;C QUIT -- R: i*x -- interpret from kbd 1158 00155E ; L0 LP ! R0 RP! 0 STATE ! 1159 00155E ; BEGIN 1160 00155E ; xon EMIT 1161 00155E ; TIB DUP TIBSIZE ACCEPT 1162 00155E ; xoff EMIT SPACE 1163 00155E ; INTERPRET 1164 00155E ; CR STATE @ 0= IF ." OK" THEN 1165 00155E ; AGAIN ; 1166 00155E HEADER QUIT,4,'QUIT',DOCOLON 1166.1 000000 PUBLIC QUIT 1166.2 00155E .... DW link 1166.3 001560 FF DB 0FFh ; not immediate 1166.4 001561 link SET $ 1166.5 001561 04 DB 4 1166.6 001562 51554954 DB 'QUIT' 1166.7 001566 EVEN 1166.8 001566 IF 'DOCOLON'='DOCODE' 1166.9 001566 QUIT: DW $+2 1166.10 001566 ELSE 1166.11 001566 .... QUIT: DW DOCOLON 1166.12 001568 ENDIF 1166.13 001568 ENDM 1167 001568 ............ DW L0,LP,STORE 1168 00156E ............* DW RZERO,RPSTORE,ZERO,STATE,STORE 1169 001578 .... QUIT1: DW DOTSTATUS 1170 00157A ............* DW TIB,DUP,TIBSIZE,ACCEPT 1171 001582 ; DW lit,13H,EMIT ; send XOFF 1172 001582 .... DW SPACE 1173 001584 .... DW INTERPRET 1174 001586 .... DW PROMPT 1175 001588 .... DW bran 1176 00158A DEST QUIT1 1176.1 00158A EEFF DW QUIT1-$ 1176.2 00158C ENDM 1177 000000 PUBLIC QUITIP 1178 00158C QUITIP equ QUIT+2 1179 00158C 1180 00158C ;C ABORT i*x -- R: j*x -- clear stk & QUIT 1181 00158C ; S0 SP! QUIT ; 1182 00158C HEADER ABORT,5,'ABORT',DOCOLON 1182.1 000000 PUBLIC ABORT 1182.2 00158C .... DW link 1182.3 00158E FF DB 0FFh ; not immediate 1182.4 00158F link SET $ 1182.5 00158F 05 DB 5 1182.6 001590 41424F5254 DB 'ABORT' 1182.7 001595 00 EVEN 1182.8 001596 IF 'DOCOLON'='DOCODE' 1182.9 001596 ABORT: DW $+2 1182.10 001596 ELSE 1182.11 001596 .... ABORT: DW DOCOLON 1182.12 001598 ENDIF 1182.13 001598 ENDM 1183 001598 ............ abort1 DW S0,SPSTORE,QUIT ; QUIT never returns 1184 00159E 1185 00159E ;Z ?ABORT f c-addr u -- abort & print msg 1186 00159E ; ROT IF ITYPE ABORT THEN 2DROP ; 1187 00159E HEADER QABORT,6,'?ABORT',DOCOLON - 4e-configLP - Page 114 1187.1 000000 PUBLIC QABORT 1187.2 00159E .... DW link 1187.3 0015A0 FF DB 0FFh ; not immediate 1187.4 0015A1 link SET $ 1187.5 0015A1 06 DB 6 1187.6 0015A2 3F41424F5254 DB '?ABORT' 1187.7 0015A8 EVEN 1187.8 0015A8 IF 'DOCOLON'='DOCODE' 1187.9 0015A8 QABORT: DW $+2 1187.10 0015A8 ELSE 1187.11 0015A8 .... QABORT: DW DOCOLON 1187.12 0015AA ENDIF 1187.13 0015AA ENDM 1188 0015AA ........ DW ROT,qbran 1189 0015AE DEST QABO1 1189.1 0015AE 0600 DW QABO1-$ 1189.2 0015B0 ENDM 1190 0015B0 ........ DW ITYPE,ABORT 1191 0015B4 ........ QABO1: DW TWODROP,EXIT 1192 0015B8 1193 0015B8 ;C ABORT" i*x 0 -- i*x R: j*x -- j*x x1=0 1194 0015B8 ;C ABORT" i*x x1 -- R: j*x -- x1<>0 1195 0015B8 ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE 1196 0015B8 IMMED ABORTQUOTE,6,'ABORT"',DOCOLON 1196.1 000000 PUBLIC ABORTQUOTE 1196.2 0015B8 .... DW link 1196.3 0015BA FE DB 0FEh // ; immediate (LSB=0 ) 1196.4 0015BB link SET $ 1196.5 0015BB 06 DB 6 1196.6 0015BC 41424F525422 DB 'ABORT"' 1196.7 0015C2 EVEN 1196.8 0015C2 IF 'DOCOLON'='DOCODE' 1196.9 0015C2 ABORTQUOTE: DW $+2 1196.10 0015C2 ELSE 1196.11 0015C2 .... ABORTQUOTE: DW DOCOLON 1196.12 0015C4 ENDIF 1196.13 0015C4 ENDM 1197 0015C4 .... DW ISQUOTE 1198 0015C6 ............ DW lit,QABORT,COMMAXT 1199 0015CC .... DW EXIT 1200 0015CE 1201 0015CE ;C ' -- xt find word in dictionary 1202 0015CE ; BL WORD CAPITALIZE FIND 1203 0015CE ; 0= ABORT" ?" ; 1204 0015CE HEADER TICK,1,27h,DOCOLON 1204.1 000000 PUBLIC TICK 1204.2 0015CE .... DW link 1204.3 0015D0 FF DB 0FFh ; not immediate 1204.4 0015D1 link SET $ 1204.5 0015D1 01 DB 1 1204.6 0015D2 27 DB 27h 1204.7 0015D3 00 EVEN 1204.8 0015D4 IF 'DOCOLON'='DOCODE' 1204.9 0015D4 TICK: DW $+2 1204.10 0015D4 ELSE 1204.11 0015D4 .... TICK: DW DOCOLON 1204.12 0015D6 ENDIF 1204.13 0015D6 ENDM 1205 0015D6 ............* DW BLANK,WORDD,CAPITALIZE,FIND,ZEROEQUAL ,XISQUOTE 1206 0015E2 013F DB 1,'?' 1207 0015E4 ........ DW QABORT,EXIT 1208 0015E8 1209 0015E8 ;C CHAR -- char parse ASCII character 1210 0015E8 ; BL WORD 1+ C@ ; 1211 0015E8 HEADER CHARR,4,'CHAR',DOCOLON 1211.1 000000 PUBLIC CHARR 1211.2 0015E8 .... DW link 1211.3 0015EA FF DB 0FFh ; not immediate 1211.4 0015EB link SET $ 1211.5 0015EB 04 DB 4 1211.6 0015EC 43484152 DB 'CHAR' 1211.7 0015F0 EVEN - 4e-configLP - Page 115 1211.8 0015F0 IF 'DOCOLON'='DOCODE' 1211.9 0015F0 CHARR: DW $+2 1211.10 0015F0 ELSE 1211.11 0015F0 .... CHARR: DW DOCOLON 1211.12 0015F2 ENDIF 1211.13 0015F2 ENDM 1212 0015F2 ............* DW BLANK,WORDD,ONEPLUS,CFETCH,EXIT 1213 0015FC 1214 0015FC ;C [CHAR] -- compile character literal 1215 0015FC ; CHAR ['] LIT ,XT I, ; IMMEDIATE 1216 0015FC IMMED BRACCHAR,6,'[CHAR]',DOCOLON 1216.1 000000 PUBLIC BRACCHAR 1216.2 0015FC .... DW link 1216.3 0015FE FE DB 0FEh // ; immediate (LSB=0) 1216.4 0015FF link SET $ 1216.5 0015FF 06 DB 6 1216.6 001600 5B434841525D DB '[CHAR]' 1216.7 001606 EVEN 1216.8 001606 IF 'DOCOLON'='DOCODE' 1216.9 001606 BRACCHAR: DW $+2 1216.10 001606 ELSE 1216.11 001606 .... BRACCHAR: DW DOCOLON 1216.12 001608 ENDIF 1216.13 001608 ENDM 1217 001608 .... DW CHARR 1218 00160A ............ DW lit,lit,COMMAXT 1219 001610 ........ DW ICOMMA,EXIT 1220 001614 1221 001614 ;C ( -- skip input until ) 1222 001614 ; [ HEX ] 29 PARSE 2DROP ; IMMEDIATE 1223 001614 IMMED PAREN,1,'(',DOCOLON 1223.1 000000 PUBLIC PAREN 1223.2 001614 .... DW link 1223.3 001616 FE DB 0FEh // ; immediate (LSB=0) 1223.4 001617 link SET $ 1223.5 001617 01 DB 1 1223.6 001618 28 DB '(' 1223.7 001619 00 EVEN 1223.8 00161A IF 'DOCOLON'='DOCODE' 1223.9 00161A PAREN: DW $+2 1223.10 00161A ELSE 1223.11 00161A .... PAREN: DW DOCOLON 1223.12 00161C ENDIF 1223.13 00161C ENDM 1224 00161C ....2900....* DW lit,29H,PARSE,TWODROP,EXIT 1225 001626 1226 001626 ; COMPILER ===================================== = 1227 001626 1228 001626 ;Z HEADER -- create a Forth word header 1229 001626 ; LATEST @ H, 0FF HC, link & IMMED field 1230 001626 ; HHERE LATEST ! new "latest" link 1231 001626 ; BL HWORD HC@ 1+ HALLOT name field 1232 001626 ; ALIGN ; 1233 001626 ; Separate headers model. 1234 001626 HEADER HEADR,6,'HEADER',DOCOLON 1234.1 000000 PUBLIC HEADR 1234.2 001626 .... DW link 1234.3 001628 FF DB 0FFh ; not immediate 1234.4 001629 link SET $ 1234.5 001629 06 DB 6 1234.6 00162A 484541444552 DB 'HEADER' 1234.7 001630 EVEN 1234.8 001630 IF 'DOCOLON'='DOCODE' 1234.9 001630 HEADR: DW $+2 1234.10 001630 ELSE 1234.11 001630 .... HEADR: DW DOCOLON 1234.12 001632 ENDIF 1234.13 001632 ENDM 1235 001632 ............ DW LATEST,FETCH,HCOMMA ; link 1236 001638 ....FF00.... DW lit,0FFh,HCCOMMA ; immediate - 4e-configLP - Page 116 flag - see note below 1237 00163E ............ DW HHERE,LATEST,STORE 1238 001644 ............* DW BLANK,HWORD,HCFETCH,ONEPLUS,HALLOT 1239 00164E ........ DW ALIGNN,EXIT ; MSP430: headers in I space must be aligned 1240 001652 ; Note for Flashable MSP430: when compiling to RAM, we need to set 1241 001652 ; the immediate byte to 0FFH. When compiling to Flash, the word IC! 1242 001652 ; will not write 0FFH to erased Flash (because the byte is already 0FFH). 1243 001652 ; Thus we can write this byte at a later time (with IMMEDIATE). 1244 001652 1245 001652 ;Z ) -- run-time action of DOES> 1262 001684 ; R> adrs of headless DOES> def'n 1263 001684 ; LATEST @ NFA>CFA code field to fix up 1264 001684 ; !CF ; 1265 001684 HEADER XDOES,7,'(DOES>)',DOCOLON 1265.1 000000 PUBLIC XDOES 1265.2 001684 .... DW link 1265.3 001686 FF DB 0FFh ; not immediate 1265.4 001687 link SET $ 1265.5 001687 07 DB 7 1265.6 001688 28444F45533E* DB '(DOES>)' - 4e-configLP - Page 117 1265.7 00168F 00 EVEN 1265.8 001690 IF 'DOCOLON'='DOCODE' 1265.9 001690 XDOES: DW $+2 1265.10 001690 ELSE 1265.11 001690 .... XDOES: DW DOCOLON 1265.12 001692 ENDIF 1265.13 001692 ENDM 1266 001692 ............* DW RFROM,LATEST,FETCH,NFATOCFA,STORECF 1267 00169C .... DW EXIT 1268 00169E 1269 00169E ;C DOES> -- change action of latest def'n 1270 00169E ; COMPILE (DOES>) 1271 00169E ; dodoes ,JMP ; IMMEDIATE 1272 00169E ; Note that MSP430 uses a JMP, not a CALL, to DODOES. 1273 00169E IMMED DOES,5,'DOES>',DOCOLON 1273.1 000000 PUBLIC DOES 1273.2 00169E .... DW link 1273.3 0016A0 FE DB 0FEh // ; immediate (LSB=0) 1273.4 0016A1 link SET $ 1273.5 0016A1 05 DB 5 1273.6 0016A2 444F45533E DB 'DOES>' 1273.7 0016A7 00 EVEN 1273.8 0016A8 IF 'DOCOLON'='DOCODE' 1273.9 0016A8 DOES: DW $+2 1273.10 0016A8 ELSE 1273.11 0016A8 .... DOES: DW DOCOLON 1273.12 0016AA ENDIF 1273.13 0016AA ENDM 1274 0016AA ............ DW lit,XDOES,COMMAXT 1275 0016B0 ............* DW lit,dodoes,COMMAJMP,EXIT 1276 0016B8 1277 0016B8 ;C RECURSE -- recurse current definition 1278 0016B8 ; LATEST @ NFA>CFA ,XT ; IMMEDIATE 1279 0016B8 ; NEWEST @ NFA>CFA ,XT ; IMMEDIATE Flashable 1280 0016B8 IMMED RECURSE,7,'RECURSE',DOCOLON 1280.1 000000 PUBLIC RECURSE 1280.2 0016B8 .... DW link 1280.3 0016BA FE DB 0FEh // ; immediate (LSB=0) 1280.4 0016BB link SET $ 1280.5 0016BB 07 DB 7 1280.6 0016BC 524543555253* DB 'RECURSE' 1280.7 0016C3 00 EVEN 1280.8 0016C4 IF 'DOCOLON'='DOCODE' 1280.9 0016C4 RECURSE: DW $+2 1280.10 0016C4 ELSE 1280.11 0016C4 .... RECURSE: DW DOCOLON 1280.12 0016C6 ENDIF 1280.13 0016C6 ENDM 1281 0016C6 ............* DW NEWEST,FETCH,NFATOCFA,COMMAXT,EXIT 1282 0016D0 1283 0016D0 ;C [ -- enter interpretive state 1284 0016D0 ; 0 STATE ! ; IMMEDIATE 1285 0016D0 IMMED LEFTBRACKET,1,'[',DOCOLON 1285.1 000000 PUBLIC LEFTBRACKET 1285.2 0016D0 .... DW link 1285.3 0016D2 FE DB 0FEh // ; immediate (LSB=0) 1285.4 0016D3 link SET $ 1285.5 0016D3 01 DB 1 1285.6 0016D4 5B DB '[' 1285.7 0016D5 00 EVEN 1285.8 0016D6 IF 'DOCOLON'='DOCODE' 1285.9 0016D6 LEFTBRACKET: DW $+2 1285.10 0016D6 ELSE 1285.11 0016D6 .... LEFTBRACKET: DW DOCOLON 1285.12 0016D8 ENDIF 1285.13 0016D8 ENDM 1286 0016D8 ............* DW ZERO,STATE,STORE,EXIT 1287 0016E0 1288 0016E0 ;C ] -- enter compiling state 1289 0016E0 ; -1 STATE ! ; 1290 0016E0 HEADER RIGHTBRACKET,1,']',DOCOLON - 4e-configLP - Page 118 1290.1 000000 PUBLIC RIGHTBRACKET 1290.2 0016E0 .... DW link 1290.3 0016E2 FF DB 0FFh ; not immediate 1290.4 0016E3 link SET $ 1290.5 0016E3 01 DB 1 1290.6 0016E4 5D DB ']' 1290.7 0016E5 00 EVEN 1290.8 0016E6 IF 'DOCOLON'='DOCODE' 1290.9 0016E6 RIGHTBRACKET: DW $+2 1290.10 0016E6 ELSE 1290.11 0016E6 .... RIGHTBRACKET: DW DOCOLON 1290.12 0016E8 ENDIF 1290.13 0016E8 ENDM 1291 0016E8 ....FFFF....* DW lit,-1,STATE,STORE,EXIT 1292 0016F2 1293 0016F2 ;Z HIDE -- "hide" latest definition Flashable 1294 0016F2 ; LATEST @ DUP NEWEST ! NFA>LFA H@ LATEST ! ; 1295 0016F2 HEADER HIDE,4,'HIDE',DOCOLON 1295.1 000000 PUBLIC HIDE 1295.2 0016F2 .... DW link 1295.3 0016F4 FF DB 0FFh ; not immediate 1295.4 0016F5 link SET $ 1295.5 0016F5 04 DB 4 1295.6 0016F6 48494445 DB 'HIDE' 1295.7 0016FA EVEN 1295.8 0016FA IF 'DOCOLON'='DOCODE' 1295.9 0016FA HIDE: DW $+2 1295.10 0016FA ELSE 1295.11 0016FA .... HIDE: DW DOCOLON 1295.12 0016FC ENDIF 1295.13 0016FC ENDM 1296 0016FC ............* DW LATEST,FETCH,DUP,NEWEST,STORE 1297 001706 ............* DW NFATOLFA,HFETCH,LATEST,STORE,EXIT 1298 001710 1299 001710 ;Z REVEAL -- "reveal" latest definition Flashable 1300 001710 ; NEWEST @ LATEST ! ; 1301 001710 HEADER REVEAL,6,'REVEAL',DOCOLON 1301.1 000000 PUBLIC REVEAL 1301.2 001710 .... DW link 1301.3 001712 FF DB 0FFh ; not immediate 1301.4 001713 link SET $ 1301.5 001713 06 DB 6 1301.6 001714 52455645414C DB 'REVEAL' 1301.7 00171A EVEN 1301.8 00171A IF 'DOCOLON'='DOCODE' 1301.9 00171A REVEAL: DW $+2 1301.10 00171A ELSE 1301.11 00171A .... REVEAL: DW DOCOLON 1301.12 00171C ENDIF 1301.13 00171C ENDM 1302 00171C ............* DW NEWEST,FETCH,LATEST,STORE,EXIT 1303 001726 1304 001726 ;C IMMEDIATE -- make last def'n immediate 1305 001726 ; 0FE LATEST @ 1- HC! ; set Flashable immediate flag 1306 001726 HEADER IMMEDIATE,9,'IMMEDIATE',DOCOLON 1306.1 000000 PUBLIC IMMEDIATE 1306.2 001726 .... DW link 1306.3 001728 FF DB 0FFh ; not immediate 1306.4 001729 link SET $ 1306.5 001729 09 DB 9 1306.6 00172A 494D4D454449* DB 'IMMEDIATE' 1306.7 001733 00 EVEN 1306.8 001734 IF 'DOCOLON'='DOCODE' 1306.9 001734 IMMEDIATE: DW $+2 1306.10 001734 ELSE 1306.11 001734 .... IMMEDIATE: DW DOCOLON 1306.12 001736 ENDIF 1306.13 001736 ENDM 1307 001736 ....FE00....* DW lit,0FEh,LATEST,FETCH,ONEMINUS,HCSTOR E 1308 001742 .... DW EXIT 1309 001744 1310 001744 ;C : -- begin a colon definition - 4e-configLP - Page 119 1311 001744 ; DUP CELL+ >R @ ,XT ; 1358 0017B6 ; The phrase ['] xxx ,XT appears so often that 1359 0017B6 ; this word was created to combine the actions 1360 0017B6 ; of LIT and ,XT. It takes an inline literal 1361 0017B6 ; execution token and appends it to the dict. 1362 0017B6 ; HEADER COMPILE,7,'COMPILE',DOCOLON 1363 0017B6 ; DW RFROM,DUP,CELLPLUS,TOR 1364 0017B6 ; DW FETCH,COMMAXT,EXIT 1365 0017B6 ; N.B.: not used in the current implementation 1366 0017B6 1367 0017B6 ; CONTROL STRUCTURES =========================== = 1368 0017B6 1369 0017B6 ;C IF -- adrs conditional forward branch 1370 0017B6 ; ['] qbran ,BRANCH IHERE ,NONE ; Flashable 1371 0017B6 ; IMMEDIATE 1372 0017B6 IMMED IFF,2,'IF',DOCOLON 1372.1 000000 PUBLIC IFF 1372.2 0017B6 .... DW link 1372.3 0017B8 FE DB 0FEh // ; immediate (LSB=0) 1372.4 0017B9 link SET $ 1372.5 0017B9 02 DB 2 1372.6 0017BA 4946 DB 'IF' 1372.7 0017BC EVEN 1372.8 0017BC IF 'DOCOLON'='DOCODE' 1372.9 0017BC IFF: DW $+2 - 4e-configLP - Page 121 1372.10 0017BC ELSE 1372.11 0017BC .... IFF: DW DOCOLON 1372.12 0017BE ENDIF 1372.13 0017BE ENDM 1373 0017BE ............ DW lit,qbran,COMMABRANCH 1374 0017C4 ............ DW IHERE,COMMANONE,EXIT 1375 0017CA 1376 0017CA ;C THEN adrs -- resolve forward branch 1377 0017CA ; IHERE SWAP !DEST ; IMMEDIATE 1378 0017CA IMMED THEN,4,'THEN',DOCOLON 1378.1 000000 PUBLIC THEN 1378.2 0017CA .... DW link 1378.3 0017CC FE DB 0FEh // ; immediate (LSB=0) 1378.4 0017CD link SET $ 1378.5 0017CD 04 DB 4 1378.6 0017CE 5448454E DB 'THEN' 1378.7 0017D2 EVEN 1378.8 0017D2 IF 'DOCOLON'='DOCODE' 1378.9 0017D2 THEN: DW $+2 1378.10 0017D2 ELSE 1378.11 0017D2 .... THEN: DW DOCOLON 1378.12 0017D4 ENDIF 1378.13 0017D4 ENDM 1379 0017D4 ............* DW IHERE,SWAP,STOREDEST,EXIT 1380 0017DC 1381 0017DC ;C ELSE adrs1 -- adrs2 branch for IF..ELSE 1382 0017DC ; ['] branch ,BRANCH IHERE ,NONE Flashable 1383 0017DC ; SWAP POSTPONE THEN ; IMMEDIATE 1384 0017DC IMMED ELSS,4,'ELSE',DOCOLON 1384.1 000000 PUBLIC ELSS 1384.2 0017DC .... DW link 1384.3 0017DE FE DB 0FEh // ; immediate (LSB=0) 1384.4 0017DF link SET $ 1384.5 0017DF 04 DB 4 1384.6 0017E0 454C5345 DB 'ELSE' 1384.7 0017E4 EVEN 1384.8 0017E4 IF 'DOCOLON'='DOCODE' 1384.9 0017E4 ELSS: DW $+2 1384.10 0017E4 ELSE 1384.11 0017E4 .... ELSS: DW DOCOLON 1384.12 0017E6 ENDIF 1384.13 0017E6 ENDM 1385 0017E6 ............ DW lit,bran,COMMABRANCH 1386 0017EC ........ DW IHERE,COMMANONE 1387 0017F0 ............ DW SWAP,THEN,EXIT 1388 0017F6 1389 0017F6 ;C BEGIN -- adrs target for bwd. branch 1390 0017F6 ; IHERE ; IMMEDIATE 1391 0017F6 IMMED BEGIN,5,'BEGIN',DOCOLON 1391.1 000000 PUBLIC BEGIN 1391.2 0017F6 .... DW link 1391.3 0017F8 FE DB 0FEh // ; immediate (LSB=0) 1391.4 0017F9 link SET $ 1391.5 0017F9 05 DB 5 1391.6 0017FA 424547494E DB 'BEGIN' 1391.7 0017FF 00 EVEN 1391.8 001800 IF 'DOCOLON'='DOCODE' 1391.9 001800 BEGIN: DW $+2 1391.10 001800 ELSE 1391.11 001800 .... BEGIN: DW DOCOLON 1391.12 001802 ENDIF 1391.13 001802 ENDM 1392 001802 ........ DW IHERE,EXIT 1393 001806 1394 001806 ;C UNTIL adrs -- conditional backward branch 1395 001806 ; ['] qbran ,BRANCH ,DEST ; IMMEDIATE 1396 001806 ; conditional backward branch 1397 001806 IMMED UNTIL,5,'UNTIL',DOCOLON 1397.1 000000 PUBLIC UNTIL 1397.2 001806 .... DW link - 4e-configLP - Page 122 1397.3 001808 FE DB 0FEh // ; immediate (LSB=0) 1397.4 001809 link SET $ 1397.5 001809 05 DB 5 1397.6 00180A 554E54494C DB 'UNTIL' 1397.7 00180F 00 EVEN 1397.8 001810 IF 'DOCOLON'='DOCODE' 1397.9 001810 UNTIL: DW $+2 1397.10 001810 ELSE 1397.11 001810 .... UNTIL: DW DOCOLON 1397.12 001812 ENDIF 1397.13 001812 ENDM 1398 001812 ............ DW lit,qbran,COMMABRANCH 1399 001818 ........ DW COMMADEST,EXIT 1400 00181C 1401 00181C ;X AGAIN adrs -- uncond'l backward branch 1402 00181C ; ['] branch ,BRANCH ,DEST ; IMMEDIATE 1403 00181C ; unconditional backward branch 1404 00181C IMMED AGAIN,5,'AGAIN',DOCOLON 1404.1 000000 PUBLIC AGAIN 1404.2 00181C .... DW link 1404.3 00181E FE DB 0FEh // ; immediate (LSB=0) 1404.4 00181F link SET $ 1404.5 00181F 05 DB 5 1404.6 001820 414741494E DB 'AGAIN' 1404.7 001825 00 EVEN 1404.8 001826 IF 'DOCOLON'='DOCODE' 1404.9 001826 AGAIN: DW $+2 1404.10 001826 ELSE 1404.11 001826 .... AGAIN: DW DOCOLON 1404.12 001828 ENDIF 1404.13 001828 ENDM 1405 001828 ............ DW lit,bran,COMMABRANCH 1406 00182E ........ DW COMMADEST,EXIT 1407 001832 1408 001832 ;C WHILE adrs1 -- adrs2 adrs1 branch for WHILE loop 1409 001832 ; POSTPONE IF SWAP ; IMMEDIATE 1410 001832 IMMED WHILE,5,'WHILE',DOCOLON 1410.1 000000 PUBLIC WHILE 1410.2 001832 .... DW link 1410.3 001834 FE DB 0FEh // ; immediate (LSB=0) 1410.4 001835 link SET $ 1410.5 001835 05 DB 5 1410.6 001836 5748494C45 DB 'WHILE' 1410.7 00183B 00 EVEN 1410.8 00183C IF 'DOCOLON'='DOCODE' 1410.9 00183C WHILE: DW $+2 1410.10 00183C ELSE 1410.11 00183C .... WHILE: DW DOCOLON 1410.12 00183E ENDIF 1410.13 00183E ENDM 1411 00183E ............ DW IFF,SWAP,EXIT 1412 001844 1413 001844 ;C REPEAT adrs2 adrs1 -- resolve WHILE loop 1414 001844 ; POSTPONE AGAIN POSTPONE THEN ; IMMEDIATE 1415 001844 IMMED REPEAT,6,'REPEAT',DOCOLON 1415.1 000000 PUBLIC REPEAT 1415.2 001844 .... DW link 1415.3 001846 FE DB 0FEh // ; immediate (LSB=0) 1415.4 001847 link SET $ 1415.5 001847 06 DB 6 1415.6 001848 524550454154 DB 'REPEAT' 1415.7 00184E EVEN 1415.8 00184E IF 'DOCOLON'='DOCODE' 1415.9 00184E REPEAT: DW $+2 1415.10 00184E ELSE 1415.11 00184E .... REPEAT: DW DOCOLON 1415.12 001850 ENDIF 1415.13 001850 ENDM 1416 001850 ............ DW AGAIN,THEN,EXIT 1417 001856 1418 001856 ;Z >L x -- L: -- x move to leave - 4e-configLP - Page 123 stack 1419 001856 ; CELL LP +! LP @ ! ; (L stack grows up) 1420 001856 HEADER TOL,2,'>L',DOCOLON 1420.1 000000 PUBLIC TOL 1420.2 001856 .... DW link 1420.3 001858 FF DB 0FFh ; not immediate 1420.4 001859 link SET $ 1420.5 001859 02 DB 2 1420.6 00185A 3E4C DB '>L' 1420.7 00185C EVEN 1420.8 00185C IF 'DOCOLON'='DOCODE' 1420.9 00185C TOL: DW $+2 1420.10 00185C ELSE 1420.11 00185C .... TOL: DW DOCOLON 1420.12 00185E ENDIF 1420.13 00185E ENDM 1421 00185E ............* DW CELL,LP,PLUSSTORE,LP,FETCH,STORE,EXIT 1422 00186C 1423 00186C ;Z L> -- x L: x -- move from leave stack 1424 00186C ; LP @ @ CELL NEGATE LP +! ; 1425 00186C HEADER LFROM,2,'L>',DOCOLON 1425.1 000000 PUBLIC LFROM 1425.2 00186C .... DW link 1425.3 00186E FF DB 0FFh ; not immediate 1425.4 00186F link SET $ 1425.5 00186F 02 DB 2 1425.6 001870 4C3E DB 'L>' 1425.7 001872 EVEN 1425.8 001872 IF 'DOCOLON'='DOCODE' 1425.9 001872 LFROM: DW $+2 1425.10 001872 ELSE 1425.11 001872 .... LFROM: DW DOCOLON 1425.12 001874 ENDIF 1425.13 001874 ENDM 1426 001874 ............ DW LP,FETCH,FETCH 1427 00187A ............* DW CELL,NEGATE,LP,PLUSSTORE,EXIT 1428 001884 1429 001884 ;C DO -- adrs L: -- 0 start a loop 1430 001884 ; ['] xdo ,XT IHERE target for bwd branch 1431 001884 ; 0 >L ; IMMEDIATE marker for LEAVEs 1432 001884 IMMED DO,2,'DO',DOCOLON 1432.1 000000 PUBLIC DO 1432.2 001884 .... DW link 1432.3 001886 FE DB 0FEh // ; immediate (LSB=0) 1432.4 001887 link SET $ 1432.5 001887 02 DB 2 1432.6 001888 444F DB 'DO' 1432.7 00188A EVEN 1432.8 00188A IF 'DOCOLON'='DOCODE' 1432.9 00188A DO: DW $+2 1432.10 00188A ELSE 1432.11 00188A .... DO: DW DOCOLON 1432.12 00188C ENDIF 1432.13 00188C ENDM 1433 00188C ............* DW lit,xdo,COMMAXT,IHERE 1434 001894 ............ DW ZERO,TOL,EXIT 1435 00189A 1436 00189A ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- common factor of LOOP and +LOOP 1437 00189A ; ,BRANCH ,DEST backward loop 1438 00189A ; BEGIN L> ?DUP WHILE POSTPONE THEN REPEAT ; 1439 00189A ; resolve LEAVEs 1440 00189A ; This is a common factor of LOOP and +LOOP. 1441 00189A HEADER ENDLOOP,7,'ENDLOOP',DOCOLON 1441.1 000000 PUBLIC ENDLOOP 1441.2 00189A .... DW link 1441.3 00189C FF DB 0FFh ; not immediate 1441.4 00189D link SET $ 1441.5 00189D 07 DB 7 - 4e-configLP - Page 124 1441.6 00189E 454E444C4F4F* DB 'ENDLOOP' 1441.7 0018A5 00 EVEN 1441.8 0018A6 IF 'DOCOLON'='DOCODE' 1441.9 0018A6 ENDLOOP: DW $+2 1441.10 0018A6 ELSE 1441.11 0018A6 .... ENDLOOP: DW DOCOLON 1441.12 0018A8 ENDIF 1441.13 0018A8 ENDM 1442 0018A8 ........ DW COMMABRANCH,COMMADEST 1443 0018AC ............ LOOP1: DW LFROM,QDUP,qbran 1444 0018B2 DEST LOOP2 1444.1 0018B2 0800 DW LOOP2-$ 1444.2 0018B4 ENDM 1445 0018B4 ........ DW THEN,bran 1446 0018B8 DEST LOOP1 1446.1 0018B8 F4FF DW LOOP1-$ 1446.2 0018BA ENDM 1447 0018BA .... LOOP2: DW EXIT 1448 0018BC 1449 0018BC ;C LOOP adrs -- L: 0 a1 a2 .. aN -- finish a loop 1450 0018BC ; ['] xloop ENDLOOP ; IMMEDIATE 1451 0018BC IMMED LOO,4,'LOOP',DOCOLON 1451.1 000000 PUBLIC LOO 1451.2 0018BC .... DW link 1451.3 0018BE FE DB 0FEh // ; immediate (LSB=0) 1451.4 0018BF link SET $ 1451.5 0018BF 04 DB 4 1451.6 0018C0 4C4F4F50 DB 'LOOP' 1451.7 0018C4 EVEN 1451.8 0018C4 IF 'DOCOLON'='DOCODE' 1451.9 0018C4 LOO: DW $+2 1451.10 0018C4 ELSE 1451.11 0018C4 .... LOO: DW DOCOLON 1451.12 0018C6 ENDIF 1451.13 0018C6 ENDM 1452 0018C6 ............* DW lit,xloop,ENDLOOP,EXIT 1453 0018CE 1454 0018CE ;C +LOOP adrs -- L: 0 a1 a2 .. aN -- finish a loop 1455 0018CE ; ['] xplusloop ENDLOOP ; IMMEDIATE 1456 0018CE IMMED PLUSLOOP,5,'+LOOP',DOCOLON 1456.1 000000 PUBLIC PLUSLOOP 1456.2 0018CE .... DW link 1456.3 0018D0 FE DB 0FEh // ; immediate (LSB=0) 1456.4 0018D1 link SET $ 1456.5 0018D1 05 DB 5 1456.6 0018D2 2B4C4F4F50 DB '+LOOP' 1456.7 0018D7 00 EVEN 1456.8 0018D8 IF 'DOCOLON'='DOCODE' 1456.9 0018D8 PLUSLOOP: DW $+2 1456.10 0018D8 ELSE 1456.11 0018D8 .... PLUSLOOP: DW DOCOLON 1456.12 0018DA ENDIF 1456.13 0018DA ENDM 1457 0018DA ............* DW lit,xplusloop,ENDLOOP,EXIT 1458 0018E2 1459 0018E2 ;C LEAVE -- L: -- adrs 1460 0018E2 ; ['] UNLOOP ,XT 1461 0018E2 ; ['] branch ,BRANCH IHERE ,NONE >L 1462 0018E2 ; ; IMMEDIATE unconditional forward branch 1463 0018E2 IMMED LEAV,5,'LEAVE',DOCOLON 1463.1 000000 PUBLIC LEAV 1463.2 0018E2 .... DW link 1463.3 0018E4 FE DB 0FEh // ; immediate (LSB=0) 1463.4 0018E5 link SET $ 1463.5 0018E5 05 DB 5 1463.6 0018E6 4C45415645 DB 'LEAVE' 1463.7 0018EB 00 EVEN 1463.8 0018EC IF 'DOCOLON'='DOCODE' 1463.9 0018EC LEAV: DW $+2 1463.10 0018EC ELSE 1463.11 0018EC .... LEAV: DW DOCOLON 1463.12 0018EE ENDIF - 4e-configLP - Page 125 1463.13 0018EE ENDM 1464 0018EE ............ DW lit,UNLOOP,COMMAXT 1465 0018F4 ............ DW lit,bran,COMMABRANCH 1466 0018FA ............* DW IHERE,COMMANONE,TOL,EXIT 1467 001902 1468 001902 ; OTHER OPERATIONS ============================= = 1469 001902 1470 001902 ;X WITHIN n1|u1 n2|u2 n3|u3 -- f n2<=n1R - R> U< ; per ANS document 1472 001902 HEADER WITHIN,6,'WITHIN',DOCOLON 1472.1 000000 PUBLIC WITHIN 1472.2 001902 .... DW link 1472.3 001904 FF DB 0FFh ; not immediate 1472.4 001905 link SET $ 1472.5 001905 06 DB 6 1472.6 001906 57495448494E DB 'WITHIN' 1472.7 00190C EVEN 1472.8 00190C IF 'DOCOLON'='DOCODE' 1472.9 00190C WITHIN: DW $+2 1472.10 00190C ELSE 1472.11 00190C .... WITHIN: DW DOCOLON 1472.12 00190E ENDIF 1472.13 00190E ENDM 1473 00190E ............* DW OVER,MINUS,TOR,MINUS,RFROM,ULESS,EXIT 1474 00191C 1475 00191C ;C MOVE addr1 addr2 u -- smart move 1476 00191C ; VERSION FOR 1 ADDRESS UNIT = 1 CHAR 1477 00191C ; >R 2DUP SWAP DUP R@ + -- ... dst src src+n 1478 00191C ; WITHIN IF R> CMOVE> src <= dst < src+n 1479 00191C ; ELSE R> CMOVE THEN ; otherwise 1480 00191C HEADER MOVE,4,'MOVE',DOCOLON 1480.1 000000 PUBLIC MOVE 1480.2 00191C .... DW link 1480.3 00191E FF DB 0FFh ; not immediate 1480.4 00191F link SET $ 1480.5 00191F 04 DB 4 1480.6 001920 4D4F5645 DB 'MOVE' 1480.7 001924 EVEN 1480.8 001924 IF 'DOCOLON'='DOCODE' 1480.9 001924 MOVE: DW $+2 1480.10 001924 ELSE 1480.11 001924 .... MOVE: DW DOCOLON 1480.12 001926 ENDIF 1480.13 001926 ENDM 1481 001926 ............* DW TOR,TWODUP,SWAP,DUP,RFETCH,PLUS 1482 001932 ........ DW WITHIN,qbran 1483 001936 DEST MOVE1 1483.1 001936 0A00 DW MOVE1-$ 1483.2 001938 ENDM 1484 001938 ............ DW RFROM,CMOVEUP,bran 1485 00193E DEST MOVE2 1485.1 00193E 0600 DW MOVE2-$ 1485.2 001940 ENDM 1486 001940 ........ MOVE1: DW RFROM,CMOVE 1487 001944 .... MOVE2: DW EXIT 1488 001946 1489 001946 ;C DEPTH -- +n number of items on stack 1490 001946 ; SP@ S0 SWAP - 2/ ; 16-BIT VERSION! 1491 001946 HEADER DEPTH,5,'DEPTH',DOCOLON 1491.1 000000 PUBLIC DEPTH 1491.2 001946 .... DW link 1491.3 001948 FF DB 0FFh ; not immediate 1491.4 001949 link SET $ 1491.5 001949 05 DB 5 1491.6 00194A 4445505448 DB 'DEPTH' 1491.7 00194F 00 EVEN 1491.8 001950 IF 'DOCOLON'='DOCODE' 1491.9 001950 DEPTH: DW $+2 1491.10 001950 ELSE 1491.11 001950 .... DEPTH: DW DOCOLON - 4e-configLP - Page 126 1491.12 001952 ENDIF 1491.13 001952 ENDM 1492 001952 ............* DW SPFETCH,S0,SWAP,MINUS,TWOSLASH,EXIT 1493 00195E 1494 00195E ;C ENVIRONMENT? c-addr u -- false system query 1495 00195E ; -- i*x true 1496 00195E ; 2DROP 0 ; the minimal definition! 1497 00195E HEADER ENVIRONMENTQ,12,'ENVIRONMENT?',DOCOL ON 1497.1 000000 PUBLIC ENVIRONMENTQ 1497.2 00195E .... DW link 1497.3 001960 FF DB 0FFh ; not immediate 1497.4 001961 link SET $ 1497.5 001961 0C DB 12 1497.6 001962 454E5649524F* DB 'ENVIRONMENT?' 1497.7 00196E EVEN 1497.8 00196E IF 'DOCOLON'='DOCODE' 1497.9 00196E ENVIRONMENTQ: DW $+2 1497.10 00196E ELSE 1497.11 00196E .... ENVIRONMENTQ: DW DOCOLON 1497.12 001970 ENDIF 1497.13 001970 ENDM 1498 001970 ............ DW TWODROP,ZERO,EXIT 1499 001976 1500 001976 ;U UTILITY WORDS ===================== 1501 001976 1502 001976 ;Z NOOP -- do nothing 1503 001976 HEADER NOOP,4,'NOOP',DOCOLON 1503.1 000000 PUBLIC NOOP 1503.2 001976 .... DW link 1503.3 001978 FF DB 0FFh ; not immediate 1503.4 001979 link SET $ 1503.5 001979 04 DB 4 1503.6 00197A 4E4F4F50 DB 'NOOP' 1503.7 00197E EVEN 1503.8 00197E IF 'DOCOLON'='DOCODE' 1503.9 00197E NOOP: DW $+2 1503.10 00197E ELSE 1503.11 00197E .... NOOP: DW DOCOLON 1503.12 001980 ENDIF 1503.13 001980 ENDM 1504 001980 .... DW EXIT 1505 001982 1506 001982 ;Z FLALIGNED a -- a' align IDP to flash boundary 1507 001982 ; $200 OVER - $1FF AND + ; 1508 001982 HEADER FLALIGNED,9,'FLALIGNED',DOCOLON 1508.1 000000 PUBLIC FLALIGNED 1508.2 001982 .... DW link 1508.3 001984 FF DB 0FFh ; not immediate 1508.4 001985 link SET $ 1508.5 001985 09 DB 9 1508.6 001986 464C414C4947* DB 'FLALIGNED' 1508.7 00198F 00 EVEN 1508.8 001990 IF 'DOCOLON'='DOCODE' 1508.9 001990 FLALIGNED: DW $+2 1508.10 001990 ELSE 1508.11 001990 .... FLALIGNED: DW DOCOLON 1508.12 001992 ENDIF 1508.13 001992 ENDM 1509 001992 ....0002....* DW lit,0200h,OVER,MINUS,lit,01FFh,ANDD,P LUS,EXIT 1510 0019A4 1511 0019A4 ;X MARKER -- create word to restore dictionary 1512 0019A4 ; LATEST @ IHERE HERE 1513 0019A4 ; IHERE FLALIGNED IDP ! align new word to flash boundary 1514 0019A4 ; DUP I@ 1516 0019A4 ; SWAP CELL+ DUP I@ 1517 0019A4 ; SWAP CELL+ I@ fetch saved -- dp idp latest 1518 0019A4 ; OVER FLALIGNED IHERE OVER - FLERASE erase Flash from saved to IHERE 1519 0019A4 ; LATEST ! IDP ! DP ! ; 1520 0019A4 HEADER MARKER,6,'MARKER',DOCOLON - 4e-configLP - Page 127 1520.1 000000 PUBLIC MARKER 1520.2 0019A4 .... DW link 1520.3 0019A6 FF DB 0FFh ; not immediate 1520.4 0019A7 link SET $ 1520.5 0019A7 06 DB 6 1520.6 0019A8 4D41524B4552 DB 'MARKER' 1520.7 0019AE EVEN 1520.8 0019AE IF 'DOCOLON'='DOCODE' 1520.9 0019AE MARKER: DW $+2 1520.10 0019AE ELSE 1520.11 0019AE .... MARKER: DW DOCOLON 1520.12 0019B0 ENDIF 1520.13 0019B0 ENDM 1521 0019B0 ............* DW LATEST,FETCH,IHERE,HERE 1522 0019B8 ............* DW IHERE,FLALIGNED,IDP,STORE 1523 0019C0 ............* DW BUILDS,ICOMMA,ICOMMA,ICOMMA,XDOES 1524 0019CA 3040.... MOV #dodoes,PC ; long direct jump to DODOES 1525 0019CE ........ DW DUP,IFETCH 1526 0019D2 ............* DW SWAP,CELLPLUS,DUP,IFETCH 1527 0019DA ............ DW SWAP,CELLPLUS,IFETCH 1528 0019E0 ............* DW OVER,FLALIGNED,IHERE,OVER,MINUS,FLERA SE 1529 0019EC ............* DW LATEST,STORE,IDP,STORE,DDP,STORE,EXIT 1530 0019FA 1531 0019FA /*** 1532 0019FA ;X WORDS -- list all words in dict. 1533 0019FA ; LATEST @ BEGIN 1534 0019FA ; DUP HCOUNT 7F AND HTYPE SPACE 1535 0019FA ; NFA>LFA H@ 1536 0019FA ; DUP 0= UNTIL 1537 0019FA ; DROP ; 1538 0019FA HEADER WORDS,5,'WORDS',DOCOLON 1539 0019FA DW LATEST,FETCH 1540 0019FA WDS1: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE 1541 0019FA DW NFATOLFA,HFETCH 1542 0019FA DW DUP,ZEROEQUAL,qbran 1543 0019FA DEST WDS1 1544 0019FA DW DROP,EXIT 1545 0019FA ***/ 1546 0019FA 1547 0019FA ;X WORDS -- list all words in dict. Stop and go key version. 1548 0019FA ; LATEST @ BEGIN 1549 0019FA ; KEY? IF KEY DROP KEY 0x0D = IF DROP EXIT THEN THEN 1550 0019FA ; DUP HCOUNT 7F AND HTYPE SPACE 1551 0019FA ; NFA>LFA H@ 1552 0019FA ; DUP 0= UNTIL 1553 0019FA ; DROP ; 1554 0019FA HEADER WORDS,5,'WORDS',DOCOLON 1554.1 000000 PUBLIC WORDS 1554.2 0019FA .... DW link 1554.3 0019FC FF DB 0FFh ; not immediate 1554.4 0019FD link SET $ 1554.5 0019FD 05 DB 5 1554.6 0019FE 574F524453 DB 'WORDS' 1554.7 001A03 00 EVEN 1554.8 001A04 IF 'DOCOLON'='DOCODE' 1554.9 001A04 WORDS: DW $+2 1554.10 001A04 ELSE 1554.11 001A04 .... WORDS: DW DOCOLON 1554.12 001A06 ENDIF 1554.13 001A06 ENDM 1555 001A06 ........ DW LATEST,FETCH 1556 001A0A ........ WDS1: DW KEYQ,qbran 1557 001A0E DEST WDS2 1557.1 001A0E 1000 DW WDS2-$ 1557.2 001A10 ENDM 1558 001A10 ........ DW KEY,DROP ; halt 1559 001A14 ............* DW KEY,BLANK,EQUAL,qbran ; go on if blank, else quit words 1560 001A1C DEST WDS3 1560.1 001A1C 1C00 DW WDS3-$ 1560.2 001A1E ENDM - 4e-configLP - Page 128 1561 001A1E ............*WDS2: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE 1562 001A2C ........ DW NFATOLFA,HFETCH 1563 001A30 ............ DW DUP,ZEROEQUAL,qbran 1564 001A36 DEST WDS1 1564.1 001A36 D4FF DW WDS1-$ 1564.2 001A38 ENDM 1565 001A38 ........ WDS3: DW DROP,EXIT 1566 001A3C 1567 001A3C ;X (U.R) u n -- xxx display u unsigned in n width; primitiv 1568 001A3C ; >R <# 0 #S #> R> OVER - 0 MAX (jump) ; 1569 001A3C HEADLESS PARENUDOTR,DOCOLON 1569.1 000000 PUBLIC PARENUDOTR 1569.2 001A3C IF 'DOCOLON'='DOCODE' 1569.3 001A3C PARENUDOTR: DW $+2 1569.4 001A3C ELSE 1569.5 001A3C .... PARENUDOTR: DW DOCOLON 1569.6 001A3E ENDIF 1569.7 001A3E ENDM 1570 001A3E ............* DW TOR,LESSNUM,ZERO,NUMS,NUMGREATER 1571 001A48 ............* DW RFROM,OVER,MINUS,ZERO,MAX 1572 001A52 .... DW EXIT 1573 001A54 1574 001A54 ;X U.R u n -- display u unsigned in n width 1575 001A54 ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE ; 1576 001A54 HEADER UDOTR,3,'U.R',DOCOLON 1576.1 000000 PUBLIC UDOTR 1576.2 001A54 .... DW link 1576.3 001A56 FF DB 0FFh ; not immediate 1576.4 001A57 link SET $ 1576.5 001A57 03 DB 3 1576.6 001A58 552E52 DB 'U.R' 1576.7 001A5B 00 EVEN 1576.8 001A5C IF 'DOCOLON'='DOCODE' 1576.9 001A5C UDOTR: DW $+2 1576.10 001A5C ELSE 1576.11 001A5C .... UDOTR: DW DOCOLON 1576.12 001A5E ENDIF 1576.13 001A5E ENDM 1577 001A5E .... DW PARENUDOTR 1578 001A60 ............ DW SPACES,TYP,EXIT 1579 001A66 1580 001A66 ;X 0U.R u n -- display u unsigned in n width with leading zeros 1581 001A66 ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE ; 1582 001A66 HEADER ZEROUDOTR,4,'0U.R',DOCOLON 1582.1 000000 PUBLIC ZEROUDOTR 1582.2 001A66 .... DW link 1582.3 001A68 FF DB 0FFh ; not immediate 1582.4 001A69 link SET $ 1582.5 001A69 04 DB 4 1582.6 001A6A 30552E52 DB '0U.R' 1582.7 001A6E EVEN 1582.8 001A6E IF 'DOCOLON'='DOCODE' 1582.9 001A6E ZEROUDOTR: DW $+2 1582.10 001A6E ELSE 1582.11 001A6E .... ZEROUDOTR: DW DOCOLON 1582.12 001A70 ENDIF 1582.13 001A70 ENDM 1583 001A70 .... DW PARENUDOTR 1584 001A72 ............ DW ZEROS,TYP,EXIT 1585 001A78 1586 001A78 ;X ZEROS n -- output n zeros 1587 001A78 ; BEGIN DUP WHILE ZERO 1- REPEAT DROP ; 1588 001A78 HEADER ZEROS,5,'ZEROS',DOCOLON 1588.1 000000 PUBLIC ZEROS 1588.2 001A78 .... DW link 1588.3 001A7A FF DB 0FFh ; not immediate 1588.4 001A7B link SET $ 1588.5 001A7B 05 DB 5 1588.6 001A7C 5A45524F53 DB 'ZEROS' 1588.7 001A81 00 EVEN 1588.8 001A82 IF 'DOCOLON'='DOCODE' - 4e-configLP - Page 129 1588.9 001A82 ZEROS: DW $+2 1588.10 001A82 ELSE 1588.11 001A82 .... ZEROS: DW DOCOLON 1588.12 001A84 ENDIF 1588.13 001A84 ENDM 1589 001A84 ........ ZEROS1: DW DUP,qbran 1590 001A88 DEST ZEROS2 1590.1 001A88 0E00 DW ZEROS2-$ 1590.2 001A8A ENDM 1591 001A8A ....3000....* DW lit,'0',EMIT,ONEMINUS,bran 1592 001A94 DEST ZEROS1 1592.1 001A94 F0FF DW ZEROS1-$ 1592.2 001A96 ENDM 1593 001A96 ........ ZEROS2: DW DROP,EXIT 1594 001A9A 1595 001A9A 1596 001A9A 1597 001A9A ;X DUMP adr n -- dump memory 1598 001A9A ; OVER + SWAP DO 1599 001A9A ; CR I 4 U.R SPACE SPACE 1600 001A9A ; I $10 + I DO I C@ 3 U.R LOOP SPACE SPACE 1601 001A9A ; I $10 + I DO I C@ $7F AND $7E MIN BL MAX EMIT LOOP 1602 001A9A ; 10 +LOOP ; 1603 001A9A HEADER DUMP,4,'DUMP',DOCOLON 1603.1 000000 PUBLIC DUMP 1603.2 001A9A .... DW link 1603.3 001A9C FF DB 0FFh ; not immediate 1603.4 001A9D link SET $ 1603.5 001A9D 04 DB 4 1603.6 001A9E 44554D50 DB 'DUMP' 1603.7 001AA2 EVEN 1603.8 001AA2 IF 'DOCOLON'='DOCODE' 1603.9 001AA2 DUMP: DW $+2 1603.10 001AA2 ELSE 1603.11 001AA2 .... DUMP: DW DOCOLON 1603.12 001AA4 ENDIF 1603.13 001AA4 ENDM 1604 001AA4 ............* DW OVER,PLUS,SWAP,xdo 1605 001AAC ............*LDUMP1: DW CR,II,lit,4,UDOTR,SPACE,SPACE 1606 001ABA ........1000* DW II,lit,10h,PLUS,II,xdo 1607 001AC6 ............*LDUMP2: DW II,CFETCH,lit,3,UDOTR,xloop 1608 001AD2 DEST LDUMP2 1608.1 001AD2 F4FF DW LDUMP2-$ 1608.2 001AD4 ENDM 1609 001AD4 ........ DW SPACE,SPACE 1610 001AD8 ........1000* DW II,lit,10h,PLUS,II,xdo 1611 001AE4 ............*LDUMP3: DW II,CFETCH,lit,7Fh,ANDD,lit,7Eh,MIN,BL ANK,MAX,EMIT,xloop 1612 001AFC DEST LDUMP3 1612.1 001AFC E8FF DW LDUMP3-$ 1612.2 001AFE ENDM 1613 001AFE ....1000.... DW lit,10h,xplusloop 1614 001B04 DEST LDUMP1 1614.1 001B04 A8FF DW LDUMP1-$ 1614.2 001B06 ENDM 1615 001B06 .... DW EXIT 1616 001B08 1617 001B08 ;X .S -- print stack contents 1618 001B08 ; [char] < EMIT DEPTH . BS [char] > EMIT 1619 001B08 ; SP@ S0 < IF 1620 001B08 ; SP@ S0 2 - DO I @ U. -2 +LOOP 1621 001B08 ; THEN ; 1622 001B08 HEADER DOTS,2,'.S',DOCOLON 1622.1 000000 PUBLIC DOTS 1622.2 001B08 .... DW link 1622.3 001B0A FF DB 0FFh ; not immediate 1622.4 001B0B link SET $ 1622.5 001B0B 02 DB 2 1622.6 001B0C 2E53 DB '.S' 1622.7 001B0E EVEN 1622.8 001B0E IF 'DOCOLON'='DOCODE' 1622.9 001B0E DOTS: DW $+2 1622.10 001B0E ELSE 1622.11 001B0E .... DOTS: DW DOCOLON 1622.12 001B10 ENDIF - 4e-configLP - Page 130 1622.13 001B10 ENDM 1623 001B10 ;mk gforth style 1624 001B10 ....3C00.... DW lit,$3C,EMIT 1625 001B16 ........ DW DEPTH,DOT 1626 001B1A ....0800....* DW lit,$08,EMIT,lit,$3E,EMIT,SPACE 1627 001B28 ;/mk 1628 001B28 ............* DW SPFETCH,S0,LESS,qbran 1629 001B30 DEST DOTS2 1629.1 001B30 1C00 DW DOTS2-$ 1629.2 001B32 ENDM 1630 001B32 ............* DW SPFETCH,S0,lit,2,MINUS 1631 001B3C ; DW TWODUP,TOR,TOR, 1632 001B3C .... DW xdo 1633 001B3E ............*DOTS1: DW II,FETCH,UDOT,lit,-2,xplusloop 1634 001B4A DEST DOTS1 1634.1 001B4A F4FF DW DOTS1-$ 1634.2 001B4C ENDM 1635 001B4C ; DW lit,'|',EMIT,RFROM,RFROM 1636 001B4C ; DW xdo 1637 001B4C ;DOTS11: DW II,FETCH,UDOT,lit,-2,xplusloop 1638 001B4C ; DEST DOTS11 1639 001B4C .... DOTS2: DW EXIT 1640 001B4E 1641 001B4E 1642 001B4E ;U ccrc n c -- n' crc process byte 1643 001B4E ; 8 LSHIFT XOR 1644 001B4E ; 8 0 DO ( n' ) 1645 001B4E ; DUP 1 LSHIFT SWAP 8000 AND 0= INVERT 1021 ( CRC-16 ) AND XOR 1646 001B4E ; LOOP 1647 001B4E ; FFFF AND ; 1648 001B4E ; HEADER CCRC,4,'ccrc',DOCODE 1649 001B4E HEADLESS CCRC,DOCODE 1649.1 000000 PUBLIC CCRC 1649.2 001B4E IF 'DOCODE'='DOCODE' 1649.3 001B4E .... CCRC: DW $+2 1649.4 001B50 ELSE 1649.5 001B50 CCRC: DW DOCODE 1649.6 001B50 ENDIF 1649.7 001B50 ENDM 1650 001B50 37F0FF00 AND #00FFh,TOS 1651 001B54 8710 SWPB TOS 1652 001B56 37E4 XOR @PSP+,TOS 1653 001B58 3642 MOV #8,W 1654 001B5A 0757 ccrc1: RLA TOS 1655 001B5C 0228 JNC ccrc2 1656 001B5E 37E02110 XOR #01021h,TOS 1657 001B62 1683 ccrc2: DEC W 1658 001B64 FA23 JNZ ccrc1 1659 001B66 NEXT 1659.1 001B66 3645 MOV @IP+,W // ; fetch word address into W 1659.2 001B68 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1659.3 001B6A ENDM 1660 001B6A 1661 001B6A ;U crc n addr len -- n' crc process string 1662 001B6A ; dup IF over + swap DO ( n ) I C@ ccrc LOOP ELSE 2drop THEN ; 1663 001B6A HEADER CRC,3,'CRC',DOCOLON 1663.1 000000 PUBLIC CRC 1663.2 001B6A .... DW link 1663.3 001B6C FF DB 0FFh ; not immediate 1663.4 001B6D link SET $ 1663.5 001B6D 03 DB 3 1663.6 001B6E 435243 DB 'CRC' 1663.7 001B71 00 EVEN 1663.8 001B72 IF 'DOCOLON'='DOCODE' 1663.9 001B72 CRC: DW $+2 1663.10 001B72 ELSE 1663.11 001B72 .... CRC: DW DOCOLON 1663.12 001B74 ENDIF 1663.13 001B74 ENDM 1664 001B74 ........ DW DUP,qbran 1665 001B78 DEST pcrc2 - 4e-configLP - Page 131 1665.1 001B78 1800 DW pcrc2-$ 1665.2 001B7A ENDM 1666 001B7A ............* DW OVER,PLUS,SWAP,xdo 1667 001B82 ............*pcrc1: DW II,CFETCH,CCRC, xloop 1668 001B8A DEST pcrc1 1668.1 001B8A F8FF DW pcrc1-$ 1668.2 001B8C ENDM 1669 001B8C .... DW bran 1670 001B8E DEST pcrc3 1670.1 001B8E 0400 DW pcrc3-$ 1670.2 001B90 ENDM 1671 001B90 .... pcrc2: DW TWODROP 1672 001B92 .... pcrc3: DW EXIT 1673 001B94 1674 001B94 1675 001B94 1676 001B94 ;U MISC ======================================== ================================ 1677 001B94 1678 001B94 ;C 2CONSTANT w1 w2 -- define a Forth double constant 1679 001B94 ; (machine code fragment) 1681 001B94 ; Note that the constant is stored in Code space. 1682 001B94 HEADER TWOCONSTANT,9,'2CONSTANT',DOCOLON 1682.1 000000 PUBLIC TWOCONSTANT 1682.2 001B94 .... DW link 1682.3 001B96 FF DB 0FFh ; not immediate 1682.4 001B97 link SET $ 1682.5 001B97 09 DB 9 1682.6 001B98 32434F4E5354* DB '2CONSTANT' 1682.7 001BA1 00 EVEN 1682.8 001BA2 IF 'DOCOLON'='DOCODE' 1682.9 001BA2 TWOCONSTANT: DW $+2 1682.10 001BA2 ELSE 1682.11 001BA2 .... TWOCONSTANT: DW DOCOLON 1682.12 001BA4 ENDIF 1682.13 001BA4 ENDM 1683 001BA4 ............* DW BUILDS,ICOMMA,ICOMMA,XDOES 1684 000000 PUBLIC DOTWOCON 1685 001BAC DOTWOCON: ; ( -- w1 w2 ) 1686 001BAC 2482 SUB #4,PSP ; make room on stack 1687 001BAE 84470200 MOV TOS,2(PSP) 1688 001BB2 3746 MOV @W+,TOS ; fetch from parameter field to TOS 1689 001BB4 A4460000 MOV @W,0(PSP) ; fetch secon word from parameter field to NOS 1690 001BB8 NEXT 1690.1 001BB8 3645 MOV @IP+,W // ; fetch word address into W 1690.2 001BBA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1690.3 001BBC ENDM 1691 001BBC 1692 001BBC ;U \ -- backslash 1693 001BBC ; everything up to the end of the current line is a comment. 1694 001BBC ; SOURCE >IN ! DROP ; 1695 001BBC IMMED BACKSLASH,1,'\\',DOCOLON 1695.1 000000 PUBLIC BACKSLASH 1695.2 001BBC .... DW link 1695.3 001BBE FE DB 0FEh // ; immediate (LSB=0) 1695.4 001BBF link SET $ 1695.5 001BBF 01 DB 1 1695.6 001BC0 5C DB '\\' 1695.7 001BC1 00 EVEN 1695.8 001BC2 IF 'DOCOLON'='DOCODE' 1695.9 001BC2 BACKSLASH: DW $+2 1695.10 001BC2 ELSE 1695.11 001BC2 .... BACKSLASH: DW DOCOLON 1695.12 001BC4 ENDIF 1695.13 001BC4 ENDM 1696 001BC4 ............* DW SOURCE,TOIN,STORE,DROP,EXIT - 4e-configLP - Page 132 1697 001BCE 1698 001BCE ;Z .VER -- type message 1699 001BCE HEADER DOTVER,4,'.VER',DOCOLON 1699.1 000000 PUBLIC DOTVER 1699.2 001BCE .... DW link 1699.3 001BD0 FF DB 0FFh ; not immediate 1699.4 001BD1 link SET $ 1699.5 001BD1 04 DB 4 1699.6 001BD2 2E564552 DB '.VER' 1699.7 001BD6 EVEN 1699.8 001BD6 IF 'DOCOLON'='DOCODE' 1699.9 001BD6 DOTVER: DW $+2 1699.10 001BD6 ELSE 1699.11 001BD6 .... DOTVER: DW DOCOLON 1699.12 001BD8 ENDIF 1699.13 001BD8 ENDM 1700 001BD8 ............* DW lit,version,COUNT,ITYPE ; # of version 1701 001BE0 ............* DW lit,stamp,COUNT,ONEMINUS,ITYPE ; time stamp of version 1702 001BEA .... DW DOTBOOTVERSION 1703 001BEC .... DW SPACE 1704 001BEE ............ DW BASE,FETCH,BIN 1705 001BF4 ............* DW COR,FETCH,lit,16,ZEROUDOTR ; flags indicating reset procedure. 1706 001BFE ........ DW BASE,STORE 1707 001C02 .... DW EXIT 1708 001C04 1709 001C04 ;U BELL -- send $07 to Terminal 1710 001C04 HEADER BELL,4,'BELL',DOCOLON 1710.1 000000 PUBLIC BELL 1710.2 001C04 .... DW link 1710.3 001C06 FF DB 0FFh ; not immediate 1710.4 001C07 link SET $ 1710.5 001C07 04 DB 4 1710.6 001C08 42454C4C DB 'BELL' 1710.7 001C0C EVEN 1710.8 001C0C IF 'DOCOLON'='DOCODE' 1710.9 001C0C BELL: DW $+2 1710.10 001C0C ELSE 1710.11 001C0C .... BELL: DW DOCOLON 1710.12 001C0E ENDIF 1710.13 001C0E ENDM 1711 001C0E ....0700....* DW lit,7,EMIT,EXIT 1712 001C16 1713 001C16 ;U ESC[ -- start esc-sequence 1714 001C16 ; 27 emit 91 emit ; 1715 001C16 HEADERLESS ESCPAR,4,'ESC[',DOCOLON 1715.1 000000 PUBLIC ESCPAR 1715.2 001C16 IF 'DOCOLON'='DOCODE' 1715.3 001C16 ESCPAR: DW $+2 1715.4 001C16 ELSE 1715.5 001C16 .... ESCPAR: DW DOCOLON 1715.6 001C18 ENDIF 1715.7 001C18 ENDM 1716 001C18 ....1B00....* DW lit,27,EMIT, lit,91,EMIT 1717 001C24 .... DW EXIT 1718 001C26 1719 001C26 ;U PN -- send parameter of esc-sequence 1720 001C26 ; base @ swap decimal 0 u.r base ! ; 1721 001C26 HEADERLESS PN,2,'PN',DOCOLON 1721.1 000000 PUBLIC PN 1721.2 001C26 IF 'DOCOLON'='DOCODE' 1721.3 001C26 PN: DW $+2 1721.4 001C26 ELSE 1721.5 001C26 .... PN: DW DOCOLON 1721.6 001C28 ENDIF 1721.7 001C28 ENDM 1722 001C28 ........ DW BASE,FETCH 1723 001C2C ............* DW SWAP,DECIMAL,ZERO,UDOTR 1724 001C34 ........ DW BASE,STORE 1725 001C38 .... DW EXIT - 4e-configLP - Page 133 1726 001C3A 1727 001C3A ;U ;PN -- send delimiter ; followed by parameter 1728 001C3A ; 59 emit pn ; 1729 001C3A HEADERLESS SEMIPN,3,';PN',DOCOLON 1729.1 000000 PUBLIC SEMIPN 1729.2 001C3A IF 'DOCOLON'='DOCODE' 1729.3 001C3A SEMIPN: DW $+2 1729.4 001C3A ELSE 1729.5 001C3A .... SEMIPN: DW DOCOLON 1729.6 001C3C ENDIF 1729.7 001C3C ENDM 1730 001C3C ....3B00....* DW lit,59,EMIT,PN 1731 001C44 .... DW EXIT 1732 001C46 1733 001C46 ;U AT-XY x y -- send esc-sequence to terminal 1734 001C46 ; 1+ swap 1+ swap ESC[ pn ;pn 72 emit ; 1735 001C46 HEADER ATXY,5,'AT-XY',DOCOLON 1735.1 000000 PUBLIC ATXY 1735.2 001C46 .... DW link 1735.3 001C48 FF DB 0FFh ; not immediate 1735.4 001C49 link SET $ 1735.5 001C49 05 DB 5 1735.6 001C4A 41542D5859 DB 'AT-XY' 1735.7 001C4F 00 EVEN 1735.8 001C50 IF 'DOCOLON'='DOCODE' 1735.9 001C50 ATXY: DW $+2 1735.10 001C50 ELSE 1735.11 001C50 .... ATXY: DW DOCOLON 1735.12 001C52 ENDIF 1735.13 001C52 ENDM 1736 001C52 ............* DW ONEPLUS,SWAP,ONEPLUS,SWAP 1737 001C5A ........ DW ESCPAR,PN 1738 001C5E ........4800* DW SEMIPN, lit,72,EMIT 1739 001C66 .... DW EXIT 1740 001C68 1741 001C68 ;U PAGE -- send "page" command to terminal to clear screen. 1742 001C68 ; esc[ ." 2J" 0 0 at-xy ; 1743 001C68 HEADER PAGEE,4,'PAGE',DOCOLON 1743.1 000000 PUBLIC PAGEE 1743.2 001C68 .... DW link 1743.3 001C6A FF DB 0FFh ; not immediate 1743.4 001C6B link SET $ 1743.5 001C6B 04 DB 4 1743.6 001C6C 50414745 DB 'PAGE' 1743.7 001C70 EVEN 1743.8 001C70 IF 'DOCOLON'='DOCODE' 1743.9 001C70 PAGEE: DW $+2 1743.10 001C70 ELSE 1743.11 001C70 .... PAGEE: DW DOCOLON 1743.12 001C72 ENDIF 1743.13 001C72 ENDM 1744 001C72 .... DW ESCPAR 1745 001C74 .... DW XISQUOTE 1746 001C76 03 DB (ESC1-ESC0) 1747 001C77 324A ESC0: DB '2J' 1748 001C79 00 EVEN 1749 001C7A .... ESC1: DW ITYPE 1750 001C7C ............ DW ZERO,ZERO,ATXY 1751 001C82 .... DW EXIT 1752 001C84 1753 001C84 ;U BIN -- set number base to binary 1754 001C84 HEADER BIN,3,'BIN',DOCOLON 1754.1 000000 PUBLIC BIN 1754.2 001C84 .... DW link 1754.3 001C86 FF DB 0FFh ; not immediate 1754.4 001C87 link SET $ 1754.5 001C87 03 DB 3 1754.6 001C88 42494E DB 'BIN' 1754.7 001C8B 00 EVEN 1754.8 001C8C IF 'DOCOLON'='DOCODE' 1754.9 001C8C BIN: DW $+2 1754.10 001C8C ELSE 1754.11 001C8C .... BIN: DW DOCOLON - 4e-configLP - Page 134 1754.12 001C8E ENDIF 1754.13 001C8E ENDM 1755 001C8E ....0200....* DW lit,2,BASE,STORE,EXIT 1756 001C98 1757 001C98 ; ommitted, MSP430G2553 RAM is too smal. 1758 001C98 ;U RAM -- compile into RAM. SAVE your system befor using RAM. 1759 001C98 ; here unused 10 - allot idp ! ; Use COLD to swich back to flash. 1760 001C98 ; HEADER RAM,3,'RAM',DOCOLON 1761 001C98 ; DW HERE,UNUSED,lit,0x10,MINUS,ALLOT,ID P,STORE,EXIT 1762 001C98 1763 001C98 ;U TRUE -- f true flag 1764 001C98 HEADER TRUE,4,'TRUE',DOCON 1764.1 000000 PUBLIC TRUE 1764.2 001C98 .... DW link 1764.3 001C9A FF DB 0FFh ; not immediate 1764.4 001C9B link SET $ 1764.5 001C9B 04 DB 4 1764.6 001C9C 54525545 DB 'TRUE' 1764.7 001CA0 EVEN 1764.8 001CA0 IF 'DOCON'='DOCODE' 1764.9 001CA0 TRUE: DW $+2 1764.10 001CA0 ELSE 1764.11 001CA0 .... TRUE: DW DOCON 1764.12 001CA2 ENDIF 1764.13 001CA2 ENDM 1765 001CA2 FFFF DW 0xFFFF 1766 001CA4 1767 001CA4 ;U FALSE -- f false flag 1768 001CA4 HEADER FALSE,5,'FALSE',DOCON 1768.1 000000 PUBLIC FALSE 1768.2 001CA4 .... DW link 1768.3 001CA6 FF DB 0FFh ; not immediate 1768.4 001CA7 link SET $ 1768.5 001CA7 05 DB 5 1768.6 001CA8 46414C5345 DB 'FALSE' 1768.7 001CAD 00 EVEN 1768.8 001CAE IF 'DOCON'='DOCODE' 1768.9 001CAE FALSE: DW $+2 1768.10 001CAE ELSE 1768.11 001CAE .... FALSE: DW DOCON 1768.12 001CB0 ENDIF 1768.13 001CB0 ENDM 1769 001CB0 0000 DW 0x0 1770 001CB2 1771 001CB2 ;C TABLE -- create an empty definition pointing to FLASH 1772 001CB2 ; HEADER 1773 001CB2 ; docreate ,CF code field 1774 001CB2 ; IHERE I, ; store data adr (Harvard) 1775 001CB2 ; Harvard model, separate Code and Data spaces. 1776 001CB2 ; Separate headers model. 1777 001CB2 ; or do this (4e4th): 1778 001CB2 ; : TABLE @ ; 1779 001CB2 HEADER TABLE,5,'TABLE',DOCOLON 1779.1 000000 PUBLIC TABLE 1779.2 001CB2 .... DW link 1779.3 001CB4 FF DB 0FFh ; not immediate 1779.4 001CB5 link SET $ 1779.5 001CB5 05 DB 5 1779.6 001CB6 5441424C45 DB 'TABLE' 1779.7 001CBB 00 EVEN 1779.8 001CBC IF 'DOCOLON'='DOCODE' 1779.9 001CBC TABLE: DW $+2 1779.10 001CBC ELSE 1779.11 001CBC .... TABLE: DW DOCOLON 1779.12 001CBE ENDIF 1779.13 001CBE ENDM 1780 001CBE .... DW HEADR 1781 001CC0 ............ DW lit,docreate,COMMACF 1782 001CC6 ............* DW IHERE,CELL,PLUS,ICOMMA,EXIT 1783 001CD0 1784 001CD0 - 4e-configLP - Page 135 1785 001CD0 ;U Bit manipulation words ---------------------- -------------------------------- 1786 001CD0 ; based on http://www.forth.org/svfig/Len/bits. htm 1787 001CD0 1788 001CD0 ;U SET mask addr -- set bit from mask in addr (cell); use even adr! 1789 001CD0 HEADER wset,3,'SET',DOCODE 1789.1 000000 PUBLIC wset 1789.2 001CD0 .... DW link 1789.3 001CD2 FF DB 0FFh ; not immediate 1789.4 001CD3 link SET $ 1789.5 001CD3 03 DB 3 1789.6 001CD4 534554 DB 'SET' 1789.7 001CD7 00 EVEN 1789.8 001CD8 IF 'DOCODE'='DOCODE' 1789.9 001CD8 .... wset: DW $+2 1789.10 001CDA ELSE 1789.11 001CDA wset: DW DOCODE 1789.12 001CDA ENDIF 1789.13 001CDA ENDM 1790 001CDA A7D40000 BIS @PSP,0(TOS) 1791 001CDE 2453 ADD #2,PSP 1792 001CE0 3744 MOV @PSP+,TOS 1793 001CE2 NEXT 1793.1 001CE2 3645 MOV @IP+,W // ; fetch word address into W 1793.2 001CE4 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1793.3 001CE6 ENDM 1794 001CE6 1795 001CE6 ;U CSET mask addr -- set bit from mask in addr (byte) 1796 001CE6 HEADER cset,4,'CSET',DOCODE 1796.1 000000 PUBLIC cset 1796.2 001CE6 .... DW link 1796.3 001CE8 FF DB 0FFh ; not immediate 1796.4 001CE9 link SET $ 1796.5 001CE9 04 DB 4 1796.6 001CEA 43534554 DB 'CSET' 1796.7 001CEE EVEN 1796.8 001CEE IF 'DOCODE'='DOCODE' 1796.9 001CEE .... cset: DW $+2 1796.10 001CF0 ELSE 1796.11 001CF0 cset: DW DOCODE 1796.12 001CF0 ENDIF 1796.13 001CF0 ENDM 1797 001CF0 E7D40000 BIS.B @PSP,0(TOS) 1798 001CF4 2453 ADD #2,PSP 1799 001CF6 3744 MOV @PSP+,TOS 1800 001CF8 NEXT 1800.1 001CF8 3645 MOV @IP+,W // ; fetch word address into W 1800.2 001CFA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1800.3 001CFC ENDM 1801 001CFC 1802 001CFC ;U CLR mask addr -- reset bit from mask in addr (cell); use even adr! 1803 001CFC HEADER wclr,3,'CLR',DOCODE 1803.1 000000 PUBLIC wclr 1803.2 001CFC .... DW link 1803.3 001CFE FF DB 0FFh ; not immediate 1803.4 001CFF link SET $ 1803.5 001CFF 03 DB 3 1803.6 001D00 434C52 DB 'CLR' 1803.7 001D03 00 EVEN 1803.8 001D04 IF 'DOCODE'='DOCODE' 1803.9 001D04 .... wclr: DW $+2 1803.10 001D06 ELSE 1803.11 001D06 wclr: DW DOCODE 1803.12 001D06 ENDIF 1803.13 001D06 ENDM 1804 001D06 A7C40000 BIC @PSP,0(TOS) 1805 001D0A 2453 ADD #2,PSP 1806 001D0C 3744 MOV @PSP+,TOS 1807 001D0E NEXT 1807.1 001D0E 3645 MOV @IP+,W // ; fetch word address - 4e-configLP - Page 136 into W 1807.2 001D10 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1807.3 001D12 ENDM 1808 001D12 1809 001D12 ;U CCLR mask addr -- reset bit from mask in addr (byte) 1810 001D12 HEADER cclr,4,'CCLR',DOCODE 1810.1 000000 PUBLIC cclr 1810.2 001D12 .... DW link 1810.3 001D14 FF DB 0FFh ; not immediate 1810.4 001D15 link SET $ 1810.5 001D15 04 DB 4 1810.6 001D16 43434C52 DB 'CCLR' 1810.7 001D1A EVEN 1810.8 001D1A IF 'DOCODE'='DOCODE' 1810.9 001D1A .... cclr: DW $+2 1810.10 001D1C ELSE 1810.11 001D1C cclr: DW DOCODE 1810.12 001D1C ENDIF 1810.13 001D1C ENDM 1811 001D1C E7C40000 BIC.B @PSP,0(TOS) 1812 001D20 2453 ADD #2,PSP 1813 001D22 3744 MOV @PSP+,TOS 1814 001D24 NEXT 1814.1 001D24 3645 MOV @IP+,W // ; fetch word address into W 1814.2 001D26 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1814.3 001D28 ENDM 1815 001D28 1816 001D28 ;U CTOGGLE mask addr -- flip bit from mask in addr (byte) 1817 001D28 HEADER ctoggle,7,'CTOGGLE',DOCODE 1817.1 000000 PUBLIC ctoggle 1817.2 001D28 .... DW link 1817.3 001D2A FF DB 0FFh ; not immediate 1817.4 001D2B link SET $ 1817.5 001D2B 07 DB 7 1817.6 001D2C 43544F47474C* DB 'CTOGGLE' 1817.7 001D33 00 EVEN 1817.8 001D34 IF 'DOCODE'='DOCODE' 1817.9 001D34 .... ctoggle: DW $+2 1817.10 001D36 ELSE 1817.11 001D36 ctoggle: DW DOCODE 1817.12 001D36 ENDIF 1817.13 001D36 ENDM 1818 001D36 E7E40000 XOR.B @PSP,0(TOS) 1819 001D3A 2453 ADD #2,PSP 1820 001D3C 3744 MOV @PSP+,TOS 1821 001D3E NEXT 1821.1 001D3E 3645 MOV @IP+,W // ; fetch word address into W 1821.2 001D40 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1821.3 001D42 ENDM 1822 001D42 1823 001D42 ;U CGET mask addr -- flag test bit from mask in addr (byte) 1824 001D42 HEADER cget,4,'CGET',DOCODE 1824.1 000000 PUBLIC cget 1824.2 001D42 .... DW link 1824.3 001D44 FF DB 0FFh ; not immediate 1824.4 001D45 link SET $ 1824.5 001D45 04 DB 4 1824.6 001D46 43474554 DB 'CGET' 1824.7 001D4A EVEN 1824.8 001D4A IF 'DOCODE'='DOCODE' 1824.9 001D4A .... cget: DW $+2 1824.10 001D4C ELSE 1824.11 001D4C cget: DW DOCODE 1824.12 001D4C ENDIF 1824.13 001D4C ENDM 1825 001D4C E7B40000 BIT.B @PSP,0(TOS) 1826 001D50 0224 JZ cget1 1827 001D52 3743 MOV #-1,TOS 1828 001D54 013C JMP cget2 1829 001D56 0743 cget1:MOV #0, TOS - 4e-configLP - Page 137 1830 001D58 2453 cget2:ADD #2,PSP 1831 001D5A NEXT 1831.1 001D5A 3645 MOV @IP+,W // ; fetch word address into W 1831.2 001D5C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1831.3 001D5E ENDM 1832 001D5E 1833 001D5E 1834 001D5E ;U Memory infos -------------------------------- --------------------------------- 1835 001D5E 1836 001D5E /* see also: XLINK configuration file for MSP430G2553 1837 001D5E ram =: 0200-03FF 1838 001D5E 0200-03C9 forth system; userarea, stacks, tib, pad ... 1839 001D5E 03CA-03FF VARAREA for forth variables; check UNUSED ram. 1840 001D5E 1841 001D5E flash =: C000-FFFF 1842 001D5E C000-D7FF MEMBOT to MEMTOP is user flash. Check unsused MEM. 1843 001D5E D800-FDFF kernel (may differ with type of board and system loaded) 1844 001D5E FE00-FFFF INTSEG 1845 001D5E FFE0-FFFF INTVEC 1846 001D5E FFFE-FFFF RESET 1847 001D5E */ 1848 001D5E 1849 000000 EXTERN resetvec 1850 001D5E ;Z RESETADR -- adr reset vector address 1851 001D5E HEADER RESETADR,8,'RESETADR',DOCON 1851.1 000000 PUBLIC RESETADR 1851.2 001D5E .... DW link 1851.3 001D60 FF DB 0FFh ; not immediate 1851.4 001D61 link SET $ 1851.5 001D61 08 DB 8 1851.6 001D62 524553455441* DB 'RESETADR' 1851.7 001D6A EVEN 1851.8 001D6A IF 'DOCON'='DOCODE' 1851.9 001D6A RESETADR: DW $+2 1851.10 001D6A ELSE 1851.11 001D6A .... RESETADR: DW DOCON 1851.12 001D6C ENDIF 1851.13 001D6C ENDM 1852 001D6C .... DW resetvec 1853 001D6E 1854 001D6E ;Z MEMBOT -- adr begining of USERflash 1855 001D6E HEADER MEMBOT,6,'MEMBOT',DOCON 1855.1 000000 PUBLIC MEMBOT 1855.2 001D6E .... DW link 1855.3 001D70 FF DB 0FFh ; not immediate 1855.4 001D71 link SET $ 1855.5 001D71 06 DB 6 1855.6 001D72 4D454D424F54 DB 'MEMBOT' 1855.7 001D78 EVEN 1855.8 001D78 IF 'DOCON'='DOCODE' 1855.9 001D78 MEMBOT: DW $+2 1855.10 001D78 ELSE 1855.11 001D78 .... MEMBOT: DW DOCON 1855.12 001D7A ENDIF 1855.13 001D7A ENDM 1856 001D7A 00C0 DW USERFLASHSTART 1857 001D7C 1858 001D7C ;Z MEMTOP -- adr end of USERflash 1859 001D7C HEADER MEMTOP,6,'MEMTOP',DOCON 1859.1 000000 PUBLIC MEMTOP 1859.2 001D7C .... DW link 1859.3 001D7E FF DB 0FFh ; not immediate 1859.4 001D7F link SET $ 1859.5 001D7F 06 DB 6 1859.6 001D80 4D454D544F50 DB 'MEMTOP' 1859.7 001D86 EVEN 1859.8 001D86 IF 'DOCON'='DOCODE' - 4e-configLP - Page 138 1859.9 001D86 MEMTOP: DW $+2 1859.10 001D86 ELSE 1859.11 001D86 .... MEMTOP: DW DOCON 1859.12 001D88 ENDIF 1859.13 001D88 ENDM 1860 001D88 FFD7 DW USERFLASHEND 1861 001D8A 1862 001D8A ;U MEM -- u bytes left in flash 1863 001D8A ; memtop ihere - ; 1864 001D8A HEADER MEM,3,'MEM',DOCOLON 1864.1 000000 PUBLIC MEM 1864.2 001D8A .... DW link 1864.3 001D8C FF DB 0FFh ; not immediate 1864.4 001D8D link SET $ 1864.5 001D8D 03 DB 3 1864.6 001D8E 4D454D DB 'MEM' 1864.7 001D91 00 EVEN 1864.8 001D92 IF 'DOCOLON'='DOCODE' 1864.9 001D92 MEM: DW $+2 1864.10 001D92 ELSE 1864.11 001D92 .... MEM: DW DOCOLON 1864.12 001D94 ENDIF 1864.13 001D94 ENDM 1865 001D94 ............ DW MEMTOP,IHERE,MINUS 1866 001D9A .... DW EXIT 1867 001D9C 1868 001D9C ;U UNUSED -- u bytes left in RAM 1869 001D9C HEADER UNUSED,6,'UNUSED',DOCOLON 1869.1 000000 PUBLIC UNUSED 1869.2 001D9C .... DW link 1869.3 001D9E FF DB 0FFh ; not immediate 1869.4 001D9F link SET $ 1869.5 001D9F 06 DB 6 1869.6 001DA0 554E55534544 DB 'UNUSED' 1869.7 001DA6 EVEN 1869.8 001DA6 IF 'DOCOLON'='DOCODE' 1869.9 001DA6 UNUSED: DW $+2 1869.10 001DA6 ELSE 1869.11 001DA6 .... UNUSED: DW DOCOLON 1869.12 001DA8 ENDIF 1869.13 001DA8 ENDM 1870 001DA8 ....0004....* DW lit,RAMEND,HERE,MINUS 1871 001DB0 .... DW EXIT 1872 001DB2 1873 001DB2 ;Z VARBOT -- a-addr bottom of Variable Area 1874 001DB2 HEADER VARBOT,6,'VARBOT',DOCON 1874.1 000000 PUBLIC VARBOT 1874.2 001DB2 .... DW link 1874.3 001DB4 FF DB 0FFh ; not immediate 1874.4 001DB5 link SET $ 1874.5 001DB5 06 DB 6 1874.6 001DB6 564152424F54 DB 'VARBOT' 1874.7 001DBC EVEN 1874.8 001DBC IF 'DOCON'='DOCODE' 1874.9 001DBC VARBOT: DW $+2 1874.10 001DBC ELSE 1874.11 001DBC .... VARBOT: DW DOCON 1874.12 001DBE ENDIF 1874.13 001DBE ENDM 1875 001DBE .... DW VARAREA 1876 001DC0 1877 000000 EXTERN intseg,intvecs 1878 001DC0 ;Z TOPSEG -- a-addr bottom of top most segment 1879 001DC0 HEADER TOPSEG,6,'TOPSEG',DOCON 1879.1 000000 PUBLIC TOPSEG 1879.2 001DC0 .... DW link 1879.3 001DC2 FF DB 0FFh ; not immediate 1879.4 001DC3 link SET $ 1879.5 001DC3 06 DB 6 1879.6 001DC4 544F50534547 DB 'TOPSEG' 1879.7 001DCA EVEN 1879.8 001DCA IF 'DOCON'='DOCODE' 1879.9 001DCA TOPSEG: DW $+2 1879.10 001DCA ELSE 1879.11 001DCA .... TOPSEG: DW DOCON 1879.12 001DCC ENDIF - 4e-configLP - Page 139 1879.13 001DCC ENDM 1880 001DCC .... DW intseg 1881 001DCE 1882 001DCE ;Z VECBOT -- a-addr begining of vector segment 1883 001DCE HEADER VECBOT,6,'VECBOT',DOCON 1883.1 000000 PUBLIC VECBOT 1883.2 001DCE .... DW link 1883.3 001DD0 FF DB 0FFh ; not immediate 1883.4 001DD1 link SET $ 1883.5 001DD1 06 DB 6 1883.6 001DD2 564543424F54 DB 'VECBOT' 1883.7 001DD8 EVEN 1883.8 001DD8 IF 'DOCON'='DOCODE' 1883.9 001DD8 VECBOT: DW $+2 1883.10 001DD8 ELSE 1883.11 001DD8 .... VECBOT: DW DOCON 1883.12 001DDA ENDIF 1883.13 001DDA ENDM 1884 001DDA .... DW intvecs 1885 001DDC 1886 001DDC 1887 001DDC ;U ? adr -- u display content of variable 1888 001DDC ; @ u. ; 1889 001DDC HEADER QQ,1,'?',DOCOLON 1889.1 000000 PUBLIC QQ 1889.2 001DDC .... DW link 1889.3 001DDE FF DB 0FFh ; not immediate 1889.4 001DDF link SET $ 1889.5 001DDF 01 DB 1 1889.6 001DE0 3F DB '?' 1889.7 001DE1 00 EVEN 1889.8 001DE2 IF 'DOCOLON'='DOCODE' 1889.9 001DE2 QQ: DW $+2 1889.10 001DE2 ELSE 1889.11 001DE2 .... QQ: DW DOCOLON 1889.12 001DE4 ENDIF 1889.13 001DE4 ENDM 1890 001DE4 ........ DW FETCH,UDOT 1891 001DE8 .... DW EXIT 1892 001DEA 1893 001DEA 1894 001DEA 1895 001DEA ; Note: the first character sent from the MSP430 seems to get 1896 001DEA ; scrambled. I conjecture this is because the baud rate generator 1897 001DEA ; has not reset to the new rate when we attempt to send a character. 1898 001DEA ; See init430f1611.s43 for delay after initialization. 1899 001DEA 1900 001DEA ; EOF 31 001DEA #include "4e-startup.s43" 1 001DEA ;U STARTUP WORDS =============================== ================================ 2 001DEA 3 001DEA ;U .BOOTVERSION -- print boot version 4 001DEA HEADLESS DOTBOOTVERSION,DOCOLON 4.1 000000 PUBLIC DOTBOOTVERSION 4.2 001DEA IF 'DOCOLON'='DOCODE' 4.3 001DEA DOTBOOTVERSION: DW $+2 4.4 001DEA ELSE 4.5 001DEA .... DOTBOOTVERSION: DW DOCOLON 4.6 001DEC ENDIF 4.7 001DEC ENDM 5 001DEC .... DW XISQUOTE 6 001DEE 07 DB (doboot1-doboot0) 7 001DEF 206465627567*doboot0: DB ' debug ' 8 001DF6 EVEN 9 001DF6 .... doboot1: DW ITYPE 10 001DF8 .... DW EXIT 11 001DFA 12 001DFA ;Z ITHERE -- adr find first free flash cell 13 001DFA ; MEMTOP BEGIN 1- - 4e-configLP - Page 140 14 001DFA ; DUP C@ FF <> 15 001DFA ; OVER FL0 < OR UNTIL 1+ ; 16 001DFA HEADER ITHERE,6,'ITHERE',DOCOLON 16.1 000000 PUBLIC ITHERE 16.2 001DFA .... DW link 16.3 001DFC FF DB 0FFh ; not immediate 16.4 001DFD link SET $ 16.5 001DFD 06 DB 6 16.6 001DFE 495448455245 DB 'ITHERE' 16.7 001E04 EVEN 16.8 001E04 IF 'DOCOLON'='DOCODE' 16.9 001E04 ITHERE: DW $+2 16.10 001E04 ELSE 16.11 001E04 .... ITHERE: DW DOCOLON 16.12 001E06 ENDIF 16.13 001E06 ENDM 17 001E06 .... DW MEMTOP 18 001E08 ............*ih1 DW ONEMINUS,DUP,CFETCH,lit,$FF,NOTEQUAL 19 001E14 ............* DW OVER,MEMBOT,LESS,ORR,qbran 20 001E1E DEST ih1 20.1 001E1E EAFF DW ih1-$ 20.2 001E20 ENDM 21 001E20 ........ DW ONEPLUS,EXIT 22 001E24 23 001E24 ;U APPCRC -- crc CRC of APP-dictionary 24 001E24 ; 0 MEMBOT ITHERE OVER - (crc APPU0 #INIT (crc ; 25 001E24 ; HEADER APPCRC,6,'APPCRC',DOCOLON 26 001E24 HEADLESS APPCRC,DOCOLON 26.1 000000 PUBLIC APPCRC 26.2 001E24 IF 'DOCOLON'='DOCODE' 26.3 001E24 APPCRC: DW $+2 26.4 001E24 ELSE 26.5 001E24 .... APPCRC: DW DOCOLON 26.6 001E26 ENDIF 26.7 001E26 ENDM 27 001E26 ....0000 DW lit,0 28 001E2A ............* DW MEMBOT,ITHERE,OVER,MINUS,CRC 29 001E34 ............* DW APPU0,NINIT,CRC,EXIT 30 001E3C 31 000000 EXTERN crcval 32 001E3C 33 001E3C ;U VALID? -- f check if user app crc matches infoB 34 001E3C ; APPCRC crcval I@ = ; 35 001E3C ; HEADER VALIDQ,6,'VALID?',DOCOLON 36 001E3C HEADLESS VALIDQ,DOCOLON 36.1 000000 PUBLIC VALIDQ 36.2 001E3C IF 'DOCOLON'='DOCODE' 36.3 001E3C VALIDQ: DW $+2 36.4 001E3C ELSE 36.5 001E3C .... VALIDQ: DW DOCOLON 36.6 001E3E ENDIF 36.7 001E3E ENDM 37 001E3E ............* DW APPCRC,lit,crcval,IFETCH,EQUAL,EXIT 38 001E4A 39 001E4A ;U SAVE -- save user area to infoB 40 001E4A ; InfoB [ 63 2 + ] Literal FLERASE 41 001E4A ; U0 APPU0 #INIT D->I 42 001E4A ; APPCRC [ crcval ] Literal I! ; 43 001E4A HEADER SAVE,4,'SAVE',DOCOLON 43.1 000000 PUBLIC SAVE 43.2 001E4A .... DW link 43.3 001E4C FF DB 0FFh ; not immediate 43.4 001E4D link SET $ 43.5 001E4D 04 DB 4 43.6 001E4E 53415645 DB 'SAVE' 43.7 001E52 EVEN 43.8 001E52 IF 'DOCOLON'='DOCODE' 43.9 001E52 SAVE: DW $+2 43.10 001E52 ELSE 43.11 001E52 .... SAVE: DW DOCOLON 43.12 001E54 ENDIF 43.13 001E54 ENDM 44 001E54 ; save user area to infoB 45 001E54 ........4100* DW INFOB,lit,63+2,FLERASE 46 001E5C ............* DW U0,APPU0,NINIT,DTOI 47 001E64 ............* DW APPCRC,lit,crcval,ISTORE - 4e-configLP - Page 141 48 001E6C ; save variable area to infoC 49 001E6C ........4100* DW INFOC,lit,63+2,FLERASE 50 001E74 ............* DW HERE,UNUSED,ZERO,FILL 51 001E7C ............* DW VARBOT,INFOC,lit,(VAR_SIZE)*2,DTOI 52 001E86 .... DW EXIT 53 001E88 54 00018E CORREST EQU 018Eh 55 000186 CORPOWERON EQU 0186h 56 001E88 57 001E88 ;Z BOOT -- boot system 58 001E88 HEADER BOOT,4,'BOOT',DOCOLON 58.1 000000 PUBLIC BOOT 58.2 001E88 .... DW link 58.3 001E8A FF DB 0FFh ; not immediate 58.4 001E8B link SET $ 58.5 001E8B 04 DB 4 58.6 001E8C 424F4F54 DB 'BOOT' 58.7 001E90 EVEN 58.8 001E90 IF 'DOCOLON'='DOCODE' 58.9 001E90 BOOT: DW $+2 58.10 001E90 ELSE 58.11 001E90 .... BOOT: DW DOCOLON 58.12 001E92 ENDIF 58.13 001E92 ENDM 59 001E92 ............ DW S2,cget,qbran 60 001E98 DEST boot1 60.1 001E98 2800 DW boot1-$ 60.2 001E9A ENDM 61 001E9A ........ DW VALIDQ,qbran 62 001E9E DEST invalid 62.1 001E9E 0400 DW invalid-$ 62.2 001EA0 ENDM 63 001EA0 .... valid: DW COLD ; valid infoB and dictionary 64 001EA2 ............*invalid:DW COR,FETCH,lit,CORPOWERON,NOTEQUAL,qbr an 65 001EAE DEST boot1 65.1 001EAE 1200 DW boot1-$ 65.2 001EB0 ENDM 66 001EB0 reset1: ; reset and invalid infoB 67 001EB0 ............* DW LATEST,FETCH,MEMBOT,ITHERE,WITHIN,qbr an ; check RAM latest 68 001EBC DEST boot1 68.1 001EBC 0400 DW boot1-$ 68.2 001EBE ENDM 69 001EBE .... DW WARM ; invalid infoB but seemingly valid RAM 70 001EC0 .... boot1: DW WIPE ; invalid infoB but power on or RAM invalid 71 001EC2 72 000000 PUBLIC BOOTIP ; used to init IP register. 73 001EC2 BOOTIP equ BOOT+2 74 001EC2 75 001EC2 ;Z WARM -- use user area from RAM (hopefully intact) 76 001EC2 HEADER WARM,4,'WARM',DOCOLON 76.1 000000 PUBLIC WARM 76.2 001EC2 .... DW link 76.3 001EC4 FF DB 0FFh ; not immediate 76.4 001EC5 link SET $ 76.5 001EC5 04 DB 4 76.6 001EC6 5741524D DB 'WARM' 76.7 001ECA EVEN 76.8 001ECA IF 'DOCOLON'='DOCODE' 76.9 001ECA WARM: DW $+2 76.10 001ECA ELSE 76.11 001ECA .... WARM: DW DOCOLON 76.12 001ECC ENDIF 76.13 001ECC ENDM 77 001ECC .... DW XISQUOTE 78 001ECE 05 DB (warm1-warm0) 79 001ECF 5761726D warm0: DB 'Warm' 80 001ED3 00 EVEN 81 001ED4 .... warm1: DW ITYPE 82 001ED6 .... DW ABORT 83 001ED8 84 001ED8 ;U .COLD -- display COLD message 85 001ED8 HEADLESS DOTCOLD,DOCOLON - 4e-configLP - Page 142 85.1 000000 PUBLIC DOTCOLD 85.2 001ED8 IF 'DOCOLON'='DOCODE' 85.3 001ED8 DOTCOLD: DW $+2 85.4 001ED8 ELSE 85.5 001ED8 .... DOTCOLD: DW DOCOLON 85.6 001EDA ENDIF 85.7 001EDA ENDM 86 001EDA .... DW XISQUOTE 87 001EDC 05 DB (dotcold1-dotcold0) 88 001EDD 436F6C64 dotcold0:DB 'Cold' 89 001EE1 00 EVEN 90 001EE2 .... dotcold1:DW ITYPE 91 001EE4 .... DW EXIT 92 001EE6 93 001EE6 PUBLIC DOTCOLD 94 001EE6 95 001EE6 ;Z COLD -- set user area to latest application 96 001EE6 HEADER COLD,4,'COLD',DOCOLON 96.1 000000 PUBLIC COLD 96.2 001EE6 .... DW link 96.3 001EE8 FF DB 0FFh ; not immediate 96.4 001EE9 link SET $ 96.5 001EE9 04 DB 4 96.6 001EEA 434F4C44 DB 'COLD' 96.7 001EEE EVEN 96.8 001EEE IF 'DOCOLON'='DOCODE' 96.9 001EEE COLD: DW $+2 96.10 001EEE ELSE 96.11 001EEE .... COLD: DW DOCOLON 96.12 001EF0 ENDIF 96.13 001EF0 ENDM 97 001EF0 ............* DW APPU0,U0,NINIT,ITOD ; use application user area 98 001EF8 ............* DW INFOC,VARBOT,lit,0x20,ITOD ; use applicatio n variable area 99 001F02 ............ DW APP,FETCH,EXECUTE ; AUTOSTART Application 100 001F08 .... DW ABORT 101 001F0A 102 000000 PUBLIC COLDIP ; used to init IP register while testing. 103 001F0A COLDIP equ COLD+2 104 001F0A 105 001F0A ;Z FACTORY -- set user area to plain kernel 106 001F0A ; UINIT U0 #INIT I->D SAVE init user area 107 001F0A ; ABORT ; 108 001F0A HEADER FACTORY,7,'FACTORY',DOCOLON 108.1 000000 PUBLIC FACTORY 108.2 001F0A .... DW link 108.3 001F0C FF DB 0FFh ; not immediate 108.4 001F0D link SET $ 108.5 001F0D 07 DB 7 108.6 001F0E 464143544F52* DB 'FACTORY' 108.7 001F15 00 EVEN 108.8 001F16 IF 'DOCOLON'='DOCODE' 108.9 001F16 FACTORY: DW $+2 108.10 001F16 ELSE 108.11 001F16 .... FACTORY: DW DOCOLON 108.12 001F18 ENDIF 108.13 001F18 ENDM 109 001F18 ............* DW UINIT,U0,NINIT,ITOD ; store kernel user area table to user area 110 001F20 ............* DW VARBOT,lit,(VAR_SIZE)*2,ZERO,FILL ; set variables to ZERO 111 001F2A .... DW SAVE 112 001F2C .... DW DOTVER 113 001F2E .... DW EXIT 114 001F30 115 000000 PUBLIC FACTORYIP ; used to init IP register. 116 001F30 FACTORYIP equ FACTORY+2 117 001F30 - 4e-configLP - Page 143 118 001F30 119 001F30 ;U PROFUSE -- adr address of production fuse. 120 001F30 ; constant PROFUSEADR 121 001F30 HEADER PROFUSEADR,7,'PROFUSE',DOCON 121.1 000000 PUBLIC PROFUSEADR 121.2 001F30 .... DW link 121.3 001F32 FF DB 0FFh ; not immediate 121.4 001F33 link SET $ 121.5 001F33 07 DB 7 121.6 001F34 50524F465553* DB 'PROFUSE' 121.7 001F3B 00 EVEN 121.8 001F3C IF 'DOCON'='DOCODE' 121.9 001F3C PROFUSEADR: DW $+2 121.10 001F3C ELSE 121.11 001F3C .... PROFUSEADR: DW DOCON 121.12 001F3E ENDIF 121.13 001F3E ENDM 122 001F3E .... DW PROFUSE 123 001F40 124 001F40 ;U 4E4THPRO -- save app and blow production fuse. 125 001F40 ; SAVE ZERO PROFUSEADR VEC! ; 126 001F40 HEADER FORTHPRO,8,'4E4THPRO',DOCOLON 126.1 000000 PUBLIC FORTHPRO 126.2 001F40 .... DW link 126.3 001F42 FF DB 0FFh ; not immediate 126.4 001F43 link SET $ 126.5 001F43 08 DB 8 126.6 001F44 344534544850* DB '4E4THPRO' 126.7 001F4C EVEN 126.8 001F4C IF 'DOCOLON'='DOCODE' 126.9 001F4C FORTHPRO: DW $+2 126.10 001F4C ELSE 126.11 001F4C .... FORTHPRO: DW DOCOLON 126.12 001F4E ENDIF 126.13 001F4E ENDM 127 001F4E ............* DW SAVE,ZERO,PROFUSEADR,VECSTORE 128 001F56 .... DW EXIT 129 001F58 130 001F58 ;U WIPE -- erase flash but not kernel, reset user area. 131 001F58 ; PROFUSEADR @ IF WIPE ELSE COLD TEHN ; 132 001F58 HEADER WIPE,4,'WIPE',DOCOLON 132.1 000000 PUBLIC WIPE 132.2 001F58 .... DW link 132.3 001F5A FF DB 0FFh ; not immediate 132.4 001F5B link SET $ 132.5 001F5B 04 DB 4 132.6 001F5C 57495045 DB 'WIPE' 132.7 001F60 EVEN 132.8 001F60 IF 'DOCOLON'='DOCODE' 132.9 001F60 WIPE: DW $+2 132.10 001F60 ELSE 132.11 001F60 .... WIPE: DW DOCOLON 132.12 001F62 ENDIF 132.13 001F62 ENDM 133 001F62 ............ DW PROFUSEADR,FETCH,qbran 134 001F68 DEST wipe1 134.1 001F68 0400 DW wipe1-$ 134.2 001F6A ENDM 135 001F6A .... DW PARENWIPE 136 001F6C .... wipe1: DW COLD 137 001F6E 138 001F6E ;U (WIPE) -- erase flash but not kernel, reset user area. 139 001F6E ; MEMBOT USERMEM FLERASE 140 001F6E ; FACTORY ." Wiped" ABORT ; 141 001F6E HEADER PARENWIPE,6,'(WIPE)',DOCOLON 141.1 000000 PUBLIC PARENWIPE 141.2 001F6E .... DW link 141.3 001F70 FF DB 0FFh ; not immediate 141.4 001F71 link SET $ 141.5 001F71 06 DB 6 141.6 001F72 285749504529 DB '(WIPE)' 141.7 001F78 EVEN 141.8 001F78 IF 'DOCOLON'='DOCODE' 141.9 001F78 PARENWIPE: DW $+2 - 4e-configLP - Page 144 141.10 001F78 ELSE 141.11 001F78 .... PARENWIPE: DW DOCOLON 141.12 001F7A ENDIF 141.13 001F7A ENDM 142 001F7A ........0018* DW MEMBOT,lit,USERFLASHEND-USERFLASHSTAR T+1,FLERASE 143 001F82 .... DW FACTORY 144 001F84 .... DW XISQUOTE 145 001F86 07 DB (wipmsg1-wipmsg0) 146 001F87 205769706564 wipmsg0:DB ' Wiped' 147 001F8D 00 EVEN 148 001F8E .... wipmsg1:DW ITYPE 149 001F90 .... DW ABORT ; ABORT never returns 150 001F92 151 001F92 ; finis 32 001F92 33 001F92 #include "4e-MSP430G2553.s43" 1 001F92 ;U MCU specific words - MSP430G2553 ============ ========================== 2 001F92 3 001F92 /* 4 001F92 ; .ID -- Print MCU identifier. 5 001F92 HEADER DOTID,3,'.ID',DOCOLON 6 001F92 DW lit,id,COUNT,ITYPE 7 001F92 DW EXIT 8 001F92 */ 9 001F92 10 001F92 ;U 1MS -- wait about 1 millisecond 11 001F92 ; xx 0 DO yy 0 DO LOOP LOOP ; adjust xx and yy to get a msec. 12 001F92 HEADER ONEMS,3,'1MS',DOCOLON 12.1 000000 PUBLIC ONEMS 12.2 001F92 .... DW link 12.3 001F94 FF DB 0FFh ; not immediate 12.4 001F95 link SET $ 12.5 001F95 03 DB 3 12.6 001F96 314D53 DB '1MS' 12.7 001F99 00 EVEN 12.8 001F9A IF 'DOCOLON'='DOCODE' 12.9 001F9A ONEMS: DW $+2 12.10 001F9A ELSE 12.11 001F9A .... ONEMS: DW DOCOLON 12.12 001F9C ENDIF 12.13 001F9C ENDM 13 001F9C ....2900....* DW lit,41,ZERO,xdo 14 001FA4 ....0B00....*onems1: DW lit,11,ZERO,xdo 15 001FAC .... onems2: DW xloop 16 001FAE DEST onems2 16.1 001FAE FEFF DW onems2-$ 16.2 001FB0 ENDM 17 001FB0 .... DW xloop 18 001FB2 DEST onems1 18.1 001FB2 F2FF DW onems1-$ 18.2 001FB4 ENDM 19 001FB4 .... DW EXIT 20 001FB6 21 001FB6 ;U MS n -- wait about n milliseconds 22 001FB6 ; 0 DO 1MS LOOP ; 23 001FB6 HEADER MS,2,'MS',DOCOLON 23.1 000000 PUBLIC MS 23.2 001FB6 .... DW link 23.3 001FB8 FF DB 0FFh ; not immediate 23.4 001FB9 link SET $ 23.5 001FB9 02 DB 2 23.6 001FBA 4D53 DB 'MS' 23.7 001FBC EVEN 23.8 001FBC IF 'DOCOLON'='DOCODE' 23.9 001FBC MS: DW $+2 23.10 001FBC ELSE 23.11 001FBC .... MS: DW DOCOLON 23.12 001FBE ENDIF 23.13 001FBE ENDM 24 001FBE ........ DW ZERO,xdo 25 001FC2 ........ ms1: DW ONEMS,xloop 26 001FC6 DEST ms1 26.1 001FC6 FCFF DW ms1-$ - 4e-configLP - Page 145 26.2 001FC8 ENDM 27 001FC8 .... DW EXIT 28 001FCA 29 001FCA ;U MCU Peripherie ------------------------------ -------------------------------- 30 001FCA 31 001FCA ;Z P1 -- adr address of port1 output register 32 001FCA HEADER P1,2,'P1',DOCON 32.1 000000 PUBLIC P1 32.2 001FCA .... DW link 32.3 001FCC FF DB 0FFh ; not immediate 32.4 001FCD link SET $ 32.5 001FCD 02 DB 2 32.6 001FCE 5031 DB 'P1' 32.7 001FD0 EVEN 32.8 001FD0 IF 'DOCON'='DOCODE' 32.9 001FD0 P1: DW $+2 32.10 001FD0 ELSE 32.11 001FD0 .... P1: DW DOCON 32.12 001FD2 ENDIF 32.13 001FD2 ENDM 33 001FD2 2100 DW P1OUT 34 001FD4 35 001FD4 ;Z P2 -- adr address of port2 output register 36 001FD4 HEADER P2,2,'P2',DOCON 36.1 000000 PUBLIC P2 36.2 001FD4 .... DW link 36.3 001FD6 FF DB 0FFh ; not immediate 36.4 001FD7 link SET $ 36.5 001FD7 02 DB 2 36.6 001FD8 5032 DB 'P2' 36.7 001FDA EVEN 36.8 001FDA IF 'DOCON'='DOCODE' 36.9 001FDA P2: DW $+2 36.10 001FDA ELSE 36.11 001FDA .... P2: DW DOCON 36.12 001FDC ENDIF 36.13 001FDC ENDM 37 001FDC 2900 DW P2OUT 38 001FDE 39 001FDE ;Z P3 -- adr address of port2 output register 40 001FDE HEADER P3,2,'P3',DOCON 40.1 000000 PUBLIC P3 40.2 001FDE .... DW link 40.3 001FE0 FF DB 0FFh ; not immediate 40.4 001FE1 link SET $ 40.5 001FE1 02 DB 2 40.6 001FE2 5033 DB 'P3' 40.7 001FE4 EVEN 40.8 001FE4 IF 'DOCON'='DOCODE' 40.9 001FE4 P3: DW $+2 40.10 001FE4 ELSE 40.11 001FE4 .... P3: DW DOCON 40.12 001FE6 ENDIF 40.13 001FE6 ENDM 41 001FE6 1900 DW P3OUT 42 001FE8 43 001FE8 ; finis 34 001FE8 #include "4e-LaunchPad.s43" 1 001FE8 ; ---------------------------------------------- ------------------------ 2 001FE8 ; 4e4th is a Forth based on CamelForth 3 001FE8 ; for the Texas Instruments MSP430 4 001FE8 ; 5 001FE8 ; This program is free software; you can redistribute it and/or modify 6 001FE8 ; it under the terms of the GNU General Public License as published by 7 001FE8 ; the Free Software Foundation; either version 3 of the License, or 8 001FE8 ; (at your option) any later version. 9 001FE8 ; 10 001FE8 ; This program is distributed in the hope that it will be useful, - 4e-configLP - Page 146 11 001FE8 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 001FE8 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 001FE8 ; GNU General Public License for more details. 14 001FE8 ; 15 001FE8 ; You should have received a copy of the GNU General Public License 16 001FE8 ; along with this program. If not, see . 17 001FE8 ; 18 001FE8 ; See LICENSE TERMS in Brads file readme.txt as well. 19 001FE8 20 001FE8 ; ---------------------------------------------- ------------------------ 21 001FE8 ; 4e-LaunchPad.s43 - LaunchPad Suporting Words 22 001FE8 ; ---------------------------------------------- ------------------------ 23 001FE8 24 001FE8 25 001FE8 ;U PORTS --------------------------------------- ------------------------ 26 001FE8 27 001FE8 ; TI document SLAU144I - December 2004 - Revised January 2012 28 001FE8 ; The digital I/O registers are listed in Table 8-2. 29 001FE8 30 001FE8 ;U \ P1in = $20 31 001FE8 ;U \ P1out = $21 32 001FE8 ;U \ P1dir = $22 33 001FE8 34 001FE8 ;U \ P2in = $28 35 001FE8 ;U \ P2out = $29 36 001FE8 ;U \ P2dir = $2A 37 001FE8 38 001FE8 ;U \ LED - portpinX->---resistor---LED---GND 39 001FE8 ;U \ P1.0 - red LED 40 001FE8 ;U \ P1.6 - green LED 41 001FE8 42 001FE8 ;U RED -- mask port red LED mask and port address 43 001FE8 HEADER red,3,'RED',DOTWOCON 43.1 000000 PUBLIC red 43.2 001FE8 .... DW link 43.3 001FEA FF DB 0FFh ; not immediate 43.4 001FEB link SET $ 43.5 001FEB 03 DB 3 43.6 001FEC 524544 DB 'RED' 43.7 001FEF 00 EVEN 43.8 001FF0 IF 'DOTWOCON'='DOCODE' 43.9 001FF0 red: DW $+2 43.10 001FF0 ELSE 43.11 001FF0 .... red: DW DOTWOCON 43.12 001FF2 ENDIF 43.13 001FF2 ENDM 44 001FF2 2100 DW P1OUT 45 001FF4 0100 DW 00000001b 46 001FF6 47 001FF6 ;U GREEN -- mask port green LED mask and port address 48 001FF6 HEADER green,5,'GREEN',DOTWOCON 48.1 000000 PUBLIC green 48.2 001FF6 .... DW link 48.3 001FF8 FF DB 0FFh ; not immediate 48.4 001FF9 link SET $ 48.5 001FF9 05 DB 5 48.6 001FFA 475245454E DB 'GREEN' 48.7 001FFF 00 EVEN 48.8 002000 IF 'DOTWOCON'='DOCODE' 48.9 002000 green: DW $+2 48.10 002000 ELSE 48.11 002000 .... green: DW DOTWOCON 48.12 002002 ENDIF 48.13 002002 ENDM 49 002002 2100 DW P1OUT - 4e-configLP - Page 147 50 002004 4000 DW 01000000b 51 002006 52 002006 ;U \ Switch S2 53 002006 ;U portpin P1.3 --->0_0----GND 54 002006 ;U S2 -- mask port second button mask and port address 55 002006 HEADER S2,2,'S2',DOTWOCON 55.1 000000 PUBLIC S2 55.2 002006 .... DW link 55.3 002008 FF DB 0FFh ; not immediate 55.4 002009 link SET $ 55.5 002009 02 DB 2 55.6 00200A 5332 DB 'S2' 55.7 00200C EVEN 55.8 00200C IF 'DOTWOCON'='DOCODE' 55.9 00200C S2: DW $+2 55.10 00200C ELSE 55.11 00200C .... S2: DW DOTWOCON 55.12 00200E ENDIF 55.13 00200E ENDM 56 00200E 2000 DW P1IN 57 002010 0800 DW 00001000b 58 002012 59 002012 ;U S2? -- f test button S2, true is pressed 60 002012 HEADER SQEST,3,'S2?',DOCOLON 60.1 000000 PUBLIC SQEST 60.2 002012 .... DW link 60.3 002014 FF DB 0FFh ; not immediate 60.4 002015 link SET $ 60.5 002015 03 DB 3 60.6 002016 53323F DB 'S2?' 60.7 002019 00 EVEN 60.8 00201A IF 'DOCOLON'='DOCODE' 60.9 00201A SQEST: DW $+2 60.10 00201A ELSE 60.11 00201A .... SQEST: DW DOCOLON 60.12 00201C ENDIF 60.13 00201C ENDM 61 00201C ............* DW S2, cget, ZEROEQUAL, EXIT 62 002024 63 002024 ; ---------------------------------------------- ------------------------ 35 002024 36 002024 ; #include "4e-isrsup430.s43" 37 002024 ; #include "4e-onewire.s43" 38 002024 ; #include "4e-LPM.s43" 39 002024 ; #include "4e-WAS430G2553.s43" 40 002024 41 002024 42 000000 PUBLIC lastword 43 002024 lastword equ link 44 002024 45 002024 END ACCVIE #define, value: (0x20), line: 132:2 ACCVIFG #define, value: (0x0004u), line: 448:2 ADC10AE0_ #define, value: (0x004Au), line: 167:2 168:2 ADC10B1 #define, value: (0x002), line: 271:2 ADC10BUSY #define, value: (0x0001u), line: 211:2 ADC10CT #define, value: (0x004), line: 272:2 ADC10CTL0_ #define, value: (0x01B0u), line: 170:2 171:2 ADC10CTL1_ #define, value: (0x01B2u), line: 172:2 173:2 ADC10DF #define, value: (0x0200u), line: 220:2 ADC10DISABLE #define, value: (0x000), line: 274:2 ADC10DIV0 #define, value: (0x0020u), line: 216:2 ADC10DIV1 #define, value: (0x0040u), line: 217:2 ADC10DIV2 #define, value: (0x0080u), line: 218:2 ADC10DIV_0 #define, value: (0*0x20u), line: 238:2 ADC10DIV_1 #define, value: (1*0x20u), line: 239:2 ADC10DIV_2 #define, value: (2*0x20u), line: 240:2 ADC10DIV_3 #define, value: (3*0x20u), line: 241:2 ADC10DIV_4 #define, value: (4*0x20u), line: 242:2 ADC10DIV_5 #define, value: (5*0x20u), line: 243:2 ADC10DIV_6 #define, value: (6*0x20u), line: 244:2 ADC10DIV_7 #define, value: (7*0x20u), line: 245:2 ADC10DTC0_ #define, value: (0x0048u), line: 163:2 164:2 - 4e-configLP - Page 148 ADC10DTC1_ #define, value: (0x0049u), line: 165:2 166:2 ADC10FETCH #define, value: (0x001), line: 270:2 ADC10IE #define, value: (0x008), line: 183:2 ADC10IFG #define, value: (0x004), line: 182:2 ADC10MEM_ #define, value: (0x01B4u), line: 174:2 175:2 ADC10ON #define, value: (0x010), line: 184:2 ADC10SA_ #define, value: (0x01BCu), line: 176:2 177:2 ADC10SC #define, value: (0x001), line: 180:2 ADC10SHT0 #define, value: (0x800), line: 191:2 ADC10SHT1 #define, value: (0x1000u), line: 192:2 ADC10SHT_0 #define, value: (0*0x800u), line: 196:2 ADC10SHT_1 #define, value: (1*0x800u), line: 197:2 ADC10SHT_2 #define, value: (2*0x800u), line: 198:2 ADC10SHT_3 #define, value: (3*0x800u), line: 199:2 ADC10SR #define, value: (0x400), line: 190:2 ADC10SSEL0 #define, value: (0x0008u), line: 214:2 ADC10SSEL1 #define, value: (0x0010u), line: 215:2 ADC10SSEL_0 #define, value: (0*8u), line: 233:2 ADC10SSEL_1 #define, value: (1*8u), line: 234:2 ADC10SSEL_2 #define, value: (2*8u), line: 235:2 ADC10SSEL_3 #define, value: (3*8u), line: 236:2 ADC10TB #define, value: (0x008), line: 273:2 ADC10_VECTOR #define, value: (5 * 2u), line: 965:2 BCSCTL1_ #define, value: (0x0057u), line: 283:2 284:2 BCSCTL2_ #define, value: (0x0058u), line: 285:2 286:2 BCSCTL3_ #define, value: (0x0053u), line: 287:2 288:2 BIT0 #define, value: (0x0001u), line: 57:2 BIT1 #define, value: (0x0002u), line: 58:2 BIT2 #define, value: (0x0004u), line: 59:2 BIT3 #define, value: (0x0008u), line: 60:2 BIT4 #define, value: (0x0010u), line: 61:2 BIT5 #define, value: (0x0020u), line: 62:2 BIT6 #define, value: (0x0040u), line: 63:2 BIT7 #define, value: (0x0080u), line: 64:2 BIT8 #define, value: (0x0100u), line: 65:2 BIT9 #define, value: (0x0200u), line: 66:2 BITA #define, value: (0x0400u), line: 67:2 BITB #define, value: (0x0800u), line: 68:2 BITC #define, value: (0x1000u), line: 69:2 BITD #define, value: (0x2000u), line: 70:2 BITE #define, value: (0x4000u), line: 71:2 BITF #define, value: (0x8000u), line: 72:2 BLKWRT #define, value: (0x0080u), line: 423:2 BUSY #define, value: (0x0001u), line: 446:2 C #define, value: (0x0001u), line: 78:2 CACTL1_ #define, value: (0x0059u), line: 365:2 366:2 CACTL2_ #define, value: (0x005Au), line: 367:2 368:2 CAEX #define, value: (0x80), line: 379:2 CAF #define, value: (0x02), line: 387:2 CAIE #define, value: (0x02), line: 373:2 CAIES #define, value: (0x04), line: 374:2 CAIFG #define, value: (0x01), line: 372:2 CALBC1_12MHZ_ #define, value: (0x10FBu), line: 946:2 947:2 CALBC1_16MHZ_ #define, value: (0x10F9u), line: 942:2 943:2 CALBC1_1MHZ_ #define, value: (0x10FFu), line: 954:2 955:2 CALBC1_8MHZ_ #define, value: (0x10FDu), line: 950:2 951:2 CALDCO_12MHZ_ #define, value: (0x10FAu), line: 944:2 945:2 CALDCO_16MHZ_ #define, value: (0x10F8u), line: 940:2 941:2 CALDCO_1MHZ_ #define, value: (0x10FEu), line: 952:2 953:2 CALDCO_8MHZ_ #define, value: (0x10FCu), line: 948:2 949:2 CAON #define, value: (0x08), line: 375:2 CAOUT #define, value: (0x01), line: 386:2 CAP #define, value: (0x0100u), line: 604:2 CAPD0 #define, value: (0x01), line: 395:2 CAPD1 #define, value: (0x02), line: 396:2 CAPD2 #define, value: (0x04), line: 397:2 CAPD3 #define, value: (0x08), line: 398:2 CAPD4 #define, value: (0x10), line: 399:2 CAPD5 #define, value: (0x20), line: 400:2 CAPD6 #define, value: (0x40), line: 401:2 CAPD7 #define, value: (0x80), line: 402:2 CAPD_ #define, value: (0x005Bu), line: 369:2 370:2 CAREF0 #define, value: (0x10), line: 376:2 CAREF1 #define, value: (0x20), line: 377:2 CAREF_0 #define, value: (0x00), line: 381:2 CAREF_1 #define, value: (0x10), line: 382:2 CAREF_2 #define, value: (0x20), line: 383:2 CAREF_3 #define, value: (0x30), line: 384:2 - 4e-configLP - Page 149 CARSEL #define, value: (0x40), line: 378:2 CASHORT #define, value: (0x80), line: 393:2 CCI #define, value: (0x0008u), line: 609:2 CCIE #define, value: (0x0010u), line: 608:2 CCIFG #define, value: (0x0001u), line: 612:2 CCIS0 #define, value: (0x1000u), line: 601:2 CCIS1 #define, value: (0x2000u), line: 600:2 CCIS_0 #define, value: (0*0x1000u), line: 622:2 CCIS_1 #define, value: (1*0x1000u), line: 623:2 CCIS_2 #define, value: (2*0x1000u), line: 624:2 CCIS_3 #define, value: (3*0x1000u), line: 625:2 CCR0 #define, value: TACCR0, line: 565:2 CCR0_ #define, value: TACCR0_, line: 571:2 CCR1 #define, value: TACCR1, line: 566:2 CCR1_ #define, value: TACCR1_, line: 572:2 CCR2 #define, value: TACCR2, line: 567:2 CCR2_ #define, value: TACCR2_, line: 573:2 CCTL0 #define, value: TACCTL0, line: 562:2 CCTL0_ #define, value: TACCTL0_, line: 568:2 CCTL1 #define, value: TACCTL1, line: 563:2 CCTL1_ #define, value: TACCTL1_, line: 569:2 CCTL2 #define, value: TACCTL2, line: 564:2 CCTL2_ #define, value: TACCTL2_, line: 570:2 CM0 #define, value: (0x4000u), line: 599:2 CM1 #define, value: (0x8000u), line: 598:2 CM_0 #define, value: (0*0x4000u), line: 626:2 CM_1 #define, value: (1*0x4000u), line: 627:2 CM_2 #define, value: (2*0x4000u), line: 628:2 CM_3 #define, value: (3*0x4000u), line: 629:2 COMPARATORA_VECTOR #define, value: (11 * 2u), line: 971:2 CONSEQ0 #define, value: (0x0002u), line: 212:2 CONSEQ1 #define, value: (0x0004u), line: 213:2 CONSEQ_0 #define, value: (0*2u), line: 228:2 CONSEQ_1 #define, value: (1*2u), line: 229:2 CONSEQ_2 #define, value: (2*2u), line: 230:2 CONSEQ_3 #define, value: (3*2u), line: 231:2 COV #define, value: (0x0002u), line: 611:2 CPUOFF #define, value: (0x0010u), line: 83:2 DCO0 #define, value: (0x20), line: 295:2 DCO1 #define, value: (0x40), line: 296:2 DCO2 #define, value: (0x80), line: 297:2 DCOCTL_ #define, value: (0x0056u), line: 281:2 282:2 DEFC #define, line: 42:2 128:2 135:2 143:2 151:2 164:2 166:2 168:2 282:2 284:2 286:2 288:2 366:2 368:2 370:2 462:2 464:2 466:2 468:2 470:2 472:2 474:2 476:2 478:2 481:2 483:2 485:2 487:2 489:2 491:2 493:2 495:2 497:2 505:2 507:2 509:2 511:2 513:2 515:2 677:2 679:2 681:2 683:2 685:2 687:2 689:2 691:2 693:2 695:2 697:2 702:2 704:2 706:2 708:2 710:2 712:2 714:2 716:2 941:2 943:2 945:2 947:2 949:2 951:2 953:2 955:2 DEFW #define, line: 43:2 171:2 173:2 175:2 177:2 410:2 412:2 414:2 523:2 525:2 527:2 529:2 531:2 533:2 535:2 537:2 539:2 645:2 647:2 649:2 651:2 653:2 655:2 657:2 659:2 661:2 718:2 720:2 893:2 DIVA0 #define, value: (0x10), line: 303:2 DIVA1 #define, value: (0x20), line: 304:2 DIVA_0 #define, value: (0x00), line: 308:2 DIVA_1 #define, value: (0x10), line: 309:2 DIVA_2 #define, value: (0x20), line: 310:2 DIVA_3 #define, value: (0x30), line: 311:2 DIVM0 #define, value: (0x10), line: 316:2 DIVM1 #define, value: (0x20), line: 317:2 DIVM_0 #define, value: (0x00), line: 326:2 DIVM_1 #define, value: (0x10), line: 327:2 DIVM_2 #define, value: (0x20), line: 328:2 DIVM_3 #define, value: (0x30), line: 329:2 - 4e-configLP - Page 150 DIVS0 #define, value: (0x02), line: 313:2 DIVS1 #define, value: (0x04), line: 314:2 DIVS_0 #define, value: (0x00), line: 321:2 DIVS_1 #define, value: (0x02), line: 322:2 DIVS_2 #define, value: (0x04), line: 323:2 DIVS_3 #define, value: (0x06), line: 324:2 EMEX #define, value: (0x0020u), line: 451:2 ENC #define, value: (0x002), line: 181:2 ERASE #define, value: (0x0002u), line: 420:2 327:4 FAIL #define, value: (0x0080u), line: 453:2 FCTL1_ #define, value: (0x0128u), line: 409:2 410:2 FCTL2_ #define, value: (0x012Au), line: 411:2 412:2 FCTL3_ #define, value: (0x012Cu), line: 413:2 414:2 FN0 #define, value: (0x0001u), line: 426:2 FN1 #define, value: (0x0002u), line: 427:2 FN2 #define, value: (0x0004u), line: 429:2 FN3 #define, value: (0x0008u), line: 432:2 FN4 #define, value: (0x0010u), line: 435:2 FN5 #define, value: (0x0020u), line: 437:2 FRKEY #define, value: (0x9600u), line: 416:2 FSSEL0 #define, value: (0x0040u), line: 438:2 FSSEL1 #define, value: (0x0080u), line: 439:2 FSSEL_0 #define, value: (0x0000u), line: 441:2 FSSEL_1 #define, value: (0x0040u), line: 442:2 FSSEL_2 #define, value: (0x0080u), line: 443:2 FSSEL_3 #define, value: (0x00C0u), line: 444:2 FWKEY #define, value: (0xA500u), line: 417:2 326:4 327:4 329:4 330:4 371:4 372:4 375:4 376:4 392:4 393:4 395:4 396:4 426:4 427:4 430:4 431:4 461:4 462:4 480:4 481:4 FXKEY #define, value: (0x3300u), line: 418:2 GIE #define, value: (0x0008u), line: 82:2 HALLOT #define, value: IALLOT, line: 824:6 1238:6 HCCOMMA #define, value: ICCOMMA, line: 826:6 1236:6 HCFETCH #define, value: ICFETCH, line: 827:6 935:6 1238:6 HCOMMA #define, value: ICOMMA, line: 825:6 1235:6 HCOUNT #define, value: ICOUNT, line: 671:6 929:6 1561:6 HCSTORE #define, value: ICSTORE, line: 829:6 1307:6 HFETCH #define, value: IFETCH, line: 828:6 958:6 1297:6 1562:6 HHERE #define, value: IHERE, line: 823:6 1237:6 HSTORE #define, value: ISTORE, line: 830:6 HTYPE #define, value: ITYPE, line: 672:6 1561:6 HWORD #define, value: IWORDC, line: 673:6 1238:6 ICFETCH #define, value: CFETCH, line: 444:4 592:6 935:6 1238:6 ICOUNT #define, value: COUNT, line: 547:6 579:6 929:6 1561:6 ID0 #define, value: (0x0040u), line: 578:2 ID1 #define, value: (0x0080u), line: 577:2 ID_0 #define, value: (0*0x40u), line: 589:2 ID_1 #define, value: (1*0x40u), line: 590:2 ID_2 #define, value: (2*0x40u), line: 591:2 ID_3 #define, value: (3*0x40u), line: 592:2 IE1_ #define, value: (0x0000u), line: 127:2 128:2 IE2_ #define, value: (0x0001u), line: 142:2 143:2 IFETCH #define, value: FETCH, line: 443:4 591:6 958:6 1297:6 1525:6 1526:6 1527:6 1562:6 37:7 IFG1_ #define, value: (0x0002u), line: 134:2 135:2 IFG2_ #define, value: (0x0003u), line: 150:2 151:2 INCH0 #define, value: (0x1000u), line: 223:2 INCH1 #define, value: (0x2000u), line: 224:2 INCH2 #define, value: (0x4000u), line: 225:2 INCH3 #define, value: (0x8000u), line: 226:2 INCH_0 #define, value: (0*0x1000u), line: 252:2 INCH_1 #define, value: (1*0x1000u), line: 253:2 INCH_10 #define, value: (10*0x1000u), line: 262:2 INCH_11 #define, value: (11*0x1000u), line: 263:2 INCH_12 #define, value: (12*0x1000u), line: 264:2 INCH_13 #define, value: (13*0x1000u), line: 265:2 INCH_14 #define, value: (14*0x1000u), line: 266:2 INCH_15 #define, value: (15*0x1000u), line: 267:2 INCH_2 #define, value: (2*0x1000u), line: 254:2 INCH_3 #define, value: (3*0x1000u), line: 255:2 INCH_4 #define, value: (4*0x1000u), line: 256:2 INCH_5 #define, value: (5*0x1000u), line: 257:2 INCH_6 #define, value: (6*0x1000u), line: 258:2 INCH_7 #define, value: (7*0x1000u), line: 259:2 INCH_8 #define, value: (8*0x1000u), line: 260:2 INCH_9 #define, value: (9*0x1000u), line: 261:2 - 4e-configLP - Page 151 INDEX #define, value: R8, line: 52:3 681:4 684:4 685:4 694:4 698:4 706:4 711:4 719:4 733:4 INFOEND #define, value: (0x10FF), line: 28:3 318:4 362:4 417:4 INFOSEG #define, value: (128), line: 37:3 339:4 340:4 INFOSTART #define, value: (0x1000), line: 27:3 316:4 360:4 415:4 IP #define, value: R5, line: 47:3 52:4 53:4 57:4 58:4 67:4 68:4 69:4 97:4 107:4 119:4 147:4 148:4 149:4 150:4 167:4 173:4 178:4 185:4 193:4 201:4 206:4 216:4 223:4 230:4 237:4 243:4 250:4 256:4 268:4 274:4 279:4 286:4 343:4 380:4 400:4 487:4 495:4 501:4 508:4 515:4 520:4 525:4 530:4 535:4 541:4 546:4 551:4 556:4 561:4 566:4 577:4 589:4 598:4 605:4 613:4 625:4 660:4 660:4 661:4 668:4 669:4 687:4 697:4 700:4 710:4 713:4 721:4 729:4 735:4 764:4 795:4 811:4 828:4 845:4 868:4 883:4 903:4 945:4 956:4 1659:6 1690:6 1793:6 1800:6 1807:6 1814:6 1821:6 1831:6 IRACL #define, value: R12, line: 68:3 746:4 754:4 762:4 775:4 780:4 794:4 IRACM #define, value: R13, line: 69:3 747:4 755:4 763:4 IRBT #define, value: W, line: 70:3 751:4 752:4 759:4 776:4 782:4 IROP1 #define, value: TOS, line: 65:3 752:4 777:4 779:4 787:4 IROP2L #define, value: R10, line: 66:3 743:4 754:4 756:4 770:4 784:4 IROP2M #define, value: R11, line: 67:3 750:4 755:4 757:4 769:4 777:4 779:4 785:4 787:4 793:4 ISREND #define, value: (0xFFDF), line: 35:3 311:4 ISRSTART #define, value: (0xFE00), line: 34:3 309:4 ISSH #define, value: (0x0100u), line: 219:2 ITYPE #define, value: TYP, line: 546:6 650:6 1152:6 1190:6 1561:6 1700:6 1701:6 1749:6 9:7 81:7 90:7 148:7 KEYV #define, value: (0x0002u), line: 447:2 LFXT1OF #define, value: (0x01), line: 336:2 LFXT1S0 #define, value: (0x10), line: 340:2 LFXT1S1 #define, value: (0x20), line: 341:2 LFXT1S_0 #define, value: (0x00), line: 350:2 LFXT1S_1 #define, value: (0x10), line: 351:2 LFXT1S_2 #define, value: (0x20), line: 352:2 LFXT1S_3 #define, value: (0x30), line: 353:2 LIMIT #define, value: R9, line: 53:3 680:4 682:4 683:4 685:4 699:4 712:4 720:4 734:4 LOCK #define, value: (0x0010u), line: 450:2 330:4 376:4 396:4 431:4 481:4 LOCKA #define, value: (0x0040u), line: 452:2 LPM0 #define, value: (CPUOFF), line: 91:2 LPM1 #define, value: (SCG0+CPUOFF), line: 92:2 LPM2 #define, value: (SCG1+CPUOFF), line: 93:2 LPM3 #define, value: (SCG1+SCG0+CPUOFF), line: 94:2 LPM4 #define, value: (SCG1+SCG0+OSCOFF+CPUOFF), line: 95:2 MAINSEG #define, value: (512), line: 36:3 339:4 MC0 #define, value: (0x0010u), line: 580:2 MC1 #define, value: (0x0020u), line: 579:2 MC_0 #define, value: (0*0x10u), line: 585:2 MC_1 #define, value: (1*0x10u), line: 586:2 MC_2 #define, value: (2*0x10u), line: 587:2 MC_3 #define, value: (3*0x10u), line: 588:2 MERAS #define, value: (0x0004u), line: 421:2 MOD0 #define, value: (0x01), line: 290:2 MOD1 #define, value: (0x02), line: 291:2 MOD2 #define, value: (0x04), line: 292:2 MOD3 #define, value: (0x08), line: 293:2 MOD4 #define, value: (0x10), line: 294:2 MSC #define, value: (0x080), line: 187:2 N #define, value: (0x0004u), line: 80:2 - 4e-configLP - Page 152 NMIIE #define, value: (0x10), line: 131:2 NMIIFG #define, value: (0x10), line: 140:2 NMI_VECTOR #define, value: (14 * 2u), line: 974:2 OFIE #define, value: (0x02), line: 130:2 OFIFG #define, value: (0x02), line: 137:2 OSCOFF #define, value: (0x0020u), line: 84:2 OUT #define, value: (0x0004u), line: 610:2 OUTMOD0 #define, value: (0x0020u), line: 607:2 OUTMOD1 #define, value: (0x0040u), line: 606:2 OUTMOD2 #define, value: (0x0080u), line: 605:2 OUTMOD_0 #define, value: (0*0x20u), line: 614:2 OUTMOD_1 #define, value: (1*0x20u), line: 615:2 OUTMOD_2 #define, value: (2*0x20u), line: 616:2 OUTMOD_3 #define, value: (3*0x20u), line: 617:2 OUTMOD_4 #define, value: (4*0x20u), line: 618:2 OUTMOD_5 #define, value: (5*0x20u), line: 619:2 OUTMOD_6 #define, value: (6*0x20u), line: 620:2 OUTMOD_7 #define, value: (7*0x20u), line: 621:2 P1DIR_ #define, value: (0x0022u), line: 465:2 466:2 P1IES_ #define, value: (0x0024u), line: 469:2 470:2 P1IE_ #define, value: (0x0025u), line: 471:2 472:2 P1IFG_ #define, value: (0x0023u), line: 467:2 468:2 P1IN_ #define, value: (0x0020u), line: 461:2 462:2 P1OUT_ #define, value: (0x0021u), line: 463:2 464:2 P1REN_ #define, value: (0x0027u), line: 477:2 478:2 P1SEL2_ #define, value: (0x0041u), line: 475:2 476:2 P1SEL_ #define, value: (0x0026u), line: 473:2 474:2 P2CA0 #define, value: (0x04), line: 388:2 P2CA1 #define, value: (0x08), line: 389:2 P2CA2 #define, value: (0x10), line: 390:2 P2CA3 #define, value: (0x20), line: 391:2 P2CA4 #define, value: (0x40), line: 392:2 P2DIR_ #define, value: (0x002Au), line: 484:2 485:2 P2IES_ #define, value: (0x002Cu), line: 488:2 489:2 P2IE_ #define, value: (0x002Du), line: 490:2 491:2 P2IFG_ #define, value: (0x002Bu), line: 486:2 487:2 P2IN_ #define, value: (0x0028u), line: 480:2 481:2 P2OUT_ #define, value: (0x0029u), line: 482:2 483:2 P2REN_ #define, value: (0x002Fu), line: 496:2 497:2 P2SEL2_ #define, value: (0x0042u), line: 494:2 495:2 P2SEL_ #define, value: (0x002Eu), line: 492:2 493:2 P3DIR_ #define, value: (0x001Au), line: 508:2 509:2 P3IN_ #define, value: (0x0018u), line: 504:2 505:2 P3OUT_ #define, value: (0x0019u), line: 506:2 507:2 P3REN_ #define, value: (0x0010u), line: 514:2 515:2 P3SEL2_ #define, value: (0x0043u), line: 512:2 513:2 P3SEL_ #define, value: (0x001Bu), line: 510:2 511:2 PORIFG #define, value: (0x04), line: 138:2 PORT1_VECTOR #define, value: (2 * 2u), line: 963:2 PORT2_VECTOR #define, value: (3 * 2u), line: 964:2 PREFIXPROMPT #define, value: 0, line: 1130:6 1136:6 1145:6 PSP #define, value: R4, line: 46:3 44:4 50:4 51:4 94:4 95:4 104:4 105:4 115:4 116:4 144:4 145:4 165:4 166:4 177:4 182:4 183:4 189:4 190:4 191:4 197:4 198:4 199:4 200:4 205:4 215:4 220:4 221:4 227:4 228:4 234:4 235:4 236:4 241:4 242:4 247:4 248:4 255:4 272:4 273:4 283:4 285:4 295:4 342:4 349:4 379:4 385:4 399:4 406:4 454:4 455:4 486:4 494:4 499:4 500:4 505:4 506:4 507:4 512:4 519:4 524:4 529:4 570:4 581:4 609:4 621:4 633:4 646:4 647:4 666:4 683:4 686:4 707:4 717:4 718:4 725:4 726:4 743:4 762:4 769:4 770:4 793:4 802:4 803:4 810:4 819:4 820:4 827:4 833:4 834:4 844:4 857:4 858:4 866:4 872:4 873:4 881:4 888:4 889:4 944:4 952:4 953:4 969:4 970:4 1652:6 1686:6 1687:6 1689:6 1790:6 - 4e-configLP - Page 153 1791:6 1792:6 1797:6 1798:6 1799:6 1804:6 1805:6 1806:6 1811:6 1812:6 1813:6 1818:6 1819:6 1820:6 1825:6 1830:6 Q #define, value: R12, line: 58:3 470:4 471:4 472:4 RAMEND #define, value: (0x0400), line: 30:3 1870:6 RAMSTART #define, value: (0x0200), line: 29:3 READ_ONLY #define, value: const, line: 50:2 462:2 481:2 505:2 523:2 645:2 689:2 714:2 941:2 943:2 945:2 947:2 949:2 951:2 953:2 955:2 REF2_5V #define, value: (0x040), line: 186:2 REFBURST #define, value: (0x100), line: 188:2 REFON #define, value: (0x020), line: 185:2 REFOUT #define, value: (0x200), line: 189:2 RESET_VECTOR #define, value: (15 * 2u), line: 975:2 RSEL0 #define, value: (0x01), line: 299:2 RSEL1 #define, value: (0x02), line: 300:2 RSEL2 #define, value: (0x04), line: 301:2 RSEL3 #define, value: (0x08), line: 302:2 RSP #define, value: SP, line: 43:3 57:4 222:4 229:4 249:4 254:4 679:4 680:4 681:4 698:4 699:4 711:4 712:4 727:4 728:4 733:4 734:4 RSTIFG #define, value: (0x08), line: 139:2 SCCI #define, value: (0x0400u), line: 603:2 SCG0 #define, value: (0x0040u), line: 85:2 SCG1 #define, value: (0x0080u), line: 86:2 SCS #define, value: (0x0800u), line: 602:2 SEGWRT #define, value: (0x0080u), line: 424:2 SELM0 #define, value: (0x40), line: 318:2 SELM1 #define, value: (0x80), line: 319:2 SELM_0 #define, value: (0x00), line: 331:2 SELM_1 #define, value: (0x40), line: 332:2 SELM_2 #define, value: (0x80), line: 333:2 SELM_3 #define, value: (0xC0), line: 334:2 SELS #define, value: (0x08), line: 315:2 SHS0 #define, value: (0x0400u), line: 221:2 SHS1 #define, value: (0x0800u), line: 222:2 SHS_0 #define, value: (0*0x400u), line: 247:2 SHS_1 #define, value: (1*0x400u), line: 248:2 SHS_2 #define, value: (2*0x400u), line: 249:2 SHS_3 #define, value: (3*0x400u), line: 250:2 SREF0 #define, value: (0x2000u), line: 193:2 SREF1 #define, value: (0x4000u), line: 194:2 SREF2 #define, value: (0x8000u), line: 195:2 SREF_0 #define, value: (0*0x2000u), line: 201:2 SREF_1 #define, value: (1*0x2000u), line: 202:2 SREF_2 #define, value: (2*0x2000u), line: 203:2 SREF_3 #define, value: (3*0x2000u), line: 204:2 SREF_4 #define, value: (4*0x2000u), line: 205:2 SREF_5 #define, value: (5*0x2000u), line: 206:2 SREF_6 #define, value: (6*0x2000u), line: 207:2 SREF_7 #define, value: (7*0x2000u), line: 208:2 T #define, value: R13, line: 59:3 TA0CCR0_ #define, value: (0x0172u), line: 534:2 535:2 TA0CCR1_ #define, value: (0x0174u), line: 536:2 537:2 TA0CCR2_ #define, value: (0x0176u), line: 538:2 539:2 TA0CCTL0_ #define, value: (0x0162u), line: 526:2 527:2 TA0CCTL1_ #define, value: (0x0164u), line: 528:2 529:2 TA0CCTL2_ #define, value: (0x0166u), line: 530:2 531:2 TA0CTL_ #define, value: (0x0160u), line: 524:2 525:2 TA0IV_ #define, value: (0x012Eu), line: 522:2 523:2 TA0IV_6 #define, value: (0x0006u), line: 635:2 TA0IV_8 #define, value: (0x0008u), line: 636:2 TA0IV_NONE #define, value: (0x0000u), line: 632:2 TA0IV_TACCR1 #define, value: (0x0002u), line: 633:2 TA0IV_TACCR2 #define, value: (0x0004u), line: 634:2 TA0IV_TAIFG #define, value: (0x000Au), line: 637:2 TA0R_ #define, value: (0x0170u), line: 532:2 533:2 TA1CCR0_ #define, value: (0x0192u), line: 656:2 657:2 TA1CCR1_ #define, value: (0x0194u), line: 658:2 659:2 TA1CCR2_ #define, value: (0x0196u), line: 660:2 661:2 TA1CCTL0_ #define, value: (0x0182u), line: 648:2 649:2 TA1CCTL1_ #define, value: (0x0184u), line: 650:2 651:2 TA1CCTL2_ #define, value: (0x0186u), line: 652:2 653:2 TA1CTL_ #define, value: (0x0180u), line: 646:2 647:2 TA1IV_ #define, value: (0x011Eu), line: 644:2 645:2 - 4e-configLP - Page 154 TA1IV_NONE #define, value: (0x0000u), line: 666:2 TA1IV_TACCR1 #define, value: (0x0002u), line: 667:2 TA1IV_TACCR2 #define, value: (0x0004u), line: 668:2 TA1IV_TAIFG #define, value: (0x000Au), line: 669:2 TA1R_ #define, value: (0x0190u), line: 654:2 655:2 TACCR0 #define, value: TA0CCR0, line: 548:2 TACCR0_ #define, value: TA0CCR0_, line: 557:2 TACCR1 #define, value: TA0CCR1, line: 549:2 TACCR1_ #define, value: TA0CCR1_, line: 558:2 TACCR2 #define, value: TA0CCR2, line: 550:2 TACCR2_ #define, value: TA0CCR2_, line: 559:2 TACCTL0 #define, value: TA0CCTL0, line: 544:2 TACCTL0_ #define, value: TA0CCTL0_, line: 553:2 TACCTL1 #define, value: TA0CCTL1, line: 545:2 TACCTL1_ #define, value: TA0CCTL1_, line: 554:2 TACCTL2 #define, value: TA0CCTL2, line: 546:2 TACCTL2_ #define, value: TA0CCTL2_, line: 555:2 TACLR #define, value: (0x0004u), line: 581:2 TACTL #define, value: TA0CTL, line: 543:2 TACTL_ #define, value: TA0CTL_, line: 552:2 TAIE #define, value: (0x0002u), line: 582:2 TAIFG #define, value: (0x0001u), line: 583:2 TAIV #define, value: TA0IV, line: 542:2 TAIV_ #define, value: TA0IV_, line: 551:2 TAR #define, value: TA0R, line: 547:2 TAR_ #define, value: TA0R_, line: 556:2 TASSEL0 #define, value: (0x0100u), line: 576:2 TASSEL1 #define, value: (0x0200u), line: 575:2 TASSEL_0 #define, value: (0*0x100u), line: 593:2 TASSEL_1 #define, value: (1*0x100u), line: 594:2 TASSEL_2 #define, value: (2*0x100u), line: 595:2 TASSEL_3 #define, value: (3*0x100u), line: 596:2 TIMER0_A0_VECTOR #define, value: (9 * 2u), line: 969:2 TIMER0_A1_VECTOR #define, value: (8 * 2u), line: 968:2 TIMER1_A0_VECTOR #define, value: (13 * 2u), line: 973:2 TIMER1_A1_VECTOR #define, value: (12 * 2u), line: 972:2 TOS #define, value: R7, line: 49:3 43:4 44:4 51:4 52:4 95:4 96:4 105:4 106:4 116:4 117:4 118:4 145:4 146:4 166:4 171:4 177:4 183:4 184:4 191:4 192:4 198:4 199:4 214:4 215:4 221:4 222:4 228:4 229:4 235:4 236:4 241:4 242:4 248:4 249:4 254:4 255:4 267:4 267:4 272:4 273:4 278:4 278:4 284:4 285:4 296:4 298:4 342:4 350:4 352:4 355:4 357:4 360:4 362:4 374:4 379:4 386:4 388:4 394:4 399:4 407:4 410:4 412:4 415:4 417:4 429:4 456:4 465:4 475:4 484:4 486:4 494:4 499:4 500:4 505:4 507:4 513:4 514:4 519:4 524:4 529:4 534:4 539:4 540:4 545:4 550:4 555:4 560:4 560:4 565:4 571:4 574:4 576:4 582:4 586:4 588:4 596:4 597:4 597:4 602:4 602:4 603:4 603:4 604:4 610:4 612:4 622:4 624:4 634:4 644:4 647:4 665:4 666:4 684:4 686:4 706:4 707:4 718:4 719:4 720:4 726:4 727:4 728:4 752:4 763:4 777:4 779:4 787:4 794:4 806:4 810:4 821:4 825:4 827:4 835:4 837:4 838:4 842:4 844:4 861:4 867:4 876:4 882:4 890:4 895:4 900:4 900:4 901:4 901:4 902:4 943:4 944:4 953:4 954:4 970:4 57:5 1650:6 1651:6 1652:6 1654:6 1656:6 1687:6 1688:6 1790:6 1792:6 1797:6 1799:6 1804:6 1806:6 - 4e-configLP - Page 155 1811:6 1813:6 1818:6 1820:6 1825:6 1827:6 1829:6 UC0IE #define, value: IE2, line: 144:2 UC0IFG #define, value: IFG2, line: 152:2 UC7BIT #define, value: (0x10), line: 726:2 UCA0ABCTL_ #define, value: (0x005Du), line: 692:2 693:2 UCA0BR0_ #define, value: (0x0062u), line: 680:2 681:2 UCA0BR1_ #define, value: (0x0063u), line: 682:2 683:2 UCA0CTL0_ #define, value: (0x0060u), line: 676:2 677:2 UCA0CTL1_ #define, value: (0x0061u), line: 678:2 679:2 UCA0IRRCTL_ #define, value: (0x005Fu), line: 696:2 697:2 UCA0IRTCTL_ #define, value: (0x005Eu), line: 694:2 695:2 UCA0MCTL_ #define, value: (0x0064u), line: 684:2 685:2 UCA0RXBUF_ #define, value: (0x0066u), line: 688:2 689:2 UCA0RXIE #define, value: (0x01), line: 145:2 UCA0RXIFG #define, value: (0x01), line: 153:2 950:4 971:4 UCA0STAT_ #define, value: (0x0065u), line: 686:2 687:2 UCA0TXBUF_ #define, value: (0x0067u), line: 690:2 691:2 UCA0TXIE #define, value: (0x02), line: 146:2 UCA0TXIFG #define, value: (0x02), line: 154:2 941:4 UCA10 #define, value: (0x80), line: 738:2 UCABDEN #define, value: (0x01), line: 862:2 UCADDR #define, value: (0x02), line: 816:2 UCALIE #define, value: (0x01), line: 827:2 UCALIFG #define, value: (0x01), line: 835:2 UCB0BR0_ #define, value: (0x006Au), line: 705:2 706:2 UCB0BR1_ #define, value: (0x006Bu), line: 707:2 708:2 UCB0CTL0_ #define, value: (0x0068u), line: 701:2 702:2 UCB0CTL1_ #define, value: (0x0069u), line: 703:2 704:2 UCB0I2CIE_ #define, value: (0x006Cu), line: 709:2 710:2 UCB0I2COA_ #define, value: (0x0118u), line: 717:2 718:2 UCB0I2CSA_ #define, value: (0x011Au), line: 719:2 720:2 UCB0RXBUF_ #define, value: (0x006Eu), line: 713:2 714:2 UCB0RXIE #define, value: (0x04), line: 147:2 UCB0RXIFG #define, value: (0x04), line: 155:2 UCB0STAT_ #define, value: (0x006Du), line: 711:2 712:2 UCB0TXBUF_ #define, value: (0x006Fu), line: 715:2 716:2 UCB0TXIE #define, value: (0x08), line: 148:2 UCB0TXIFG #define, value: (0x08), line: 156:2 UCBBUSY #define, value: (0x10), line: 831:2 UCBRF0 #define, value: (0x10), line: 778:2 UCBRF1 #define, value: (0x20), line: 777:2 UCBRF2 #define, value: (0x40), line: 776:2 UCBRF3 #define, value: (0x80), line: 775:2 UCBRF_0 #define, value: (0x00), line: 784:2 UCBRF_1 #define, value: (0x10), line: 785:2 UCBRF_10 #define, value: (0xA0), line: 794:2 UCBRF_11 #define, value: (0xB0), line: 795:2 UCBRF_12 #define, value: (0xC0), line: 796:2 UCBRF_13 #define, value: (0xD0), line: 797:2 UCBRF_14 #define, value: (0xE0), line: 798:2 UCBRF_15 #define, value: (0xF0), line: 799:2 UCBRF_2 #define, value: (0x20), line: 786:2 UCBRF_3 #define, value: (0x30), line: 787:2 UCBRF_4 #define, value: (0x40), line: 788:2 UCBRF_5 #define, value: (0x50), line: 789:2 UCBRF_6 #define, value: (0x60), line: 790:2 UCBRF_7 #define, value: (0x70), line: 791:2 UCBRF_8 #define, value: (0x80), line: 792:2 UCBRF_9 #define, value: (0x90), line: 793:2 UCBRK #define, value: (0x08), line: 814:2 UCBRKIE #define, value: (0x10), line: 751:2 UCBRS0 #define, value: (0x02), line: 781:2 UCBRS1 #define, value: (0x04), line: 780:2 UCBRS2 #define, value: (0x08), line: 779:2 UCBRS_0 #define, value: (0x00), line: 801:2 UCBRS_1 #define, value: (0x02), line: 802:2 UCBRS_2 #define, value: (0x04), line: 803:2 UCBRS_3 #define, value: (0x06), line: 804:2 UCBRS_4 #define, value: (0x08), line: 805:2 UCBRS_5 #define, value: (0x0A), line: 806:2 UCBRS_6 #define, value: (0x0C), line: 807:2 UCBRS_7 #define, value: (0x0E), line: 808:2 UCBTOE #define, value: (0x04), line: 860:2 UCBUSY #define, value: (0x01), line: 817:2 UCCKPH #define, value: (0x80), line: 733:2 UCCKPL #define, value: (0x40), line: 734:2 UCDELIM0 #define, value: (0x10), line: 858:2 - 4e-configLP - Page 156 UCDELIM1 #define, value: (0x20), line: 857:2 UCDORM #define, value: (0x08), line: 752:2 UCFE #define, value: (0x40), line: 811:2 UCGC #define, value: (0x20), line: 830:2 UCGCEN #define, value: (0x8000u), line: 864:2 UCIDLE #define, value: (0x02), line: 818:2 UCIREN #define, value: (0x01), line: 844:2 UCIRRXFE #define, value: (0x01), line: 853:2 UCIRRXFL0 #define, value: (0x04), line: 851:2 UCIRRXFL1 #define, value: (0x08), line: 850:2 UCIRRXFL2 #define, value: (0x10), line: 849:2 UCIRRXFL3 #define, value: (0x20), line: 848:2 UCIRRXFL4 #define, value: (0x40), line: 847:2 UCIRRXFL5 #define, value: (0x80), line: 846:2 UCIRRXPL #define, value: (0x02), line: 852:2 UCIRTXCLK #define, value: (0x02), line: 843:2 UCIRTXPL0 #define, value: (0x04), line: 842:2 UCIRTXPL1 #define, value: (0x08), line: 841:2 UCIRTXPL2 #define, value: (0x10), line: 840:2 UCIRTXPL3 #define, value: (0x20), line: 839:2 UCIRTXPL4 #define, value: (0x40), line: 838:2 UCIRTXPL5 #define, value: (0x80), line: 837:2 UCLISTEN #define, value: (0x80), line: 810:2 UCMM #define, value: (0x20), line: 740:2 UCMODE0 #define, value: (0x02), line: 729:2 UCMODE1 #define, value: (0x04), line: 728:2 UCMODE_0 #define, value: (0x00), line: 742:2 UCMODE_1 #define, value: (0x02), line: 743:2 UCMODE_2 #define, value: (0x04), line: 744:2 UCMODE_3 #define, value: (0x06), line: 745:2 UCMSB #define, value: (0x20), line: 725:2 UCMST #define, value: (0x08), line: 735:2 UCNACKIE #define, value: (0x08), line: 824:2 UCNACKIFG #define, value: (0x08), line: 832:2 UCOA0 #define, value: (0x0001u), line: 874:2 UCOA1 #define, value: (0x0002u), line: 873:2 UCOA2 #define, value: (0x0004u), line: 872:2 UCOA3 #define, value: (0x0008u), line: 871:2 UCOA4 #define, value: (0x0010u), line: 870:2 UCOA5 #define, value: (0x0020u), line: 869:2 UCOA6 #define, value: (0x0040u), line: 868:2 UCOA7 #define, value: (0x0080u), line: 867:2 UCOA8 #define, value: (0x0100u), line: 866:2 UCOA9 #define, value: (0x0200u), line: 865:2 UCOE #define, value: (0x20), line: 812:2 UCOS16 #define, value: (0x01), line: 782:2 UCPAR #define, value: (0x40), line: 724:2 UCPE #define, value: (0x10), line: 813:2 UCPEN #define, value: (0x80), line: 723:2 UCRXEIE #define, value: (0x20), line: 750:2 UCRXERR #define, value: (0x04), line: 815:2 UCSA0 #define, value: (0x0001u), line: 885:2 UCSA1 #define, value: (0x0002u), line: 884:2 UCSA2 #define, value: (0x0004u), line: 883:2 UCSA3 #define, value: (0x0008u), line: 882:2 UCSA4 #define, value: (0x0010u), line: 881:2 UCSA5 #define, value: (0x0020u), line: 880:2 UCSA6 #define, value: (0x0040u), line: 879:2 UCSA7 #define, value: (0x0080u), line: 878:2 UCSA8 #define, value: (0x0100u), line: 877:2 UCSA9 #define, value: (0x0200u), line: 876:2 UCSCLLOW #define, value: (0x40), line: 829:2 UCSLA10 #define, value: (0x40), line: 739:2 UCSPB #define, value: (0x08), line: 727:2 UCSSEL0 #define, value: (0x40), line: 749:2 UCSSEL1 #define, value: (0x80), line: 748:2 UCSSEL_0 #define, value: (0x00), line: 770:2 UCSSEL_1 #define, value: (0x40), line: 771:2 UCSSEL_2 #define, value: (0x80), line: 772:2 UCSSEL_3 #define, value: (0xC0), line: 773:2 UCSTOE #define, value: (0x08), line: 859:2 UCSTPIE #define, value: (0x04), line: 825:2 UCSTPIFG #define, value: (0x04), line: 833:2 UCSTTIE #define, value: (0x02), line: 826:2 UCSTTIFG #define, value: (0x02), line: 834:2 UCSWRST #define, value: (0x01), line: 755:2 UCSYNC #define, value: (0x01), line: 730:2 UCTR #define, value: (0x10), line: 766:2 - 4e-configLP - Page 157 UCTXADDR #define, value: (0x04), line: 753:2 UCTXBRK #define, value: (0x02), line: 754:2 UCTXNACK #define, value: (0x08), line: 767:2 UCTXSTP #define, value: (0x04), line: 768:2 UCTXSTT #define, value: (0x02), line: 769:2 USCIAB0RX_VECTOR #define, value: (7 * 2u), line: 967:2 USCIAB0TX_VECTOR #define, value: (6 * 2u), line: 966:2 USERFLASHEND #define, value: (0xD7FF), line: 32:3 303:4 337:4 357:4 412:4 1860:6 142:7 USERFLASHSTART #define, value: (0xC000), line: 31:3 301:4 335:4 355:4 410:4 199:6 1856:6 142:7 V #define, value: (0x0100u), line: 81:2 W #define, value: R6, line: 48:3 43:4 45:4 53:4 53:4 58:4 58:4 68:4 69:4 69:4 96:4 97:4 97:4 106:4 107:4 107:4 117:4 119:4 119:4 127:4 127:4 128:4 146:4 148:4 150:4 150:4 167:4 167:4 173:4 173:4 178:4 178:4 182:4 184:4 185:4 185:4 189:4 192:4 193:4 193:4 197:4 200:4 201:4 201:4 206:4 206:4 216:4 216:4 223:4 223:4 230:4 230:4 237:4 237:4 243:4 243:4 250:4 250:4 256:4 256:4 268:4 268:4 274:4 274:4 279:4 279:4 283:4 284:4 286:4 286:4 295:4 296:4 298:4 301:4 303:4 309:4 311:4 316:4 318:4 328:4 335:4 337:4 339:4 340:4 343:4 343:4 349:4 352:4 374:4 380:4 380:4 385:4 388:4 394:4 400:4 400:4 406:4 407:4 429:4 454:4 467:4 473:4 474:4 477:4 478:4 487:4 487:4 495:4 495:4 501:4 501:4 508:4 508:4 512:4 513:4 514:4 515:4 515:4 520:4 520:4 525:4 525:4 530:4 530:4 535:4 535:4 541:4 541:4 546:4 546:4 551:4 551:4 556:4 556:4 561:4 561:4 566:4 566:4 570:4 573:4 573:4 576:4 577:4 577:4 581:4 585:4 588:4 589:4 589:4 598:4 598:4 605:4 605:4 609:4 610:4 613:4 613:4 621:4 622:4 625:4 625:4 633:4 634:4 661:4 661:4 669:4 669:4 687:4 687:4 700:4 700:4 713:4 713:4 721:4 721:4 729:4 729:4 735:4 735:4 751:4 752:4 759:4 764:4 764:4 776:4 782:4 795:4 795:4 803:4 806:4 807:4 811:4 811:4 819:4 823:4 824:4 828:4 828:4 833:4 837:4 840:4 841:4 845:4 845:4 858:4 861:4 863:4 866:4 868:4 868:4 873:4 876:4 878:4 881:4 883:4 883:4 888:4 892:4 903:4 903:4 945:4 945:4 956:4 956:4 1653:6 1657:6 1659:6 1659:6 1688:6 1689:6 1690:6 1690:6 1793:6 1793:6 1800:6 1800:6 1807:6 1807:6 1814:6 1814:6 1821:6 1821:6 1831:6 1831:6 WAIT #define, value: (0x0008u), line: 449:2 WDTCNTCL #define, value: (0x0008u), line: 898:2 WDTCTL_ #define, value: (0x0120u), line: 892:2 893:2 WDTHOLD #define, value: (0x0080u), line: 902:2 WDTIE #define, value: (0x01), line: 129:2 - 4e-configLP - Page 158 WDTIFG #define, value: (0x01), line: 136:2 WDTIS0 #define, value: (0x0001u), line: 895:2 WDTIS1 #define, value: (0x0002u), line: 896:2 WDTNMI #define, value: (0x0020u), line: 900:2 WDTNMIES #define, value: (0x0040u), line: 901:2 WDTPW #define, value: (0x5A00u), line: 904:2 WDTSSEL #define, value: (0x0004u), line: 897:2 WDTTMSEL #define, value: (0x0010u), line: 899:2 WDT_ADLY_1000 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL), line: 913:2 WDT_ADLY_16 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1), line: 915:2 WDT_ADLY_1_9 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line: 916:2 WDT_ADLY_250 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0), line: 914:2 WDT_ARST_1000 #define, value: (WDTPW+WDTCNTCL+WDTSSEL), line: 924:2 WDT_ARST_16 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1), line: 926:2 WDT_ARST_1_9 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line: 927:2 WDT_ARST_250 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0), line: 925:2 WDT_MDLY_0_064 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0), line: 911:2 WDT_MDLY_0_5 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1), line: 910:2 WDT_MDLY_32 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL), line: 908:2 WDT_MDLY_8 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0), line: 909:2 WDT_MRST_0_064 #define, value: (WDTPW+WDTCNTCL+WDTIS1+WDTIS0), line: 922:2 WDT_MRST_0_5 #define, value: (WDTPW+WDTCNTCL+WDTIS1), line: 921:2 WDT_MRST_32 #define, value: (WDTPW+WDTCNTCL), line: 919:2 WDT_MRST_8 #define, value: (WDTPW+WDTCNTCL+WDTIS0), line: 920:2 WDT_VECTOR #define, value: (10 * 2u), line: 970:2 WRT #define, value: (0x0040u), line: 422:2 372:4 393:4 427:4 462:4 X #define, value: R10, line: 56:3 455:4 469:4 470:4 477:4 802:4 804:4 808:4 820:4 823:4 834:4 838:4 839:4 841:4 857:4 859:4 864:4 867:4 872:4 874:4 879:4 882:4 889:4 892:4 894:4 XCAP0 #define, value: (0x04), line: 338:2 XCAP1 #define, value: (0x08), line: 339:2 XCAP_0 #define, value: (0x00), line: 345:2 XCAP_1 #define, value: (0x04), line: 346:2 XCAP_2 #define, value: (0x08), line: 347:2 XCAP_3 #define, value: (0x0C), line: 348:2 XT2OF #define, value: (0x02), line: 337:2 XT2OFF #define, value: (0x80), line: 306:2 XT2S0 #define, value: (0x40), line: 342:2 XT2S1 #define, value: (0x80), line: 343:2 XT2S_0 #define, value: (0x00), line: 355:2 XT2S_1 #define, value: (0x40), line: 356:2 XT2S_2 #define, value: (0x80), line: 357:2 XT2S_3 #define, value: (0xC0), line: 358:2 XTS #define, value: (0x40), line: 305:2 Y #define, value: R11, line: 57:3 469:4 472:4 473:4 Z #define, value: (0x0002u), line: 79:2 __430X_CORE__ #define, value: 1, line: 0 __430_CORE__ #define, value: 0, line: 0 __A430__ #define, value: 1, line: 0 __BUILD_NUMBER__ #define, line: 0 __CORE__ #define, value: 0, line: 0 __DATE__ #define, line: 0 21 __FILE__ #define, line: 0 __IAR_SYSTEMS_ASM #define, line: 0 __IAR_SYSTEMS_ASM__ #define, line: 0 __LINE__ #define, line: 0 __MSP430G2553 #define, value: , line: 16:2 __MSP430G2553__ #define, value: 1, line: 0 __MSP430_HAS_ADC10__ #define, value: , line: 161:2 __MSP430_HAS_BC2__ #define, value: , line: 279:2 __MSP430_HAS_CAPLUS__ #define, value: , line: 363:2 __MSP430_HAS_FLASH2__ #define, value: , line: 407:2 __MSP430_HAS_PORT1_R__ #define, value: , line: 458:2 __MSP430_HAS_PORT2_R__ #define, value: , line: 459:2 __MSP430_HAS_PORT3_R__ #define, value: , line: 502:2 __MSP430_HAS_T1A3__ #define, value: , line: 642:2 __MSP430_HAS_TA3__ #define, value: , line: 520:2 __MSP430_HAS_USCI__ #define, value: , line: 674:2 __MSP430_HAS_WDT__ #define, value: , line: 890:2 __SUBVERSION__ #define, line: 0 __TID__ #define, line: 0 24:2 __TIME__ #define, line: 0 21 __VER__ #define, line: 0 __msp430 #define, value: , line: 9:1 - 4e-configLP - Page 159 Segment Type Mode ---------------------------------------- CODE UNTYPED REL Label Mode Type Segment Value/Offset ------------------------------------------------------------------------------ ABBS REL CONST PUB UNTYP. CODE BA2 ABORT REL CONST PUB UNTYP. CODE 1596 ABORTQUOTE REL CONST PUB UNTYP. CODE 15C2 ACC1 REL CONST UNTYP. CODE E70 ACC3 REL CONST UNTYP. CODE EA6 ACC4 REL CONST UNTYP. CODE EB2 ACC5 REL CONST UNTYP. CODE EB6 ACCEPT REL CONST PUB UNTYP. CODE E66 ADC10AE0 ABS CONST UNTYP. ASEG 4A ADC10CTL0 ABS CONST UNTYP. ASEG 1B0 ADC10CTL1 ABS CONST UNTYP. ASEG 1B2 ADC10DTC0 ABS CONST UNTYP. ASEG 48 ADC10DTC1 ABS CONST UNTYP. ASEG 49 ADC10MEM ABS CONST UNTYP. ASEG 1B4 ADC10SA ABS CONST UNTYP. ASEG 1BC ADRTOIN REL CONST PUB UNTYP. CODE 1216 AGAIN REL CONST PUB UNTYP. CODE 1826 ALIGNED REL CONST PUB UNTYP. CODE 8A4 ALIGNN REL CONST PUB UNTYP. CODE 88A ALLOT REL CONST PUB UNTYP. CODE 1124 ANDD REL CONST PUB UNTYP. CODE 458 APP REL CONST PUB UNTYP. CODE A62 APPCRC REL CONST PUB UNTYP. CODE 1E24 APPU0 REL CONST PUB UNTYP. CODE B6E ATXY REL CONST PUB UNTYP. CODE 1C50 AppU0 ABS CONST EXT [013] UNTYP. __EXTERNS Solved Extern BACKSLASH REL CONST PUB UNTYP. CODE 1BC2 BASE REL CONST PUB UNTYP. CODE 9F2 BCSCTL1 ABS CONST UNTYP. ASEG 57 BCSCTL2 ABS CONST UNTYP. ASEG 58 BCSCTL3 ABS CONST UNTYP. ASEG 53 BEGIN REL CONST PUB UNTYP. CODE 1800 BELL REL CONST PUB UNTYP. CODE 1C0C BIN REL CONST PUB UNTYP. CODE 1C8C BLANK REL CONST PUB UNTYP. CODE AEE BOOT REL CONST PUB UNTYP. CODE 1E90 BOOTIP REL CONST PUB UNTYP. CODE 1E92 BRACCHAR REL CONST PUB UNTYP. CODE 1606 BRACTICK REL CONST PUB UNTYP. CODE 176E BUILDS REL CONST PUB UNTYP. CODE 165E CACTL1 ABS CONST UNTYP. ASEG 59 CACTL2 ABS CONST UNTYP. ASEG 5A CALBC1_12MHZ ABS CONST UNTYP. ASEG 10FB CALBC1_16MHZ ABS CONST UNTYP. ASEG 10F9 CALBC1_1MHZ ABS CONST UNTYP. ASEG 10FF CALBC1_8MHZ ABS CONST UNTYP. ASEG 10FD CALDCO_12MHZ ABS CONST UNTYP. ASEG 10FA CALDCO_16MHZ ABS CONST UNTYP. ASEG 10F8 CALDCO_1MHZ ABS CONST UNTYP. ASEG 10FE CALDCO_8MHZ ABS CONST UNTYP. ASEG 10FC CAPD ABS CONST UNTYP. ASEG 5B CAPITALIZE REL CONST PUB UNTYP. CODE 1342 CAPS REL CONST PUB UNTYP. CODE A6E CAPS1 REL CONST UNTYP. CODE 1358 CAPS2 REL CONST UNTYP. CODE 1366 CCOMMA REL CONST PUB UNTYP. CODE 1148 CCRC REL CONST PUB UNTYP. CODE 1B4E CELL REL CONST PUB UNTYP. CODE 8BA CELLPLUS REL CONST PUB UNTYP. CODE 8C8 CELLS REL CONST PUB UNTYP. CODE 8D8 CEXIT REL CONST PUB UNTYP. CODE 97E CFETCH REL CONST PUB UNTYP. CODE 240 CHARPLUS REL CONST PUB UNTYP. CODE 8E4 CHARR REL CONST PUB UNTYP. CODE 15F0 CHARS REL CONST PUB UNTYP. CODE 8F0 CMOVE REL CONST PUB UNTYP. CODE 732 CMOVEUP REL CONST PUB UNTYP. CODE 756 CMOVE_1 REL CONST UNTYP. CODE 73C CMOVE_X REL CONST UNTYP. CODE 746 CMOVU_1 REL CONST UNTYP. CODE 764 CMOVU_X REL CONST UNTYP. CODE 770 COLD REL CONST PUB UNTYP. CODE 1EEE - 4e-configLP - Page 160 COLDIP REL CONST PUB UNTYP. CODE 1EF0 COLON REL CONST PUB UNTYP. CODE 174A COMMA REL CONST PUB UNTYP. CODE 1132 COMMABRANCH REL CONST PUB UNTYP. CODE 994 COMMACALL REL CONST PUB UNTYP. CODE 93A COMMACF REL CONST PUB UNTYP. CODE 922 COMMADEST REL CONST PUB UNTYP. CODE 9A2 COMMAJMP REL CONST PUB UNTYP. CODE 94E COMMANONE REL CONST PUB UNTYP. CODE 9CC COMMAXT REL CONST PUB UNTYP. CODE 90A CONSTANT REL CONST PUB UNTYP. CODE 9A COR REL CONST PUB UNTYP. CODE B36 CORPOWERON ABS CONST UNTYP. CODE 186 CORREST ABS CONST UNTYP. CODE 18E COUNT REL CONST PUB UNTYP. CODE D8A CR REL CONST PUB UNTYP. CODE DB4 CRC REL CONST PUB UNTYP. CODE 1B72 CREATE REL CONST PUB UNTYP. CODE 1674 CSTORE REL CONST PUB UNTYP. CODE 24E CamelForthEnd REL CONST UNTYP. CODE 880 DABS REL CONST PUB UNTYP. CODE BE8 DCOCTL ABS CONST UNTYP. ASEG 56 DDP REL CONST PUB UNTYP. CODE A0A DECIMAL REL CONST PUB UNTYP. CODE 10EA DEPTH REL CONST PUB UNTYP. CODE 1950 DIGITQ REL CONST PUB UNTYP. CODE 1392 DIV1 REL CONST UNTYP. CODE 6E0 DIV2 REL CONST UNTYP. CODE 6E6 DIV3 REL CONST UNTYP. CODE 6FA DIV4 REL CONST UNTYP. CODE 6FC DIVIDE REL CONST UNTYP. CODE 6DA DNEG1 REL CONST UNTYP. CODE BDE DNEGATE REL CONST PUB UNTYP. CODE BB6 DO REL CONST PUB UNTYP. CODE 188A DOALIAS REL CONST PUB UNTYP. CODE DA DOCODE REL CONST UNTYP. CODE Not solved DOCOLON REL CONST PUB UNTYP. CODE 70 DOCON REL CONST PUB UNTYP. CODE A2 DOCR REL CONST PUB UNTYP. CODE D9E DOEMIT REL CONST PUB UNTYP. CODE 806 DOES REL CONST PUB UNTYP. CODE 16A8 DOKEY REL CONST PUB UNTYP. CODE 822 DOROM REL CONST PUB UNTYP. CODE AE DOT REL CONST PUB UNTYP. CODE 10C6 DOTBOOTVERSION REL CONST PUB UNTYP. CODE 1DEA DOTCOLD REL CONST PUB UNTYP. CODE 1ED8 DOTERRN REL CONST PUB UNTYP. CODE E28 DOTQUOTE REL CONST PUB UNTYP. CODE F92 DOTS REL CONST PUB UNTYP. CODE 1B0E DOTS1 REL CONST UNTYP. CODE 1B3E DOTS2 REL CONST UNTYP. CODE 1B4C DOTSTATUS REL CONST PUB UNTYP. CODE 151E DOTVER REL CONST PUB UNTYP. CODE 1BD6 DOTWOCON REL CONST PUB UNTYP. CODE 1BAC DOUSER REL CONST PUB UNTYP. CODE CA DOVAR REL CONST PUB UNTYP. CODE A2 DROP REL CONST PUB UNTYP. CODE 120 DTOI REL CONST PUB UNTYP. CODE 3B6 DTOI_BYTE REL CONST UNTYP. CODE 3EA DTOI_END REL CONST UNTYP. CODE 3F0 DTOI_LOOP REL CONST UNTYP. CODE 3C0 DTOI_WORD REL CONST UNTYP. CODE 3D8 DTOI_X REL CONST UNTYP. CODE 402 DUMP REL CONST PUB UNTYP. CODE 1AA2 DUP REL CONST PUB UNTYP. CODE FA ELSS REL CONST PUB UNTYP. CODE 17E4 EMIT REL CONST PUB UNTYP. CODE 852 EMITLOOPx REL CONST UNTYP. CODE 808 ENDLOOP REL CONST PUB UNTYP. CODE 18A6 ENVIRONMENTQ REL CONST PUB UNTYP. CODE 196E EQUAL REL CONST PUB UNTYP. CODE 554 ESC0 REL CONST UNTYP. CODE 1C77 ESC1 REL CONST UNTYP. CODE 1C7A ESCPAR REL CONST PUB UNTYP. CODE 1C16 EVALUATE REL CONST PUB UNTYP. CODE 14FC EXECUTE REL CONST PUB UNTYP. CODE 42 EXIT REL CONST PUB UNTYP. CODE 68 FACTORY REL CONST PUB UNTYP. CODE 1F16 - 4e-configLP - Page 161 FACTORYIP REL CONST PUB UNTYP. CODE 1F18 FALSE REL CONST PUB UNTYP. CODE 1CAE FCTL1 ABS CONST UNTYP. ASEG 128 FCTL2 ABS CONST UNTYP. ASEG 12A FCTL3 ABS CONST UNTYP. ASEG 12C FETCH REL CONST PUB UNTYP. CODE 220 FILL REL CONST PUB UNTYP. CODE 70E FILL_1 REL CONST UNTYP. CODE 718 FILL_X REL CONST UNTYP. CODE 722 FIND REL CONST PUB UNTYP. CODE 12E2 FIND1 REL CONST UNTYP. CODE 12E8 FIND2 REL CONST UNTYP. CODE 1300 FIND3 REL CONST UNTYP. CODE 131E FLALIGNED REL CONST PUB UNTYP. CODE 1990 FLERASE REL CONST PUB UNTYP. CODE 268 FLE_1 REL CONST UNTYP. CODE 26E FLE_INFO REL CONST UNTYP. CODE 28A FLE_OK REL CONST UNTYP. CODE 296 FLE_VEC REL CONST UNTYP. CODE 27E FLE_X REL CONST UNTYP. CODE 2CE FL_INFO REL CONST UNTYP. CODE 2C8 FMMOD1 REL CONST UNTYP. CODE C6C FMSLASHMOD REL CONST PUB UNTYP. CODE C46 FORTHPRO REL CONST PUB UNTYP. CODE 1F4C GREATER REL CONST PUB UNTYP. CODE 58A HEADR REL CONST PUB UNTYP. CODE 1630 HERE REL CONST PUB UNTYP. CODE 1112 HEX REL CONST PUB UNTYP. CODE 10FE HIDE REL CONST PUB UNTYP. CODE 16FA HOLD REL CONST PUB UNTYP. CODE 100A HP REL CONST PUB UNTYP. CODE A32 IALLOT REL CONST PUB UNTYP. CODE 1174 ICCOMMA REL CONST PUB UNTYP. CODE 119A ICOMMA REL CONST PUB UNTYP. CODE 1182 ICSTORE REL CONST PUB UNTYP. CODE 36A ICST_INFO REL CONST UNTYP. CODE 37E ICST_OK REL CONST UNTYP. CODE 38A ICST_RAM REL CONST UNTYP. CODE 39A IDP REL CONST PUB UNTYP. CODE A48 IE1 ABS CONST UNTYP. ASEG 0 IE2 ABS CONST UNTYP. ASEG 1 IFF REL CONST PUB UNTYP. CODE 17BC IFG1 ABS CONST UNTYP. ASEG 2 IFG2 ABS CONST UNTYP. ASEG 3 IHERE REL CONST PUB UNTYP. CODE 1162 II REL CONST PUB UNTYP. CODE 660 IMMEDIATE REL CONST PUB UNTYP. CODE 1734 IMMEDQ REL CONST PUB UNTYP. CODE 12CA INFOB REL CONST PUB UNTYP. CODE B44 INFOC REL CONST PUB UNTYP. CODE B52 INFOD REL CONST PUB UNTYP. CODE B60 INTER1 REL CONST UNTYP. CODE 1496 INTER2 REL CONST UNTYP. CODE 14C2 INTER3 REL CONST UNTYP. CODE 14C4 INTER4 REL CONST UNTYP. CODE 14C8 INTER5 REL CONST UNTYP. CODE 14D4 INTER6 REL CONST UNTYP. CODE 14E8 INTER8 REL CONST UNTYP. CODE 14E8 INTER9 REL CONST UNTYP. CODE 14EC INTERPRET REL CONST PUB UNTYP. CODE 148A INVERT REL CONST PUB UNTYP. CODE 488 ISQUOTE REL CONST PUB UNTYP. CODE F38 ISTORE REL CONST PUB UNTYP. CODE 2DA IST_INFO REL CONST UNTYP. CODE 2F2 IST_OK REL CONST UNTYP. CODE 2FE IST_RAM REL CONST UNTYP. CODE 30E IST_X REL CONST UNTYP. CODE 320 IST_X2 REL CONST UNTYP. CODE 35C ITHERE REL CONST PUB UNTYP. CODE 1E04 ITOD REL CONST PUB UNTYP. CODE 77E IWORD REL CONST PUB UNTYP. CODE FA8 IWORD1 REL CONST UNTYP. CODE FAC IWORDC REL CONST PUB UNTYP. CODE FBA JJ REL CONST PUB UNTYP. CODE 676 KEY REL CONST PUB UNTYP. CODE 840 KEYLOOPx REL CONST UNTYP. CODE 824 KEYQ REL CONST PUB UNTYP. CODE 864 L$002 REL CONST UNTYP. CODE 6B0 - 4e-configLP - Page 162 L$01 REL CONST UNTYP. CODE 6B8 L0 REL CONST PUB UNTYP. CODE AB4 LATEST REL CONST PUB UNTYP. CODE A28 LDUMP1 REL CONST UNTYP. CODE 1AAC LDUMP2 REL CONST UNTYP. CODE 1AC6 LDUMP3 REL CONST UNTYP. CODE 1AE4 LEAV REL CONST PUB UNTYP. CODE 18EC LEFTBRACKET REL CONST PUB UNTYP. CODE 16D6 LESS REL CONST PUB UNTYP. CODE 576 LESSNUM REL CONST PUB UNTYP. CODE 1022 LFROM REL CONST PUB UNTYP. CODE 1872 LITER1 REL CONST UNTYP. CODE 1386 LITERAL REL CONST PUB UNTYP. CODE 1374 LOO REL CONST PUB UNTYP. CODE 18C4 LOOP1 REL CONST UNTYP. CODE 18AC LOOP2 REL CONST UNTYP. CODE 18BA LP REL CONST PUB UNTYP. CODE A3C LSHIFT REL CONST PUB UNTYP. CODE 4F4 LSH_1 REL CONST UNTYP. CODE 4FE LSH_X REL CONST UNTYP. CODE 504 LSTACK ABS CONST EXT [003] UNTYP. __EXTERNS Solved Extern MACU REL CONST UNTYP. CODE 6AC MARKER REL CONST PUB UNTYP. CODE 19AE MAX REL CONST PUB UNTYP. CODE CDE MAX1 REL CONST UNTYP. CODE CEA MEM REL CONST PUB UNTYP. CODE 1D92 MEMBOT REL CONST PUB UNTYP. CODE 1D78 MEMTOP REL CONST PUB UNTYP. CODE 1D86 MIN REL CONST PUB UNTYP. CODE CF6 MIN1 REL CONST UNTYP. CODE D02 MINUS REL CONST PUB UNTYP. CODE 444 MODD REL CONST PUB UNTYP. CODE CAA MOVE REL CONST PUB UNTYP. CODE 1924 MOVE1 REL CONST UNTYP. CODE 1940 MOVE2 REL CONST UNTYP. CODE 1944 MPLUS REL CONST PUB UNTYP. CODE 42E MPYU REL CONST UNTYP. CODE 6A8 MS REL CONST PUB UNTYP. CODE 1FBC MSTAR REL CONST PUB UNTYP. CODE BF6 NEGATE REL CONST PUB UNTYP. CODE 49A NEQUAL REL CONST PUB UNTYP. CODE 7FA NEWEST REL CONST PUB UNTYP. CODE A56 NEWLINE REL CONST PUB UNTYP. CODE A9E NFATOCFA REL CONST PUB UNTYP. CODE 12B0 NFATOLFA REL CONST PUB UNTYP. CODE 129A NINIT REL CONST PUB UNTYP. CODE B2A NIP REL CONST PUB UNTYP. CODE 17A NODUP REL CONST UNTYP. CODE 114 NOOP REL CONST PUB UNTYP. CODE 197E NOTEQUAL REL CONST PUB UNTYP. CODE 568 NUM REL CONST PUB UNTYP. CODE 1056 NUMGREATER REL CONST PUB UNTYP. CODE 1082 NUMS REL CONST PUB UNTYP. CODE 106C NUMS1 REL CONST UNTYP. CODE 106E ONEMINUS REL CONST PUB UNTYP. CODE 4B8 ONEMS REL CONST PUB UNTYP. CODE 1F9A ONEPLUS REL CONST PUB UNTYP. CODE 4AA ORR REL CONST PUB UNTYP. CODE 466 OVER REL CONST PUB UNTYP. CODE 146 P1 REL CONST PUB UNTYP. CODE 1FD0 P1DIR ABS CONST UNTYP. ASEG 22 P1IE ABS CONST UNTYP. ASEG 25 P1IES ABS CONST UNTYP. ASEG 24 P1IFG ABS CONST UNTYP. ASEG 23 P1IN ABS CONST UNTYP. ASEG 20 P1OUT ABS CONST UNTYP. ASEG 21 P1REN ABS CONST UNTYP. ASEG 27 P1SEL ABS CONST UNTYP. ASEG 26 P1SEL2 ABS CONST UNTYP. ASEG 41 P2 REL CONST PUB UNTYP. CODE 1FDA P2DIR ABS CONST UNTYP. ASEG 2A P2IE ABS CONST UNTYP. ASEG 2D P2IES ABS CONST UNTYP. ASEG 2C P2IFG ABS CONST UNTYP. ASEG 2B P2IN ABS CONST UNTYP. ASEG 28 P2OUT ABS CONST UNTYP. ASEG 29 P2REN ABS CONST UNTYP. ASEG 2F P2SEL ABS CONST UNTYP. ASEG 2E - 4e-configLP - Page 163 P2SEL2 ABS CONST UNTYP. ASEG 42 P3 REL CONST PUB UNTYP. CODE 1FE4 P3DIR ABS CONST UNTYP. ASEG 1A P3IN ABS CONST UNTYP. ASEG 18 P3OUT ABS CONST UNTYP. ASEG 19 P3REN ABS CONST UNTYP. ASEG 10 P3SEL ABS CONST UNTYP. ASEG 1B P3SEL2 ABS CONST UNTYP. ASEG 43 PAD REL CONST PUB UNTYP. CODE AAA PADAREA ABS CONST EXT [002] UNTYP. __EXTERNS Solved Extern PAGEE REL CONST PUB UNTYP. CODE 1C70 PAREN REL CONST PUB UNTYP. CODE 161A PARENUDOTR REL CONST PUB UNTYP. CODE 1A3C PARENWIPE REL CONST PUB UNTYP. CODE 1F78 PARSE REL CONST PUB UNTYP. CODE 1238 PARSE1 REL CONST UNTYP. CODE 1254 PLUS REL CONST PUB UNTYP. CODE 40E PLUSLOOP REL CONST PUB UNTYP. CODE 18D8 PLUSSTORE REL CONST PUB UNTYP. CODE 41C PN REL CONST PUB UNTYP. CODE 1C26 POST1 REL CONST UNTYP. CODE 17B2 POST2 REL CONST UNTYP. CODE 17B4 POSTPONE REL CONST PUB UNTYP. CODE 1788 PROFUSE REL CONST UNTYP. CODE 0 PROFUSEADR REL CONST PUB UNTYP. CODE 1F3C PROMPT REL CONST PUB UNTYP. CODE 152A PROMPT1 REL CONST UNTYP. CODE 155C PSTACK ABS CONST EXT [004] UNTYP. __EXTERNS Solved Extern PUSHTOS REL CONST UNTYP. CODE FC QABO1 REL CONST UNTYP. CODE 15B4 QABORT REL CONST PUB UNTYP. CODE 15A8 QDNEGATE REL CONST PUB UNTYP. CODE BD4 QDUP REL CONST PUB UNTYP. CODE 10E QNEG1 REL CONST UNTYP. CODE B98 QNEGATE REL CONST PUB UNTYP. CODE B8E QNUM1 REL CONST UNTYP. CODE 146A QNUM2 REL CONST UNTYP. CODE 1476 QNUM3 REL CONST UNTYP. CODE 147A QNUMBER REL CONST PUB UNTYP. CODE 1446 QQ REL CONST PUB UNTYP. CODE 1DE2 QSIGN REL CONST PUB UNTYP. CODE 13CE QSIGN1 REL CONST UNTYP. CODE 13F8 QSTACK REL CONST PUB UNTYP. CODE 11B4 QTIB REL CONST PUB UNTYP. CODE E48 QTIB1 REL CONST UNTYP. CODE E5A QUIT REL CONST PUB UNTYP. CODE 1566 QUIT1 REL CONST UNTYP. CODE 1578 QUITIP REL CONST PUB UNTYP. CODE 1568 RAMDICT ABS CONST EXT [007] UNTYP. __EXTERNS Solved Extern RECURSE REL CONST PUB UNTYP. CODE 16C4 REPEAT REL CONST PUB UNTYP. CODE 184E RESETADR REL CONST PUB UNTYP. CODE 1D6A REVEAL REL CONST PUB UNTYP. CODE 171A RFETCH REL CONST PUB UNTYP. CODE 1AC RFROM REL CONST PUB UNTYP. CODE 198 RIGHTBRACKET REL CONST PUB UNTYP. CODE 16E6 RLAA REL CONST PUB UNTYP. CODE 5B8 ROMDICT ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern ROT REL CONST PUB UNTYP. CODE 15E RPFETCH REL CONST PUB UNTYP. CODE 1EA RPSTORE REL CONST PUB UNTYP. CODE 200 RSHIFT REL CONST PUB UNTYP. CODE 514 RSH_1 REL CONST UNTYP. CODE 51E RSH_X REL CONST UNTYP. CODE 526 RSTACK ABS CONST EXT [005] UNTYP. __EXTERNS Solved Extern RZERO REL CONST PUB UNTYP. CODE ABE S0 REL CONST PUB UNTYP. CODE AC8 S2 REL CONST PUB UNTYP. CODE 200C SAVE REL CONST PUB UNTYP. CODE 1E52 SCAN REL CONST PUB UNTYP. CODE 7AE SCAN_1 REL CONST UNTYP. CODE 7B8 SCAN_X REL CONST UNTYP. CODE 7C2 SEMICOLON REL CONST PUB UNTYP. CODE 175C SEMIPN REL CONST PUB UNTYP. CODE 1C3A SEQUAL REL CONST PUB UNTYP. CODE 7D2 SEQU_1 REL CONST UNTYP. CODE 7DC SEQU_X REL CONST UNTYP. CODE 7F0 SIGN REL CONST PUB UNTYP. CODE 109A - 4e-configLP - Page 164 SIGN1 REL CONST UNTYP. CODE 10A8 SKIP REL CONST PUB UNTYP. CODE 788 SKIP_1 REL CONST UNTYP. CODE 792 SKIP_X REL CONST UNTYP. CODE 79C SLASH REL CONST PUB UNTYP. CODE C9A SLASHMOD REL CONST PUB UNTYP. CODE C88 SLASHSTRING REL CONST PUB UNTYP. CODE 11E2 SMISMATCH REL CONST UNTYP. CODE 7EA SMSLASHREM REL CONST PUB UNTYP. CODE C18 SOURCE REL CONST PUB UNTYP. CODE 11CE SPACE REL CONST PUB UNTYP. CODE DC8 SPACES REL CONST PUB UNTYP. CODE DDA SPCS1 REL CONST UNTYP. CODE DDC SPCS2 REL CONST UNTYP. CODE DEA SPFETCH REL CONST PUB UNTYP. CODE 1C2 SPSTORE REL CONST PUB UNTYP. CODE 1D8 SQEST REL CONST PUB UNTYP. CODE 201A SQUOTE REL CONST PUB UNTYP. CODE F60 SSMOD REL CONST PUB UNTYP. CODE CBC STAR REL CONST PUB UNTYP. CODE C78 STARSLASH REL CONST PUB UNTYP. CODE CCE STATE REL CONST PUB UNTYP. CODE A00 STOD REL CONST PUB UNTYP. CODE B7A STORCOLON REL CONST PUB UNTYP. CODE 964 STORE REL CONST PUB UNTYP. CODE 22E STORECF REL CONST PUB UNTYP. CODE 916 STOREDEST REL CONST PUB UNTYP. CODE 9B6 SWAP REL CONST PUB UNTYP. CODE 130 SWAPBYTES REL CONST PUB UNTYP. CODE 4C6 TA0CCR0 ABS CONST UNTYP. ASEG 172 TA0CCR1 ABS CONST UNTYP. ASEG 174 TA0CCR2 ABS CONST UNTYP. ASEG 176 TA0CCTL0 ABS CONST UNTYP. ASEG 162 TA0CCTL1 ABS CONST UNTYP. ASEG 164 TA0CCTL2 ABS CONST UNTYP. ASEG 166 TA0CTL ABS CONST UNTYP. ASEG 160 TA0IV ABS CONST UNTYP. ASEG 12E TA0R ABS CONST UNTYP. ASEG 170 TA1CCR0 ABS CONST UNTYP. ASEG 192 TA1CCR1 ABS CONST UNTYP. ASEG 194 TA1CCR2 ABS CONST UNTYP. ASEG 196 TA1CCTL0 ABS CONST UNTYP. ASEG 182 TA1CCTL1 ABS CONST UNTYP. ASEG 184 TA1CCTL2 ABS CONST UNTYP. ASEG 186 TA1CTL ABS CONST UNTYP. ASEG 180 TA1IV ABS CONST UNTYP. ASEG 11E TA1R ABS CONST UNTYP. ASEG 190 TABLE REL CONST PUB UNTYP. CODE 1CBC THEN REL CONST PUB UNTYP. CODE 17D2 TIB REL CONST PUB UNTYP. CODE AD4 TIBAREA ABS CONST EXT [006] UNTYP. __EXTERNS Solved Extern TIBSIZE REL CONST PUB UNTYP. CODE AE4 TIB_SIZE ABS CONST EXT [008] UNTYP. __EXTERNS Solved Extern TICK REL CONST PUB UNTYP. CODE 15D4 TICKSOURCE REL CONST PUB UNTYP. CODE A1A TOBODY REL CONST PUB UNTYP. CODE 8FC TOCOUNTED REL CONST PUB UNTYP. CODE 11FE TODIGIT REL CONST PUB UNTYP. CODE 1036 TOIN REL CONST PUB UNTYP. CODE 9E6 TOL REL CONST PUB UNTYP. CODE 185C TONUM1 REL CONST UNTYP. CODE 1408 TONUM2 REL CONST UNTYP. CODE 141E TONUM3 REL CONST UNTYP. CODE 1438 TONUMBER REL CONST PUB UNTYP. CODE 1406 TOPSEG REL CONST PUB UNTYP. CODE 1DCA TOR REL CONST PUB UNTYP. CODE 188 TOSFALSE REL CONST UNTYP. CODE 55C TOSTRUE REL CONST UNTYP. CODE 57E TRUE REL CONST PUB UNTYP. CODE 1CA0 TUCK REL CONST PUB UNTYP. CODE 212 TWOCONSTANT REL CONST PUB UNTYP. CODE 1BA2 TWODROP REL CONST PUB UNTYP. CODE D38 TWODUP REL CONST PUB UNTYP. CODE D48 TWOFETCH REL CONST PUB UNTYP. CODE D0C TWOOVER REL CONST PUB UNTYP. CODE D70 TWOSLASH REL CONST PUB UNTYP. CODE 4E2 TWOSTAR REL CONST PUB UNTYP. CODE 4D4 TWOSTORE REL CONST PUB UNTYP. CODE D20 - 4e-configLP - Page 165 TWOSWAP REL CONST PUB UNTYP. CODE D5A TYP REL CONST PUB UNTYP. CODE EC8 TYP3 REL CONST UNTYP. CODE ED8 TYP4 REL CONST UNTYP. CODE EE6 TYP5 REL CONST UNTYP. CODE EE8 U0 REL CONST PUB UNTYP. CODE 9DA UAREA ABS CONST EXT [001] UNTYP. __EXTERNS Solved Extern UAREA_SIZE ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern UCA0ABCTL ABS CONST UNTYP. ASEG 5D UCA0BR0 ABS CONST UNTYP. ASEG 62 UCA0BR1 ABS CONST UNTYP. ASEG 63 UCA0CTL0 ABS CONST UNTYP. ASEG 60 UCA0CTL1 ABS CONST UNTYP. ASEG 61 UCA0IRRCTL ABS CONST UNTYP. ASEG 5F UCA0IRTCTL ABS CONST UNTYP. ASEG 5E UCA0MCTL ABS CONST UNTYP. ASEG 64 UCA0RXBUF ABS CONST UNTYP. ASEG 66 UCA0STAT ABS CONST UNTYP. ASEG 65 UCA0TXBUF ABS CONST UNTYP. ASEG 67 UCB0BR0 ABS CONST UNTYP. ASEG 6A UCB0BR1 ABS CONST UNTYP. ASEG 6B UCB0CTL0 ABS CONST UNTYP. ASEG 68 UCB0CTL1 ABS CONST UNTYP. ASEG 69 UCB0I2CIE ABS CONST UNTYP. ASEG 6C UCB0I2COA ABS CONST UNTYP. ASEG 118 UCB0I2CSA ABS CONST UNTYP. ASEG 11A UCB0RXBUF ABS CONST UNTYP. ASEG 6E UCB0STAT ABS CONST UNTYP. ASEG 6D UCB0TXBUF ABS CONST UNTYP. ASEG 6F UDOT REL CONST PUB UNTYP. CODE 10B0 UDOTR REL CONST PUB UNTYP. CODE 1A5C UDSLASHMOD REL CONST PUB UNTYP. CODE FCE UDSTAR REL CONST PUB UNTYP. CODE FEC UGREATER REL CONST PUB UNTYP. CODE 5A8 UINIT REL CONST PUB UNTYP. CODE AFC ULESS REL CONST PUB UNTYP. CODE 598 UMAX REL CONST PUB UNTYP. CODE E0E UMAX1 REL CONST UNTYP. CODE E1A UMIN REL CONST PUB UNTYP. CODE DF6 UMIN1 REL CONST UNTYP. CODE E02 UMSLASHMOD REL CONST PUB UNTYP. CODE 6D4 UMSTAR REL CONST PUB UNTYP. CODE 6A4 UNLOOP REL CONST PUB UNTYP. CODE 692 UNTIL REL CONST PUB UNTYP. CODE 1810 UNUSED REL CONST PUB UNTYP. CODE 1DA6 UP ABS CONST EXT [000] UNTYP. __EXTERNS Solved Extern UPC REL CONST PUB UNTYP. CODE 1320 UPC1 REL CONST UNTYP. CODE 133A USER REL CONST PUB UNTYP. CODE C2 USEREMIT REL CONST PUB UNTYP. CODE A8E USERKEY REL CONST PUB UNTYP. CODE A7E VALIDQ REL CONST PUB UNTYP. CODE 1E3C VARAREA ABS CONST EXT [009] UNTYP. __EXTERNS Solved Extern VARBOT REL CONST PUB UNTYP. CODE 1DBC VARIABLE REL CONST PUB UNTYP. CODE 84 VAR_SIZE ABS CONST EXT [010] UNTYP. __EXTERNS Solved Extern VECBOT REL CONST PUB UNTYP. CODE 1DD8 VECSTORE REL CONST PUB UNTYP. CODE 32E WARM REL CONST PUB UNTYP. CODE 1ECA WDS1 REL CONST UNTYP. CODE 1A0A WDS2 REL CONST UNTYP. CODE 1A1E WDS3 REL CONST UNTYP. CODE 1A38 WDTCTL ABS CONST UNTYP. ASEG 120 WHILE REL CONST PUB UNTYP. CODE 183C WIPE REL CONST PUB UNTYP. CODE 1F60 WITHIN REL CONST PUB UNTYP. CODE 190C WORDD REL CONST PUB UNTYP. CODE 1266 WORDS REL CONST PUB UNTYP. CODE 1A04 XDOES REL CONST PUB UNTYP. CODE 1690 XISQUOTE REL CONST PUB UNTYP. CODE EF4 XORR REL CONST PUB UNTYP. CODE 476 XSQUOTE REL CONST PUB UNTYP. CODE F0C ZERO REL CONST PUB UNTYP. CODE 87C ZEROEQUAL REL CONST PUB UNTYP. CODE 532 ZEROLESS REL CONST PUB UNTYP. CODE 542 ZEROS REL CONST PUB UNTYP. CODE 1A82 ZEROS1 REL CONST UNTYP. CODE 1A84 ZEROS2 REL CONST UNTYP. CODE 1A96 - 4e-configLP - Page 166 ZEROUDOTR REL CONST PUB UNTYP. CODE 1A6E __MSP430G2203__ REL CONST UNTYP. CODE Not solved abort1 REL CONST UNTYP. CODE 1598 boot1 REL CONST UNTYP. CODE 1EC0 bran REL CONST PUB UNTYP. CODE 5D4 cclr REL CONST PUB UNTYP. CODE 1D1A ccrc1 REL CONST UNTYP. CODE 1B5A ccrc2 REL CONST UNTYP. CODE 1B62 cget REL CONST PUB UNTYP. CODE 1D4A cget1 REL CONST UNTYP. CODE 1D56 cget2 REL CONST UNTYP. CODE 1D58 cor ABS CONST EXT [011] UNTYP. __EXTERNS Solved Extern crcval ABS CONST EXT [019] UNTYP. __EXTERNS Solved Extern cset REL CONST PUB UNTYP. CODE 1CEE ctoggle REL CONST PUB UNTYP. CODE 1D34 doboot0 REL CONST UNTYP. CODE 1DEF doboot1 REL CONST UNTYP. CODE 1DF6 dobran REL CONST UNTYP. CODE 5D6 docreate REL CONST PUB UNTYP. CODE A2 dodoes REL CONST PUB UNTYP. CODE DE donext REL CONST UNTYP. CODE 834 donoop REL CONST UNTYP. CODE 834 dotcold0 REL CONST UNTYP. CODE 1EDD dotcold1 REL CONST UNTYP. CODE 1EE2 green REL CONST PUB UNTYP. CODE 2000 ih1 REL CONST UNTYP. CODE 1E08 infoB ABS CONST EXT [012] UNTYP. __EXTERNS Solved Extern infoC ABS CONST EXT [014] UNTYP. __EXTERNS Solved Extern infoD ABS CONST EXT [015] UNTYP. __EXTERNS Solved Extern intseg ABS CONST EXT [017] UNTYP. __EXTERNS Solved Extern intvecs ABS CONST EXT [018] UNTYP. __EXTERNS Solved Extern invalid REL CONST UNTYP. CODE 1EA2 lastword REL CONST PUB UNTYP. CODE 2015 link REL VAR UNTYP. CODE 2015 lit REL CONST PUB UNTYP. CODE 52 ms1 REL CONST UNTYP. CODE 1FC2 nullirq ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern onems1 REL CONST UNTYP. CODE 1FA4 onems2 REL CONST UNTYP. CODE 1FAC pcrc1 REL CONST UNTYP. CODE 1B82 pcrc2 REL CONST UNTYP. CODE 1B90 pcrc3 REL CONST UNTYP. CODE 1B92 qbran REL CONST PUB UNTYP. CODE 5E8 red REL CONST PUB UNTYP. CODE 1FF0 reset1 REL CONST UNTYP. CODE 1EB0 resetvec ABS CONST EXT [016] UNTYP. __EXTERNS Solved Extern stamp REL CONST UNTYP. CODE 20 stamp0 REL CONST UNTYP. CODE 21 stampend REL CONST UNTYP. CODE 37 uareasize ABS CONST UNTYP. CODE 22 uinitend REL CONST UNTYP. CODE B20 uinitstart REL CONST UNTYP. CODE AFE valid REL CONST UNTYP. CODE 1EA0 ver0 REL CONST UNTYP. CODE 3 verend REL CONST UNTYP. CODE 20 version REL CONST UNTYP. CODE 2 warm0 REL CONST UNTYP. CODE 1ECF warm1 REL CONST UNTYP. CODE 1ED4 wclr REL CONST PUB UNTYP. CODE 1D04 wipe1 REL CONST UNTYP. CODE 1F6C wipmsg0 REL CONST UNTYP. CODE 1F87 wipmsg1 REL CONST UNTYP. CODE 1F8E wset REL CONST PUB UNTYP. CODE 1CD8 xdo REL CONST PUB UNTYP. CODE 5FE xloop REL CONST PUB UNTYP. CODE 624 xplusloop REL CONST PUB UNTYP. CODE 644 ############################## # CRC:7841 # # Errors: 0 # # Warnings: 0 # # Bytes: 8228 # ##############################