- 4e-config - Page 1 ############################################################################### # # # IAR Assembler V5.30.1.50284/W32 for MSP430 20/Dec/2013 01:47:06 # # Copyright 1996-2011 IAR Systems AB. # # # # Target option = MSP430 # # Source file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-config.s43# # List file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\4e-config.lst# # Object file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\4e-config.r43# # Command line = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-config.s43 # # -OC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\ # # -s+ -M<> -w+ # # -LC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\ # # -i -p80 -t8 -xD -r -D__MSP430G2553__ # # -IC:\Programme\IAR Systems\Embedded Workbench 6.0 Kickstart\430\INC\ # # # ############################################################################### 1 000000 ; configure 4e4th for MSP430-LaunchPad =================================== 2 000000 3 000000 4 000000 #include "msp430.h" ; #define controlled include file 1 000000 /*********************************************** ******************** 2 000000 * * 3 000000 * This file is a generic include file controlled by * 4 000000 * compiler/assembler IDE generated defines * 5 000000 * * 6 000000 ************************************************ *******************/ 7 000000 8 000000 #ifndef __msp430 9 000000 #define __msp430 10 000000 11 000000 #ifndef _SYSTEM_BUILD 12 000000 #pragma system_include 13 000000 #endif 14 000000 15 000000 #if defined (__MSP430C111__) 16 000000 #include "msp430c111.h" 18 000000 #elif defined (__MSP430C1111__) 19 000000 #include "msp430c1111.h" 21 000000 #elif defined (__MSP430C112__) 22 000000 #include "msp430c112.h" 24 000000 #elif defined (__MSP430C1121__) 25 000000 #include "msp430c1121.h" 27 000000 #elif defined (__MSP430C1331__) 28 000000 #include "msp430c1331.h" 30 000000 #elif defined (__MSP430C1351__) 31 000000 #include "msp430c1351.h" 33 000000 #elif defined (__MSP430C311S__) 34 000000 #include "msp430c311s.h" 36 000000 #elif defined (__MSP430C312__) 37 000000 #include "msp430c312.h" 39 000000 #elif defined (__MSP430C313__) 40 000000 #include "msp430c313.h" 42 000000 #elif defined (__MSP430C314__) 43 000000 #include "msp430c314.h" 45 000000 #elif defined (__MSP430C315__) 46 000000 #include "msp430c315.h" 48 000000 #elif defined (__MSP430C323__) 49 000000 #include "msp430c323.h" 51 000000 #elif defined (__MSP430C325__) 52 000000 #include "msp430c325.h" 54 000000 #elif defined (__MSP430C336__) 55 000000 #include "msp430c336.h" 57 000000 #elif defined (__MSP430C337__) 58 000000 #include "msp430c337.h" 60 000000 #elif defined (__MSP430C412__) 61 000000 #include "msp430c412.h" 63 000000 #elif defined (__MSP430C413__) 64 000000 #include "msp430c413.h" - 4e-config - Page 2 66 000000 #elif defined (__MSP430CG4616__) 67 000000 #include "msp430cg4616.h" 69 000000 #elif defined (__MSP430CG4617__) 70 000000 #include "msp430cg4617.h" 72 000000 #elif defined (__MSP430CG4618__) 73 000000 #include "msp430cg4618.h" 75 000000 #elif defined (__MSP430CG4619__) 76 000000 #include "msp430cg4619.h" 78 000000 #elif defined (__MSP430E112__) 79 000000 #include "msp430e112.h" 81 000000 #elif defined (__MSP430E313__) 82 000000 #include "msp430e313.h" 84 000000 #elif defined (__MSP430E315__) 85 000000 #include "msp430e315.h" 87 000000 #elif defined (__MSP430E325__) 88 000000 #include "msp430e325.h" 90 000000 #elif defined (__MSP430E337__) 91 000000 #include "msp430e337.h" 93 000000 #elif defined (__MSP430F110__) 94 000000 #include "msp430f110.h" 96 000000 #elif defined (__MSP430F1101__) 97 000000 #include "msp430f1101.h" 99 000000 #elif defined (__MSP430F1101A__) 100 000000 #include "msp430f1101a.h" 102 000000 #elif defined (__MSP430F1111__) 103 000000 #include "msp430f1111.h" 105 000000 #elif defined (__MSP430F1111A__) 106 000000 #include "msp430f1111a.h" 108 000000 #elif defined (__MSP430F112__) 109 000000 #include "msp430f112.h" 111 000000 #elif defined (__MSP430F1121__) 112 000000 #include "msp430f1121.h" 114 000000 #elif defined (__MSP430F1121A__) 115 000000 #include "msp430f1121a.h" 117 000000 #elif defined (__MSP430F1122__) 118 000000 #include "msp430f1122.h" 120 000000 #elif defined (__MSP430F1132__) 121 000000 #include "msp430f1132.h" 123 000000 #elif defined (__MSP430F122__) 124 000000 #include "msp430f122.h" 126 000000 #elif defined (__MSP430F1222__) 127 000000 #include "msp430f1222.h" 129 000000 #elif defined (__MSP430F123__) 130 000000 #include "msp430f123.h" 132 000000 #elif defined (__MSP430F1232__) 133 000000 #include "msp430f1232.h" 135 000000 #elif defined (__MSP430F133__) 136 000000 #include "msp430f133.h" 138 000000 #elif defined (__MSP430F135__) 139 000000 #include "msp430f135.h" 141 000000 #elif defined (__MSP430F147__) 142 000000 #include "msp430f147.h" 144 000000 #elif defined (__MSP430F148__) 145 000000 #include "msp430f148.h" 147 000000 #elif defined (__MSP430F149__) 148 000000 #include "msp430f149.h" 150 000000 #elif defined (__MSP430F1471__) 151 000000 #include "msp430f1471.h" 153 000000 #elif defined (__MSP430F1481__) 154 000000 #include "msp430f1481.h" 156 000000 #elif defined (__MSP430F1491__) 157 000000 #include "msp430f1491.h" 159 000000 #elif defined (__MSP430F155__) 160 000000 #include "msp430f155.h" 162 000000 #elif defined (__MSP430F156__) 163 000000 #include "msp430f156.h" 165 000000 #elif defined (__MSP430F157__) 166 000000 #include "msp430f157.h" 168 000000 #elif defined (__MSP430F167__) 169 000000 #include "msp430f167.h" 171 000000 #elif defined (__MSP430F168__) 172 000000 #include "msp430f168.h" 174 000000 #elif defined (__MSP430F169__) 175 000000 #include "msp430f169.h" 177 000000 #elif defined (__MSP430F1610__) 178 000000 #include "msp430f1610.h" 180 000000 #elif defined (__MSP430F1611__) 181 000000 #include "msp430f1611.h" - 4e-config - Page 3 183 000000 #elif defined (__MSP430F1612__) 184 000000 #include "msp430f1612.h" 186 000000 #elif defined (__MSP430F2001__) 187 000000 #include "msp430f2001.h" 189 000000 #elif defined (__MSP430F2011__) 190 000000 #include "msp430f2011.h" 192 000000 #elif defined (__MSP430F2002__) 193 000000 #include "msp430f2002.h" 195 000000 #elif defined (__MSP430F2012__) 196 000000 #include "msp430f2012.h" 198 000000 #elif defined (__MSP430F2003__) 199 000000 #include "msp430f2003.h" 201 000000 #elif defined (__MSP430F2013__) 202 000000 #include "msp430f2013.h" 204 000000 #elif defined (__MSP430F2101__) 205 000000 #include "msp430f2101.h" 207 000000 #elif defined (__MSP430F2111__) 208 000000 #include "msp430f2111.h" 210 000000 #elif defined (__MSP430F2121__) 211 000000 #include "msp430f2121.h" 213 000000 #elif defined (__MSP430F2131__) 214 000000 #include "msp430f2131.h" 216 000000 #elif defined (__MSP430F2112__) 217 000000 #include "msp430f2112.h" 219 000000 #elif defined (__MSP430F2122__) 220 000000 #include "msp430f2122.h" 222 000000 #elif defined (__MSP430F2132__) 223 000000 #include "msp430f2132.h" 225 000000 #elif defined (__MSP430F2232__) 226 000000 #include "msp430f2232.h" 228 000000 #elif defined (__MSP430F2252__) 229 000000 #include "msp430f2252.h" 231 000000 #elif defined (__MSP430F2272__) 232 000000 #include "msp430f2272.h" 234 000000 #elif defined (__MSP430F2234__) 235 000000 #include "msp430f2234.h" 237 000000 #elif defined (__MSP430F2254__) 238 000000 #include "msp430f2254.h" 240 000000 #elif defined (__MSP430F2274__) 241 000000 #include "msp430f2274.h" 243 000000 #elif defined (__MSP430F2330__) 244 000000 #include "msp430f2330.h" 246 000000 #elif defined (__MSP430F2350__) 247 000000 #include "msp430f2350.h" 249 000000 #elif defined (__MSP430F2370__) 250 000000 #include "msp430f2370.h" 252 000000 #elif defined (__MSP430F233__) 253 000000 #include "msp430f233.h" 255 000000 #elif defined (__MSP430F235__) 256 000000 #include "msp430f235.h" 258 000000 #elif defined (__MSP430F247__) 259 000000 #include "msp430f247.h" 261 000000 #elif defined (__MSP430F248__) 262 000000 #include "msp430f248.h" 264 000000 #elif defined (__MSP430F249__) 265 000000 #include "msp430f249.h" 267 000000 #elif defined (__MSP430F2410__) 268 000000 #include "msp430f2410.h" 270 000000 #elif defined (__MSP430F2471__) 271 000000 #include "msp430f2471.h" 273 000000 #elif defined (__MSP430F2481__) 274 000000 #include "msp430f2481.h" 276 000000 #elif defined (__MSP430F2491__) 277 000000 #include "msp430f2491.h" 279 000000 #elif defined (__MSP430F2416__) 280 000000 #include "msp430f2416.h" 282 000000 #elif defined (__MSP430F2417__) 283 000000 #include "msp430f2417.h" 285 000000 #elif defined (__MSP430F2418__) 286 000000 #include "msp430f2418.h" 288 000000 #elif defined (__MSP430F2419__) 289 000000 #include "msp430f2419.h" 291 000000 #elif defined (__MSP430F2616__) 292 000000 #include "msp430f2616.h" 294 000000 #elif defined (__MSP430F2617__) 295 000000 #include "msp430f2617.h" 297 000000 #elif defined (__MSP430F2618__) 298 000000 #include "msp430f2618.h" - 4e-config - Page 4 300 000000 #elif defined (__MSP430F2619__) 301 000000 #include "msp430f2619.h" 303 000000 #elif defined (__MSP430F412__) 304 000000 #include "msp430f412.h" 306 000000 #elif defined (__MSP430F413__) 307 000000 #include "msp430f413.h" 309 000000 #elif defined (__MSP430F415__) 310 000000 #include "msp430f415.h" 312 000000 #elif defined (__MSP430F417__) 313 000000 #include "msp430f417.h" 315 000000 #elif defined (__MSP430F4132__) 316 000000 #include "msp430f4132.h" 318 000000 #elif defined (__MSP430F4152__) 319 000000 #include "msp430f4152.h" 321 000000 #elif defined (__MSP430F423__) 322 000000 #include "msp430f423.h" 324 000000 #elif defined (__MSP430F425__) 325 000000 #include "msp430f425.h" 327 000000 #elif defined (__MSP430F427__) 328 000000 #include "msp430f427.h" 330 000000 #elif defined (__MSP430F423A__) 331 000000 #include "msp430f423a.h" 333 000000 #elif defined (__MSP430F425A__) 334 000000 #include "msp430f425a.h" 336 000000 #elif defined (__MSP430F427A__) 337 000000 #include "msp430f427a.h" 339 000000 #elif defined (__MSP430F435__) 340 000000 #include "msp430f435.h" 342 000000 #elif defined (__MSP430F436__) 343 000000 #include "msp430f436.h" 345 000000 #elif defined (__MSP430F437__) 346 000000 #include "msp430f437.h" 348 000000 #elif defined (__MSP430F4351__) 349 000000 #include "msp430f4351.h" 351 000000 #elif defined (__MSP430F4361__) 352 000000 #include "msp430f4361.h" 354 000000 #elif defined (__MSP430F4371__) 355 000000 #include "msp430f4371.h" 357 000000 #elif defined (__MSP430F4481__) 358 000000 #include "msp430f4481.h" 360 000000 #elif defined (__MSP430F4491__) 361 000000 #include "msp430f4491.h" 363 000000 #elif defined (__MSP430F447__) 364 000000 #include "msp430f447.h" 366 000000 #elif defined (__MSP430F448__) 367 000000 #include "msp430f448.h" 369 000000 #elif defined (__MSP430F449__) 370 000000 #include "msp430f449.h" 372 000000 #elif defined (__MSP430FE423__) 373 000000 #include "msp430fe423.h" 375 000000 #elif defined (__MSP430FE425__) 376 000000 #include "msp430fe425.h" 378 000000 #elif defined (__MSP430FE427__) 379 000000 #include "msp430fe427.h" 381 000000 #elif defined (__MSP430FE423A__) 382 000000 #include "msp430fe423a.h" 384 000000 #elif defined (__MSP430FE425A__) 385 000000 #include "msp430fe425a.h" 387 000000 #elif defined (__MSP430FE427A__) 388 000000 #include "msp430fe427a.h" 390 000000 #elif defined (__MSP430FE4232__) 391 000000 #include "msp430fe4232.h" 393 000000 #elif defined (__MSP430FE4242__) 394 000000 #include "msp430fe4242.h" 396 000000 #elif defined (__MSP430FE4252__) 397 000000 #include "msp430fe4252.h" 399 000000 #elif defined (__MSP430FE4272__) 400 000000 #include "msp430fe4272.h" 402 000000 #elif defined (__MSP430F4783__) 403 000000 #include "msp430f4783.h" 405 000000 #elif defined (__MSP430F4793__) 406 000000 #include "msp430f4793.h" 408 000000 #elif defined (__MSP430F4784__) 409 000000 #include "msp430f4784.h" 411 000000 #elif defined (__MSP430F4794__) 412 000000 #include "msp430f4794.h" 414 000000 #elif defined (__MSP430F47126__) 415 000000 #include "msp430f47126.h" - 4e-config - Page 5 417 000000 #elif defined (__MSP430F47127__) 418 000000 #include "msp430f47127.h" 420 000000 #elif defined (__MSP430F47163__) 421 000000 #include "msp430f47163.h" 423 000000 #elif defined (__MSP430F47173__) 424 000000 #include "msp430f47173.h" 426 000000 #elif defined (__MSP430F47183__) 427 000000 #include "msp430f47183.h" 429 000000 #elif defined (__MSP430F47193__) 430 000000 #include "msp430f47193.h" 432 000000 #elif defined (__MSP430F47166__) 433 000000 #include "msp430f47166.h" 435 000000 #elif defined (__MSP430F47176__) 436 000000 #include "msp430f47176.h" 438 000000 #elif defined (__MSP430F47186__) 439 000000 #include "msp430f47186.h" 441 000000 #elif defined (__MSP430F47196__) 442 000000 #include "msp430f47196.h" 444 000000 #elif defined (__MSP430F47167__) 445 000000 #include "msp430f47167.h" 447 000000 #elif defined (__MSP430F47177__) 448 000000 #include "msp430f47177.h" 450 000000 #elif defined (__MSP430F47187__) 451 000000 #include "msp430f47187.h" 453 000000 #elif defined (__MSP430F47197__) 454 000000 #include "msp430f47197.h" 456 000000 #elif defined (__MSP430F4250__) 457 000000 #include "msp430f4250.h" 459 000000 #elif defined (__MSP430F4260__) 460 000000 #include "msp430f4260.h" 462 000000 #elif defined (__MSP430F4270__) 463 000000 #include "msp430f4270.h" 465 000000 #elif defined (__MSP430FG4250__) 466 000000 #include "msp430fg4250.h" 468 000000 #elif defined (__MSP430FG4260__) 469 000000 #include "msp430fg4260.h" 471 000000 #elif defined (__MSP430FG4270__) 472 000000 #include "msp430fg4270.h" 474 000000 #elif defined (__MSP430FW423__) 475 000000 #include "msp430fw423.h" 477 000000 #elif defined (__MSP430FW425__) 478 000000 #include "msp430fw425.h" 480 000000 #elif defined (__MSP430FW427__) 481 000000 #include "msp430fw427.h" 483 000000 #elif defined (__MSP430FW428__) 484 000000 #include "msp430fw428.h" 486 000000 #elif defined (__MSP430FW429__) 487 000000 #include "msp430fw429.h" 489 000000 #elif defined (__MSP430FG437__) 490 000000 #include "msp430fg437.h" 492 000000 #elif defined (__MSP430FG438__) 493 000000 #include "msp430fg438.h" 495 000000 #elif defined (__MSP430FG439__) 496 000000 #include "msp430fg439.h" 498 000000 #elif defined (__MSP430F438__) 499 000000 #include "msp430f438.h" 501 000000 #elif defined (__MSP430F439__) 502 000000 #include "msp430f439.h" 504 000000 #elif defined (__MSP430F477__) 505 000000 #include "msp430f477.h" 507 000000 #elif defined (__MSP430F478__) 508 000000 #include "msp430f478.h" 510 000000 #elif defined (__MSP430F479__) 511 000000 #include "msp430f479.h" 513 000000 #elif defined (__MSP430FG477__) 514 000000 #include "msp430fg477.h" 516 000000 #elif defined (__MSP430FG478__) 517 000000 #include "msp430fg478.h" 519 000000 #elif defined (__MSP430FG479__) 520 000000 #include "msp430fg479.h" 522 000000 #elif defined (__MSP430F46161__) 523 000000 #include "msp430f46161.h" 525 000000 #elif defined (__MSP430F46171__) 526 000000 #include "msp430f46171.h" 528 000000 #elif defined (__MSP430F46181__) 529 000000 #include "msp430f46181.h" 531 000000 #elif defined (__MSP430F46191__) 532 000000 #include "msp430f46191.h" - 4e-config - Page 6 534 000000 #elif defined (__MSP430F4616__) 535 000000 #include "msp430f4616.h" 537 000000 #elif defined (__MSP430F4617__) 538 000000 #include "msp430f4617.h" 540 000000 #elif defined (__MSP430F4618__) 541 000000 #include "msp430f4618.h" 543 000000 #elif defined (__MSP430F4619__) 544 000000 #include "msp430f4619.h" 546 000000 #elif defined (__MSP430FG4616__) 547 000000 #include "msp430fg4616.h" 549 000000 #elif defined (__MSP430FG4617__) 550 000000 #include "msp430fg4617.h" 552 000000 #elif defined (__MSP430FG4618__) 553 000000 #include "msp430fg4618.h" 555 000000 #elif defined (__MSP430FG4619__) 556 000000 #include "msp430fg4619.h" 558 000000 #elif defined (__MSP430F5418__) 559 000000 #include "msp430f5418.h" 561 000000 #elif defined (__MSP430F5419__) 562 000000 #include "msp430f5419.h" 564 000000 #elif defined (__MSP430F5435__) 565 000000 #include "msp430f5435.h" 567 000000 #elif defined (__MSP430F5436__) 568 000000 #include "msp430f5436.h" 570 000000 #elif defined (__MSP430F5437__) 571 000000 #include "msp430f5437.h" 573 000000 #elif defined (__MSP430F5438__) 574 000000 #include "msp430f5438.h" 576 000000 #elif defined (__XMS430F5438__) 577 000000 #include "xms430f5438.h" 579 000000 #elif defined (__MSP430F5418A__) 580 000000 #include "msp430f5418a.h" 582 000000 #elif defined (__MSP430F5419A__) 583 000000 #include "msp430f5419a.h" 585 000000 #elif defined (__MSP430F5435A__) 586 000000 #include "msp430f5435a.h" 588 000000 #elif defined (__MSP430F5436A__) 589 000000 #include "msp430f5436a.h" 591 000000 #elif defined (__MSP430F5437A__) 592 000000 #include "msp430f5437a.h" 594 000000 #elif defined (__MSP430F5438A__) 595 000000 #include "msp430f5438a.h" 597 000000 #elif defined (__MSP430F5304__) 598 000000 #include "msp430f5304.h" 600 000000 #elif defined (__MSP430F5308__) 601 000000 #include "msp430f5308.h" 603 000000 #elif defined (__MSP430F5309__) 604 000000 #include "msp430f5309.h" 606 000000 #elif defined (__MSP430F5310__) 607 000000 #include "msp430f5310.h" 609 000000 #elif defined (__MSP430F5340__) 610 000000 #include "msp430f5340.h" 612 000000 #elif defined (__MSP430F5341__) 613 000000 #include "msp430f5341.h" 615 000000 #elif defined (__MSP430F5342__) 616 000000 #include "msp430f5342.h" 618 000000 #elif defined (__MSP430F5324__) 619 000000 #include "msp430f5324.h" 621 000000 #elif defined (__MSP430F5325__) 622 000000 #include "msp430f5325.h" 624 000000 #elif defined (__MSP430F5326__) 625 000000 #include "msp430f5326.h" 627 000000 #elif defined (__MSP430F5327__) 628 000000 #include "msp430f5327.h" 630 000000 #elif defined (__MSP430F5328__) 631 000000 #include "msp430f5328.h" 633 000000 #elif defined (__MSP430F5329__) 634 000000 #include "msp430f5329.h" 636 000000 #elif defined (__MSP430F5500__) 637 000000 #include "msp430f5500.h" 639 000000 #elif defined (__MSP430F5501__) 640 000000 #include "msp430f5501.h" 642 000000 #elif defined (__MSP430F5502__) 643 000000 #include "msp430f5502.h" 645 000000 #elif defined (__MSP430F5503__) 646 000000 #include "msp430f5503.h" 648 000000 #elif defined (__MSP430F5504__) 649 000000 #include "msp430f5504.h" - 4e-config - Page 7 651 000000 #elif defined (__MSP430F5505__) 652 000000 #include "msp430f5505.h" 654 000000 #elif defined (__MSP430F5506__) 655 000000 #include "msp430f5506.h" 657 000000 #elif defined (__MSP430F5507__) 658 000000 #include "msp430f5507.h" 660 000000 #elif defined (__MSP430F5508__) 661 000000 #include "msp430f5508.h" 663 000000 #elif defined (__MSP430F5509__) 664 000000 #include "msp430f5509.h" 666 000000 #elif defined (__MSP430F5510__) 667 000000 #include "msp430f5510.h" 669 000000 #elif defined (__MSP430F5513__) 670 000000 #include "msp430f5513.h" 672 000000 #elif defined (__MSP430F5514__) 673 000000 #include "msp430f5514.h" 675 000000 #elif defined (__MSP430F5515__) 676 000000 #include "msp430f5515.h" 678 000000 #elif defined (__MSP430F5517__) 679 000000 #include "msp430f5517.h" 681 000000 #elif defined (__MSP430F5519__) 682 000000 #include "msp430f5519.h" 684 000000 #elif defined (__MSP430F5521__) 685 000000 #include "msp430f5521.h" 687 000000 #elif defined (__MSP430F5522__) 688 000000 #include "msp430f5522.h" 690 000000 #elif defined (__MSP430F5524__) 691 000000 #include "msp430f5524.h" 693 000000 #elif defined (__MSP430F5525__) 694 000000 #include "msp430f5525.h" 696 000000 #elif defined (__MSP430F5526__) 697 000000 #include "msp430f5526.h" 699 000000 #elif defined (__MSP430F5527__) 700 000000 #include "msp430f5527.h" 702 000000 #elif defined (__MSP430F5528__) 703 000000 #include "msp430f5528.h" 705 000000 #elif defined (__MSP430F5529__) 706 000000 #include "msp430f5529.h" 708 000000 #elif defined (__MSP430P112__) 709 000000 #include "msp430p112.h" 711 000000 #elif defined (__MSP430P313__) 712 000000 #include "msp430p313.h" 714 000000 #elif defined (__MSP430P315__) 715 000000 #include "msp430p315.h" 717 000000 #elif defined (__MSP430P315S__) 718 000000 #include "msp430p315s.h" 720 000000 #elif defined (__MSP430P325__) 721 000000 #include "msp430p325.h" 723 000000 #elif defined (__MSP430P337__) 724 000000 #include "msp430p337.h" 726 000000 #elif defined (__CC430F5133__) 727 000000 #include "cc430f5133.h" 729 000000 #elif defined (__CC430F5135__) 730 000000 #include "cc430f5135.h" 732 000000 #elif defined (__CC430F5137__) 733 000000 #include "cc430f5137.h" 735 000000 #elif defined (__CC430F6125__) 736 000000 #include "cc430f6125.h" 738 000000 #elif defined (__CC430F6126__) 739 000000 #include "cc430f6126.h" 741 000000 #elif defined (__CC430F6127__) 742 000000 #include "cc430f6127.h" 744 000000 #elif defined (__CC430F6135__) 745 000000 #include "cc430f6135.h" 747 000000 #elif defined (__CC430F6137__) 748 000000 #include "cc430f6137.h" 750 000000 #elif defined (__MSP430F5630__) 751 000000 #include "msp430f5630.h" 753 000000 #elif defined (__MSP430F5631__) 754 000000 #include "msp430f5631.h" 756 000000 #elif defined (__MSP430F5632__) 757 000000 #include "msp430f5632.h" 759 000000 #elif defined (__MSP430F5633__) 760 000000 #include "msp430f5633.h" 762 000000 #elif defined (__MSP430F5634__) 763 000000 #include "msp430f5634.h" 765 000000 #elif defined (__MSP430F5635__) 766 000000 #include "msp430f5635.h" - 4e-config - Page 8 768 000000 #elif defined (__MSP430F5636__) 769 000000 #include "msp430f5636.h" 771 000000 #elif defined (__MSP430F5637__) 772 000000 #include "msp430f5637.h" 774 000000 #elif defined (__MSP430F5638__) 775 000000 #include "msp430f5638.h" 777 000000 #elif defined (__MSP430F6630__) 778 000000 #include "msp430f6630.h" 780 000000 #elif defined (__MSP430F6631__) 781 000000 #include "msp430f6631.h" 783 000000 #elif defined (__MSP430F6632__) 784 000000 #include "msp430f6632.h" 786 000000 #elif defined (__MSP430F6633__) 787 000000 #include "msp430f6633.h" 789 000000 #elif defined (__MSP430F6634__) 790 000000 #include "msp430f6634.h" 792 000000 #elif defined (__MSP430F6635__) 793 000000 #include "msp430f6635.h" 795 000000 #elif defined (__MSP430F6636__) 796 000000 #include "msp430f6636.h" 798 000000 #elif defined (__MSP430F6637__) 799 000000 #include "msp430f6637.h" 801 000000 #elif defined (__MSP430F6638__) 802 000000 #include "msp430f6638.h" 804 000000 #elif defined (__MSP430L092__) 805 000000 #include "msp430l092.h" 807 000000 #elif defined (__MSP430C091__) 808 000000 #include "msp430c091.h" 810 000000 #elif defined (__MSP430C092__) 811 000000 #include "msp430c092.h" 813 000000 #elif defined (__MSP430F5131__) 814 000000 #include "msp430f5131.h" 816 000000 #elif defined (__MSP430F5151__) 817 000000 #include "msp430f5151.h" 819 000000 #elif defined (__MSP430F5171__) 820 000000 #include "msp430f5171.h" 822 000000 #elif defined (__MSP430F5132__) 823 000000 #include "msp430f5132.h" 825 000000 #elif defined (__MSP430F5152__) 826 000000 #include "msp430f5152.h" 828 000000 #elif defined (__MSP430F5172__) 829 000000 #include "msp430f5172.h" 831 000000 #elif defined (__MSP430FR5720__) 832 000000 #include "msp430fr5720.h" 834 000000 #elif defined (__MSP430FR5725__) 835 000000 #include "msp430fr5725.h" 837 000000 #elif defined (__MSP430FR5728__) 838 000000 #include "msp430fr5728.h" 840 000000 #elif defined (__MSP430FR5729__) 841 000000 #include "msp430fr5729.h" 843 000000 #elif defined (__MSP430FR5730__) 844 000000 #include "msp430fr5730.h" 846 000000 #elif defined (__MSP430FR5735__) 847 000000 #include "msp430fr5735.h" 849 000000 #elif defined (__MSP430FR5738__) 850 000000 #include "msp430fr5738.h" 852 000000 #elif defined (__MSP430FR5739__) 853 000000 #include "msp430fr5739.h" 855 000000 #elif defined (__MSP430G2211__) 856 000000 #include "msp430g2211.h" 858 000000 #elif defined (__MSP430G2201__) 859 000000 #include "msp430g2201.h" 861 000000 #elif defined (__MSP430G2111__) 862 000000 #include "msp430g2111.h" 864 000000 #elif defined (__MSP430G2101__) 865 000000 #include "msp430g2101.h" 867 000000 #elif defined (__MSP430G2001__) 868 000000 #include "msp430g2001.h" 870 000000 #elif defined (__MSP430G2231__) 871 000000 #include "msp430g2231.h" 873 000000 #elif defined (__MSP430G2221__) 874 000000 #include "msp430g2221.h" 876 000000 #elif defined (__MSP430G2131__) 877 000000 #include "msp430g2131.h" 879 000000 #elif defined (__MSP430G2121__) 880 000000 #include "msp430g2121.h" 882 000000 #elif defined (__MSP430AFE221__) 883 000000 #include "msp430afe221.h" - 4e-config - Page 9 885 000000 #elif defined (__MSP430AFE231__) 886 000000 #include "msp430afe231.h" 888 000000 #elif defined (__MSP430AFE251__) 889 000000 #include "msp430afe251.h" 891 000000 #elif defined (__MSP430AFE222__) 892 000000 #include "msp430afe222.h" 894 000000 #elif defined (__MSP430AFE232__) 895 000000 #include "msp430afe232.h" 897 000000 #elif defined (__MSP430AFE252__) 898 000000 #include "msp430afe252.h" 900 000000 #elif defined (__MSP430AFE223__) 901 000000 #include "msp430afe223.h" 903 000000 #elif defined (__MSP430AFE233__) 904 000000 #include "msp430afe233.h" 906 000000 #elif defined (__MSP430AFE253__) 907 000000 #include "msp430afe253.h" 909 000000 #elif defined (__MSP430G2102__) 910 000000 #include "msp430g2102.h" 912 000000 #elif defined (__MSP430G2202__) 913 000000 #include "msp430g2202.h" 915 000000 #elif defined (__MSP430G2302__) 916 000000 #include "msp430g2302.h" 918 000000 #elif defined (__MSP430G2402__) 919 000000 #include "msp430g2402.h" 921 000000 #elif defined (__MSP430G2132__) 922 000000 #include "msp430g2132.h" 924 000000 #elif defined (__MSP430G2232__) 925 000000 #include "msp430g2232.h" 927 000000 #elif defined (__MSP430G2332__) 928 000000 #include "msp430g2332.h" 930 000000 #elif defined (__MSP430G2432__) 931 000000 #include "msp430g2432.h" 933 000000 #elif defined (__MSP430G2112__) 934 000000 #include "msp430g2112.h" 936 000000 #elif defined (__MSP430G2212__) 937 000000 #include "msp430g2212.h" 939 000000 #elif defined (__MSP430G2312__) 940 000000 #include "msp430g2312.h" 942 000000 #elif defined (__MSP430G2412__) 943 000000 #include "msp430g2412.h" 945 000000 #elif defined (__MSP430G2152__) 946 000000 #include "msp430g2152.h" 948 000000 #elif defined (__MSP430G2252__) 949 000000 #include "msp430g2252.h" 951 000000 #elif defined (__MSP430G2352__) 952 000000 #include "msp430g2352.h" 954 000000 #elif defined (__MSP430G2452__) 955 000000 #include "msp430g2452.h" 957 000000 #elif defined (__MSP430G2113__) 958 000000 #include "msp430g2113.h" 960 000000 #elif defined (__MSP430G2213__) 961 000000 #include "msp430g2213.h" 963 000000 #elif defined (__MSP430G2313__) 964 000000 #include "msp430g2313.h" 966 000000 #elif defined (__MSP430G2413__) 967 000000 #include "msp430g2413.h" 969 000000 #elif defined (__MSP430G2513__) 970 000000 #include "msp430g2513.h" 972 000000 #elif defined (__MSP430G2153__) 973 000000 #include "msp430g2153.h" 975 000000 #elif defined (__MSP430G2253__) 976 000000 #include "msp430g2253.h" 978 000000 #elif defined (__MSP430G2353__) 979 000000 #include "msp430g2353.h" 981 000000 #elif defined (__MSP430G2453__) 982 000000 #include "msp430g2453.h" 984 000000 #elif defined (__MSP430G2553__) 985 000000 #include "msp430g2553.h" 1 000000 /*********************************************** ********************* 2 000000 * 3 000000 * Standard register and bit definitions for the Texas Instruments 4 000000 * MSP430 microcontroller. 5 000000 * 6 000000 * This file supports assembler and C development for 7 000000 * MSP430G2553 devices. - 4e-config - Page 10 8 000000 * 9 000000 * Texas Instruments, Version 1.0 10 000000 * 11 000000 * Rev. 1.0, Setup 12 000000 * 13 000000 ************************************************ ********************/ 14 000000 15 000000 #ifndef __MSP430G2553 16 000000 #define __MSP430G2553 17 000000 18 000000 #ifdef __IAR_SYSTEMS_ICC__ 19 000000 #ifndef _SYSTEM_BUILD 20 000000 #pragma system_include 21 000000 #endif 22 000000 #endif 23 000000 24 000000 #if (((__TID__ >> 8) & 0x7F) != 0x2b) /* 0x2b = 43 dec */ 25 000000 #error msp430g2553.h file for use with ICC430/A430 only 26 000000 #endif 27 000000 28 000000 29 000000 #ifdef __IAR_SYSTEMS_ICC__ 30 000000 #include "in430.h" 31 000000 #pragma language=extended 33 000000 #define DEFC(name, address) __no_init volatile unsigned char name @ address; 34 000000 #define DEFW(name, address) __no_init volatile unsigned short name @ address; 35 000000 #define DEFXC volatile unsigned char 36 000000 #define DEFXW volatile unsigned short 38 000000 #endif /* __IAR_SYSTEMS_ICC__ */ 39 000000 40 000000 41 000000 #ifdef __IAR_SYSTEMS_ASM__ 42 000000 #define DEFC(name, address) sfrb name = address; 43 000000 #define DEFW(name, address) sfrw name = address; 44 000000 45 000000 #endif /* __IAR_SYSTEMS_ASM__*/ 46 000000 47 000000 #ifdef __cplusplus 48 000000 #define READ_ONLY 49 000000 #else 50 000000 #define READ_ONLY const 51 000000 #endif 52 000000 53 000000 /*********************************************** ************* 54 000000 * STANDARD BITS 55 000000 ************************************************ ************/ 56 000000 57 000000 #define BIT0 (0x0001u) 58 000000 #define BIT1 (0x0002u) 59 000000 #define BIT2 (0x0004u) 60 000000 #define BIT3 (0x0008u) 61 000000 #define BIT4 (0x0010u) 62 000000 #define BIT5 (0x0020u) 63 000000 #define BIT6 (0x0040u) 64 000000 #define BIT7 (0x0080u) 65 000000 #define BIT8 (0x0100u) 66 000000 #define BIT9 (0x0200u) 67 000000 #define BITA (0x0400u) 68 000000 #define BITB (0x0800u) 69 000000 #define BITC (0x1000u) 70 000000 #define BITD (0x2000u) 71 000000 #define BITE (0x4000u) 72 000000 #define BITF (0x8000u) 73 000000 74 000000 /*********************************************** ************* 75 000000 * STATUS REGISTER BITS 76 000000 ************************************************ ************/ - 4e-config - Page 11 77 000000 78 000000 #define C (0x0001u) 79 000000 #define Z (0x0002u) 80 000000 #define N (0x0004u) 81 000000 #define V (0x0100u) 82 000000 #define GIE (0x0008u) 83 000000 #define CPUOFF (0x0010u) 84 000000 #define OSCOFF (0x0020u) 85 000000 #define SCG0 (0x0040u) 86 000000 #define SCG1 (0x0080u) 87 000000 88 000000 /* Low Power Modes coded with Bits 4-7 in SR */ 89 000000 90 000000 #ifndef __IAR_SYSTEMS_ICC__ /* Begin #defines for assembler */ 91 000000 #define LPM0 (CPUOFF) 92 000000 #define LPM1 (SCG0+CPUOFF) 93 000000 #define LPM2 (SCG1+CPUOFF) 94 000000 #define LPM3 (SCG1+SCG0+CPUOFF) 95 000000 #define LPM4 (SCG1+SCG0+OSCOFF+CP UOFF) 96 000000 /* End #defines for assembler */ 97 000000 98 000000 #else /* Begin #defines for C */ 99 000000 #define LPM0_bits (CPUOFF) 100 000000 #define LPM1_bits (SCG0+CPUOFF) 101 000000 #define LPM2_bits (SCG1+CPUOFF) 102 000000 #define LPM3_bits (SCG1+SCG0+CPUOFF) 103 000000 #define LPM4_bits (SCG1+SCG0+OSCOFF+CP UOFF) 105 000000 #include "in430.h" 107 000000 #define LPM0 _BIS_SR(LPM0_bits) /* Enter Low Power Mode 0 */ 108 000000 #define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits) /* Exit Low Power Mode 0 */ 109 000000 #define LPM1 _BIS_SR(LPM1_bits) /* Enter Low Power Mode 1 */ 110 000000 #define LPM1_EXIT _BIC_SR_IRQ(LPM1_bits) /* Exit Low Power Mode 1 */ 111 000000 #define LPM2 _BIS_SR(LPM2_bits) /* Enter Low Power Mode 2 */ 112 000000 #define LPM2_EXIT _BIC_SR_IRQ(LPM2_bits) /* Exit Low Power Mode 2 */ 113 000000 #define LPM3 _BIS_SR(LPM3_bits) /* Enter Low Power Mode 3 */ 114 000000 #define LPM3_EXIT _BIC_SR_IRQ(LPM3_bits) /* Exit Low Power Mode 3 */ 115 000000 #define LPM4 _BIS_SR(LPM4_bits) /* Enter Low Power Mode 4 */ 116 000000 #define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits) /* Exit Low Power Mode 4 */ 117 000000 #endif /* End #defines for C */ 118 000000 119 000000 /*********************************************** ************* 120 000000 * PERIPHERAL FILE MAP 121 000000 ************************************************ ************/ 122 000000 123 000000 /*********************************************** ************* 124 000000 * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS 125 000000 ************************************************ ************/ 126 000000 127 000000 #define IE1_ (0x0000u) /* Interrupt Enable 1 */ 128 000000 DEFC( IE1 , IE1_) 129 000000 #define WDTIE (0x01) /* Watchdog Interrupt Enable */ 130 000000 #define OFIE (0x02) /* Osc. Fault Interrupt Enable */ 131 000000 #define NMIIE (0x10) /* NMI Interrupt Enable */ 132 000000 #define ACCVIE (0x20) /* Flash Access Violation Interrupt Enable */ - 4e-config - Page 12 133 000000 134 000000 #define IFG1_ (0x0002u) /* Interrupt Flag 1 */ 135 000000 DEFC( IFG1 , IFG1_) 136 000000 #define WDTIFG (0x01) /* Watchdog Interrupt Flag */ 137 000000 #define OFIFG (0x02) /* Osc. Fault Interrupt Flag */ 138 000000 #define PORIFG (0x04) /* Power On Interrupt Flag */ 139 000000 #define RSTIFG (0x08) /* Reset Interrupt Flag */ 140 000000 #define NMIIFG (0x10) /* NMI Interrupt Flag */ 141 000000 142 000000 #define IE2_ (0x0001u) /* Interrupt Enable 2 */ 143 000000 DEFC( IE2 , IE2_) 144 000000 #define UC0IE IE2 145 000000 #define UCA0RXIE (0x01) 146 000000 #define UCA0TXIE (0x02) 147 000000 #define UCB0RXIE (0x04) 148 000000 #define UCB0TXIE (0x08) 149 000000 150 000000 #define IFG2_ (0x0003u) /* Interrupt Flag 2 */ 151 000000 DEFC( IFG2 , IFG2_) 152 000000 #define UC0IFG IFG2 153 000000 #define UCA0RXIFG (0x01) 154 000000 #define UCA0TXIFG (0x02) 155 000000 #define UCB0RXIFG (0x04) 156 000000 #define UCB0TXIFG (0x08) 157 000000 158 000000 /*********************************************** ************* 159 000000 * ADC10 160 000000 ************************************************ ************/ 161 000000 #define __MSP430_HAS_ADC10__ /* Definition to show that Module is available */ 162 000000 163 000000 #define ADC10DTC0_ (0x0048u) /* ADC10 Data Transfer Control 0 */ 164 000000 DEFC( ADC10DTC0 , ADC10DTC0_) 165 000000 #define ADC10DTC1_ (0x0049u) /* ADC10 Data Transfer Control 1 */ 166 000000 DEFC( ADC10DTC1 , ADC10DTC1_) 167 000000 #define ADC10AE0_ (0x004Au) /* ADC10 Analog Enable 0 */ 168 000000 DEFC( ADC10AE0 , ADC10AE0_) 169 000000 170 000000 #define ADC10CTL0_ (0x01B0u) /* ADC10 Control 0 */ 171 000000 DEFW( ADC10CTL0 , ADC10CTL0_) 172 000000 #define ADC10CTL1_ (0x01B2u) /* ADC10 Control 1 */ 173 000000 DEFW( ADC10CTL1 , ADC10CTL1_) 174 000000 #define ADC10MEM_ (0x01B4u) /* ADC10 Memory */ 175 000000 DEFW( ADC10MEM , ADC10MEM_) 176 000000 #define ADC10SA_ (0x01BCu) /* ADC10 Data Transfer Start Address */ 177 000000 DEFW( ADC10SA , ADC10SA_) 178 000000 179 000000 /* ADC10CTL0 */ 180 000000 #define ADC10SC (0x001) /* ADC10 Start Conversion */ 181 000000 #define ENC (0x002) /* ADC10 Enable Conversion */ 182 000000 #define ADC10IFG (0x004) /* ADC10 Interrupt Flag */ 183 000000 #define ADC10IE (0x008) /* ADC10 Interrupt Enalbe */ 184 000000 #define ADC10ON (0x010) /* ADC10 On/Enable */ 185 000000 #define REFON (0x020) /* ADC10 Reference on */ - 4e-config - Page 13 186 000000 #define REF2_5V (0x040) /* ADC10 Ref 0:1.5V / 1:2.5V */ 187 000000 #define MSC (0x080) /* ADC10 Multiple SampleConversion */ 188 000000 #define REFBURST (0x100) /* ADC10 Reference Burst Mode */ 189 000000 #define REFOUT (0x200) /* ADC10 Enalbe output of Ref. */ 190 000000 #define ADC10SR (0x400) /* ADC10 Sampling Rate 0:200ksps / 1:50ksps */ 191 000000 #define ADC10SHT0 (0x800) /* ADC10 Sample Hold Select Bit: 0 */ 192 000000 #define ADC10SHT1 (0x1000u) /* ADC10 Sample Hold Select Bit: 1 */ 193 000000 #define SREF0 (0x2000u) /* ADC10 Reference Select Bit: 0 */ 194 000000 #define SREF1 (0x4000u) /* ADC10 Reference Select Bit: 1 */ 195 000000 #define SREF2 (0x8000u) /* ADC10 Reference Select Bit: 2 */ 196 000000 #define ADC10SHT_0 (0*0x800u) /* 4 x ADC10CLKs */ 197 000000 #define ADC10SHT_1 (1*0x800u) /* 8 x ADC10CLKs */ 198 000000 #define ADC10SHT_2 (2*0x800u) /* 16 x ADC10CLKs */ 199 000000 #define ADC10SHT_3 (3*0x800u) /* 64 x ADC10CLKs */ 200 000000 201 000000 #define SREF_0 (0*0x2000u) /* VR+ = AVCC and VR- = AVSS */ 202 000000 #define SREF_1 (1*0x2000u) /* VR+ = VREF+ and VR- = AVSS */ 203 000000 #define SREF_2 (2*0x2000u) /* VR+ = VEREF+ and VR- = AVSS */ 204 000000 #define SREF_3 (3*0x2000u) /* VR+ = VEREF+ and VR- = AVSS */ 205 000000 #define SREF_4 (4*0x2000u) /* VR+ = AVCC and VR- = VREF-/VEREF- */ 206 000000 #define SREF_5 (5*0x2000u) /* VR+ = VREF+ and VR- = VREF-/VEREF- */ 207 000000 #define SREF_6 (6*0x2000u) /* VR+ = VEREF+ and VR- = VREF-/VEREF- */ 208 000000 #define SREF_7 (7*0x2000u) /* VR+ = VEREF+ and VR- = VREF-/VEREF- */ 209 000000 210 000000 /* ADC10CTL1 */ 211 000000 #define ADC10BUSY (0x0001u) /* ADC10 BUSY */ 212 000000 #define CONSEQ0 (0x0002u) /* ADC10 Conversion Sequence Select 0 */ 213 000000 #define CONSEQ1 (0x0004u) /* ADC10 Conversion Sequence Select 1 */ 214 000000 #define ADC10SSEL0 (0x0008u) /* ADC10 Clock Source Select Bit: 0 */ 215 000000 #define ADC10SSEL1 (0x0010u) /* ADC10 Clock Source Select Bit: 1 */ 216 000000 #define ADC10DIV0 (0x0020u) /* ADC10 Clock Divider Select Bit: 0 */ 217 000000 #define ADC10DIV1 (0x0040u) /* ADC10 Clock Divider Select Bit: 1 */ 218 000000 #define ADC10DIV2 (0x0080u) /* ADC10 Clock Divider Select Bit: 2 */ 219 000000 #define ISSH (0x0100u) /* ADC10 Invert Sample Hold Signal */ 220 000000 #define ADC10DF (0x0200u) /* ADC10 Data Format 0:binary 1:2's complement */ 221 000000 #define SHS0 (0x0400u) /* ADC10 Sample/Hold Source Bit: 0 */ 222 000000 #define SHS1 (0x0800u) /* ADC10 Sample/Hold Source Bit: 1 */ 223 000000 #define INCH0 (0x1000u) /* ADC10 Input Channel Select Bit: 0 */ 224 000000 #define INCH1 (0x2000u) /* ADC10 Input Channel Select Bit: 1 */ 225 000000 #define INCH2 (0x4000u) /* ADC10 Input Channel Select Bit: 2 */ - 4e-config - Page 14 226 000000 #define INCH3 (0x8000u) /* ADC10 Input Channel Select Bit: 3 */ 227 000000 228 000000 #define CONSEQ_0 (0*2u) /* Single channel single conversion */ 229 000000 #define CONSEQ_1 (1*2u) /* Sequence of channels */ 230 000000 #define CONSEQ_2 (2*2u) /* Repeat single channel */ 231 000000 #define CONSEQ_3 (3*2u) /* Repeat sequence of channels */ 232 000000 233 000000 #define ADC10SSEL_0 (0*8u) /* ADC10OSC */ 234 000000 #define ADC10SSEL_1 (1*8u) /* ACLK */ 235 000000 #define ADC10SSEL_2 (2*8u) /* MCLK */ 236 000000 #define ADC10SSEL_3 (3*8u) /* SMCLK */ 237 000000 238 000000 #define ADC10DIV_0 (0*0x20u) /* ADC10 Clock Divider Select 0 */ 239 000000 #define ADC10DIV_1 (1*0x20u) /* ADC10 Clock Divider Select 1 */ 240 000000 #define ADC10DIV_2 (2*0x20u) /* ADC10 Clock Divider Select 2 */ 241 000000 #define ADC10DIV_3 (3*0x20u) /* ADC10 Clock Divider Select 3 */ 242 000000 #define ADC10DIV_4 (4*0x20u) /* ADC10 Clock Divider Select 4 */ 243 000000 #define ADC10DIV_5 (5*0x20u) /* ADC10 Clock Divider Select 5 */ 244 000000 #define ADC10DIV_6 (6*0x20u) /* ADC10 Clock Divider Select 6 */ 245 000000 #define ADC10DIV_7 (7*0x20u) /* ADC10 Clock Divider Select 7 */ 246 000000 247 000000 #define SHS_0 (0*0x400u) /* ADC10SC */ 248 000000 #define SHS_1 (1*0x400u) /* TA3 OUT1 */ 249 000000 #define SHS_2 (2*0x400u) /* TA3 OUT0 */ 250 000000 #define SHS_3 (3*0x400u) /* TA3 OUT2 */ 251 000000 252 000000 #define INCH_0 (0*0x1000u) /* Selects Channel 0 */ 253 000000 #define INCH_1 (1*0x1000u) /* Selects Channel 1 */ 254 000000 #define INCH_2 (2*0x1000u) /* Selects Channel 2 */ 255 000000 #define INCH_3 (3*0x1000u) /* Selects Channel 3 */ 256 000000 #define INCH_4 (4*0x1000u) /* Selects Channel 4 */ 257 000000 #define INCH_5 (5*0x1000u) /* Selects Channel 5 */ 258 000000 #define INCH_6 (6*0x1000u) /* Selects Channel 6 */ 259 000000 #define INCH_7 (7*0x1000u) /* Selects Channel 7 */ 260 000000 #define INCH_8 (8*0x1000u) /* Selects Channel 8 */ 261 000000 #define INCH_9 (9*0x1000u) /* Selects Channel 9 */ 262 000000 #define INCH_10 (10*0x1000u) /* Selects Channel 10 */ 263 000000 #define INCH_11 (11*0x1000u) /* Selects Channel 11 */ 264 000000 #define INCH_12 (12*0x1000u) /* Selects Channel 12 */ 265 000000 #define INCH_13 (13*0x1000u) /* Selects Channel 13 */ 266 000000 #define INCH_14 (14*0x1000u) /* Selects Channel 14 */ 267 000000 #define INCH_15 (15*0x1000u) /* - 4e-config - Page 15 Selects Channel 15 */ 268 000000 269 000000 /* ADC10DTC0 */ 270 000000 #define ADC10FETCH (0x001) /* This bit should normally be reset */ 271 000000 #define ADC10B1 (0x002) /* ADC10 block one */ 272 000000 #define ADC10CT (0x004) /* ADC10 continuous transfer */ 273 000000 #define ADC10TB (0x008) /* ADC10 two-block mode */ 274 000000 #define ADC10DISABLE (0x000) /* ADC10DTC1 */ 275 000000 276 000000 /*********************************************** ************* 277 000000 * Basic Clock Module 278 000000 ************************************************ ************/ 279 000000 #define __MSP430_HAS_BC2__ /* Definition to show that Module is available */ 280 000000 281 000000 #define DCOCTL_ (0x0056u) /* DCO Clock Frequency Control */ 282 000000 DEFC( DCOCTL , DCOCTL_) 283 000000 #define BCSCTL1_ (0x0057u) /* Basic Clock System Control 1 */ 284 000000 DEFC( BCSCTL1 , BCSCTL1_) 285 000000 #define BCSCTL2_ (0x0058u) /* Basic Clock System Control 2 */ 286 000000 DEFC( BCSCTL2 , BCSCTL2_) 287 000000 #define BCSCTL3_ (0x0053u) /* Basic Clock System Control 3 */ 288 000000 DEFC( BCSCTL3 , BCSCTL3_) 289 000000 290 000000 #define MOD0 (0x01) /* Modulation Bit 0 */ 291 000000 #define MOD1 (0x02) /* Modulation Bit 1 */ 292 000000 #define MOD2 (0x04) /* Modulation Bit 2 */ 293 000000 #define MOD3 (0x08) /* Modulation Bit 3 */ 294 000000 #define MOD4 (0x10) /* Modulation Bit 4 */ 295 000000 #define DCO0 (0x20) /* DCO Select Bit 0 */ 296 000000 #define DCO1 (0x40) /* DCO Select Bit 1 */ 297 000000 #define DCO2 (0x80) /* DCO Select Bit 2 */ 298 000000 299 000000 #define RSEL0 (0x01) /* Range Select Bit 0 */ 300 000000 #define RSEL1 (0x02) /* Range Select Bit 1 */ 301 000000 #define RSEL2 (0x04) /* Range Select Bit 2 */ 302 000000 #define RSEL3 (0x08) /* Range Select Bit 3 */ 303 000000 #define DIVA0 (0x10) /* ACLK Divider 0 */ 304 000000 #define DIVA1 (0x20) /* ACLK Divider 1 */ 305 000000 #define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ 306 000000 #define XT2OFF (0x80) /* Enable XT2CLK */ 307 000000 308 000000 #define DIVA_0 (0x00) /* ACLK Divider 0: /1 */ 309 000000 #define DIVA_1 (0x10) /* ACLK Divider 1: /2 */ 310 000000 #define DIVA_2 (0x20) /* ACLK Divider 2: /4 */ 311 000000 #define DIVA_3 (0x30) /* ACLK Divider 3: /8 */ - 4e-config - Page 16 312 000000 313 000000 #define DIVS0 (0x02) /* SMCLK Divider 0 */ 314 000000 #define DIVS1 (0x04) /* SMCLK Divider 1 */ 315 000000 #define SELS (0x08) /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */ 316 000000 #define DIVM0 (0x10) /* MCLK Divider 0 */ 317 000000 #define DIVM1 (0x20) /* MCLK Divider 1 */ 318 000000 #define SELM0 (0x40) /* MCLK Source Select 0 */ 319 000000 #define SELM1 (0x80) /* MCLK Source Select 1 */ 320 000000 321 000000 #define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */ 322 000000 #define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */ 323 000000 #define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */ 324 000000 #define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */ 325 000000 326 000000 #define DIVM_0 (0x00) /* MCLK Divider 0: /1 */ 327 000000 #define DIVM_1 (0x10) /* MCLK Divider 1: /2 */ 328 000000 #define DIVM_2 (0x20) /* MCLK Divider 2: /4 */ 329 000000 #define DIVM_3 (0x30) /* MCLK Divider 3: /8 */ 330 000000 331 000000 #define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */ 332 000000 #define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */ 333 000000 #define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */ 334 000000 #define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */ 335 000000 336 000000 #define LFXT1OF (0x01) /* Low/high Frequency Oscillator Fault Flag */ 337 000000 #define XT2OF (0x02) /* High frequency oscillator 2 fault flag */ 338 000000 #define XCAP0 (0x04) /* XIN/XOUT Cap 0 */ 339 000000 #define XCAP1 (0x08) /* XIN/XOUT Cap 1 */ 340 000000 #define LFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */ 341 000000 #define LFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */ 342 000000 #define XT2S0 (0x40) /* Mode 0 for XT2 */ 343 000000 #define XT2S1 (0x80) /* Mode 1 for XT2 */ 344 000000 345 000000 #define XCAP_0 (0x00) /* XIN/XOUT Cap : 0 pF */ 346 000000 #define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */ 347 000000 #define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */ 348 000000 #define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */ 349 000000 350 000000 #define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */ 351 000000 #define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */ 352 000000 #define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */ 353 000000 #define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal */ - 4e-config - Page 17 354 000000 355 000000 #define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */ 356 000000 #define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */ 357 000000 #define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */ 358 000000 #define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal */ 359 000000 360 000000 /*********************************************** ************* 361 000000 * Comparator A 362 000000 ************************************************ ************/ 363 000000 #define __MSP430_HAS_CAPLUS__ /* Definition to show that Module is available */ 364 000000 365 000000 #define CACTL1_ (0x0059u) /* Comparator A Control 1 */ 366 000000 DEFC( CACTL1 , CACTL1_) 367 000000 #define CACTL2_ (0x005Au) /* Comparator A Control 2 */ 368 000000 DEFC( CACTL2 , CACTL2_) 369 000000 #define CAPD_ (0x005Bu) /* Comparator A Port Disable */ 370 000000 DEFC( CAPD , CAPD_) 371 000000 372 000000 #define CAIFG (0x01) /* Comp. A Interrupt Flag */ 373 000000 #define CAIE (0x02) /* Comp. A Interrupt Enable */ 374 000000 #define CAIES (0x04) /* Comp. A Int. Edge Select: 0:rising / 1:falling */ 375 000000 #define CAON (0x08) /* Comp. A enable */ 376 000000 #define CAREF0 (0x10) /* Comp. A Internal Reference Select 0 */ 377 000000 #define CAREF1 (0x20) /* Comp. A Internal Reference Select 1 */ 378 000000 #define CARSEL (0x40) /* Comp. A Internal Reference Enable */ 379 000000 #define CAEX (0x80) /* Comp. A Exchange Inputs */ 380 000000 381 000000 #define CAREF_0 (0x00) /* Comp. A Int. Ref. Select 0 : Off */ 382 000000 #define CAREF_1 (0x10) /* Comp. A Int. Ref. Select 1 : 0.25*Vcc */ 383 000000 #define CAREF_2 (0x20) /* Comp. A Int. Ref. Select 2 : 0.5*Vcc */ 384 000000 #define CAREF_3 (0x30) /* Comp. A Int. Ref. Select 3 : Vt*/ 385 000000 386 000000 #define CAOUT (0x01) /* Comp. A Output */ 387 000000 #define CAF (0x02) /* Comp. A Enable Output Filter */ 388 000000 #define P2CA0 (0x04) /* Comp. A +Terminal Multiplexer */ 389 000000 #define P2CA1 (0x08) /* Comp. A -Terminal Multiplexer */ 390 000000 #define P2CA2 (0x10) /* Comp. A -Terminal Multiplexer */ 391 000000 #define P2CA3 (0x20) /* Comp. A -Terminal Multiplexer */ 392 000000 #define P2CA4 (0x40) /* Comp. A +Terminal Multiplexer */ 393 000000 #define CASHORT (0x80) /* Comp. A Short + and - Terminals */ 394 000000 395 000000 #define CAPD0 (0x01) /* Comp. A Disable Input Buffer of Port Register .0 */ 396 000000 #define CAPD1 (0x02) /* Comp. A Disable Input Buffer of Port Register .1 - 4e-config - Page 18 */ 397 000000 #define CAPD2 (0x04) /* Comp. A Disable Input Buffer of Port Register .2 */ 398 000000 #define CAPD3 (0x08) /* Comp. A Disable Input Buffer of Port Register .3 */ 399 000000 #define CAPD4 (0x10) /* Comp. A Disable Input Buffer of Port Register .4 */ 400 000000 #define CAPD5 (0x20) /* Comp. A Disable Input Buffer of Port Register .5 */ 401 000000 #define CAPD6 (0x40) /* Comp. A Disable Input Buffer of Port Register .6 */ 402 000000 #define CAPD7 (0x80) /* Comp. A Disable Input Buffer of Port Register .7 */ 403 000000 404 000000 /*********************************************** ************** 405 000000 * Flash Memory 406 000000 ************************************************ *************/ 407 000000 #define __MSP430_HAS_FLASH2__ /* Definition to show that Module is available */ 408 000000 409 000000 #define FCTL1_ (0x0128u) /* FLASH Control 1 */ 410 000000 DEFW( FCTL1 , FCTL1_) 411 000000 #define FCTL2_ (0x012Au) /* FLASH Control 2 */ 412 000000 DEFW( FCTL2 , FCTL2_) 413 000000 #define FCTL3_ (0x012Cu) /* FLASH Control 3 */ 414 000000 DEFW( FCTL3 , FCTL3_) 415 000000 416 000000 #define FRKEY (0x9600u) /* Flash key returned by read */ 417 000000 #define FWKEY (0xA500u) /* Flash key for write */ 418 000000 #define FXKEY (0x3300u) /* for use with XOR instruction */ 419 000000 420 000000 #define ERASE (0x0002u) /* Enable bit for Flash segment erase */ 421 000000 #define MERAS (0x0004u) /* Enable bit for Flash mass erase */ 422 000000 #define WRT (0x0040u) /* Enable bit for Flash write */ 423 000000 #define BLKWRT (0x0080u) /* Enable bit for Flash segment write */ 424 000000 #define SEGWRT (0x0080u) /* old definition */ /* Enable bit for Flash segment write */ 425 000000 426 000000 #define FN0 (0x0001u) /* Divide Flash clock by 1 to 64 using FN0 to FN5 according to: */ 427 000000 #define FN1 (0x0002u) /* 32*FN5 + 16*FN4 + 8*FN3 + 4*FN2 + 2*FN1 + FN0 + 1 */ 428 000000 #ifndef FN2 429 000000 #define FN2 (0x0004u) 430 000000 #endif 431 000000 #ifndef FN3 432 000000 #define FN3 (0x0008u) 433 000000 #endif 434 000000 #ifndef FN4 435 000000 #define FN4 (0x0010u) 436 000000 #endif 437 000000 #define FN5 (0x0020u) 438 000000 #define FSSEL0 (0x0040u) /* Flash clock select 0 */ /* to distinguish from USART SSELx */ 439 000000 #define FSSEL1 (0x0080u) /* Flash - 4e-config - Page 19 clock select 1 */ 440 000000 441 000000 #define FSSEL_0 (0x0000u) /* Flash clock select: 0 - ACLK */ 442 000000 #define FSSEL_1 (0x0040u) /* Flash clock select: 1 - MCLK */ 443 000000 #define FSSEL_2 (0x0080u) /* Flash clock select: 2 - SMCLK */ 444 000000 #define FSSEL_3 (0x00C0u) /* Flash clock select: 3 - SMCLK */ 445 000000 446 000000 #define BUSY (0x0001u) /* Flash busy: 1 */ 447 000000 #define KEYV (0x0002u) /* Flash Key violation flag */ 448 000000 #define ACCVIFG (0x0004u) /* Flash Access violation flag */ 449 000000 #define WAIT (0x0008u) /* Wait flag for segment write */ 450 000000 #define LOCK (0x0010u) /* Lock bit: 1 - Flash is locked (read only) */ 451 000000 #define EMEX (0x0020u) /* Flash Emergency Exit */ 452 000000 #define LOCKA (0x0040u) /* Segment A Lock bit: read = 1 - Segment is locked (read only) */ 453 000000 #define FAIL (0x0080u) /* Last Program or Erase failed */ 454 000000 455 000000 /*********************************************** ************* 456 000000 * DIGITAL I/O Port1/2 Pull up / Pull down Resistors 457 000000 ************************************************ ************/ 458 000000 #define __MSP430_HAS_PORT1_R__ /* Definition to show that Module is available */ 459 000000 #define __MSP430_HAS_PORT2_R__ /* Definition to show that Module is available */ 460 000000 461 000000 #define P1IN_ (0x0020u) /* Port 1 Input */ 462 000000 READ_ONLY DEFC( P1IN , P1IN_) 463 000000 #define P1OUT_ (0x0021u) /* Port 1 Output */ 464 000000 DEFC( P1OUT , P1OUT_) 465 000000 #define P1DIR_ (0x0022u) /* Port 1 Direction */ 466 000000 DEFC( P1DIR , P1DIR_) 467 000000 #define P1IFG_ (0x0023u) /* Port 1 Interrupt Flag */ 468 000000 DEFC( P1IFG , P1IFG_) 469 000000 #define P1IES_ (0x0024u) /* Port 1 Interrupt Edge Select */ 470 000000 DEFC( P1IES , P1IES_) 471 000000 #define P1IE_ (0x0025u) /* Port 1 Interrupt Enable */ 472 000000 DEFC( P1IE , P1IE_) 473 000000 #define P1SEL_ (0x0026u) /* Port 1 Selection */ 474 000000 DEFC( P1SEL , P1SEL_) 475 000000 #define P1SEL2_ (0x0041u) /* Port 1 Selection 2 */ 476 000000 DEFC( P1SEL2 , P1SEL2_) 477 000000 #define P1REN_ (0x0027u) /* Port 1 Resistor Enable */ 478 000000 DEFC( P1REN , P1REN_) 479 000000 480 000000 #define P2IN_ (0x0028u) /* Port 2 Input */ 481 000000 READ_ONLY DEFC( P2IN , P2IN_) 482 000000 #define P2OUT_ (0x0029u) /* Port 2 Output */ 483 000000 DEFC( P2OUT , P2OUT_) 484 000000 #define P2DIR_ (0x002Au) /* Port 2 Direction */ - 4e-config - Page 20 485 000000 DEFC( P2DIR , P2DIR_) 486 000000 #define P2IFG_ (0x002Bu) /* Port 2 Interrupt Flag */ 487 000000 DEFC( P2IFG , P2IFG_) 488 000000 #define P2IES_ (0x002Cu) /* Port 2 Interrupt Edge Select */ 489 000000 DEFC( P2IES , P2IES_) 490 000000 #define P2IE_ (0x002Du) /* Port 2 Interrupt Enable */ 491 000000 DEFC( P2IE , P2IE_) 492 000000 #define P2SEL_ (0x002Eu) /* Port 2 Selection */ 493 000000 DEFC( P2SEL , P2SEL_) 494 000000 #define P2SEL2_ (0x0042u) /* Port 2 Selection 2 */ 495 000000 DEFC( P2SEL2 , P2SEL2_) 496 000000 #define P2REN_ (0x002Fu) /* Port 2 Resistor Enable */ 497 000000 DEFC( P2REN , P2REN_) 498 000000 499 000000 /*********************************************** ************* 500 000000 * DIGITAL I/O Port3 Pull up / Pull down Resistors 501 000000 ************************************************ ************/ 502 000000 #define __MSP430_HAS_PORT3_R__ /* Definition to show that Module is available */ 503 000000 504 000000 #define P3IN_ (0x0018u) /* Port 3 Input */ 505 000000 READ_ONLY DEFC( P3IN , P3IN_) 506 000000 #define P3OUT_ (0x0019u) /* Port 3 Output */ 507 000000 DEFC( P3OUT , P3OUT_) 508 000000 #define P3DIR_ (0x001Au) /* Port 3 Direction */ 509 000000 DEFC( P3DIR , P3DIR_) 510 000000 #define P3SEL_ (0x001Bu) /* Port 3 Selection */ 511 000000 DEFC( P3SEL , P3SEL_) 512 000000 #define P3SEL2_ (0x0043u) /* Port 3 Selection 2 */ 513 000000 DEFC( P3SEL2 , P3SEL2_) 514 000000 #define P3REN_ (0x0010u) /* Port 3 Resistor Enable */ 515 000000 DEFC( P3REN , P3REN_) 516 000000 517 000000 /*********************************************** ************* 518 000000 * Timer0_A3 519 000000 ************************************************ ************/ 520 000000 #define __MSP430_HAS_TA3__ /* Definition to show that Module is available */ 521 000000 522 000000 #define TA0IV_ (0x012Eu) /* Timer0_A3 Interrupt Vector Word */ 523 000000 READ_ONLY DEFW( TA0IV , TA0IV_) 524 000000 #define TA0CTL_ (0x0160u) /* Timer0_A3 Control */ 525 000000 DEFW( TA0CTL , TA0CTL_) 526 000000 #define TA0CCTL0_ (0x0162u) /* Timer0_A3 Capture/Compare Control 0 */ 527 000000 DEFW( TA0CCTL0 , TA0CCTL0_) 528 000000 #define TA0CCTL1_ (0x0164u) /* Timer0_A3 Capture/Compare Control 1 */ 529 000000 DEFW( TA0CCTL1 , TA0CCTL1_) 530 000000 #define TA0CCTL2_ (0x0166u) /* Timer0_A3 Capture/Compare Control 2 */ 531 000000 DEFW( TA0CCTL2 , TA0CCTL2_) 532 000000 #define TA0R_ (0x0170u) /* Timer0_A3 */ 533 000000 DEFW( TA0R , TA0R_) 534 000000 #define TA0CCR0_ (0x0172u) /* Timer0_A3 Capture/Compare 0 */ - 4e-config - Page 21 535 000000 DEFW( TA0CCR0 , TA0CCR0_) 536 000000 #define TA0CCR1_ (0x0174u) /* Timer0_A3 Capture/Compare 1 */ 537 000000 DEFW( TA0CCR1 , TA0CCR1_) 538 000000 #define TA0CCR2_ (0x0176u) /* Timer0_A3 Capture/Compare 2 */ 539 000000 DEFW( TA0CCR2 , TA0CCR2_) 540 000000 541 000000 /* Alternate register names */ 542 000000 #define TAIV TA0IV /* Timer A Interrupt Vector Word */ 543 000000 #define TACTL TA0CTL /* Timer A Control */ 544 000000 #define TACCTL0 TA0CCTL0 /* Timer A Capture/Compare Control 0 */ 545 000000 #define TACCTL1 TA0CCTL1 /* Timer A Capture/Compare Control 1 */ 546 000000 #define TACCTL2 TA0CCTL2 /* Timer A Capture/Compare Control 2 */ 547 000000 #define TAR TA0R /* Timer A */ 548 000000 #define TACCR0 TA0CCR0 /* Timer A Capture/Compare 0 */ 549 000000 #define TACCR1 TA0CCR1 /* Timer A Capture/Compare 1 */ 550 000000 #define TACCR2 TA0CCR2 /* Timer A Capture/Compare 2 */ 551 000000 #define TAIV_ TA0IV_ /* Timer A Interrupt Vector Word */ 552 000000 #define TACTL_ TA0CTL_ /* Timer A Control */ 553 000000 #define TACCTL0_ TA0CCTL0_ /* Timer A Capture/Compare Control 0 */ 554 000000 #define TACCTL1_ TA0CCTL1_ /* Timer A Capture/Compare Control 1 */ 555 000000 #define TACCTL2_ TA0CCTL2_ /* Timer A Capture/Compare Control 2 */ 556 000000 #define TAR_ TA0R_ /* Timer A */ 557 000000 #define TACCR0_ TA0CCR0_ /* Timer A Capture/Compare 0 */ 558 000000 #define TACCR1_ TA0CCR1_ /* Timer A Capture/Compare 1 */ 559 000000 #define TACCR2_ TA0CCR2_ /* Timer A Capture/Compare 2 */ 560 000000 561 000000 /* Alternate register names 2 */ 562 000000 #define CCTL0 TACCTL0 /* Timer A Capture/Compare Control 0 */ 563 000000 #define CCTL1 TACCTL1 /* Timer A Capture/Compare Control 1 */ 564 000000 #define CCTL2 TACCTL2 /* Timer A Capture/Compare Control 2 */ 565 000000 #define CCR0 TACCR0 /* Timer A Capture/Compare 0 */ 566 000000 #define CCR1 TACCR1 /* Timer A Capture/Compare 1 */ 567 000000 #define CCR2 TACCR2 /* Timer A Capture/Compare 2 */ 568 000000 #define CCTL0_ TACCTL0_ /* Timer A Capture/Compare Control 0 */ 569 000000 #define CCTL1_ TACCTL1_ /* Timer A Capture/Compare Control 1 */ 570 000000 #define CCTL2_ TACCTL2_ /* Timer A Capture/Compare Control 2 */ 571 000000 #define CCR0_ TACCR0_ /* Timer A Capture/Compare 0 */ 572 000000 #define CCR1_ TACCR1_ /* Timer A Capture/Compare 1 */ 573 000000 #define CCR2_ TACCR2_ /* Timer A Capture/Compare 2 */ 574 000000 575 000000 #define TASSEL1 (0x0200u) /* Timer A clock source select 0 */ 576 000000 #define TASSEL0 (0x0100u) /* Timer A clock source select 1 */ 577 000000 #define ID1 (0x0080u) /* Timer A clock input divider 1 */ - 4e-config - Page 22 578 000000 #define ID0 (0x0040u) /* Timer A clock input divider 0 */ 579 000000 #define MC1 (0x0020u) /* Timer A mode control 1 */ 580 000000 #define MC0 (0x0010u) /* Timer A mode control 0 */ 581 000000 #define TACLR (0x0004u) /* Timer A counter clear */ 582 000000 #define TAIE (0x0002u) /* Timer A counter interrupt enable */ 583 000000 #define TAIFG (0x0001u) /* Timer A counter interrupt flag */ 584 000000 585 000000 #define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */ 586 000000 #define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */ 587 000000 #define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */ 588 000000 #define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */ 589 000000 #define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */ 590 000000 #define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */ 591 000000 #define ID_2 (2*0x40u) /* Timer A input divider: 2 - /4 */ 592 000000 #define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */ 593 000000 #define TASSEL_0 (0*0x100u) /* Timer A clock source select: 0 - TACLK */ 594 000000 #define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */ 595 000000 #define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */ 596 000000 #define TASSEL_3 (3*0x100u) /* Timer A clock source select: 3 - INCLK */ 597 000000 598 000000 #define CM1 (0x8000u) /* Capture mode 1 */ 599 000000 #define CM0 (0x4000u) /* Capture mode 0 */ 600 000000 #define CCIS1 (0x2000u) /* Capture input select 1 */ 601 000000 #define CCIS0 (0x1000u) /* Capture input select 0 */ 602 000000 #define SCS (0x0800u) /* Capture sychronize */ 603 000000 #define SCCI (0x0400u) /* Latched capture signal (read) */ 604 000000 #define CAP (0x0100u) /* Capture mode: 1 /Compare mode : 0 */ 605 000000 #define OUTMOD2 (0x0080u) /* Output mode 2 */ 606 000000 #define OUTMOD1 (0x0040u) /* Output mode 1 */ 607 000000 #define OUTMOD0 (0x0020u) /* Output mode 0 */ 608 000000 #define CCIE (0x0010u) /* Capture/compare interrupt enable */ 609 000000 #define CCI (0x0008u) /* Capture input signal (read) */ 610 000000 #define OUT (0x0004u) /* PWM Output signal if output mode 0 */ 611 000000 #define COV (0x0002u) /* Capture/compare overflow flag */ 612 000000 #define CCIFG (0x0001u) /* Capture/compare interrupt flag */ 613 000000 614 000000 #define OUTMOD_0 (0*0x20u) /* PWM output mode: 0 - output only */ 615 000000 #define OUTMOD_1 (1*0x20u) /* PWM output mode: 1 - set */ 616 000000 #define OUTMOD_2 (2*0x20u) /* PWM output mode: 2 - PWM toggle/reset */ 617 000000 #define OUTMOD_3 (3*0x20u) /* PWM output mode: 3 - PWM set/reset */ 618 000000 #define OUTMOD_4 (4*0x20u) /* PWM - 4e-config - Page 23 output mode: 4 - toggle */ 619 000000 #define OUTMOD_5 (5*0x20u) /* PWM output mode: 5 - Reset */ 620 000000 #define OUTMOD_6 (6*0x20u) /* PWM output mode: 6 - PWM toggle/set */ 621 000000 #define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/set */ 622 000000 #define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */ 623 000000 #define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */ 624 000000 #define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */ 625 000000 #define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */ 626 000000 #define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */ 627 000000 #define CM_1 (1*0x4000u) /* Capture mode: 1 - pos. edge */ 628 000000 #define CM_2 (2*0x4000u) /* Capture mode: 1 - neg. edge */ 629 000000 #define CM_3 (3*0x4000u) /* Capture mode: 1 - both edges */ 630 000000 631 000000 /* T0_A3IV Definitions */ 632 000000 #define TA0IV_NONE (0x0000u) /* No Interrupt pending */ 633 000000 #define TA0IV_TACCR1 (0x0002u) /* TA0CCR1_CCIFG */ 634 000000 #define TA0IV_TACCR2 (0x0004u) /* TA0CCR2_CCIFG */ 635 000000 #define TA0IV_6 (0x0006u) /* Reserved */ 636 000000 #define TA0IV_8 (0x0008u) /* Reserved */ 637 000000 #define TA0IV_TAIFG (0x000Au) /* TA0IFG */ 638 000000 639 000000 /*********************************************** ************* 640 000000 * Timer1_A3 641 000000 ************************************************ ************/ 642 000000 #define __MSP430_HAS_T1A3__ /* Definition to show that Module is available */ 643 000000 644 000000 #define TA1IV_ (0x011Eu) /* Timer1_A3 Interrupt Vector Word */ 645 000000 READ_ONLY DEFW( TA1IV , TA1IV_) 646 000000 #define TA1CTL_ (0x0180u) /* Timer1_A3 Control */ 647 000000 DEFW( TA1CTL , TA1CTL_) 648 000000 #define TA1CCTL0_ (0x0182u) /* Timer1_A3 Capture/Compare Control 0 */ 649 000000 DEFW( TA1CCTL0 , TA1CCTL0_) 650 000000 #define TA1CCTL1_ (0x0184u) /* Timer1_A3 Capture/Compare Control 1 */ 651 000000 DEFW( TA1CCTL1 , TA1CCTL1_) 652 000000 #define TA1CCTL2_ (0x0186u) /* Timer1_A3 Capture/Compare Control 2 */ 653 000000 DEFW( TA1CCTL2 , TA1CCTL2_) 654 000000 #define TA1R_ (0x0190u) /* Timer1_A3 */ 655 000000 DEFW( TA1R , TA1R_) 656 000000 #define TA1CCR0_ (0x0192u) /* Timer1_A3 Capture/Compare 0 */ 657 000000 DEFW( TA1CCR0 , TA1CCR0_) 658 000000 #define TA1CCR1_ (0x0194u) /* Timer1_A3 Capture/Compare 1 */ 659 000000 DEFW( TA1CCR1 , TA1CCR1_) 660 000000 #define TA1CCR2_ (0x0196u) /* Timer1_A3 Capture/Compare 2 */ 661 000000 DEFW( TA1CCR2 , TA1CCR2_) 662 000000 663 000000 /* Bits are already defined within the Timer0_Ax */ 664 000000 - 4e-config - Page 24 665 000000 /* T1_A3IV Definitions */ 666 000000 #define TA1IV_NONE (0x0000u) /* No Interrupt pending */ 667 000000 #define TA1IV_TACCR1 (0x0002u) /* TA1CCR1_CCIFG */ 668 000000 #define TA1IV_TACCR2 (0x0004u) /* TA1CCR2_CCIFG */ 669 000000 #define TA1IV_TAIFG (0x000Au) /* TA1IFG */ 670 000000 671 000000 /*********************************************** ************* 672 000000 * USCI 673 000000 ************************************************ ************/ 674 000000 #define __MSP430_HAS_USCI__ /* Definition to show that Module is available */ 675 000000 676 000000 #define UCA0CTL0_ (0x0060u) /* USCI A0 Control Register 0 */ 677 000000 DEFC( UCA0CTL0 , UCA0CTL0_) 678 000000 #define UCA0CTL1_ (0x0061u) /* USCI A0 Control Register 1 */ 679 000000 DEFC( UCA0CTL1 , UCA0CTL1_) 680 000000 #define UCA0BR0_ (0x0062u) /* USCI A0 Baud Rate 0 */ 681 000000 DEFC( UCA0BR0 , UCA0BR0_) 682 000000 #define UCA0BR1_ (0x0063u) /* USCI A0 Baud Rate 1 */ 683 000000 DEFC( UCA0BR1 , UCA0BR1_) 684 000000 #define UCA0MCTL_ (0x0064u) /* USCI A0 Modulation Control */ 685 000000 DEFC( UCA0MCTL , UCA0MCTL_) 686 000000 #define UCA0STAT_ (0x0065u) /* USCI A0 Status Register */ 687 000000 DEFC( UCA0STAT , UCA0STAT_) 688 000000 #define UCA0RXBUF_ (0x0066u) /* USCI A0 Receive Buffer */ 689 000000 READ_ONLY DEFC( UCA0RXBUF , UCA0RXBUF_) 690 000000 #define UCA0TXBUF_ (0x0067u) /* USCI A0 Transmit Buffer */ 691 000000 DEFC( UCA0TXBUF , UCA0TXBUF_) 692 000000 #define UCA0ABCTL_ (0x005Du) /* USCI A0 LIN Control */ 693 000000 DEFC( UCA0ABCTL , UCA0ABCTL_) 694 000000 #define UCA0IRTCTL_ (0x005Eu) /* USCI A0 IrDA Transmit Control */ 695 000000 DEFC( UCA0IRTCTL , UCA0IRTCTL_) 696 000000 #define UCA0IRRCTL_ (0x005Fu) /* USCI A0 IrDA Receive Control */ 697 000000 DEFC( UCA0IRRCTL , UCA0IRRCTL_) 698 000000 699 000000 700 000000 701 000000 #define UCB0CTL0_ (0x0068u) /* USCI B0 Control Register 0 */ 702 000000 DEFC( UCB0CTL0 , UCB0CTL0_) 703 000000 #define UCB0CTL1_ (0x0069u) /* USCI B0 Control Register 1 */ 704 000000 DEFC( UCB0CTL1 , UCB0CTL1_) 705 000000 #define UCB0BR0_ (0x006Au) /* USCI B0 Baud Rate 0 */ 706 000000 DEFC( UCB0BR0 , UCB0BR0_) 707 000000 #define UCB0BR1_ (0x006Bu) /* USCI B0 Baud Rate 1 */ 708 000000 DEFC( UCB0BR1 , UCB0BR1_) 709 000000 #define UCB0I2CIE_ (0x006Cu) /* USCI B0 I2C Interrupt Enable Register */ 710 000000 DEFC( UCB0I2CIE , UCB0I2CIE_) 711 000000 #define UCB0STAT_ (0x006Du) /* USCI B0 Status Register */ 712 000000 DEFC( UCB0STAT , UCB0STAT_) 713 000000 #define UCB0RXBUF_ (0x006Eu) /* USCI B0 Receive Buffer */ 714 000000 READ_ONLY DEFC( UCB0RXBUF , UCB0RXBUF_) 715 000000 #define UCB0TXBUF_ (0x006Fu) /* USCI B0 Transmit Buffer */ - 4e-config - Page 25 716 000000 DEFC( UCB0TXBUF , UCB0TXBUF_) 717 000000 #define UCB0I2COA_ (0x0118u) /* USCI B0 I2C Own Address */ 718 000000 DEFW( UCB0I2COA , UCB0I2COA_) 719 000000 #define UCB0I2CSA_ (0x011Au) /* USCI B0 I2C Slave Address */ 720 000000 DEFW( UCB0I2CSA , UCB0I2CSA_) 721 000000 722 000000 // UART-Mode Bits 723 000000 #define UCPEN (0x80) /* Async. Mode: Parity enable */ 724 000000 #define UCPAR (0x40) /* Async. Mode: Parity 0:odd / 1:even */ 725 000000 #define UCMSB (0x20) /* Async. Mode: MSB first 0:LSB / 1:MSB */ 726 000000 #define UC7BIT (0x10) /* Async. Mode: Data Bits 0:8-bits / 1:7-bits */ 727 000000 #define UCSPB (0x08) /* Async. Mode: Stop Bits 0:one / 1: two */ 728 000000 #define UCMODE1 (0x04) /* Async. Mode: USCI Mode 1 */ 729 000000 #define UCMODE0 (0x02) /* Async. Mode: USCI Mode 0 */ 730 000000 #define UCSYNC (0x01) /* Sync-Mode 0:UART-Mode / 1:SPI-Mode */ 731 000000 732 000000 // SPI-Mode Bits 733 000000 #define UCCKPH (0x80) /* Sync. Mode: Clock Phase */ 734 000000 #define UCCKPL (0x40) /* Sync. Mode: Clock Polarity */ 735 000000 #define UCMST (0x08) /* Sync. Mode: Master Select */ 736 000000 737 000000 // I2C-Mode Bits 738 000000 #define UCA10 (0x80) /* 10-bit Address Mode */ 739 000000 #define UCSLA10 (0x40) /* 10-bit Slave Address Mode */ 740 000000 #define UCMM (0x20) /* Multi-Master Environment */ 741 000000 //#define res (0x10) /* reserved */ 742 000000 #define UCMODE_0 (0x00) /* Sync. Mode: USCI Mode: 0 */ 743 000000 #define UCMODE_1 (0x02) /* Sync. Mode: USCI Mode: 1 */ 744 000000 #define UCMODE_2 (0x04) /* Sync. Mode: USCI Mode: 2 */ 745 000000 #define UCMODE_3 (0x06) /* Sync. Mode: USCI Mode: 3 */ 746 000000 747 000000 // UART-Mode Bits 748 000000 #define UCSSEL1 (0x80) /* USCI 0 Clock Source Select 1 */ 749 000000 #define UCSSEL0 (0x40) /* USCI 0 Clock Source Select 0 */ 750 000000 #define UCRXEIE (0x20) /* RX Error interrupt enable */ 751 000000 #define UCBRKIE (0x10) /* Break interrupt enable */ 752 000000 #define UCDORM (0x08) /* Dormant (Sleep) Mode */ 753 000000 #define UCTXADDR (0x04) /* Send next Data as Address */ 754 000000 #define UCTXBRK (0x02) /* Send next Data as Break */ 755 000000 #define UCSWRST (0x01) /* USCI Software Reset */ 756 000000 757 000000 // SPI-Mode Bits 758 000000 //#define res (0x20) /* reserved */ 759 000000 //#define res (0x10) /* reserved */ 760 000000 //#define res (0x08) /* reserved */ 761 000000 //#define res (0x04) /* - 4e-config - Page 26 reserved */ 762 000000 //#define res (0x02) /* reserved */ 763 000000 764 000000 // I2C-Mode Bits 765 000000 //#define res (0x20) /* reserved */ 766 000000 #define UCTR (0x10) /* Transmit/Receive Select/Flag */ 767 000000 #define UCTXNACK (0x08) /* Transmit NACK */ 768 000000 #define UCTXSTP (0x04) /* Transmit STOP */ 769 000000 #define UCTXSTT (0x02) /* Transmit START */ 770 000000 #define UCSSEL_0 (0x00) /* USCI 0 Clock Source: 0 */ 771 000000 #define UCSSEL_1 (0x40) /* USCI 0 Clock Source: 1 */ 772 000000 #define UCSSEL_2 (0x80) /* USCI 0 Clock Source: 2 */ 773 000000 #define UCSSEL_3 (0xC0) /* USCI 0 Clock Source: 3 */ 774 000000 775 000000 #define UCBRF3 (0x80) /* USCI First Stage Modulation Select 3 */ 776 000000 #define UCBRF2 (0x40) /* USCI First Stage Modulation Select 2 */ 777 000000 #define UCBRF1 (0x20) /* USCI First Stage Modulation Select 1 */ 778 000000 #define UCBRF0 (0x10) /* USCI First Stage Modulation Select 0 */ 779 000000 #define UCBRS2 (0x08) /* USCI Second Stage Modulation Select 2 */ 780 000000 #define UCBRS1 (0x04) /* USCI Second Stage Modulation Select 1 */ 781 000000 #define UCBRS0 (0x02) /* USCI Second Stage Modulation Select 0 */ 782 000000 #define UCOS16 (0x01) /* USCI 16-times Oversampling enable */ 783 000000 784 000000 #define UCBRF_0 (0x00) /* USCI First Stage Modulation: 0 */ 785 000000 #define UCBRF_1 (0x10) /* USCI First Stage Modulation: 1 */ 786 000000 #define UCBRF_2 (0x20) /* USCI First Stage Modulation: 2 */ 787 000000 #define UCBRF_3 (0x30) /* USCI First Stage Modulation: 3 */ 788 000000 #define UCBRF_4 (0x40) /* USCI First Stage Modulation: 4 */ 789 000000 #define UCBRF_5 (0x50) /* USCI First Stage Modulation: 5 */ 790 000000 #define UCBRF_6 (0x60) /* USCI First Stage Modulation: 6 */ 791 000000 #define UCBRF_7 (0x70) /* USCI First Stage Modulation: 7 */ 792 000000 #define UCBRF_8 (0x80) /* USCI First Stage Modulation: 8 */ 793 000000 #define UCBRF_9 (0x90) /* USCI First Stage Modulation: 9 */ 794 000000 #define UCBRF_10 (0xA0) /* USCI First Stage Modulation: A */ 795 000000 #define UCBRF_11 (0xB0) /* USCI First Stage Modulation: B */ 796 000000 #define UCBRF_12 (0xC0) /* USCI First Stage Modulation: C */ 797 000000 #define UCBRF_13 (0xD0) /* USCI First Stage Modulation: D */ 798 000000 #define UCBRF_14 (0xE0) /* USCI First Stage Modulation: E */ 799 000000 #define UCBRF_15 (0xF0) /* USCI First Stage Modulation: F */ 800 000000 801 000000 #define UCBRS_0 (0x00) /* USCI Second Stage Modulation: 0 */ 802 000000 #define UCBRS_1 (0x02) /* USCI Second Stage Modulation: 1 */ - 4e-config - Page 27 803 000000 #define UCBRS_2 (0x04) /* USCI Second Stage Modulation: 2 */ 804 000000 #define UCBRS_3 (0x06) /* USCI Second Stage Modulation: 3 */ 805 000000 #define UCBRS_4 (0x08) /* USCI Second Stage Modulation: 4 */ 806 000000 #define UCBRS_5 (0x0A) /* USCI Second Stage Modulation: 5 */ 807 000000 #define UCBRS_6 (0x0C) /* USCI Second Stage Modulation: 6 */ 808 000000 #define UCBRS_7 (0x0E) /* USCI Second Stage Modulation: 7 */ 809 000000 810 000000 #define UCLISTEN (0x80) /* USCI Listen mode */ 811 000000 #define UCFE (0x40) /* USCI Frame Error Flag */ 812 000000 #define UCOE (0x20) /* USCI Overrun Error Flag */ 813 000000 #define UCPE (0x10) /* USCI Parity Error Flag */ 814 000000 #define UCBRK (0x08) /* USCI Break received */ 815 000000 #define UCRXERR (0x04) /* USCI RX Error Flag */ 816 000000 #define UCADDR (0x02) /* USCI Address received Flag */ 817 000000 #define UCBUSY (0x01) /* USCI Busy Flag */ 818 000000 #define UCIDLE (0x02) /* USCI Idle line detected Flag */ 819 000000 820 000000 //#define res (0x80) /* reserved */ 821 000000 //#define res (0x40) /* reserved */ 822 000000 //#define res (0x20) /* reserved */ 823 000000 //#define res (0x10) /* reserved */ 824 000000 #define UCNACKIE (0x08) /* NACK Condition interrupt enable */ 825 000000 #define UCSTPIE (0x04) /* STOP Condition interrupt enable */ 826 000000 #define UCSTTIE (0x02) /* START Condition interrupt enable */ 827 000000 #define UCALIE (0x01) /* Arbitration Lost interrupt enable */ 828 000000 829 000000 #define UCSCLLOW (0x40) /* SCL low */ 830 000000 #define UCGC (0x20) /* General Call address received Flag */ 831 000000 #define UCBBUSY (0x10) /* Bus Busy Flag */ 832 000000 #define UCNACKIFG (0x08) /* NAK Condition interrupt Flag */ 833 000000 #define UCSTPIFG (0x04) /* STOP Condition interrupt Flag */ 834 000000 #define UCSTTIFG (0x02) /* START Condition interrupt Flag */ 835 000000 #define UCALIFG (0x01) /* Arbitration Lost interrupt Flag */ 836 000000 837 000000 #define UCIRTXPL5 (0x80) /* IRDA Transmit Pulse Length 5 */ 838 000000 #define UCIRTXPL4 (0x40) /* IRDA Transmit Pulse Length 4 */ 839 000000 #define UCIRTXPL3 (0x20) /* IRDA Transmit Pulse Length 3 */ 840 000000 #define UCIRTXPL2 (0x10) /* IRDA Transmit Pulse Length 2 */ 841 000000 #define UCIRTXPL1 (0x08) /* IRDA Transmit Pulse Length 1 */ 842 000000 #define UCIRTXPL0 (0x04) /* IRDA Transmit Pulse Length 0 */ 843 000000 #define UCIRTXCLK (0x02) /* IRDA Transmit Pulse Clock Select */ - 4e-config - Page 28 844 000000 #define UCIREN (0x01) /* IRDA Encoder/Decoder enable */ 845 000000 846 000000 #define UCIRRXFL5 (0x80) /* IRDA Receive Filter Length 5 */ 847 000000 #define UCIRRXFL4 (0x40) /* IRDA Receive Filter Length 4 */ 848 000000 #define UCIRRXFL3 (0x20) /* IRDA Receive Filter Length 3 */ 849 000000 #define UCIRRXFL2 (0x10) /* IRDA Receive Filter Length 2 */ 850 000000 #define UCIRRXFL1 (0x08) /* IRDA Receive Filter Length 1 */ 851 000000 #define UCIRRXFL0 (0x04) /* IRDA Receive Filter Length 0 */ 852 000000 #define UCIRRXPL (0x02) /* IRDA Receive Input Polarity */ 853 000000 #define UCIRRXFE (0x01) /* IRDA Receive Filter enable */ 854 000000 855 000000 //#define res (0x80) /* reserved */ 856 000000 //#define res (0x40) /* reserved */ 857 000000 #define UCDELIM1 (0x20) /* Break Sync Delimiter 1 */ 858 000000 #define UCDELIM0 (0x10) /* Break Sync Delimiter 0 */ 859 000000 #define UCSTOE (0x08) /* Sync-Field Timeout error */ 860 000000 #define UCBTOE (0x04) /* Break Timeout error */ 861 000000 //#define res (0x02) /* reserved */ 862 000000 #define UCABDEN (0x01) /* Auto Baud Rate detect enable */ 863 000000 864 000000 #define UCGCEN (0x8000u) /* I2C General Call enable */ 865 000000 #define UCOA9 (0x0200u) /* I2C Own Address 9 */ 866 000000 #define UCOA8 (0x0100u) /* I2C Own Address 8 */ 867 000000 #define UCOA7 (0x0080u) /* I2C Own Address 7 */ 868 000000 #define UCOA6 (0x0040u) /* I2C Own Address 6 */ 869 000000 #define UCOA5 (0x0020u) /* I2C Own Address 5 */ 870 000000 #define UCOA4 (0x0010u) /* I2C Own Address 4 */ 871 000000 #define UCOA3 (0x0008u) /* I2C Own Address 3 */ 872 000000 #define UCOA2 (0x0004u) /* I2C Own Address 2 */ 873 000000 #define UCOA1 (0x0002u) /* I2C Own Address 1 */ 874 000000 #define UCOA0 (0x0001u) /* I2C Own Address 0 */ 875 000000 876 000000 #define UCSA9 (0x0200u) /* I2C Slave Address 9 */ 877 000000 #define UCSA8 (0x0100u) /* I2C Slave Address 8 */ 878 000000 #define UCSA7 (0x0080u) /* I2C Slave Address 7 */ 879 000000 #define UCSA6 (0x0040u) /* I2C Slave Address 6 */ 880 000000 #define UCSA5 (0x0020u) /* I2C Slave Address 5 */ 881 000000 #define UCSA4 (0x0010u) /* I2C Slave Address 4 */ 882 000000 #define UCSA3 (0x0008u) /* I2C Slave Address 3 */ 883 000000 #define UCSA2 (0x0004u) /* I2C Slave Address 2 */ 884 000000 #define UCSA1 (0x0002u) /* I2C Slave Address 1 */ - 4e-config - Page 29 885 000000 #define UCSA0 (0x0001u) /* I2C Slave Address 0 */ 886 000000 887 000000 /*********************************************** ************* 888 000000 * WATCHDOG TIMER 889 000000 ************************************************ ************/ 890 000000 #define __MSP430_HAS_WDT__ /* Definition to show that Module is available */ 891 000000 892 000000 #define WDTCTL_ (0x0120u) /* Watchdog Timer Control */ 893 000000 DEFW( WDTCTL , WDTCTL_) 894 000000 /* The bit names have been prefixed with "WDT" */ 895 000000 #define WDTIS0 (0x0001u) 896 000000 #define WDTIS1 (0x0002u) 897 000000 #define WDTSSEL (0x0004u) 898 000000 #define WDTCNTCL (0x0008u) 899 000000 #define WDTTMSEL (0x0010u) 900 000000 #define WDTNMI (0x0020u) 901 000000 #define WDTNMIES (0x0040u) 902 000000 #define WDTHOLD (0x0080u) 903 000000 904 000000 #define WDTPW (0x5A00u) 905 000000 906 000000 /* WDT-interval times [1ms] coded with Bits 0-2 */ 907 000000 /* WDT is clocked by fSMCLK (assumed 1MHz) */ 908 000000 #define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTC NTCL) /* 32ms interval (default) */ 909 000000 #define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTC NTCL+WDTIS0) /* 8ms " */ 910 000000 #define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTC NTCL+WDTIS1) /* 0.5ms " */ 911 000000 #define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTC NTCL+WDTIS1+WDTIS0) /* 0.064ms " */ 912 000000 /* WDT is clocked by fACLK (assumed 32KHz) */ 913 000000 #define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL) /* 1000ms " */ 914 000000 #define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL+WDTIS0) /* 250ms " */ 915 000000 #define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL+WDTIS1) /* 16ms " */ 916 000000 #define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTC NTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */ 917 000000 /* Watchdog mode -> reset after expired time */ 918 000000 /* WDT is clocked by fSMCLK (assumed 1MHz) */ 919 000000 #define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */ 920 000000 #define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTI S0) /* 8ms " */ 921 000000 #define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTI S1) /* 0.5ms " */ 922 000000 #define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTI S1+WDTIS0) /* 0.064ms " */ 923 000000 /* WDT is clocked by fACLK (assumed 32KHz) */ 924 000000 #define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTS SEL) /* 1000ms " - 4e-config - Page 30 */ 925 000000 #define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTS SEL+WDTIS0) /* 250ms " */ 926 000000 #define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTS SEL+WDTIS1) /* 16ms " */ 927 000000 #define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTS SEL+WDTIS1+WDTIS0) /* 1.9ms " */ 928 000000 929 000000 /* INTERRUPT CONTROL */ 930 000000 /* These two bits are defined in the Special Function Registers */ 931 000000 /* #define WDTIE 0x01 */ 932 000000 /* #define WDTIFG 0x01 */ 933 000000 934 000000 /*********************************************** ************* 935 000000 * Calibration Data in Info Mem 936 000000 ************************************************ ************/ 937 000000 938 000000 #ifndef __DisableCalData 939 000000 940 000000 #define CALDCO_16MHZ_ (0x10F8u) /* DCOCTL Calibration Data for 16MHz */ 941 000000 READ_ONLY DEFC( CALDCO_16MHZ , CALDCO_16MHZ_ ) 942 000000 #define CALBC1_16MHZ_ (0x10F9u) /* BCSCTL1 Calibration Data for 16MHz */ 943 000000 READ_ONLY DEFC( CALBC1_16MHZ , CALBC1_16MHZ_ ) 944 000000 #define CALDCO_12MHZ_ (0x10FAu) /* DCOCTL Calibration Data for 12MHz */ 945 000000 READ_ONLY DEFC( CALDCO_12MHZ , CALDCO_12MHZ_ ) 946 000000 #define CALBC1_12MHZ_ (0x10FBu) /* BCSCTL1 Calibration Data for 12MHz */ 947 000000 READ_ONLY DEFC( CALBC1_12MHZ , CALBC1_12MHZ_ ) 948 000000 #define CALDCO_8MHZ_ (0x10FCu) /* DCOCTL Calibration Data for 8MHz */ 949 000000 READ_ONLY DEFC( CALDCO_8MHZ , CALDCO_8MHZ_) 950 000000 #define CALBC1_8MHZ_ (0x10FDu) /* BCSCTL1 Calibration Data for 8MHz */ 951 000000 READ_ONLY DEFC( CALBC1_8MHZ , CALBC1_8MHZ_) 952 000000 #define CALDCO_1MHZ_ (0x10FEu) /* DCOCTL Calibration Data for 1MHz */ 953 000000 READ_ONLY DEFC( CALDCO_1MHZ , CALDCO_1MHZ_) 954 000000 #define CALBC1_1MHZ_ (0x10FFu) /* BCSCTL1 Calibration Data for 1MHz */ 955 000000 READ_ONLY DEFC( CALBC1_1MHZ , CALBC1_1MHZ_) 956 000000 957 000000 #endif /* #ifndef __DisableCalData */ 958 000000 959 000000 /*********************************************** ************* 960 000000 * Interrupt Vectors (offset from 0xFFE0) 961 000000 ************************************************ ************/ 962 000000 963 000000 #define PORT1_VECTOR (2 * 2u) /* 0xFFE4 Port 1 */ 964 000000 #define PORT2_VECTOR (3 * 2u) /* 0xFFE6 Port 2 */ 965 000000 #define ADC10_VECTOR (5 * 2u) /* 0xFFEA ADC10 */ 966 000000 #define USCIAB0TX_VECTOR (6 * 2u) /* 0xFFEC USCI A0/B0 Transmit */ 967 000000 #define USCIAB0RX_VECTOR (7 * 2u) /* 0xFFEE USCI A0/B0 Receive */ 968 000000 #define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 Timer0)A CC1, TA0 */ 969 000000 #define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */ 970 000000 #define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ - 4e-config - Page 31 971 000000 #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ 972 000000 #define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8 Timer1_A CC1-4, TA1 */ 973 000000 #define TIMER1_A0_VECTOR (13 * 2u) /* 0xFFFA Timer1_A CC0 */ 974 000000 #define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */ 975 000000 #define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */ 976 000000 977 000000 /*********************************************** ************* 978 000000 * End of Modules 979 000000 ************************************************ ************/ 980 000000 #pragma language=default 981 000000 982 000000 #endif /* #ifndef __MSP430G2553 */ 983 000000 986 000000 987 000000 #elif defined (__MSP430G2203__) 988 000000 #include "msp430g2203.h" 990 000000 #elif defined (__MSP430G2303__) 991 000000 #include "msp430g2303.h" 993 000000 #elif defined (__MSP430G2403__) 994 000000 #include "msp430g2403.h" 996 000000 #elif defined (__MSP430G2233__) 997 000000 #include "msp430g2233.h" 999 000000 #elif defined (__MSP430G2333__) 1000 000000 #include "msp430g2333.h" 1002 000000 #elif defined (__MSP430G2433__) 1003 000000 #include "msp430g2433.h" 1005 000000 #elif defined (__MSP430G2533__) 1006 000000 #include "msp430g2533.h" 1008 000000 #elif defined (__MSP430BT5190__) 1009 000000 #include "msp430bt5190.h" 1014 000000 #elif defined (__MSP430GENERIC__) 1015 000000 #error "msp430 generic device does not have a default include file" 1017 000000 #elif defined (__MSP430XGENERIC__) 1018 000000 #error "msp430X generic device does not have a default include file" 1024 000000 #else 1025 000000 #error "Failed to match a default include file" 1026 000000 #endif 1027 000000 1028 000000 #endif /* #ifndef __msp430 */ 1029 000000 5 000000 #include "4e-CF430G2553forth.h" ; header macros and register defs 1 000000 ; ---------------------------------------------- ------------------------ 2 000000 ; 4e4th is a Forth based on CamelForth 3 000000 ; for the Texas Instruments MSP430 4 000000 ; 5 000000 ; This program is free software; you can redistribute it and/or modify 6 000000 ; it under the terms of the GNU General Public License as published by 7 000000 ; the Free Software Foundation; either version 3 of the License, or 8 000000 ; (at your option) any later version. 9 000000 ; 10 000000 ; This program is distributed in the hope that it will be useful, 11 000000 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 000000 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 000000 ; GNU General Public License for more details. 14 000000 ; 15 000000 ; You should have received a copy of the GNU General Public License 16 000000 ; along with this program. If not, see . - 4e-config - Page 32 17 000000 ; 18 000000 ; See LICENSE TERMS in Brads file readme.txt as well. 19 000000 20 000000 ; ---------------------------------------------- ------------------------ 21 000000 ; 4e-CF430G2553forth.h: - Register, Model, Macro declarations - MSP430G2553 22 000000 ; ---------------------------------------------- ------------------------ 23 000000 24 000000 // ; FORTH MEMORY USAGE 25 000000 // ; for Flash memory operations - this includes information and main 26 000000 // ; ROM, but not the main ROM used by the kernel (above E000h) 27 000000 #define INFOSTART (0x1000) // ok mk 28 000000 #define INFOEND (0x10FF) // ok mk 29 000000 #define RAMSTART (0x0200) // ok mk 30 000000 #define RAMEND (0x0400) // ok mk 31 000000 #define USERFLASHSTART (0xC000) // ok mk 32 000000 #define USERFLASHEND (0xD7FF) // muss übereinstimmen mit -P CODE linker 33 000000 #define ISRSTART (0xFE00) 34 000000 #define ISREND (0xFFDF) 35 000000 #define MAINSEG (512) // wozu ?? mk 36 000000 #define INFOSEG (128) // ?? mk 37 000000 38 000000 // ; FORTH REGISTER USAGE 39 000000 40 000000 // ; Forth virtual machine 41 000000 // PC = R00 42 000000 #define RSP SP // R01 43 000000 // R02 = SR statusregister 44 000000 // R03 = CG constantgenerator 45 000000 #define PSP R4 46 000000 #define IP R5 47 000000 #define W R6 48 000000 #define TOS R7 49 000000 50 000000 // ; Loop parameters in registers 51 000000 #define INDEX R8 52 000000 #define LIMIT R9 53 000000 54 000000 // ; Scratch registers 55 000000 #define X R10 56 000000 #define Y R11 57 000000 #define Q R12 58 000000 #define T R13 59 000000 // nc R14 60 000000 // nc R15 61 000000 62 000000 63 000000 // ; T.I. Integer Subroutines Definitions 64 000000 #define IROP1 TOS 65 000000 #define IROP2L R10 66 000000 #define IROP2M R11 67 000000 #define IRACL R12 68 000000 #define IRACM R13 69 000000 #define IRBT W 70 000000 71 000000 // ; INDIRECT-THREADED NEXT 72 000000 77 000000 78 000000 // ; BRANCH DESTINATION (RELATIVE BRANCH) 79 000000 // ; For relative branch addresses, i.e., a branch is ADD @IP,IP 80 000000 84 000000 85 000000 // ; HEADER CONSTRUCTION MACROS 86 000000 101 000000 110 000000 125 000000 6 000000 7 000000 8 000000 RSEG CODE ; place - 4e-config - Page 33 program in 'CODE' segment 9 000000 10 000000 link SET 0 ; initial dictionary link 11 000000 12 000000 ; production fuse bits 13 000000 FFFF PROFUSE: DW 0xFFFF ; burn fuse to prohibit WIPE 14 000002 15 000002 16 000002 13 version: DB (verend-ver0) 17 000003 204D53503433*ver0: DB ' MSP430G2553 4E4th ' 18 000016 EVEN 0x20 ; use blank as padding byte 19 000016 verend: 20 000016 21 000016 16 stamp: DB (stampend-stamp0) 22 000017 446563203230*stamp0: DB __date__,' ',__time__ 23 00002D stampend: 24 00002D 25 00002D /* 26 00002D id: DB (idend-id0) 27 00002D id0: DB 'MSP430G2553 ' 28 00002D EVEN 0x20 ; use blank as padding byte 29 00002D idend: 30 00002D */ 31 00002D 32 00002D 33 00002D 34 00002D ; We #include the following source files, rather than compiling them 35 00002D ; separately, so that they can inherit the value of 'link'. 36 00002D 37 00002D #include "4e-core430.s43" 1 00002D ; ---------------------------------------------- ------------------------ 2 00002D ; 4e4th is a Forth based on CamelForth 3 00002D ; for the Texas Instruments MSP430 4 00002D ; 5 00002D ; This program is free software; you can redistribute it and/or modify 6 00002D ; it under the terms of the GNU General Public License as published by 7 00002D ; the Free Software Foundation; either version 3 of the License, or 8 00002D ; (at your option) any later version. 9 00002D ; 10 00002D ; This program is distributed in the hope that it will be useful, 11 00002D ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 00002D ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 00002D ; GNU General Public License for more details. 14 00002D ; 15 00002D ; You should have received a copy of the GNU General Public License 16 00002D ; along with this program. If not, see . 17 00002D ; 18 00002D ; See LICENSE TERMS in Brads file readme.txt as well. 19 00002D 20 00002D ; ---------------------------------------------- ------------------------ 21 00002D ; 4e-core430.s43 - Machine Language Primitives 22 00002D ; ---------------------------------------------- ------------------------ 23 00002D 24 00002D ; Revision History 25 00002D ; 1 mar 09 bjr - changed Flash write and erase primitives to correctly 26 00002D ; write RAM outside Info Flash and Main Flash address limits. - 4e-config - Page 34 27 00002D 28 00002D 29 000000 EXTERN UP,UAREA,PADAREA,LSTACK,PSTACK,R STACK 30 000000 EXTERN TIBAREA,RAMDICT,ROMDICT 31 000000 EXTERN TIB_SIZE,UAREA_SIZE,VARAREA,VAR_ SIZE,nullirq 32 00002D 33 00002D 34 00002D 35 00002D ; ---------------------------------------------- ------------------------ 36 00002D ; INTERPRETER LOGIC 37 00002D ; ITC NEXT is defined as 38 00002D ; MOV @IP+,W ; 2 fetch word address into W 39 00002D ; MOV @W+,PC ; 2 fetch code address into PC, W=PFA 40 00002D 41 00002D ;C EXECUTE i*x xt -- j*x execute Forth word at 'xt' 42 00002D HEADER EXECUTE,7,'EXECUTE',DOCODE 42.1 000000 PUBLIC EXECUTE 42.2 00002D 0000 DW link 42.3 00002F FF DB 0FFh ; not immediate 42.4 000030 link SET $ 42.5 000030 07 DB 7 42.6 000031 455845435554* DB 'EXECUTE' 42.7 000038 EVEN 42.8 000038 IF 'DOCODE'='DOCODE' 42.9 000038 .... EXECUTE: DW $+2 42.10 00003A ELSE 42.11 00003A EXECUTE: DW DOCODE 42.12 00003A ENDIF 42.13 00003A ENDM 43 00003A 0647 MOV TOS,W ; 1 put word address into W 44 00003C 3744 MOV @PSP+,TOS ; 2 fetch new TOS 45 00003E 3046 MOV @W+,PC ; 2 fetch code address into PC, W=PFA 46 000040 47 000040 ;Z lit -- x fetch inline literal to stack 48 000040 ; This is the primtive compiled by LITERAL. 49 000040 HEADER lit,3,'lit',DOCODE 49.1 000000 PUBLIC lit 49.2 000040 .... DW link 49.3 000042 FF DB 0FFh ; not immediate 49.4 000043 link SET $ 49.5 000043 03 DB 3 49.6 000044 6C6974 DB 'lit' 49.7 000047 00 EVEN 49.8 000048 IF 'DOCODE'='DOCODE' 49.9 000048 .... lit: DW $+2 49.10 00004A ELSE 49.11 00004A lit: DW DOCODE 49.12 00004A ENDIF 49.13 00004A ENDM 50 00004A 2483 SUB #2,PSP ; 1 push old TOS.. 51 00004C 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 52 000050 3745 MOV @IP+,TOS ; 2 fetch new TOS value 53 000052 NEXT ; 4 53.1 000052 3645 MOV @IP+,W // ; fetch word address into W 53.2 000054 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 53.3 000056 ENDM 54 000056 55 000056 ;C EXIT -- exit a colon definition 56 000056 HEADER EXIT,4,'EXIT',DOCODE 56.1 000000 PUBLIC EXIT 56.2 000056 .... DW link 56.3 000058 FF DB 0FFh ; not immediate 56.4 000059 link SET $ 56.5 000059 04 DB 4 56.6 00005A 45584954 DB 'EXIT' - 4e-config - Page 35 56.7 00005E EVEN 56.8 00005E IF 'DOCODE'='DOCODE' 56.9 00005E .... EXIT: DW $+2 56.10 000060 ELSE 56.11 000060 EXIT: DW DOCODE 56.12 000060 ENDIF 56.13 000060 ENDM 57 000060 3541 MOV @RSP+,IP ; 2 pop old IP from return stack 58 000062 NEXT ; 4 58.1 000062 3645 MOV @IP+,W // ; fetch word address into W 58.2 000064 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 58.3 000066 ENDM 59 000066 60 000066 ; ---------------------------------------------- ------------------------ 61 000066 ; DEFINING WORDS - ROMable ITC model 62 000066 63 000066 ; DOCOLON enters a new high-level thread (colon definition.) 64 000066 ; (internal code fragment, not a Forth word) 65 000000 PUBLIC DOCOLON 66 000066 DOCOLON: 67 000066 0512 PUSH IP ; 3 save old IP on return stack 68 000068 0546 MOV W,IP ; 1 set new IP to PFA 69 00006A NEXT ; 4 69.1 00006A 3645 MOV @IP+,W // ; fetch word address into W 69.2 00006C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 69.3 00006E ENDM 70 00006E 71 00006E ;C VARIABLE -- define a Forth VARIABLE 72 00006E ; CREATE CELL ALLOT ; 73 00006E ; Action of ROMable variable is the same as CREATE; it builds a 74 00006E ; constant holding the RAM address. See CREATE in hilvl430.s43. 75 00006E HEADER VARIABLE,8,'VARIABLE',DOCOLON 75.1 000000 PUBLIC VARIABLE 75.2 00006E .... DW link 75.3 000070 FF DB 0FFh ; not immediate 75.4 000071 link SET $ 75.5 000071 08 DB 8 75.6 000072 564152494142* DB 'VARIABLE' 75.7 00007A EVEN 75.8 00007A IF 'DOCOLON'='DOCODE' 75.9 00007A VARIABLE: DW $+2 75.10 00007A ELSE 75.11 00007A .... VARIABLE: DW DOCOLON 75.12 00007C ENDIF 75.13 00007C ENDM 76 00007C ............* DW CREATE,CELL,ALLOT,EXIT 77 000084 78 000084 ;C CONSTANT -- define a Forth constant 79 000084 ; (machine code fragment) 81 000084 ; Note that the constant is stored in Code space. 82 000084 HEADER CONSTANT,8,'CONSTANT',DOCOLON 82.1 000000 PUBLIC CONSTANT 82.2 000084 .... DW link 82.3 000086 FF DB 0FFh ; not immediate 82.4 000087 link SET $ 82.5 000087 08 DB 8 82.6 000088 434F4E535441* DB 'CONSTANT' 82.7 000090 EVEN 82.8 000090 IF 'DOCOLON'='DOCODE' 82.9 000090 CONSTANT: DW $+2 82.10 000090 ELSE 82.11 000090 .... CONSTANT: DW DOCOLON - 4e-config - Page 36 82.12 000092 ENDIF 82.13 000092 ENDM 83 000092 ............ DW BUILDS,ICOMMA,XDOES 84 000098 ; DOCON, code action of CONSTANT, 85 000098 ; entered with W=Parameter Field Adrs 86 000098 ; This is also the action of VARIABLE (Harvard model) 87 000098 ; This is also the action of CREATE (Harvard model) 88 000000 PUBLIC DOCON 89 000000 PUBLIC docreate 90 000000 PUBLIC DOVAR 91 000098 docreate: ; -- a-addr ; ROMable CREATE fetches address from PFA 92 000098 DOVAR: ; -- a-addr ; ROMable VARIABLE fetches address from PFA 93 000098 DOCON: ; -- x ; CONSTANT fetches cell from PFA to TOS 94 000098 2483 SUB #2,PSP ; make room on stack 95 00009A 84470000 MOV TOS,0(PSP) 96 00009E 2746 MOV @W,TOS ; fetch from parameter field to TOS 97 0000A0 NEXT 97.1 0000A0 3645 MOV @IP+,W // ; fetch word address into W 97.2 0000A2 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 97.3 0000A4 ENDM 98 0000A4 99 0000A4 ; DOCREATE's action is for a table in RAM. 100 0000A4 ; DOROM is the code action for a table in ROM; 101 0000A4 ; it returns the address of the parameter field. 102 000000 PUBLIC DOROM 103 0000A4 DOROM: ; -- a-addr ; Table in ROM: get PFA into TOS 104 0000A4 2483 SUB #2,PSP 105 0000A6 84470000 MOV TOS,0(PSP) 106 0000AA 0746 MOV W,TOS 107 0000AC NEXT 107.1 0000AC 3645 MOV @IP+,W // ; fetch word address into W 107.2 0000AE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 107.3 0000B0 ENDM 108 0000B0 109 0000B0 ;Z USER n -- define user variable 'n' 110 0000B0 ; (machine code fragment) Flashable model 111 0000B0 HEADER USER,4,'USER',DOCOLON 111.1 000000 PUBLIC USER 111.2 0000B0 .... DW link 111.3 0000B2 FF DB 0FFh ; not immediate 111.4 0000B3 link SET $ 111.5 0000B3 04 DB 4 111.6 0000B4 55534552 DB 'USER' 111.7 0000B8 EVEN 111.8 0000B8 IF 'DOCOLON'='DOCODE' 111.9 0000B8 USER: DW $+2 111.10 0000B8 ELSE 111.11 0000B8 .... USER: DW DOCOLON 111.12 0000BA ENDIF 111.13 0000BA ENDM 112 0000BA ............ DW BUILDS,ICOMMA,XDOES 113 000000 PUBLIC DOUSER 114 0000C0 DOUSER: ; -- a-addr ; add constant to User Pointer, result in TOS 115 0000C0 2483 SUB #2,PSP 116 0000C2 84470000 MOV TOS,0(PSP) 117 0000C6 2746 MOV @W,TOS 118 0000C8 1752.... ADD &UP,TOS 119 0000CC NEXT 119.1 0000CC 3645 MOV @IP+,W // ; fetch word address into W 119.2 0000CE 3046 MOV @W+,PC // ; fetch code address - 4e-config - Page 37 into PC, W=PFA 119.3 0000D0 ENDM 120 0000D0 121 0000D0 ; DOALIAS used to build a word which performs the action of 122 0000D0 ; another word. Its action is to fetch the "alias" CFA from 123 0000D0 ; the parameter field, and execute that, e.g. DOES> I@ EXECUTE ; 124 0000D0 ; This is currently used only within the Forth kernel. 125 000000 PUBLIC DOALIAS 126 0000D0 DOALIAS: ; -- ; fetch CFA of word to execute 127 0000D0 2646 MOV @W,W ; 2 fetch from parameter field to W 128 0000D2 3046 MOV @W+,PC ; 2 fetch code address into PC, W=PFA 129 0000D4 130 0000D4 ; DODOES is the code action of a DOES> clause. For ITC Forth: 131 0000D4 ; defined word: CFA: doescode 132 0000D4 ; PFA: parameter field 133 0000D4 ; 134 0000D4 ; doescode: MOV #DODOES,PC ; 16-bit direct jump, in two cells 135 0000D4 ; high-level thread 136 0000D4 ; 137 0000D4 ; Note that we use JMP DODOES instead of CALL #DODOES because we can 138 0000D4 ; efficiently obtain the thread address. DODOES is entered with W=PFA. 139 0000D4 ; It enters the high-level thread with the address of the parameter 140 0000D4 ; field on top of stack. 141 0000D4 142 000000 PUBLIC dodoes 143 0000D4 dodoes: ; -- a-addr ; 3 for MOV #DODOES,PC 144 0000D4 2483 SUB #2,PSP ; 1 make room on stack 145 0000D6 84470000 MOV TOS,0(PSP) ; 4 146 0000DA 0746 MOV W,TOS ; 1 put defined word's PFA in TOS 147 0000DC 0512 PUSH IP ; 3 save old IP on return stack 148 0000DE 1546FEFF MOV -2(W),IP ; 3 fetch adrs of doescode from defined word 149 0000E2 2552 ADD #4,IP ; 1 skip MOV instruction to get thread adrs 150 0000E4 NEXT ; 4 150.1 0000E4 3645 MOV @IP+,W // ; fetch word address into W 150.2 0000E6 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 150.3 0000E8 ENDM 151 0000E8 152 0000E8 ; OPTION 1 ; OPTION 2 153 0000E8 ; MOV #DODOES,PC 3 ; CALL #DODOES 5 154 0000E8 ; ... ; ... 155 0000E8 ; PUSH IP 3 ; POP W 2 156 0000E8 ; MOVE -2(W),IP 3 ; PUSH IP 3 157 0000E8 ; ADD #4,IP 1 ; MOV W,IP 1 158 0000E8 159 0000E8 160 0000E8 ; ---------------------------------------------- ------------------------ 161 0000E8 ; STACK OPERATIONS 162 0000E8 163 0000E8 ;C DUP x -- x x duplicate top of stack 164 0000E8 HEADER DUP,3,'DUP',DOCODE 164.1 000000 PUBLIC DUP - 4e-config - Page 38 164.2 0000E8 .... DW link 164.3 0000EA FF DB 0FFh ; not immediate 164.4 0000EB link SET $ 164.5 0000EB 03 DB 3 164.6 0000EC 445550 DB 'DUP' 164.7 0000EF 00 EVEN 164.8 0000F0 IF 'DOCODE'='DOCODE' 164.9 0000F0 .... DUP: DW $+2 164.10 0000F2 ELSE 164.11 0000F2 DUP: DW DOCODE 164.12 0000F2 ENDIF 164.13 0000F2 ENDM 165 0000F2 2483 PUSHTOS: SUB #2,PSP ; 1 push old TOS.. 166 0000F4 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 167 0000F8 NEXT ; 4 167.1 0000F8 3645 MOV @IP+,W // ; fetch word address into W 167.2 0000FA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 167.3 0000FC ENDM 168 0000FC 169 0000FC ;C ?DUP x -- 0 | x x DUP if nonzero 170 0000FC HEADER QDUP,4,'?DUP',DOCODE 170.1 000000 PUBLIC QDUP 170.2 0000FC .... DW link 170.3 0000FE FF DB 0FFh ; not immediate 170.4 0000FF link SET $ 170.5 0000FF 04 DB 4 170.6 000100 3F445550 DB '?DUP' 170.7 000104 EVEN 170.8 000104 IF 'DOCODE'='DOCODE' 170.9 000104 .... QDUP: DW $+2 170.10 000106 ELSE 170.11 000106 QDUP: DW DOCODE 170.12 000106 ENDIF 170.13 000106 ENDM 171 000106 0793 CMP #0,TOS ; 1 test for TOS nonzero 172 000108 F423 JNZ PUSHTOS ; 2 173 00010A NODUP: NEXT ; 4 173.1 00010A 3645 MOV @IP+,W // ; fetch word address into W 173.2 00010C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 173.3 00010E ENDM 174 00010E 175 00010E ;C DROP x -- drop top of stack 176 00010E HEADER DROP,4,'DROP',DOCODE 176.1 000000 PUBLIC DROP 176.2 00010E .... DW link 176.3 000110 FF DB 0FFh ; not immediate 176.4 000111 link SET $ 176.5 000111 04 DB 4 176.6 000112 44524F50 DB 'DROP' 176.7 000116 EVEN 176.8 000116 IF 'DOCODE'='DOCODE' 176.9 000116 .... DROP: DW $+2 176.10 000118 ELSE 176.11 000118 DROP: DW DOCODE 176.12 000118 ENDIF 176.13 000118 ENDM 177 000118 3744 MOV @PSP+,TOS ; 2 178 00011A NEXT ; 4 178.1 00011A 3645 MOV @IP+,W // ; fetch word address into W 178.2 00011C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 178.3 00011E ENDM 179 00011E 180 00011E ;C SWAP x1 x2 -- x2 x1 swap top two - 4e-config - Page 39 items 181 00011E HEADER SWAP,4,'SWAP',DOCODE 181.1 000000 PUBLIC SWAP 181.2 00011E .... DW link 181.3 000120 FF DB 0FFh ; not immediate 181.4 000121 link SET $ 181.5 000121 04 DB 4 181.6 000122 53574150 DB 'SWAP' 181.7 000126 EVEN 181.8 000126 IF 'DOCODE'='DOCODE' 181.9 000126 .... SWAP: DW $+2 181.10 000128 ELSE 181.11 000128 SWAP: DW DOCODE 181.12 000128 ENDIF 181.13 000128 ENDM 182 000128 2644 MOV @PSP,W ; 2 183 00012A 84470000 MOV TOS,0(PSP) ; 4 184 00012E 0746 MOV W,TOS ; 1 185 000130 NEXT ; 4 185.1 000130 3645 MOV @IP+,W // ; fetch word address into W 185.2 000132 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 185.3 000134 ENDM 186 000134 187 000134 ;C OVER x1 x2 -- x1 x2 x1 per stack diagram 188 000134 HEADER OVER,4,'OVER',DOCODE 188.1 000000 PUBLIC OVER 188.2 000134 .... DW link 188.3 000136 FF DB 0FFh ; not immediate 188.4 000137 link SET $ 188.5 000137 04 DB 4 188.6 000138 4F564552 DB 'OVER' 188.7 00013C EVEN 188.8 00013C IF 'DOCODE'='DOCODE' 188.9 00013C .... OVER: DW $+2 188.10 00013E ELSE 188.11 00013E OVER: DW DOCODE 188.12 00013E ENDIF 188.13 00013E ENDM 189 00013E 2644 MOV @PSP,W ; 2 190 000140 2483 SUB #2,PSP ; 2 191 000142 84470000 MOV TOS,0(PSP) ; 4 192 000146 0746 MOV W,TOS ; 1 193 000148 NEXT ; 4 193.1 000148 3645 MOV @IP+,W // ; fetch word address into W 193.2 00014A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 193.3 00014C ENDM 194 00014C 195 00014C ;C ROT x1 x2 x3 -- x2 x3 x1 per stack diagram 196 00014C HEADER ROT,3,'ROT',DOCODE 196.1 000000 PUBLIC ROT 196.2 00014C .... DW link 196.3 00014E FF DB 0FFh ; not immediate 196.4 00014F link SET $ 196.5 00014F 03 DB 3 196.6 000150 524F54 DB 'ROT' 196.7 000153 00 EVEN 196.8 000154 IF 'DOCODE'='DOCODE' 196.9 000154 .... ROT: DW $+2 196.10 000156 ELSE 196.11 000156 ROT: DW DOCODE 196.12 000156 ENDIF 196.13 000156 ENDM 197 000156 2644 MOV @PSP,W ; 2 fetch x2 198 000158 84470000 MOV TOS,0(PSP) ; 4 store x3 199 00015C 17440200 MOV 2(PSP),TOS ; 3 fetch x1 - 4e-config - Page 40 200 000160 84460200 MOV W,2(PSP) ; 4 store x2 201 000164 NEXT ; 4 201.1 000164 3645 MOV @IP+,W // ; fetch word address into W 201.2 000166 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 201.3 000168 ENDM 202 000168 203 000168 ;X NIP x1 x2 -- x2 per stack diagram 204 000168 HEADER NIP,3,'NIP',DOCODE 204.1 000000 PUBLIC NIP 204.2 000168 .... DW link 204.3 00016A FF DB 0FFh ; not immediate 204.4 00016B link SET $ 204.5 00016B 03 DB 3 204.6 00016C 4E4950 DB 'NIP' 204.7 00016F 00 EVEN 204.8 000170 IF 'DOCODE'='DOCODE' 204.9 000170 .... NIP: DW $+2 204.10 000172 ELSE 204.11 000172 NIP: DW DOCODE 204.12 000172 ENDIF 204.13 000172 ENDM 205 000172 2453 ADD #2,PSP ; 1 206 000174 NEXT ; 4 206.1 000174 3645 MOV @IP+,W // ; fetch word address into W 206.2 000176 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 206.3 000178 ENDM 207 000178 ; Das funktioniert, weil TOS im Register ist. 208 000178 ; TOS beleibt dort unverändert, derweil der PSP um eins erhöht wird. 209 000178 ; Das entspricht einem DROP ohne den TOS neu zu laden. 210 000178 ; cool. mk 211 000178 212 000178 ;C >R x -- R: -- x push to return stack 213 000178 HEADER TOR,2,'>R',DOCODE 213.1 000000 PUBLIC TOR 213.2 000178 .... DW link 213.3 00017A FF DB 0FFh ; not immediate 213.4 00017B link SET $ 213.5 00017B 02 DB 2 213.6 00017C 3E52 DB '>R' 213.7 00017E EVEN 213.8 00017E IF 'DOCODE'='DOCODE' 213.9 00017E .... TOR: DW $+2 213.10 000180 ELSE 213.11 000180 TOR: DW DOCODE 213.12 000180 ENDIF 213.13 000180 ENDM 214 000180 0712 PUSH TOS 215 000182 3744 MOV @PSP+,TOS 216 000184 NEXT 216.1 000184 3645 MOV @IP+,W // ; fetch word address into W 216.2 000186 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 216.3 000188 ENDM 217 000188 218 000188 ;C R> -- x R: x -- pop from return stack 219 000188 HEADER RFROM,2,'R>',DOCODE 219.1 000000 PUBLIC RFROM 219.2 000188 .... DW link 219.3 00018A FF DB 0FFh ; not immediate 219.4 00018B link SET $ 219.5 00018B 02 DB 2 219.6 00018C 523E DB 'R>' - 4e-config - Page 41 219.7 00018E EVEN 219.8 00018E IF 'DOCODE'='DOCODE' 219.9 00018E .... RFROM: DW $+2 219.10 000190 ELSE 219.11 000190 RFROM: DW DOCODE 219.12 000190 ENDIF 219.13 000190 ENDM 220 000190 2483 SUB #2,PSP ; 2 221 000192 84470000 MOV TOS,0(PSP) ; 4 222 000196 3741 MOV @RSP+,TOS 223 000198 NEXT 223.1 000198 3645 MOV @IP+,W // ; fetch word address into W 223.2 00019A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 223.3 00019C ENDM 224 00019C 225 00019C ;C R@ -- x R: x -- x fetch from rtn stk 226 00019C HEADER RFETCH,2,'R@',DOCODE 226.1 000000 PUBLIC RFETCH 226.2 00019C .... DW link 226.3 00019E FF DB 0FFh ; not immediate 226.4 00019F link SET $ 226.5 00019F 02 DB 2 226.6 0001A0 5240 DB 'R@' 226.7 0001A2 EVEN 226.8 0001A2 IF 'DOCODE'='DOCODE' 226.9 0001A2 .... RFETCH: DW $+2 226.10 0001A4 ELSE 226.11 0001A4 RFETCH: DW DOCODE 226.12 0001A4 ENDIF 226.13 0001A4 ENDM 227 0001A4 2483 SUB #2,PSP 228 0001A6 84470000 MOV TOS,0(PSP) 229 0001AA 2741 MOV @RSP,TOS 230 0001AC NEXT 230.1 0001AC 3645 MOV @IP+,W // ; fetch word address into W 230.2 0001AE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 230.3 0001B0 ENDM 231 0001B0 232 0001B0 ;Z SP@ -- a-addr get data stack pointer 233 0001B0 HEADER SPFETCH,3,'SP@',DOCODE 233.1 000000 PUBLIC SPFETCH 233.2 0001B0 .... DW link 233.3 0001B2 FF DB 0FFh ; not immediate 233.4 0001B3 link SET $ 233.5 0001B3 03 DB 3 233.6 0001B4 535040 DB 'SP@' 233.7 0001B7 00 EVEN 233.8 0001B8 IF 'DOCODE'='DOCODE' 233.9 0001B8 .... SPFETCH: DW $+2 233.10 0001BA ELSE 233.11 0001BA SPFETCH: DW DOCODE 233.12 0001BA ENDIF 233.13 0001BA ENDM 234 0001BA 2483 SUB #2,PSP 235 0001BC 84470000 MOV TOS,0(PSP) 236 0001C0 0744 MOV PSP,TOS 237 0001C2 NEXT 237.1 0001C2 3645 MOV @IP+,W // ; fetch word address into W 237.2 0001C4 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 237.3 0001C6 ENDM 238 0001C6 239 0001C6 ;Z SP! a-addr -- set data stack pointer 240 0001C6 HEADER SPSTORE,3,'SP!',DOCODE 240.1 000000 PUBLIC SPSTORE 240.2 0001C6 .... DW link 240.3 0001C8 FF DB 0FFh ; not immediate 240.4 0001C9 link SET $ 240.5 0001C9 03 DB 3 240.6 0001CA 535021 DB 'SP!' - 4e-config - Page 42 240.7 0001CD 00 EVEN 240.8 0001CE IF 'DOCODE'='DOCODE' 240.9 0001CE .... SPSTORE: DW $+2 240.10 0001D0 ELSE 240.11 0001D0 SPSTORE: DW DOCODE 240.12 0001D0 ENDIF 240.13 0001D0 ENDM 241 0001D0 0447 MOV TOS,PSP 242 0001D2 3744 MOV @PSP+,TOS ; 2 243 0001D4 NEXT 243.1 0001D4 3645 MOV @IP+,W // ; fetch word address into W 243.2 0001D6 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 243.3 0001D8 ENDM 244 0001D8 245 0001D8 ;Z RP@ -- a-addr get return stack pointer 246 0001D8 HEADER RPFETCH,3,'RP@',DOCODE 246.1 000000 PUBLIC RPFETCH 246.2 0001D8 .... DW link 246.3 0001DA FF DB 0FFh ; not immediate 246.4 0001DB link SET $ 246.5 0001DB 03 DB 3 246.6 0001DC 525040 DB 'RP@' 246.7 0001DF 00 EVEN 246.8 0001E0 IF 'DOCODE'='DOCODE' 246.9 0001E0 .... RPFETCH: DW $+2 246.10 0001E2 ELSE 246.11 0001E2 RPFETCH: DW DOCODE 246.12 0001E2 ENDIF 246.13 0001E2 ENDM 247 0001E2 2483 SUB #2,PSP 248 0001E4 84470000 MOV TOS,0(PSP) 249 0001E8 0741 MOV RSP,TOS 250 0001EA NEXT 250.1 0001EA 3645 MOV @IP+,W // ; fetch word address into W 250.2 0001EC 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 250.3 0001EE ENDM 251 0001EE 252 0001EE ;Z RP! a-addr -- set return stack pointer 253 0001EE HEADER RPSTORE,3,'RP!',DOCODE 253.1 000000 PUBLIC RPSTORE 253.2 0001EE .... DW link 253.3 0001F0 FF DB 0FFh ; not immediate 253.4 0001F1 link SET $ 253.5 0001F1 03 DB 3 253.6 0001F2 525021 DB 'RP!' 253.7 0001F5 00 EVEN 253.8 0001F6 IF 'DOCODE'='DOCODE' 253.9 0001F6 .... RPSTORE: DW $+2 253.10 0001F8 ELSE 253.11 0001F8 RPSTORE: DW DOCODE 253.12 0001F8 ENDIF 253.13 0001F8 ENDM 254 0001F8 0147 MOV TOS,RSP 255 0001FA 3744 MOV @PSP+,TOS ; 2 256 0001FC NEXT 256.1 0001FC 3645 MOV @IP+,W // ; fetch word address into W 256.2 0001FE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 256.3 000200 ENDM 257 000200 258 000200 ;X TUCK x1 x2 -- x2 x1 x2 per stack diagram 259 000200 HEADER TUCK,4,'TUCK',DOCOLON 259.1 000000 PUBLIC TUCK 259.2 000200 .... DW link 259.3 000202 FF DB 0FFh ; not immediate 259.4 000203 link SET $ 259.5 000203 04 DB 4 259.6 000204 5455434B DB 'TUCK' 259.7 000208 EVEN 259.8 000208 IF 'DOCOLON'='DOCODE' - 4e-config - Page 43 259.9 000208 TUCK: DW $+2 259.10 000208 ELSE 259.11 000208 .... TUCK: DW DOCOLON 259.12 00020A ENDIF 259.13 00020A ENDM 260 00020A ............ DC16 SWAP,OVER,EXIT 261 000210 262 000210 ; ---------------------------------------------- ------------------------ 263 000210 ; MEMORY OPERATIONS 264 000210 265 000210 ;C @ a-addr -- x fetch cell from memory 266 000210 HEADER FETCH,1,'@',DOCODE 266.1 000000 PUBLIC FETCH 266.2 000210 .... DW link 266.3 000212 FF DB 0FFh ; not immediate 266.4 000213 link SET $ 266.5 000213 01 DB 1 266.6 000214 40 DB '@' 266.7 000215 00 EVEN 266.8 000216 IF 'DOCODE'='DOCODE' 266.9 000216 .... FETCH: DW $+2 266.10 000218 ELSE 266.11 000218 FETCH: DW DOCODE 266.12 000218 ENDIF 266.13 000218 ENDM 267 000218 2747 MOV @TOS,TOS 268 00021A NEXT 268.1 00021A 3645 MOV @IP+,W // ; fetch word address into W 268.2 00021C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 268.3 00021E ENDM 269 00021E 270 00021E ;C ! x a-addr -- store cell in memory 271 00021E HEADER STORE,1,'!',DOCODE 271.1 000000 PUBLIC STORE 271.2 00021E .... DW link 271.3 000220 FF DB 0FFh ; not immediate 271.4 000221 link SET $ 271.5 000221 01 DB 1 271.6 000222 21 DB '!' 271.7 000223 00 EVEN 271.8 000224 IF 'DOCODE'='DOCODE' 271.9 000224 .... STORE: DW $+2 271.10 000226 ELSE 271.11 000226 STORE: DW DOCODE 271.12 000226 ENDIF 271.13 000226 ENDM 272 000226 B7440000 MOV @PSP+,0(TOS) 273 00022A 3744 MOV @PSP+,TOS 274 00022C NEXT 274.1 00022C 3645 MOV @IP+,W // ; fetch word address into W 274.2 00022E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 274.3 000230 ENDM 275 000230 276 000230 ;C C@ c-addr -- char fetch char from memory 277 000230 HEADER CFETCH,2,'C@',DOCODE 277.1 000000 PUBLIC CFETCH 277.2 000230 .... DW link 277.3 000232 FF DB 0FFh ; not immediate 277.4 000233 link SET $ 277.5 000233 02 DB 2 277.6 000234 4340 DB 'C@' 277.7 000236 EVEN 277.8 000236 IF 'DOCODE'='DOCODE' 277.9 000236 .... CFETCH: DW $+2 277.10 000238 ELSE 277.11 000238 CFETCH: DW DOCODE 277.12 000238 ENDIF 277.13 000238 ENDM 278 000238 6747 MOV.B @TOS,TOS 279 00023A NEXT - 4e-config - Page 44 279.1 00023A 3645 MOV @IP+,W // ; fetch word address into W 279.2 00023C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 279.3 00023E ENDM 280 00023E 281 00023E ;C C! char c-addr -- store char in memory 282 00023E HEADER CSTORE,2,'C!',DOCODE 282.1 000000 PUBLIC CSTORE 282.2 00023E .... DW link 282.3 000240 FF DB 0FFh ; not immediate 282.4 000241 link SET $ 282.5 000241 02 DB 2 282.6 000242 4321 DB 'C!' 282.7 000244 EVEN 282.8 000244 IF 'DOCODE'='DOCODE' 282.9 000244 .... CSTORE: DW $+2 282.10 000246 ELSE 282.11 000246 CSTORE: DW DOCODE 282.12 000246 ENDIF 282.13 000246 ENDM 283 000246 3644 MOV @PSP+,W 284 000248 C7460000 MOV.B W,0(TOS) 285 00024C 3744 MOV @PSP+,TOS 286 00024E NEXT 286.1 00024E 3645 MOV @IP+,W // ; fetch word address into W 286.2 000250 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 286.3 000252 ENDM 287 000252 288 000252 ; FLASH MEMORY OPERATIONS 289 000252 ; Note that an I! or IC! to a RAM address >FLASHSTART will work -- it 290 000252 ; will enable the flash, write the RAM, and then disable the flash. 291 000252 ; An FLERASE to a RAM address will merely clear that one RAM cell. 292 000252 293 000252 ;Z FLERASE a-addr n -- erase n bytes of flash, full segment sizes. 294 000252 HEADER FLERASE,7,'FLERASE',DOCODE 294.1 000000 PUBLIC FLERASE 294.2 000252 .... DW link 294.3 000254 FF DB 0FFh ; not immediate 294.4 000255 link SET $ 294.5 000255 07 DB 7 294.6 000256 464C45524153* DB 'FLERASE' 294.7 00025D 00 EVEN 294.8 00025E IF 'DOCODE'='DOCODE' 294.9 00025E .... FLERASE: DW $+2 294.10 000260 ELSE 294.11 000260 FLERASE: DW DOCODE 294.12 000260 ENDIF 294.13 000260 ENDM 295 000260 3644 MOV @PSP+,W ; get address in W 296 000262 0756 ADD W,TOS ; TOS=end adrs (first unerased adrs) 297 000264 FLE_1: 298 000264 0697 CMP TOS,W ; adr-end 299 000266 2E2C JC FLE_X ; if no borrow, adr>=end, do not erase 300 000268 ; is it within Main flash? 301 000268 369000C0 CMP #USERFLASHSTART,W ; flash start 302 00026C 0328 JNC FLE_VEC ; if borrow, adrend, check if vec 305 000274 - 4e-config - Page 45 306 000274 FLE_VEC 307 000274 ; danger!! only for MSPG2553 apps 308 000274 ; is it within interrupt vector flash? 309 000274 369000FE CMP #ISRSTART,W ; flash start 310 000278 0328 JNC FLE_INFO ; if borrow, adrend, check if Info 313 000280 ; /danger 314 000280 315 000280 FLE_INFO: ; is it within Info flash? 316 000280 36900010 CMP #INFOSTART,W 317 000284 1F28 JNC FLE_X ; if borrow, adrend, do not erase 320 00028C FLE_OK: ; Address is either in Main flash, or in Info flash. 321 00028C ; Segment Erase from flash. 322 00028C ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. 323 00028C ; Per section 5.3.2 of MSP430 Family User's Guide 324 00028C 0212 PUSH sr 325 00028E 32C2 DINT ; Disable interrupts 326 000290 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 327 000296 B24002A52801 MOV #FWKEY+ERASE,&FCTL1 ; Enable segment erase 328 00029C B6430000 MOV #-1,0(W) ; Dummy write in segment to erase 329 0002A0 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear erase command. 330 0002A6 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Done, set LOCK 331 0002AC ; EINT ; Enable interrupts 332 0002AC 3241 POP sr 333 0002AE ; Advance flash pointer by 512 bytes or 128 bytes 334 0002AE ; is it within Main flash? 335 0002AE 369000C0 CMP #USERFLASHSTART,W 336 0002B2 0528 JNC FL_INFO ; if borrow, adrend, must be Info 339 0002BA 36508001 ADD #(MAINSEG-INFOSEG),W 340 0002BE 36508000 FL_INFO: ADD #INFOSEG,W 341 0002C2 D03F JMP FLE_1 ; continue till past end or outside limits 342 0002C4 3744 FLE_X: MOV @PSP+,TOS 343 0002C6 NEXT 343.1 0002C6 3645 MOV @IP+,W // ; fetch word address into W 343.2 0002C8 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 343.3 0002CA ENDM 344 0002CA 345 0002CA ; Program Space (Flash) operators 346 0002CA - 4e-config - Page 46 347 0002CA ;Z I! x a-addr -- store cell in Instruction memory 348 0002CA HEADER ISTORE,2,'I!',DOCODE 348.1 000000 PUBLIC ISTORE 348.2 0002CA .... DW link 348.3 0002CC FF DB 0FFh ; not immediate 348.4 0002CD link SET $ 348.5 0002CD 02 DB 2 348.6 0002CE 4921 DB 'I!' 348.7 0002D0 EVEN 348.8 0002D0 IF 'DOCODE'='DOCODE' 348.9 0002D0 .... ISTORE: DW $+2 348.10 0002D2 ELSE 348.11 0002D2 ISTORE: DW DOCODE 348.12 0002D2 ENDIF 348.13 0002D2 ENDM 349 0002D2 3644 MOV @PSP+,W ; get data to write 350 0002D4 17B3 BIT #1,TOS 351 0002D6 1F20 JNZ IST_X ; if not even address, do not write 352 0002D8 2697 CMP @TOS,W 353 0002DA 1D24 JZ IST_X ; if memory is desired value, do not write 354 0002DC ; is it within Main flash? 355 0002DC 379000C0 CMP #USERFLASHSTART,TOS 356 0002E0 0328 JNC IST_INFO ; if borrow, adrend, check if Info 359 0002E8 IST_INFO: ; is it within Info flash? 360 0002E8 37900010 CMP #INFOSTART,TOS 361 0002EC 0B28 JNC IST_RAM ; if borrow, adrend, assume it's RAM 364 0002F4 IST_OK: ; Address is either in Main flash, or in Info flash. 365 0002F4 ; Byte/word write from flash. 366 0002F4 ; Assumes location to write is already erased 367 0002F4 ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. 368 0002F4 ; Per section 5.3.3 of MSP430 Family User's Guide 369 0002F4 0212 PUSH sr 370 0002F6 32C2 DINT ; Disable interrupts 371 0002F8 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 372 0002FE B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 373 000304 IST_RAM: ; If RAM, jump here to write. FCTL1,FCTL3,EINT are superfluous 374 000304 87460000 MOV W,0(TOS) ; Write word to flash location 375 000308 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 376 00030E B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 377 000314 ; EINT ; Enable interrupts 378 000314 3241 POP sr 379 000316 3744 IST_X: MOV @PSP+,TOS ; pop new TOS 380 000318 NEXT 380.1 000318 3645 MOV @IP+,W // ; fetch word address - 4e-config - Page 47 into W 380.2 00031A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 380.3 00031C ENDM 381 00031C 382 00031C ; write vector area - or any flash location. !! dangerous!! 383 00031C ;Z VEC! x adr -- store x to top most segment 384 00031C HEADER VECSTORE,4,'VEC!',DOCODE 384.1 000000 PUBLIC VECSTORE 384.2 00031C .... DW link 384.3 00031E FF DB 0FFh ; not immediate 384.4 00031F link SET $ 384.5 00031F 04 DB 4 384.6 000320 56454321 DB 'VEC!' 384.7 000324 EVEN 384.8 000324 IF 'DOCODE'='DOCODE' 384.9 000324 .... VECSTORE: DW $+2 384.10 000326 ELSE 384.11 000326 VECSTORE: DW DOCODE 384.12 000326 ENDIF 384.13 000326 ENDM 385 000326 3644 MOV @PSP+,W ; get data to write 386 000328 17B3 BIT #1,TOS 387 00032A F523 JNZ IST_X ; if not even address, do not write 388 00032C 2697 CMP @TOS,W 389 00032E 1124 JZ IST_X2 ; if memory is desired value, do not write 390 000330 0212 PUSH sr 391 000332 32C2 DINT ; Disable interrupts 392 000334 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 393 00033A B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 394 000340 87460000 MOV W,0(TOS) ; Write word to flash location 395 000344 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 396 00034A B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 397 000350 ; EINT ; Enable interrupts 398 000350 3241 POP sr 399 000352 3744 IST_X2: MOV @PSP+,TOS ; pop new TOS 400 000354 NEXT 400.1 000354 3645 MOV @IP+,W // ; fetch word address into W 400.2 000356 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 400.3 000358 ENDM 401 000358 402 000358 403 000358 404 000358 ;Z IC! x a-addr -- store char in Instruction memory 405 000358 HEADER ICSTORE,3,'IC!',DOCODE 405.1 000000 PUBLIC ICSTORE 405.2 000358 .... DW link 405.3 00035A FF DB 0FFh ; not immediate 405.4 00035B link SET $ 405.5 00035B 03 DB 3 405.6 00035C 494321 DB 'IC!' 405.7 00035F 00 EVEN 405.8 000360 IF 'DOCODE'='DOCODE' 405.9 000360 .... ICSTORE: DW $+2 405.10 000362 ELSE 405.11 000362 ICSTORE: DW DOCODE 405.12 000362 ENDIF 405.13 000362 ENDM 406 000362 3644 MOV @PSP+,W ; get data to - 4e-config - Page 48 write 407 000364 6697 CMP.B @TOS,W 408 000366 D727 JZ IST_X ; if memory is desired value, do not write 409 000368 ; is it within Main flash? 410 000368 379000C0 CMP #USERFLASHSTART,TOS 411 00036C 0328 JNC ICST_INFO ; if borrow, adrend, check if Info 414 000374 ICST_INFO: ; is it within Info flash? 415 000374 37900010 CMP #INFOSTART,TOS 416 000378 0B28 JNC ICST_RAM ; if borrow, adrend, assume it's RAM 419 000380 ICST_OK: ; Address is either in Main flash, or in Info flash. 420 000380 ; Byte/word write from flash. 421 000380 ; Assumes location to write is already erased 422 000380 ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. 423 000380 ; Per section 5.3.3 of MSP430 Family User's Guide 424 000380 0212 PUSH sr 425 000382 32C2 DINT ; Disable interrupts 426 000384 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 427 00038A B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 428 000390 ICST_RAM: ; If RAM, jump here to write. FCTL1,FCTL3,EINT are superfluous 429 000390 C7460000 MOV.B W,0(TOS) ; Write byte to flash location 430 000394 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 431 00039A B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 432 0003A0 ; EINT ; Enable interrupts 433 0003A0 3241 POP sr 434 0003A2 B93F JMP IST_X 435 0003A4 436 0003A4 /* 437 0003A4 ;Z I@ a-addr -- x fetch cell from Instruction memory 438 0003A4 HEADER IFETCH,2,'I@',FETCH+2 439 0003A4 440 0003A4 ;Z IC@ a-addr -- x fetch char from Instruction memory 441 0003A4 HEADER ICFETCH,3,'IC@',CFETCH+2 442 0003A4 */ 443 0003A4 #define IFETCH FETCH 444 0003A4 #define ICFETCH CFETCH 445 0003A4 446 0003A4 447 0003A4 448 0003A4 ;Z D->I c-addr1 c-addr2 u -- move Data->Code 449 0003A4 ; Block move from Data space to Code space. Flashable. 450 0003A4 ; For the MSP430, this uses a "smart" algorithm that uses word writes, 451 0003A4 ; rather than byte writes, whenever possible. Note that byte reads 452 0003A4 ; are used for the source, so it need not be - 4e-config - Page 49 aligned. 453 0003A4 HEADER DTOI,4,'D->I',DOCODE 453.1 000000 PUBLIC DTOI 453.2 0003A4 .... DW link 453.3 0003A6 FF DB 0FFh ; not immediate 453.4 0003A7 link SET $ 453.5 0003A7 04 DB 4 453.6 0003A8 442D3E49 DB 'D->I' 453.7 0003AC EVEN 453.8 0003AC IF 'DOCODE'='DOCODE' 453.9 0003AC .... DTOI: DW $+2 453.10 0003AE ELSE 453.11 0003AE DTOI: DW DOCODE 453.12 0003AE ENDIF 453.13 0003AE ENDM 454 0003AE 3644 MOV @PSP+,W ; dest adrs 455 0003B0 3A44 MOV @PSP+,X ; src adrs 456 0003B2 0793 CMP #0,TOS 457 0003B4 2124 JZ DTOI_X 458 0003B6 DTOI_LOOP: ; Begin flash write sequence 459 0003B6 0212 PUSH sr 460 0003B8 32C2 DINT ; Disable interrupts 461 0003BA B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear LOCK 462 0003C0 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable write 463 0003C6 ; If length is 1, or dest. address is odd, do a byte write. 464 0003C6 ; Else, do a word write. 465 0003C6 1793 CMP #1,TOS 466 0003C8 0B24 JZ DTOI_BYTE 467 0003CA 16B3 BIT #1,W 468 0003CC 0920 JNZ DTOI_BYTE 469 0003CE 7B4A DTOI_WORD: MOV.B @X+,Y ; get low byte of word 470 0003D0 7C4A MOV.B @X+,Q ; get high byte of word 471 0003D2 8C10 SWPB Q 472 0003D4 0BDC BIS Q,Y ; merge bytes 473 0003D6 864B0000 MOV.W Y,0(W) ; write byte to dest 474 0003DA 2653 ADD #2,W 475 0003DC 1783 SUB #1,TOS ; another 1 will be subtracted below 476 0003DE 033C JMP DTOI_END 477 0003E0 F64A0000 DTOI_BYTE: MOV.B @X+,0(W) ; copy byte from src to dest 478 0003E4 1653 ADD #1,W 479 0003E6 DTOI_END: ; End flash write sequence 480 0003E6 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear WRT. 481 0003EC B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK 482 0003F2 ; EINT ; Enable interrupts 483 0003F2 3241 POP sr 484 0003F4 1783 SUB #1,TOS 485 0003F6 DF23 JNZ DTOI_LOOP 486 0003F8 3744 DTOI_X: MOV @PSP+,TOS ; pop new TOS 487 0003FA NEXT 487.1 0003FA 3645 MOV @IP+,W // ; fetch word address into W 487.2 0003FC 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 487.3 0003FE ENDM 488 0003FE 489 0003FE ; ---------------------------------------------- ------------------------ 490 0003FE ; ARITHMETIC OPERATIONS 491 0003FE 492 0003FE ;C + n1/u1 n2/u2 -- n3/u3 add n1+n2 493 0003FE HEADER PLUS,1,'+',DOCODE 493.1 000000 PUBLIC PLUS - 4e-config - Page 50 493.2 0003FE .... DW link 493.3 000400 FF DB 0FFh ; not immediate 493.4 000401 link SET $ 493.5 000401 01 DB 1 493.6 000402 2B DB '+' 493.7 000403 00 EVEN 493.8 000404 IF 'DOCODE'='DOCODE' 493.9 000404 .... PLUS: DW $+2 493.10 000406 ELSE 493.11 000406 PLUS: DW DOCODE 493.12 000406 ENDIF 493.13 000406 ENDM 494 000406 3754 ADD @PSP+,TOS 495 000408 NEXT 495.1 000408 3645 MOV @IP+,W // ; fetch word address into W 495.2 00040A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 495.3 00040C ENDM 496 00040C 497 00040C ;C +! n/u a-addr -- add cell to memory 498 00040C HEADER PLUSSTORE,2,'+!',DOCODE 498.1 000000 PUBLIC PLUSSTORE 498.2 00040C .... DW link 498.3 00040E FF DB 0FFh ; not immediate 498.4 00040F link SET $ 498.5 00040F 02 DB 2 498.6 000410 2B21 DB '+!' 498.7 000412 EVEN 498.8 000412 IF 'DOCODE'='DOCODE' 498.9 000412 .... PLUSSTORE: DW $+2 498.10 000414 ELSE 498.11 000414 PLUSSTORE: DW DOCODE 498.12 000414 ENDIF 498.13 000414 ENDM 499 000414 B7540000 ADD @PSP+,0(TOS) 500 000418 3744 MOV @PSP+,TOS 501 00041A NEXT 501.1 00041A 3645 MOV @IP+,W // ; fetch word address into W 501.2 00041C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 501.3 00041E ENDM 502 00041E 503 00041E ;X M+ d n -- d add single to double 504 00041E HEADER MPLUS,2,'M+',DOCODE 504.1 000000 PUBLIC MPLUS 504.2 00041E .... DW link 504.3 000420 FF DB 0FFh ; not immediate 504.4 000421 link SET $ 504.5 000421 02 DB 2 504.6 000422 4D2B DB 'M+' 504.7 000424 EVEN 504.8 000424 IF 'DOCODE'='DOCODE' 504.9 000424 .... MPLUS: DW $+2 504.10 000426 ELSE 504.11 000426 MPLUS: DW DOCODE 504.12 000426 ENDIF 504.13 000426 ENDM 505 000426 84570200 ADD TOS,2(PSP) 506 00042A 84630000 ADDC #0,0(PSP) 507 00042E 3744 MOV @PSP+,TOS 508 000430 NEXT 508.1 000430 3645 MOV @IP+,W // ; fetch word address into W 508.2 000432 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 508.3 000434 ENDM 509 000434 510 000434 ;C - n1/u1 n2/u2 -- n3/u3 subtract n1-n2 511 000434 HEADER MINUS,1,'-',DOCODE 511.1 000000 PUBLIC MINUS 511.2 000434 .... DW link 511.3 000436 FF DB 0FFh ; not immediate 511.4 000437 link SET $ - 4e-config - Page 51 511.5 000437 01 DB 1 511.6 000438 2D DB '-' 511.7 000439 00 EVEN 511.8 00043A IF 'DOCODE'='DOCODE' 511.9 00043A .... MINUS: DW $+2 511.10 00043C ELSE 511.11 00043C MINUS: DW DOCODE 511.12 00043C ENDIF 511.13 00043C ENDM 512 00043C 3644 MOV @PSP+,W 513 00043E 0687 SUB TOS,W 514 000440 0746 MOV W,TOS 515 000442 NEXT 515.1 000442 3645 MOV @IP+,W // ; fetch word address into W 515.2 000444 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 515.3 000446 ENDM 516 000446 517 000446 ;C AND x1 x2 -- x3 logical AND 518 000446 HEADER ANDD,3,'AND',DOCODE 518.1 000000 PUBLIC ANDD 518.2 000446 .... DW link 518.3 000448 FF DB 0FFh ; not immediate 518.4 000449 link SET $ 518.5 000449 03 DB 3 518.6 00044A 414E44 DB 'AND' 518.7 00044D 00 EVEN 518.8 00044E IF 'DOCODE'='DOCODE' 518.9 00044E .... ANDD: DW $+2 518.10 000450 ELSE 518.11 000450 ANDD: DW DOCODE 518.12 000450 ENDIF 518.13 000450 ENDM 519 000450 37F4 AND @PSP+,TOS 520 000452 NEXT 520.1 000452 3645 MOV @IP+,W // ; fetch word address into W 520.2 000454 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 520.3 000456 ENDM 521 000456 522 000456 ;C OR x1 x2 -- x3 logical OR 523 000456 HEADER ORR,2,'OR',DOCODE 523.1 000000 PUBLIC ORR 523.2 000456 .... DW link 523.3 000458 FF DB 0FFh ; not immediate 523.4 000459 link SET $ 523.5 000459 02 DB 2 523.6 00045A 4F52 DB 'OR' 523.7 00045C EVEN 523.8 00045C IF 'DOCODE'='DOCODE' 523.9 00045C .... ORR: DW $+2 523.10 00045E ELSE 523.11 00045E ORR: DW DOCODE 523.12 00045E ENDIF 523.13 00045E ENDM 524 00045E 37D4 BIS @PSP+,TOS 525 000460 NEXT 525.1 000460 3645 MOV @IP+,W // ; fetch word address into W 525.2 000462 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 525.3 000464 ENDM 526 000464 527 000464 ;C XOR x1 x2 -- x3 logical XOR 528 000464 HEADER XORR,3,'XOR',DOCODE 528.1 000000 PUBLIC XORR 528.2 000464 .... DW link 528.3 000466 FF DB 0FFh ; not immediate 528.4 000467 link SET $ 528.5 000467 03 DB 3 528.6 000468 584F52 DB 'XOR' 528.7 00046B 00 EVEN 528.8 00046C IF 'DOCODE'='DOCODE' - 4e-config - Page 52 528.9 00046C .... XORR: DW $+2 528.10 00046E ELSE 528.11 00046E XORR: DW DOCODE 528.12 00046E ENDIF 528.13 00046E ENDM 529 00046E 37E4 XOR @PSP+,TOS 530 000470 NEXT 530.1 000470 3645 MOV @IP+,W // ; fetch word address into W 530.2 000472 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 530.3 000474 ENDM 531 000474 532 000474 ;C INVERT x1 -- x2 bitwise inversion 533 000474 HEADER INVERT,6,'INVERT',DOCODE 533.1 000000 PUBLIC INVERT 533.2 000474 .... DW link 533.3 000476 FF DB 0FFh ; not immediate 533.4 000477 link SET $ 533.5 000477 06 DB 6 533.6 000478 494E56455254 DB 'INVERT' 533.7 00047E EVEN 533.8 00047E IF 'DOCODE'='DOCODE' 533.9 00047E .... INVERT: DW $+2 533.10 000480 ELSE 533.11 000480 INVERT: DW DOCODE 533.12 000480 ENDIF 533.13 000480 ENDM 534 000480 37E3 XOR #-1,TOS 535 000482 NEXT 535.1 000482 3645 MOV @IP+,W // ; fetch word address into W 535.2 000484 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 535.3 000486 ENDM 536 000486 537 000486 ;C NEGATE x1 -- x2 two's complement 538 000486 HEADER NEGATE,6,'NEGATE',DOCODE 538.1 000000 PUBLIC NEGATE 538.2 000486 .... DW link 538.3 000488 FF DB 0FFh ; not immediate 538.4 000489 link SET $ 538.5 000489 06 DB 6 538.6 00048A 4E4547415445 DB 'NEGATE' 538.7 000490 EVEN 538.8 000490 IF 'DOCODE'='DOCODE' 538.9 000490 .... NEGATE: DW $+2 538.10 000492 ELSE 538.11 000492 NEGATE: DW DOCODE 538.12 000492 ENDIF 538.13 000492 ENDM 539 000492 37E3 XOR #-1,TOS 540 000494 1753 ADD #1,TOS 541 000496 NEXT 541.1 000496 3645 MOV @IP+,W // ; fetch word address into W 541.2 000498 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 541.3 00049A ENDM 542 00049A 543 00049A ;C 1+ n1/u1 -- n2/u2 add 1 to TOS 544 00049A HEADER ONEPLUS,2,'1+',DOCODE 544.1 000000 PUBLIC ONEPLUS 544.2 00049A .... DW link 544.3 00049C FF DB 0FFh ; not immediate 544.4 00049D link SET $ 544.5 00049D 02 DB 2 544.6 00049E 312B DB '1+' 544.7 0004A0 EVEN 544.8 0004A0 IF 'DOCODE'='DOCODE' 544.9 0004A0 .... ONEPLUS: DW $+2 544.10 0004A2 ELSE 544.11 0004A2 ONEPLUS: DW DOCODE 544.12 0004A2 ENDIF 544.13 0004A2 ENDM 545 0004A2 1753 ADD #1,TOS - 4e-config - Page 53 546 0004A4 NEXT 546.1 0004A4 3645 MOV @IP+,W // ; fetch word address into W 546.2 0004A6 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 546.3 0004A8 ENDM 547 0004A8 548 0004A8 ;C 1- n1/u1 -- n2/u2 subtract 1 from TOS 549 0004A8 HEADER ONEMINUS,2,'1-',DOCODE 549.1 000000 PUBLIC ONEMINUS 549.2 0004A8 .... DW link 549.3 0004AA FF DB 0FFh ; not immediate 549.4 0004AB link SET $ 549.5 0004AB 02 DB 2 549.6 0004AC 312D DB '1-' 549.7 0004AE EVEN 549.8 0004AE IF 'DOCODE'='DOCODE' 549.9 0004AE .... ONEMINUS: DW $+2 549.10 0004B0 ELSE 549.11 0004B0 ONEMINUS: DW DOCODE 549.12 0004B0 ENDIF 549.13 0004B0 ENDM 550 0004B0 1783 SUB #1,TOS 551 0004B2 NEXT 551.1 0004B2 3645 MOV @IP+,W // ; fetch word address into W 551.2 0004B4 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 551.3 0004B6 ENDM 552 0004B6 553 0004B6 ;Z >< x1 -- x2 swap bytes (not ANSI) 554 0004B6 HEADER SWAPBYTES,2,'><',DOCODE 554.1 000000 PUBLIC SWAPBYTES 554.2 0004B6 .... DW link 554.3 0004B8 FF DB 0FFh ; not immediate 554.4 0004B9 link SET $ 554.5 0004B9 02 DB 2 554.6 0004BA 3E3C DB '><' 554.7 0004BC EVEN 554.8 0004BC IF 'DOCODE'='DOCODE' 554.9 0004BC .... SWAPBYTES: DW $+2 554.10 0004BE ELSE 554.11 0004BE SWAPBYTES: DW DOCODE 554.12 0004BE ENDIF 554.13 0004BE ENDM 555 0004BE 8710 SWPB TOS 556 0004C0 NEXT 556.1 0004C0 3645 MOV @IP+,W // ; fetch word address into W 556.2 0004C2 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 556.3 0004C4 ENDM 557 0004C4 558 0004C4 ;C 2* x1 -- x2 arithmetic left shift 559 0004C4 HEADER TWOSTAR,2,'2*',DOCODE 559.1 000000 PUBLIC TWOSTAR 559.2 0004C4 .... DW link 559.3 0004C6 FF DB 0FFh ; not immediate 559.4 0004C7 link SET $ 559.5 0004C7 02 DB 2 559.6 0004C8 322A DB '2*' 559.7 0004CA EVEN 559.8 0004CA IF 'DOCODE'='DOCODE' 559.9 0004CA .... TWOSTAR: DW $+2 559.10 0004CC ELSE 559.11 0004CC TWOSTAR: DW DOCODE 559.12 0004CC ENDIF 559.13 0004CC ENDM 560 0004CC 0757 ADD TOS,TOS 561 0004CE NEXT 561.1 0004CE 3645 MOV @IP+,W // ; fetch word address into W 561.2 0004D0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 561.3 0004D2 ENDM - 4e-config - Page 54 562 0004D2 563 0004D2 ;C 2/ x1 -- x2 arithmetic right shift 564 0004D2 HEADER TWOSLASH,2,'2/',DOCODE 564.1 000000 PUBLIC TWOSLASH 564.2 0004D2 .... DW link 564.3 0004D4 FF DB 0FFh ; not immediate 564.4 0004D5 link SET $ 564.5 0004D5 02 DB 2 564.6 0004D6 322F DB '2/' 564.7 0004D8 EVEN 564.8 0004D8 IF 'DOCODE'='DOCODE' 564.9 0004D8 .... TWOSLASH: DW $+2 564.10 0004DA ELSE 564.11 0004DA TWOSLASH: DW DOCODE 564.12 0004DA ENDIF 564.13 0004DA ENDM 565 0004DA 0711 RRA TOS 566 0004DC NEXT 566.1 0004DC 3645 MOV @IP+,W // ; fetch word address into W 566.2 0004DE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 566.3 0004E0 ENDM 567 0004E0 568 0004E0 ;C LSHIFT x1 u -- x2 logical L shift u places 569 0004E0 HEADER LSHIFT,6,'LSHIFT',DOCODE 569.1 000000 PUBLIC LSHIFT 569.2 0004E0 .... DW link 569.3 0004E2 FF DB 0FFh ; not immediate 569.4 0004E3 link SET $ 569.5 0004E3 06 DB 6 569.6 0004E4 4C5348494654 DB 'LSHIFT' 569.7 0004EA EVEN 569.8 0004EA IF 'DOCODE'='DOCODE' 569.9 0004EA .... LSHIFT: DW $+2 569.10 0004EC ELSE 569.11 0004EC LSHIFT: DW DOCODE 569.12 0004EC ENDIF 569.13 0004EC ENDM 570 0004EC 3644 MOV @PSP+,W 571 0004EE 37F01F00 AND #1Fh,TOS ; no need to shift more than 16 572 0004F2 0324 JZ LSH_X 573 0004F4 0656 LSH_1: ADD W,W 574 0004F6 1783 SUB #1,TOS 575 0004F8 FD23 JNZ LSH_1 576 0004FA 0746 LSH_X: MOV W,TOS 577 0004FC NEXT 577.1 0004FC 3645 MOV @IP+,W // ; fetch word address into W 577.2 0004FE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 577.3 000500 ENDM 578 000500 579 000500 ;C RSHIFT x1 u -- x2 logical R shift u places 580 000500 HEADER RSHIFT,6,'RSHIFT',DOCODE 580.1 000000 PUBLIC RSHIFT 580.2 000500 .... DW link 580.3 000502 FF DB 0FFh ; not immediate 580.4 000503 link SET $ 580.5 000503 06 DB 6 580.6 000504 525348494654 DB 'RSHIFT' 580.7 00050A EVEN 580.8 00050A IF 'DOCODE'='DOCODE' 580.9 00050A .... RSHIFT: DW $+2 580.10 00050C ELSE 580.11 00050C RSHIFT: DW DOCODE 580.12 00050C ENDIF 580.13 00050C ENDM 581 00050C 3644 MOV @PSP+,W 582 00050E 37F01F00 AND #1Fh,TOS ; no need to shift more than 16 583 000512 0424 JZ RSH_X - 4e-config - Page 55 584 000514 12C3 RSH_1: CLRC 585 000516 0610 RRC W 586 000518 1783 SUB #1,TOS 587 00051A FC23 JNZ RSH_1 588 00051C 0746 RSH_X: MOV W,TOS 589 00051E NEXT 589.1 00051E 3645 MOV @IP+,W // ; fetch word address into W 589.2 000520 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 589.3 000522 ENDM 590 000522 591 000522 ; ---------------------------------------------- ------------------------ 592 000522 ; COMPARISON OPERATIONS 593 000522 594 000522 ;C 0= n/u -- flag return true if TOS=0 595 000522 HEADER ZEROEQUAL,2,'0=',DOCODE 595.1 000000 PUBLIC ZEROEQUAL 595.2 000522 .... DW link 595.3 000524 FF DB 0FFh ; not immediate 595.4 000525 link SET $ 595.5 000525 02 DB 2 595.6 000526 303D DB '0=' 595.7 000528 EVEN 595.8 000528 IF 'DOCODE'='DOCODE' 595.9 000528 .... ZEROEQUAL: DW $+2 595.10 00052A ELSE 595.11 00052A ZEROEQUAL: DW DOCODE 595.12 00052A ENDIF 595.13 00052A ENDM 596 00052A 1783 SUB #1,TOS ; borrow (clear cy) if TOS was 0 597 00052C 0777 SUBC TOS,TOS ; TOS=-1 if borrow was set 598 00052E NEXT 598.1 00052E 3645 MOV @IP+,W // ; fetch word address into W 598.2 000530 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 598.3 000532 ENDM 599 000532 600 000532 ;C 0< n -- flag true if TOS negative 601 000532 HEADER ZEROLESS,2,'0<',DOCODE 601.1 000000 PUBLIC ZEROLESS 601.2 000532 .... DW link 601.3 000534 FF DB 0FFh ; not immediate 601.4 000535 link SET $ 601.5 000535 02 DB 2 601.6 000536 303C DB '0<' 601.7 000538 EVEN 601.8 000538 IF 'DOCODE'='DOCODE' 601.9 000538 .... ZEROLESS: DW $+2 601.10 00053A ELSE 601.11 00053A ZEROLESS: DW DOCODE 601.12 00053A ENDIF 601.13 00053A ENDM 602 00053A 0757 ADD TOS,TOS ; set cy if TOS negative 603 00053C 0777 SUBC TOS,TOS ; TOS=-1 if carry was clear 604 00053E 37E3 XOR #-1,TOS ; TOS=-1 if carry was set 605 000540 NEXT 605.1 000540 3645 MOV @IP+,W // ; fetch word address into W 605.2 000542 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 605.3 000544 ENDM 606 000544 607 000544 ;C = x1 x2 -- flag test x1=x2 608 000544 HEADER EQUAL,1,'=',DOCODE 608.1 000000 PUBLIC EQUAL 608.2 000544 .... DW link 608.3 000546 FF DB 0FFh ; not immediate 608.4 000547 link SET $ - 4e-config - Page 56 608.5 000547 01 DB 1 608.6 000548 3D DB '=' 608.7 000549 00 EVEN 608.8 00054A IF 'DOCODE'='DOCODE' 608.9 00054A .... EQUAL: DW $+2 608.10 00054C ELSE 608.11 00054C EQUAL: DW DOCODE 608.12 00054C ENDIF 608.13 00054C ENDM 609 00054C 3644 MOV @PSP+,W 610 00054E 0687 SUB TOS,W ; x1-x2 in W, flags set 611 000550 1124 JZ TOSTRUE 612 000552 0743 TOSFALSE: MOV #0,TOS 613 000554 NEXT 613.1 000554 3645 MOV @IP+,W // ; fetch word address into W 613.2 000556 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 613.3 000558 ENDM 614 000558 615 000558 ;X <> x1 x2 -- flag test not eq (not ANSI) 616 000558 HEADER NOTEQUAL,2,'<>',DOCOLON 616.1 000000 PUBLIC NOTEQUAL 616.2 000558 .... DW link 616.3 00055A FF DB 0FFh ; not immediate 616.4 00055B link SET $ 616.5 00055B 02 DB 2 616.6 00055C 3C3E DB '<>' 616.7 00055E EVEN 616.8 00055E IF 'DOCOLON'='DOCODE' 616.9 00055E NOTEQUAL: DW $+2 616.10 00055E ELSE 616.11 00055E .... NOTEQUAL: DW DOCOLON 616.12 000560 ENDIF 616.13 000560 ENDM 617 000560 ............ DW EQUAL,ZEROEQUAL,EXIT 618 000566 619 000566 ;C < n1 n2 -- flag test n1 n1 n2 -- flag test n1>n2, signed 628 00057A HEADER GREATER,1,'>',DOCOLON 628.1 000000 PUBLIC GREATER 628.2 00057A .... DW link 628.3 00057C FF DB 0FFh ; not immediate 628.4 00057D link SET $ 628.5 00057D 01 DB 1 628.6 00057E 3E DB '>' 628.7 00057F 00 EVEN 628.8 000580 IF 'DOCOLON'='DOCODE' - 4e-config - Page 57 628.9 000580 GREATER: DW $+2 628.10 000580 ELSE 628.11 000580 .... GREATER: DW DOCOLON 628.12 000582 ENDIF 628.13 000582 ENDM 629 000582 ............ DW SWAP,LESS,EXIT 630 000588 631 000588 ;C U< u1 u2 -- flag test u1 u1 u2 -- flag u1>u2 unsgd (not ANSI) 639 000598 HEADER UGREATER,2,'U>',DOCOLON 639.1 000000 PUBLIC UGREATER 639.2 000598 .... DW link 639.3 00059A FF DB 0FFh ; not immediate 639.4 00059B link SET $ 639.5 00059B 02 DB 2 639.6 00059C 553E DB 'U>' 639.7 00059E EVEN 639.8 00059E IF 'DOCOLON'='DOCODE' 639.9 00059E UGREATER: DW $+2 639.10 00059E ELSE 639.11 00059E .... UGREATER: DW DOCOLON 639.12 0005A0 ENDIF 639.13 0005A0 ENDM 640 0005A0 ............ DW SWAP,ULESS,EXIT 641 0005A6 642 0005A6 ;C RLA n1 -- n2 f rotate left through carry, true if carry set 643 0005A6 HEADER RLAA,3,'RLA',DOCODE 643.1 000000 PUBLIC RLAA 643.2 0005A6 .... DW link 643.3 0005A8 FF DB 0FFh ; not immediate 643.4 0005A9 link SET $ 643.5 0005A9 03 DB 3 643.6 0005AA 524C41 DB 'RLA' 643.7 0005AD 00 EVEN 643.8 0005AE IF 'DOCODE'='DOCODE' 643.9 0005AE .... RLAA: DW $+2 643.10 0005B0 ELSE 643.11 0005B0 RLAA: DW DOCODE 643.12 0005B0 ENDIF 643.13 0005B0 ENDM 644 0005B0 0757 RLA TOS ; shift left 645 0005B2 0212 PUSH SR 646 0005B4 2483 SUB #2,PSP ; 1 push old TOS.. 647 0005B6 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 648 0005BA 3241 POP SR 649 0005BC DB2F JC TOSTRUE 650 0005BE C93F JMP TOSFALSE 651 0005C0 652 0005C0 653 0005C0 654 0005C0 ; ---------------------------------------------- ------------------------ 655 0005C0 ; LOOP AND BRANCH OPERATIONS 656 0005C0 ; These use relative branch addresses: a branch - 4e-config - Page 58 is ADD @IP,IP 657 0005C0 658 0005C0 ;Z branch -- branch always 659 0005C0 HEADER bran,6,'branch',DOCODE 659.1 000000 PUBLIC bran 659.2 0005C0 .... DW link 659.3 0005C2 FF DB 0FFh ; not immediate 659.4 0005C3 link SET $ 659.5 0005C3 06 DB 6 659.6 0005C4 6272616E6368 DB 'branch' 659.7 0005CA EVEN 659.8 0005CA IF 'DOCODE'='DOCODE' 659.9 0005CA .... bran: DW $+2 659.10 0005CC ELSE 659.11 0005CC bran: DW DOCODE 659.12 0005CC ENDIF 659.13 0005CC ENDM 660 0005CC 2555 dobran: ADD @IP,IP ; 2 661 0005CE NEXT ; 4 661.1 0005CE 3645 MOV @IP+,W // ; fetch word address into W 661.2 0005D0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 661.3 0005D2 ENDM 662 0005D2 663 0005D2 ;Z ?branch x -- branch if TOS zero 664 0005D2 HEADER qbran,7,'?branch',DOCODE 664.1 000000 PUBLIC qbran 664.2 0005D2 .... DW link 664.3 0005D4 FF DB 0FFh ; not immediate 664.4 0005D5 link SET $ 664.5 0005D5 07 DB 7 664.6 0005D6 3F6272616E63* DB '?branch' 664.7 0005DD 00 EVEN 664.8 0005DE IF 'DOCODE'='DOCODE' 664.9 0005DE .... qbran: DW $+2 664.10 0005E0 ELSE 664.11 0005E0 qbran: DW DOCODE 664.12 0005E0 ENDIF 664.13 0005E0 ENDM 665 0005E0 0753 ADD #0,TOS ; 1 test TOS value 666 0005E2 3744 MOV @PSP+,TOS ; 2 pop new TOS value (doesn't change flags) 667 0005E4 F327 JZ dobran ; 2 if TOS was zero, take the branch 668 0005E6 2553 ADD #2,IP ; 1 else skip the branch destination 669 0005E8 NEXT ; 4 669.1 0005E8 3645 MOV @IP+,W // ; fetch word address into W 669.2 0005EA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 669.3 0005EC ENDM 670 0005EC 671 0005EC ;Z (do) n1|u1 n2|u2 -- R: -- sys1 sys2 run-time code for DO 672 0005EC ; '83 and ANSI standard loops terminate when the boundary of 673 0005EC ; limit-1 and limit is crossed, in either direction. This can 674 0005EC ; be conveniently implemented by making the limit 8000h, so that 675 0005EC ; arithmetic overflow logic can detect crossing. I learned this 676 0005EC ; trick from Laxen & Perry F83. 677 0005EC ; fudge factor = 8000h-limit, to be added to the start value. 678 0005EC HEADER xdo,4,'(do)',DOCODE 678.1 000000 PUBLIC xdo 678.2 0005EC .... DW link 678.3 0005EE FF DB 0FFh ; not immediate 678.4 0005EF link SET $ 678.5 0005EF 04 DB 4 678.6 0005F0 28646F29 DB '(do)' 678.7 0005F4 EVEN - 4e-config - Page 59 678.8 0005F4 IF 'DOCODE'='DOCODE' 678.9 0005F4 .... xdo: DW $+2 678.10 0005F6 ELSE 678.11 0005F6 xdo: DW DOCODE 678.12 0005F6 ENDIF 678.13 0005F6 ENDM 679 0005F6 2182 SUB #4,RSP ; push old loop values on return stack 680 0005F8 81490200 MOV LIMIT,2(RSP) 681 0005FC 81480000 MOV INDEX,0(RSP) 682 000600 39400080 MOV #8000h,LIMIT ; compute 8000h-limit "fudge factor" 683 000604 3984 SUB @PSP+,LIMIT 684 000606 0847 MOV TOS,INDEX ; loop ctr = index+fudge 685 000608 0859 ADD LIMIT,INDEX 686 00060A 3744 MOV @PSP+,TOS ; pop new TOS 687 00060C NEXT 687.1 00060C 3645 MOV @IP+,W // ; fetch word address into W 687.2 00060E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 687.3 000610 ENDM 688 000610 689 000610 ;Z (loop) R: sys1 sys2 -- | sys1 sys2 run-time code for LOOP 690 000610 ; Add 1 to the loop index. If loop terminates, clean up the 691 000610 ; return stack and skip the branch. Else take the inline branch. 692 000610 ; Note that LOOP terminates when index=8000h. 693 000610 HEADER xloop,6,'(loop)',DOCODE 693.1 000000 PUBLIC xloop 693.2 000610 .... DW link 693.3 000612 FF DB 0FFh ; not immediate 693.4 000613 link SET $ 693.5 000613 06 DB 6 693.6 000614 286C6F6F7029 DB '(loop)' 693.7 00061A EVEN 693.8 00061A IF 'DOCODE'='DOCODE' 693.9 00061A .... xloop: DW $+2 693.10 00061C ELSE 693.11 00061C xloop: DW DOCODE 693.12 00061C ENDIF 693.13 00061C ENDM 694 00061C 1853 ADD #1,INDEX 695 00061E 32B00001 BIT #100h,SR ; is overflow bit set? 696 000622 D427 JZ dobran ; no overflow = loop 697 000624 2553 ADD #2,IP ; overflow = loop done, skip branch ofs 698 000626 3841 MOV @RSP+,INDEX ; restore old loop values 699 000628 3941 MOV @RSP+,LIMIT 700 00062A NEXT 700.1 00062A 3645 MOV @IP+,W // ; fetch word address into W 700.2 00062C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 700.3 00062E ENDM 701 00062E 702 00062E ;Z (+loop) n -- R: sys1 sys2 -- | sys1 sys2 run-time code for +LOOP 703 00062E ; Add n to the loop index. If loop terminates, clean up the 704 00062E ; return stack and skip the branch. Else take the inline branch. 705 00062E HEADER xplusloop,7,'(+loop)',DOCODE 705.1 000000 PUBLIC xplusloop 705.2 00062E .... DW link 705.3 000630 FF DB 0FFh ; not immediate - 4e-config - Page 60 705.4 000631 link SET $ 705.5 000631 07 DB 7 705.6 000632 282B6C6F6F70* DB '(+loop)' 705.7 000639 00 EVEN 705.8 00063A IF 'DOCODE'='DOCODE' 705.9 00063A .... xplusloop: DW $+2 705.10 00063C ELSE 705.11 00063C xplusloop: DW DOCODE 705.12 00063C ENDIF 705.13 00063C ENDM 706 00063C 0857 ADD TOS,INDEX 707 00063E 3744 MOV @PSP+,TOS ; get new TOS, doesn't change flags 708 000640 32B00001 BIT #100h,SR ; is overflow bit set? 709 000644 C327 JZ dobran ; no overflow = loop 710 000646 2553 ADD #2,IP ; overflow = loop done, skip branch ofs 711 000648 3841 MOV @RSP+,INDEX ; restore old loop values 712 00064A 3941 MOV @RSP+,LIMIT 713 00064C NEXT 713.1 00064C 3645 MOV @IP+,W // ; fetch word address into W 713.2 00064E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 713.3 000650 ENDM 714 000650 715 000650 ;C I -- n R: sys1 sys2 -- sys1 sys2 get the innermost loop index 716 000650 HEADER II,1,'I',DOCODE 716.1 000000 PUBLIC II 716.2 000650 .... DW link 716.3 000652 FF DB 0FFh ; not immediate 716.4 000653 link SET $ 716.5 000653 01 DB 1 716.6 000654 49 DB 'I' 716.7 000655 00 EVEN 716.8 000656 IF 'DOCODE'='DOCODE' 716.9 000656 .... II: DW $+2 716.10 000658 ELSE 716.11 000658 II: DW DOCODE 716.12 000658 ENDIF 716.13 000658 ENDM 717 000658 2483 SUB #2,PSP ; make room in TOS 718 00065A 84470000 MOV TOS,0(PSP) 719 00065E 0748 MOV INDEX,TOS ; index = loopctr - fudge 720 000660 0789 SUB LIMIT,TOS 721 000662 NEXT 721.1 000662 3645 MOV @IP+,W // ; fetch word address into W 721.2 000664 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 721.3 000666 ENDM 722 000666 723 000666 ;C J -- n R: 4*sys -- 4*sys get the second loop index 724 000666 HEADER JJ,1,'J',DOCODE 724.1 000000 PUBLIC JJ 724.2 000666 .... DW link 724.3 000668 FF DB 0FFh ; not immediate 724.4 000669 link SET $ 724.5 000669 01 DB 1 724.6 00066A 4A DB 'J' 724.7 00066B 00 EVEN 724.8 00066C IF 'DOCODE'='DOCODE' 724.9 00066C .... JJ: DW $+2 724.10 00066E ELSE 724.11 00066E JJ: DW DOCODE 724.12 00066E ENDIF 724.13 00066E ENDM 725 00066E 2483 SUB #2,PSP ; make room in - 4e-config - Page 61 TOS 726 000670 84470000 MOV TOS,0(PSP) 727 000674 2741 MOV @RSP,TOS ; index = loopctr - fudge 728 000676 17810200 SUB 2(RSP),TOS 729 00067A NEXT 729.1 00067A 3645 MOV @IP+,W // ; fetch word address into W 729.2 00067C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 729.3 00067E ENDM 730 00067E 731 00067E ;C UNLOOP -- R: sys1 sys2 -- drop loop parms 732 00067E HEADER UNLOOP,6,'UNLOOP',DOCODE 732.1 000000 PUBLIC UNLOOP 732.2 00067E .... DW link 732.3 000680 FF DB 0FFh ; not immediate 732.4 000681 link SET $ 732.5 000681 06 DB 6 732.6 000682 554E4C4F4F50 DB 'UNLOOP' 732.7 000688 EVEN 732.8 000688 IF 'DOCODE'='DOCODE' 732.9 000688 .... UNLOOP: DW $+2 732.10 00068A ELSE 732.11 00068A UNLOOP: DW DOCODE 732.12 00068A ENDIF 732.13 00068A ENDM 733 00068A 3841 MOV @RSP+,INDEX ; restore old loop values 734 00068C 3941 MOV @RSP+,LIMIT 735 00068E NEXT 735.1 00068E 3645 MOV @IP+,W // ; fetch word address into W 735.2 000690 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 735.3 000692 ENDM 736 000692 737 000692 ; ---------------------------------------------- ------------------------ 738 000692 ; MULTIPLY AND DIVIDE 739 000692 740 000692 ;C UM* u1 u2 -- ud unsigned 16x16->32 mult. 741 000692 HEADER UMSTAR,3,'UM*',DOCODE 741.1 000000 PUBLIC UMSTAR 741.2 000692 .... DW link 741.3 000694 FF DB 0FFh ; not immediate 741.4 000695 link SET $ 741.5 000695 03 DB 3 741.6 000696 554D2A DB 'UM*' 741.7 000699 00 EVEN 741.8 00069A IF 'DOCODE'='DOCODE' 741.9 00069A .... UMSTAR: DW $+2 741.10 00069C ELSE 741.11 00069C UMSTAR: DW DOCODE 741.12 00069C ENDIF 741.13 00069C ENDM 742 00069C ; IROP1 = TOS register 743 00069C 2A44 MOV @PSP,IROP2L ; get u1, leave room on stack 744 00069E ; 745 00069E ; T.I. SIGNED MULTIPLY SUBROUTINE: IROP1 x IROP2L -> IRACM|IRACL 746 00069E 0C43 MPYU: CLR IRACL ; 0 -> LSBs RESULT 747 0006A0 0D43 CLR IRACM ; 0 -> MSBs RESULT 748 0006A2 ; UNSIGNED MULTIPLY AND ACCUMULATE SUBROUTINE: 749 0006A2 ; (IROP1 x IROP2L) + IRACM|IRACL -> IRACM|IRACL 750 0006A2 0B43 MACU: CLR IROP2M ; MSBs MULTIPLIER 751 0006A4 1643 MOV #1,IRBT ; BIT TEST REGISTER 752 0006A6 07B6 L$002: BIT IRBT,IROP1 ; TEST ACTUAL BIT 753 0006A8 0224 JZ L$01 ; IF 0: DO NOTHING 754 0006AA 0C5A ADD IROP2L,IRACL ; IF 1: ADD MULTIPLIER TO RESULT 755 0006AC 0D6B ADDC IROP2M,IRACM 756 0006AE 0A5A L$01: RLA IROP2L ; MULTIPLIER x 2 - 4e-config - Page 62 757 0006B0 0B6B RLC IROP2M 758 0006B2 ; 759 0006B2 0656 RLA IRBT ; NEXT BIT TO TEST 760 0006B4 F82B JNC L$002 ; IF BIT IN CARRY: FINISHED 761 0006B6 ; END T.I. ROUTINE section 5.1.1 of MSP430 Family Application Reports 762 0006B6 844C0000 MOV IRACL,0(PSP) ; low result on stack 763 0006BA 074D MOV IRACM,TOS ; high result in TOS 764 0006BC NEXT 764.1 0006BC 3645 MOV @IP+,W // ; fetch word address into W 764.2 0006BE 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 764.3 0006C0 ENDM 765 0006C0 766 0006C0 ;C UM/MOD ud u1 -- u2 u3 unsigned 32/16->16 767 0006C0 HEADER UMSLASHMOD,6,'UM/MOD',DOCODE 767.1 000000 PUBLIC UMSLASHMOD 767.2 0006C0 .... DW link 767.3 0006C2 FF DB 0FFh ; not immediate 767.4 0006C3 link SET $ 767.5 0006C3 06 DB 6 767.6 0006C4 554D2F4D4F44 DB 'UM/MOD' 767.7 0006CA EVEN 767.8 0006CA IF 'DOCODE'='DOCODE' 767.9 0006CA .... UMSLASHMOD: DW $+2 767.10 0006CC ELSE 767.11 0006CC UMSLASHMOD: DW DOCODE 767.12 0006CC ENDIF 767.13 0006CC ENDM 768 0006CC ; IROP1 = TOS register 769 0006CC 3B44 MOV @PSP+,IROP2M ; get ud hi 770 0006CE 2A44 MOV @PSP,IROP2L ; get ud lo, leave room on stack 771 0006D0 ; 772 0006D0 ; T.I. UNSIGNED DIVISION SUBROUTINE 32-BIT BY 16-BIT 773 0006D0 ; IROP2M|IROP2L : IROP1 -> IRACL REMAINDER IN IROP2M 774 0006D0 ; RETURN: CARRY = 0: OK CARRY = 1: QUOTIENT > 16 BITS 775 0006D0 0C43 DIVIDE: CLR IRACL ; CLEAR RESULT 776 0006D2 36401100 MOV #17,IRBT ; INITIALIZE LOOP COUNTER 777 0006D6 0B97 DIV1: CMP IROP1,IROP2M ; 778 0006D8 0128 JLO DIV2 779 0006DA 0B87 SUB IROP1,IROP2M 780 0006DC 0C6C DIV2: RLC IRACL 781 0006DE 092C JC DIV4 ; Error: result > 16 bits 782 0006E0 1683 DEC IRBT ; Decrement loop counter 783 0006E2 0624 JZ DIV3 ; Is 0: terminate w/o error 784 0006E4 0A5A RLA IROP2L 785 0006E6 0B6B RLC IROP2M 786 0006E8 F62B JNC DIV1 787 0006EA 0B87 SUB IROP1,IROP2M 788 0006EC 12D3 SETC 789 0006EE F63F JMP DIV2 790 0006F0 12C3 DIV3: CLRC ; No error, C = 0 791 0006F2 DIV4: ; Error indication in C 792 0006F2 ; END T.I. ROUTINE Section 5.1.5 of MSP430 Family Application Reports 793 0006F2 844B0000 MOV IROP2M,0(PSP) ; remainder on stack 794 0006F6 074C MOV IRACL,TOS ; quotient in TOS 795 0006F8 NEXT 795.1 0006F8 3645 MOV @IP+,W // ; fetch word address into W 795.2 0006FA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 795.3 0006FC ENDM - 4e-config - Page 63 796 0006FC 797 0006FC ; ---------------------------------------------- ------------------------ 798 0006FC ; BLOCK AND STRING OPERATIONS 799 0006FC 800 0006FC ;C FILL c-addr u char -- fill memory with char 801 0006FC HEADER FILL,4,'FILL',DOCODE 801.1 000000 PUBLIC FILL 801.2 0006FC .... DW link 801.3 0006FE FF DB 0FFh ; not immediate 801.4 0006FF link SET $ 801.5 0006FF 04 DB 4 801.6 000700 46494C4C DB 'FILL' 801.7 000704 EVEN 801.8 000704 IF 'DOCODE'='DOCODE' 801.9 000704 .... FILL: DW $+2 801.10 000706 ELSE 801.11 000706 FILL: DW DOCODE 801.12 000706 ENDIF 801.13 000706 ENDM 802 000706 3A44 MOV @PSP+,X ; count 803 000708 3644 MOV @PSP+,W ; address 804 00070A 0A93 CMP #0,X 805 00070C 0524 JZ FILL_X 806 00070E C6470000 FILL_1: MOV.B TOS,0(W) ; store char in memory 807 000712 1653 ADD #1,W 808 000714 1A83 SUB #1,X 809 000716 FB23 JNZ FILL_1 810 000718 3744 FILL_X: MOV @PSP+,TOS ; pop new TOS 811 00071A NEXT 811.1 00071A 3645 MOV @IP+,W // ; fetch word address into W 811.2 00071C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 811.3 00071E ENDM 812 00071E 813 00071E ;X CMOVE c-addr1 c-addr2 u -- move from bottom 814 00071E ; as defined in the ANSI optional String word set 815 00071E ; On byte machines, CMOVE and CMOVE> are logical 816 00071E ; factors of MOVE. They are easy to implement on 817 00071E ; CPUs which have a block-move instruction. 818 00071E HEADER CMOVE,5,'CMOVE',DOCODE 818.1 000000 PUBLIC CMOVE 818.2 00071E .... DW link 818.3 000720 FF DB 0FFh ; not immediate 818.4 000721 link SET $ 818.5 000721 05 DB 5 818.6 000722 434D4F5645 DB 'CMOVE' 818.7 000727 00 EVEN 818.8 000728 IF 'DOCODE'='DOCODE' 818.9 000728 .... CMOVE: DW $+2 818.10 00072A ELSE 818.11 00072A CMOVE: DW DOCODE 818.12 00072A ENDIF 818.13 00072A ENDM 819 00072A 3644 MOV @PSP+,W ; dest adrs 820 00072C 3A44 MOV @PSP+,X ; src adrs 821 00072E 0793 CMP #0,TOS 822 000730 0524 JZ CMOVE_X 823 000732 F64A0000 CMOVE_1: MOV.B @X+,0(W) ; copy byte 824 000736 1653 ADD #1,W 825 000738 1783 SUB #1,TOS 826 00073A FB23 JNZ CMOVE_1 827 00073C 3744 CMOVE_X: MOV @PSP+,TOS ; pop new TOS 828 00073E NEXT 828.1 00073E 3645 MOV @IP+,W // ; fetch word address into W 828.2 000740 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 828.3 000742 ENDM 829 000742 830 000742 ;X CMOVE> c-addr1 c-addr2 u -- move from - 4e-config - Page 64 top 831 000742 ; as defined in the ANSI optional String word set 832 000742 HEADER CMOVEUP,6,'CMOVE>',DOCODE 832.1 000000 PUBLIC CMOVEUP 832.2 000742 .... DW link 832.3 000744 FF DB 0FFh ; not immediate 832.4 000745 link SET $ 832.5 000745 06 DB 6 832.6 000746 434D4F56453E DB 'CMOVE>' 832.7 00074C EVEN 832.8 00074C IF 'DOCODE'='DOCODE' 832.9 00074C .... CMOVEUP: DW $+2 832.10 00074E ELSE 832.11 00074E CMOVEUP: DW DOCODE 832.12 00074E ENDIF 832.13 00074E ENDM 833 00074E 3644 MOV @PSP+,W ; dest adrs 834 000750 3A44 MOV @PSP+,X ; src adrs 835 000752 0793 CMP #0,TOS 836 000754 0824 JZ CMOVU_X 837 000756 0657 ADD TOS,W ; start at end 838 000758 0A57 ADD TOS,X 839 00075A 1A83 CMOVU_1: SUB #1,X 840 00075C 1683 SUB #1,W 841 00075E E64A0000 MOV.B @X,0(W) ; copy byte 842 000762 1783 SUB #1,TOS 843 000764 FA23 JNZ CMOVU_1 844 000766 3744 CMOVU_X: MOV @PSP+,TOS ; pop new TOS 845 000768 NEXT 845.1 000768 3645 MOV @IP+,W // ; fetch word address into W 845.2 00076A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 845.3 00076C ENDM 846 00076C 847 00076C ;Z I->D c-addr1 c-addr2 u -- move Code->Data 848 00076C ; Block move from Code space to Data space. 849 00076C ; On the MSP430, this is the same as CMOVE. 850 00076C HEADER ITOD,4,'I->D',CMOVE+2 850.1 000000 PUBLIC ITOD 850.2 00076C .... DW link 850.3 00076E FF DB 0FFh ; not immediate 850.4 00076F link SET $ 850.5 00076F 04 DB 4 850.6 000770 492D3E44 DB 'I->D' 850.7 000774 EVEN 850.8 000774 IF 'CMOVE+2'='DOCODE' 850.9 000774 ITOD: DW $+2 850.10 000774 ELSE 850.11 000774 .... ITOD: DW CMOVE+2 850.12 000776 ENDIF 850.13 000776 ENDM 851 000776 852 000776 ;Z SKIP c-addr u c -- c-addr' u' skip matching chars 853 000776 ; Although SKIP, SCAN, and S= are perhaps not the ideal factors 854 000776 ; of WORD and FIND, they closely follow the string operations 855 000776 ; available on many CPUs, and so are easy to implement and fast. 856 000776 HEADER SKIP,4,'SKIP',DOCODE 856.1 000000 PUBLIC SKIP 856.2 000776 .... DW link 856.3 000778 FF DB 0FFh ; not immediate 856.4 000779 link SET $ 856.5 000779 04 DB 4 856.6 00077A 534B4950 DB 'SKIP' 856.7 00077E EVEN 856.8 00077E IF 'DOCODE'='DOCODE' 856.9 00077E .... SKIP: DW $+2 856.10 000780 ELSE 856.11 000780 SKIP: DW DOCODE 856.12 000780 ENDIF 856.13 000780 ENDM - 4e-config - Page 65 857 000780 3A44 MOV @PSP+,X ; get count 858 000782 2644 MOV @PSP,W ; get address, leave space on stack 859 000784 0A93 CMP #0,X 860 000786 0524 JZ SKIP_X 861 000788 6796 SKIP_1: CMP.B @W,TOS ; does character match? 862 00078A 0320 JNZ SKIP_X ; no, we are done 863 00078C 1653 ADD #1,W 864 00078E 1A83 SUB #1,X 865 000790 FB23 JNZ SKIP_1 866 000792 84460000 SKIP_X: MOV W,0(PSP) ; store updated address on stack 867 000796 074A MOV X,TOS ; updated count to TOS 868 000798 NEXT 868.1 000798 3645 MOV @IP+,W // ; fetch word address into W 868.2 00079A 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 868.3 00079C ENDM 869 00079C 870 00079C ;Z SCAN c-addr u c -- c-addr' u' find matching char 871 00079C HEADER SCAN,4,'SCAN',DOCODE 871.1 000000 PUBLIC SCAN 871.2 00079C .... DW link 871.3 00079E FF DB 0FFh ; not immediate 871.4 00079F link SET $ 871.5 00079F 04 DB 4 871.6 0007A0 5343414E DB 'SCAN' 871.7 0007A4 EVEN 871.8 0007A4 IF 'DOCODE'='DOCODE' 871.9 0007A4 .... SCAN: DW $+2 871.10 0007A6 ELSE 871.11 0007A6 SCAN: DW DOCODE 871.12 0007A6 ENDIF 871.13 0007A6 ENDM 872 0007A6 3A44 MOV @PSP+,X ; get count 873 0007A8 2644 MOV @PSP,W ; get address, leave space on stack 874 0007AA 0A93 CMP #0,X 875 0007AC 0524 JZ SCAN_X 876 0007AE 6796 SCAN_1: CMP.B @W,TOS ; does character match? 877 0007B0 0324 JZ SCAN_X ; yes, we are done 878 0007B2 1653 ADD #1,W 879 0007B4 1A83 SUB #1,X 880 0007B6 FB23 JNZ SCAN_1 881 0007B8 84460000 SCAN_X: MOV W,0(PSP) ; store updated address on stack 882 0007BC 074A MOV X,TOS ; updated count to TOS 883 0007BE NEXT 883.1 0007BE 3645 MOV @IP+,W // ; fetch word address into W 883.2 0007C0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 883.3 0007C2 ENDM 884 0007C2 885 0007C2 ;Z S= c-addr1 c-addr2 u -- n string compare 886 0007C2 ;Z S= n<0: s10: s1>s2 887 0007C2 HEADER SEQUAL,2,'S=',DOCODE 887.1 000000 PUBLIC SEQUAL 887.2 0007C2 .... DW link 887.3 0007C4 FF DB 0FFh ; not immediate 887.4 0007C5 link SET $ 887.5 0007C5 02 DB 2 887.6 0007C6 533D DB 'S=' 887.7 0007C8 EVEN 887.8 0007C8 IF 'DOCODE'='DOCODE' 887.9 0007C8 .... SEQUAL: DW $+2 887.10 0007CA ELSE - 4e-config - Page 66 887.11 0007CA SEQUAL: DW DOCODE 887.12 0007CA ENDIF 887.13 0007CA ENDM 888 0007CA 3644 MOV @PSP+,W ; adrs2 889 0007CC 3A44 MOV @PSP+,X ; adrs1 890 0007CE 0793 CMP #0,TOS 891 0007D0 0A24 JZ SEQU_X 892 0007D2 FA960000 SEQU_1: CMP.B @W+,0(X) ; compare char1-char 2 893 0007D6 0420 JNZ SMISMATCH 894 0007D8 1A53 ADD #1,X 895 0007DA 1783 SUB #1,TOS 896 0007DC FA23 JNZ SEQU_1 897 0007DE ; no mismatch found, strings are equal, TOS=0 898 0007DE 033C JMP SEQU_X 899 0007E0 ; mismatch found, CY clear if borrow set (s10: s1>s2 907 0007EA ; For Harvard model, c-addr1 is Data, c-addr2 is Header. 908 0007EA ; On MSP430, both use the same fetch instruction , so N= is the same as S=. 909 0007EA HEADER NEQUAL,2,'N=',SEQUAL+2 909.1 000000 PUBLIC NEQUAL 909.2 0007EA .... DW link 909.3 0007EC FF DB 0FFh ; not immediate 909.4 0007ED link SET $ 909.5 0007ED 02 DB 2 909.6 0007EE 4E3D DB 'N=' 909.7 0007F0 EVEN 909.8 0007F0 IF 'SEQUAL+2'='DOCODE' 909.9 0007F0 NEQUAL: DW $+2 909.10 0007F0 ELSE 909.11 0007F0 .... NEQUAL: DW SEQUAL+2 909.12 0007F2 ENDIF 909.13 0007F2 ENDM 910 0007F2 911 0007F2 ; ---------------------------------------------- ------------------------ 912 0007F2 ; TERMINAL I/O 913 0007F2 914 000000 PUBLIC DOKEY,DOEMIT 915 0007F2 916 0007F2 /* 917 0007F2 ;C EMIT c -- output character to console; core routine 918 0007F2 HEADER EMIT,4,'EMIT',DOCODE 919 0007F2 EMITLOOP: 920 0007F2 BIT.B #UCA0TXIFG,&IFG2 921 0007F2 JZ EMITLOOP 922 0007F2 MOV.B TOS,&UCA0TXBUF 923 0007F2 MOV @PSP+,TOS 924 0007F2 NEXT 925 0007F2 926 0007F2 ;C KEY -- c get character from keyboard; core routine 927 0007F2 HEADER KEY,3,'KEY',DOCODE 928 0007F2 KEYLOOP: 929 0007F2 BIT.B #UCA0RXIFG,&IFG2 930 0007F2 JZ KEYLOOP 931 0007F2 SUB #2,PSP ; 1 push old - 4e-config - Page 67 TOS.. 932 0007F2 MOV TOS,0(PSP) ; 4 ..onto stack 933 0007F2 MOV.B &UCA0RXBUF,TOS ; read character into TOS 934 0007F2 donoop1: 935 0007F2 donext1: NEXT 936 0007F2 */ 937 0007F2 938 0007F2 ;C (EMIT) c -- output character to console; core routine 939 0007F2 HEADER DOEMIT,6,'(EMIT)',DOCODE 939.1 0007F2 PUBLIC DOEMIT 939.2 0007F2 .... DW link 939.3 0007F4 FF DB 0FFh ; not immediate 939.4 0007F5 link SET $ 939.5 0007F5 06 DB 6 939.6 0007F6 28454D495429 DB '(EMIT)' 939.7 0007FC EVEN 939.8 0007FC IF 'DOCODE'='DOCODE' 939.9 0007FC .... DOEMIT: DW $+2 939.10 0007FE ELSE 939.11 0007FE DOEMIT: DW DOCODE 939.12 0007FE ENDIF 939.13 0007FE ENDM 940 0007FE EMITLOOPx: 941 0007FE E2B30300 BIT.B #UCA0TXIFG,&IFG2 942 000802 FD27 JZ EMITLOOPx 943 000804 C2476700 MOV.B TOS,&UCA0TXBUF 944 000808 3744 MOV @PSP+,TOS 945 00080A NEXT 945.1 00080A 3645 MOV @IP+,W // ; fetch word address into W 945.2 00080C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 945.3 00080E ENDM 946 00080E 947 00080E ;C (KEY) -- c get character from keyboard; core routine 948 00080E HEADER DOKEY,5,'(KEY)',DOCODE 948.1 00080E PUBLIC DOKEY 948.2 00080E .... DW link 948.3 000810 FF DB 0FFh ; not immediate 948.4 000811 link SET $ 948.5 000811 05 DB 5 948.6 000812 284B455929 DB '(KEY)' 948.7 000817 00 EVEN 948.8 000818 IF 'DOCODE'='DOCODE' 948.9 000818 .... DOKEY: DW $+2 948.10 00081A ELSE 948.11 00081A DOKEY: DW DOCODE 948.12 00081A ENDIF 948.13 00081A ENDM 949 00081A KEYLOOPx: 950 00081A D2B30300 BIT.B #UCA0RXIFG,&IFG2 951 00081E FD27 JZ KEYLOOPx 952 000820 2483 SUB #2,PSP ; 1 push old TOS.. 953 000822 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 954 000826 57426600 MOV.B &UCA0RXBUF,TOS ; read character into TOS 955 00082A donoop: 956 00082A donext: NEXT 956.1 00082A 3645 MOV @IP+,W // ; fetch word address into W 956.2 00082C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 956.3 00082E ENDM 957 00082E 958 00082E 959 00082E ;C KEY -- c get character from keyboard; vectored 960 00082E HEADER KEY,3,'KEY',DOCOLON 960.1 000000 PUBLIC KEY 960.2 00082E .... DW link - 4e-config - Page 68 960.3 000830 FF DB 0FFh ; not immediate 960.4 000831 link SET $ 960.5 000831 03 DB 3 960.6 000832 4B4559 DB 'KEY' 960.7 000835 00 EVEN 960.8 000836 IF 'DOCOLON'='DOCODE' 960.9 000836 KEY: DW $+2 960.10 000836 ELSE 960.11 000836 .... KEY: DW DOCOLON 960.12 000838 ENDIF 960.13 000838 ENDM 961 000838 ............* DW USERKEY,FETCH,EXECUTE,EXIT 962 000840 963 000840 ;C EMIT c -- output character to console; vectored 964 000840 HEADER EMIT,4,'EMIT',DOCOLON 964.1 000000 PUBLIC EMIT 964.2 000840 .... DW link 964.3 000842 FF DB 0FFh ; not immediate 964.4 000843 link SET $ 964.5 000843 04 DB 4 964.6 000844 454D4954 DB 'EMIT' 964.7 000848 EVEN 964.8 000848 IF 'DOCOLON'='DOCODE' 964.9 000848 EMIT: DW $+2 964.10 000848 ELSE 964.11 000848 .... EMIT: DW DOCOLON 964.12 00084A ENDIF 964.13 00084A ENDM 965 00084A ............* DW USEREMIT,FETCH,EXECUTE,EXIT 966 000852 967 000852 ;X KEY? -- f return true if char waiting 968 000852 HEADER KEYQ,4,'KEY?',DOCODE 968.1 000000 PUBLIC KEYQ 968.2 000852 .... DW link 968.3 000854 FF DB 0FFh ; not immediate 968.4 000855 link SET $ 968.5 000855 04 DB 4 968.6 000856 4B45593F DB 'KEY?' 968.7 00085A EVEN 968.8 00085A IF 'DOCODE'='DOCODE' 968.9 00085A .... KEYQ: DW $+2 968.10 00085C ELSE 968.11 00085C KEYQ: DW DOCODE 968.12 00085C ENDIF 968.13 00085C ENDM 969 00085C 2483 SUB #2,PSP ; 1 push old TOS.. 970 00085E 84470000 MOV TOS,0(PSP) ; 4 ..onto stack 971 000862 D2B30300 BIT.B #UCA0RXIFG,&IFG2 972 000866 8622 JNZ TOSTRUE 973 000868 743E JMP TOSFALSE 974 00086A 975 00086A ;X ZERO -- 0 put zero on stack. Often usesd word. 976 00086A HEADER ZERO,4,'ZERO',DOCON 976.1 000000 PUBLIC ZERO 976.2 00086A .... DW link 976.3 00086C FF DB 0FFh ; not immediate 976.4 00086D link SET $ 976.5 00086D 04 DB 4 976.6 00086E 5A45524F DB 'ZERO' 976.7 000872 EVEN 976.8 000872 IF 'DOCON'='DOCODE' 976.9 000872 ZERO: DW $+2 976.10 000872 ELSE 976.11 000872 .... ZERO: DW DOCON 976.12 000874 ENDIF 976.13 000874 ENDM 977 000874 0000 DW 0 978 000876 979 000876 ; ---------------------------------------------- ------------------------ 980 000876 981 000876 /* 982 000876 ; DEBUG FORTH EXECUTION - 4e-config - Page 69 983 000876 ; debug serieal 984 000876 PUBLIC DEBUGIP 985 000876 DEBUGIP: 986 000876 ; DW DOTID 987 000876 DEBUG1: 988 000876 ; DW TASK 989 000876 DW KEY ; 1@A0 test 1=rot,@=grün,A=beide,0=a us 990 000876 DW DUP ;,DOTS,CR 991 000876 DW STORELEDS 992 000876 ; DW COLD 993 000876 DW EMIT 994 000876 DW lit,0,qbran 995 000876 DW DEBUG1-$ 996 000876 DW bran,-2 997 000876 998 000876 /* 999 000876 ; debugging only 1000 000876 HEADLESS CREATE,DOCOLON 1001 000876 HEADLESS ALLOT,DOCOLON 1002 000876 HEADLESS BUILDS,DOCOLON 1003 000876 HEADLESS ICOMMA,DOCOLON 1004 000876 HEADLESS XDOES,DOCOLON 1005 000876 HEADLESS IHERE,DOCOLON 1006 000876 HEADLESS IALLOT,DOCOLON 1007 000876 HEADLESS CELL,DOCOLON 1008 000876 HEADLESS PJOUT,DOCOLON 1009 000876 */ 1010 000876 1011 000876 1012 000876 ; for debug map only: 1013 000876 CamelForthEnd: 38 000876 #include "4e-deps430.s43" 1 000876 ; ---------------------------------------------- ------------------------ 2 000876 ; 4e4th is a Forth based on CamelForth 3 000876 ; for the Texas Instruments MSP430 4 000876 ; 5 000876 ; This program is free software; you can redistribute it and/or modify 6 000876 ; it under the terms of the GNU General Public License as published by 7 000876 ; the Free Software Foundation; either version 3 of the License, or 8 000876 ; (at your option) any later version. 9 000876 ; 10 000876 ; This program is distributed in the hope that it will be useful, 11 000876 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 000876 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 000876 ; GNU General Public License for more details. 14 000876 ; 15 000876 ; You should have received a copy of the GNU General Public License 16 000876 ; along with this program. If not, see . 17 000876 ; 18 000876 ; See LICENSE TERMS in Brads file readme.txt as well. 19 000876 20 000876 ; ---------------------------------------------- ------------------------ 21 000876 ; 4e-deps430.s43: CPU and Model Dependencies 22 000876 ; ---------------------------------------------- ------------------------ 23 000876 24 000876 ; Forth words are documented as follows: 25 000876 ;x NAME stack -- stack description 26 000876 ; where x=C for ANS Forth Core words, X for ANS 27 000876 ; Extensions, Z for internal or private words. 28 000876 ; 29 000876 ; Indirect-Threaded Forth model for T.I. - 4e-config - Page 70 MSP430 30 000876 ; cell size is 16 bits (2 bytes) 31 000876 ; char size is 8 bits (1 byte) 32 000876 ; address unit is 8 bits (1 byte), i.e., addresses are byte-aligned. 33 000876 ; ---------------------------------------------- ------------------------ 34 000876 35 000876 ; ---------------------------------------------- ------------------------ 36 000876 ; ALIGNMENT AND PORTABILITY OPERATORS 37 000876 ; Many of these are synonyms for other words, 38 000876 ; and so are defined as CODE words. 39 000876 40 000876 ;C ALIGN -- align HERE 41 000876 ; IHERE 1 AND IALLOT ; 42 000876 HEADER ALIGNN,5,'ALIGN',DOCOLON 42.1 000000 PUBLIC ALIGNN 42.2 000876 .... DW link 42.3 000878 FF DB 0FFh ; not immediate 42.4 000879 link SET $ 42.5 000879 05 DB 5 42.6 00087A 414C49474E DB 'ALIGN' 42.7 00087F 00 EVEN 42.8 000880 IF 'DOCOLON'='DOCODE' 42.9 000880 ALIGNN: DW $+2 42.10 000880 ELSE 42.11 000880 .... ALIGNN: DW DOCOLON 42.12 000882 ENDIF 42.13 000882 ENDM 43 000882 ........0100* DW IHERE,lit,1,ANDD,IALLOT,EXIT 44 00088E 45 00088E ;C ALIGNED addr -- a-addr align given addr 46 00088E ; DUP 1 AND + ; 47 00088E HEADER ALIGNED,7,'ALIGNED',DOCOLON 47.1 000000 PUBLIC ALIGNED 47.2 00088E .... DW link 47.3 000890 FF DB 0FFh ; not immediate 47.4 000891 link SET $ 47.5 000891 07 DB 7 47.6 000892 414C49474E45* DB 'ALIGNED' 47.7 000899 00 EVEN 47.8 00089A IF 'DOCOLON'='DOCODE' 47.9 00089A ALIGNED: DW $+2 47.10 00089A ELSE 47.11 00089A .... ALIGNED: DW DOCOLON 47.12 00089C ENDIF 47.13 00089C ENDM 48 00089C ........0100* DW DUP,lit,1,ANDD,PLUS,EXIT 49 0008A8 50 0008A8 ;Z CELL -- n size of one cell 51 0008A8 HEADER CELL,4,'CELL',DOCON 51.1 000000 PUBLIC CELL 51.2 0008A8 .... DW link 51.3 0008AA FF DB 0FFh ; not immediate 51.4 0008AB link SET $ 51.5 0008AB 04 DB 4 51.6 0008AC 43454C4C DB 'CELL' 51.7 0008B0 EVEN 51.8 0008B0 IF 'DOCON'='DOCODE' 51.9 0008B0 CELL: DW $+2 51.10 0008B0 ELSE 51.11 0008B0 .... CELL: DW DOCON 51.12 0008B2 ENDIF 51.13 0008B2 ENDM 52 0008B2 0200 dw 2 53 0008B4 54 0008B4 ;C CELL+ a-addr1 -- a-addr2 add cell size 55 0008B4 ; 2 + ; 56 0008B4 HEADER CELLPLUS,5,'CELL+',DOCODE 56.1 000000 PUBLIC CELLPLUS 56.2 0008B4 .... DW link 56.3 0008B6 FF DB 0FFh ; not immediate - 4e-config - Page 71 56.4 0008B7 link SET $ 56.5 0008B7 05 DB 5 56.6 0008B8 43454C4C2B DB 'CELL+' 56.7 0008BD 00 EVEN 56.8 0008BE IF 'DOCODE'='DOCODE' 56.9 0008BE .... CELLPLUS: DW $+2 56.10 0008C0 ELSE 56.11 0008C0 CELLPLUS: DW DOCODE 56.12 0008C0 ENDIF 56.13 0008C0 ENDM 57 0008C0 2753 ADD #2,TOS 58 0008C2 B33F JMP donext 59 0008C4 60 0008C4 ;C CELLS n1 -- n2 cells->adrs units 61 0008C4 HEADER CELLS,5,'CELLS',TWOSTAR+2 61.1 000000 PUBLIC CELLS 61.2 0008C4 .... DW link 61.3 0008C6 FF DB 0FFh ; not immediate 61.4 0008C7 link SET $ 61.5 0008C7 05 DB 5 61.6 0008C8 43454C4C53 DB 'CELLS' 61.7 0008CD 00 EVEN 61.8 0008CE IF 'TWOSTAR+2'='DOCODE' 61.9 0008CE CELLS: DW $+2 61.10 0008CE ELSE 61.11 0008CE .... CELLS: DW TWOSTAR+2 61.12 0008D0 ENDIF 61.13 0008D0 ENDM 62 0008D0 63 0008D0 ;C CHAR+ c-addr1 -- c-addr2 add char size 64 0008D0 HEADER CHARPLUS,5,'CHAR+',ONEPLUS+2 64.1 000000 PUBLIC CHARPLUS 64.2 0008D0 .... DW link 64.3 0008D2 FF DB 0FFh ; not immediate 64.4 0008D3 link SET $ 64.5 0008D3 05 DB 5 64.6 0008D4 434841522B DB 'CHAR+' 64.7 0008D9 00 EVEN 64.8 0008DA IF 'ONEPLUS+2'='DOCODE' 64.9 0008DA CHARPLUS: DW $+2 64.10 0008DA ELSE 64.11 0008DA .... CHARPLUS: DW ONEPLUS+2 64.12 0008DC ENDIF 64.13 0008DC ENDM 65 0008DC 66 0008DC ;C CHARS n1 -- n2 chars->adrs units 67 0008DC HEADER CHARS,5,'CHARS',donoop 67.1 000000 PUBLIC CHARS 67.2 0008DC .... DW link 67.3 0008DE FF DB 0FFh ; not immediate 67.4 0008DF link SET $ 67.5 0008DF 05 DB 5 67.6 0008E0 4348415253 DB 'CHARS' 67.7 0008E5 00 EVEN 67.8 0008E6 IF 'donoop'='DOCODE' 67.9 0008E6 CHARS: DW $+2 67.10 0008E6 ELSE 67.11 0008E6 .... CHARS: DW donoop 67.12 0008E8 ENDIF 67.13 0008E8 ENDM 68 0008E8 69 0008E8 ;C >BODY xt -- a-addr adrs of CREATE data 70 0008E8 ; 2+ ; 8086 (3 byte CALL) 71 0008E8 HEADER TOBODY,5,'>BODY',CELLPLUS+2 71.1 000000 PUBLIC TOBODY 71.2 0008E8 .... DW link 71.3 0008EA FF DB 0FFh ; not immediate 71.4 0008EB link SET $ 71.5 0008EB 05 DB 5 71.6 0008EC 3E424F4459 DB '>BODY' 71.7 0008F1 00 EVEN 71.8 0008F2 IF 'CELLPLUS+2'='DOCODE' 71.9 0008F2 TOBODY: DW $+2 - 4e-config - Page 72 71.10 0008F2 ELSE 71.11 0008F2 .... TOBODY: DW CELLPLUS+2 71.12 0008F4 ENDIF 71.13 0008F4 ENDM 72 0008F4 73 0008F4 ;X COMPILE, xt -- append execution token 74 0008F4 ; I called this word ,XT before I discovered that it is defined in the 75 0008F4 ; ANSI standard as COMPILE,. On a DTC Forth this simply appends xt 76 0008F4 ; (like , ) but on an STC Forth this must append 'CALL xt'. 77 0008F4 HEADER COMMAXT,8,'COMPILE,',DOALIAS 77.1 000000 PUBLIC COMMAXT 77.2 0008F4 .... DW link 77.3 0008F6 FF DB 0FFh ; not immediate 77.4 0008F7 link SET $ 77.5 0008F7 08 DB 8 77.6 0008F8 434F4D50494C* DB 'COMPILE,' 77.7 000900 EVEN 77.8 000900 IF 'DOALIAS'='DOCODE' 77.9 000900 COMMAXT: DW $+2 77.10 000900 ELSE 77.11 000900 .... COMMAXT: DW DOALIAS 77.12 000902 ENDIF 77.13 000902 ENDM 78 000902 .... DW ICOMMA 79 000904 80 000904 ;Z !CF adrs cfa -- set code action of a word 81 000904 ; I! ; 82 000904 ; Indirect threaded model just stores adrs in cfa field. 83 000904 HEADER STORECF,3,'!CF',DOALIAS 83.1 000000 PUBLIC STORECF 83.2 000904 .... DW link 83.3 000906 FF DB 0FFh ; not immediate 83.4 000907 link SET $ 83.5 000907 03 DB 3 83.6 000908 214346 DB '!CF' 83.7 00090B 00 EVEN 83.8 00090C IF 'DOALIAS'='DOCODE' 83.9 00090C STORECF: DW $+2 83.10 00090C ELSE 83.11 00090C .... STORECF: DW DOALIAS 83.12 00090E ENDIF 83.13 00090E ENDM 84 00090E .... DW ISTORE 85 000910 86 000910 ;Z ,CF adrs -- append a code field 87 000910 ; IHERE !CF 2 IALLOT ; MSP430 VERSION (2 bytes) 88 000910 HEADER COMMACF,3,',CF',DOCOLON 88.1 000000 PUBLIC COMMACF 88.2 000910 .... DW link 88.3 000912 FF DB 0FFh ; not immediate 88.4 000913 link SET $ 88.5 000913 03 DB 3 88.6 000914 2C4346 DB ',CF' 88.7 000917 00 EVEN 88.8 000918 IF 'DOCOLON'='DOCODE' 88.9 000918 COMMACF: DW $+2 88.10 000918 ELSE 88.11 000918 .... COMMACF: DW DOCOLON 88.12 00091A ENDIF 88.13 00091A ENDM 89 00091A ............* DW IHERE,STORECF,lit,2,IALLOT,EXIT 90 000926 91 000926 ;Z ,CALL adrs -- append a subroutine CALL 92 000926 ; MSP430: 128x is call, Ad=11, Dreg=0000 (PC) thus append 12B0,adrs. 93 000926 HEADER COMMACALL,5,',CALL',DOCOLON 93.1 000000 PUBLIC COMMACALL 93.2 000926 .... DW link 93.3 000928 FF DB 0FFh ; not immediate 93.4 000929 link SET $ - 4e-config - Page 73 93.5 000929 05 DB 5 93.6 00092A 2C43414C4C DB ',CALL' 93.7 00092F 00 EVEN 93.8 000930 IF 'DOCOLON'='DOCODE' 93.9 000930 COMMACALL: DW $+2 93.10 000930 ELSE 93.11 000930 .... COMMACALL: DW DOCOLON 93.12 000932 ENDIF 93.13 000932 ENDM 94 000932 ....B012....* DW lit,12B0h,ICOMMA,ICOMMA,EXIT 95 00093C 96 00093C ;Z ,JMP adrs -- append an absolute 16-bit JMP (MOV #xx,PC) 97 00093C ; MSP430: opcode 4, Sreg=0000, Ad=0, As=11 (immed), Dreg=0000 (PC) 98 00093C ; thus append 4030,adrs. 99 00093C HEADER COMMAJMP,4,',JMP',DOCOLON 99.1 000000 PUBLIC COMMAJMP 99.2 00093C .... DW link 99.3 00093E FF DB 0FFh ; not immediate 99.4 00093F link SET $ 99.5 00093F 04 DB 4 99.6 000940 2C4A4D50 DB ',JMP' 99.7 000944 EVEN 99.8 000944 IF 'DOCOLON'='DOCODE' 99.9 000944 COMMAJMP: DW $+2 99.10 000944 ELSE 99.11 000944 .... COMMAJMP: DW DOCOLON 99.12 000946 ENDIF 99.13 000946 ENDM 100 000946 ....3040....* DW lit,4030h,ICOMMA,ICOMMA,EXIT 101 000950 102 000950 ;Z !COLON -- change code field to DOCOLON 103 000950 ; -2 IALLOT DOCOLON-adrs ,CF ; 104 000950 ; This should be used immediately after CREATE. 105 000950 ; This is made a distinct word, because on an STC 106 000950 ; Forth, colon definitions have no code field. 107 000950 HEADER STORCOLON,6,'!COLON',DOCOLON 107.1 000000 PUBLIC STORCOLON 107.2 000950 .... DW link 107.3 000952 FF DB 0FFh ; not immediate 107.4 000953 link SET $ 107.5 000953 06 DB 6 107.6 000954 21434F4C4F4E DB '!COLON' 107.7 00095A EVEN 107.8 00095A IF 'DOCOLON'='DOCODE' 107.9 00095A STORCOLON: DW $+2 107.10 00095A ELSE 107.11 00095A .... STORCOLON: DW DOCOLON 107.12 00095C ENDIF 107.13 00095C ENDM 108 00095C ....FEFF.... DW lit,-2,IALLOT 109 000962 ............* DW lit,DOCOLON,COMMACF,EXIT 110 00096A 111 00096A ;Z ,EXIT -- append hi-level EXIT action 112 00096A ; ['] EXIT ,XT ; 113 00096A ; This is made a distinct word, because on an STC 114 00096A ; Forth, it appends a RET instruction, not an xt. 115 00096A HEADER CEXIT,5,',EXIT',DOCOLON 115.1 000000 PUBLIC CEXIT 115.2 00096A .... DW link 115.3 00096C FF DB 0FFh ; not immediate 115.4 00096D link SET $ 115.5 00096D 05 DB 5 115.6 00096E 2C45584954 DB ',EXIT' 115.7 000973 00 EVEN 115.8 000974 IF 'DOCOLON'='DOCODE' 115.9 000974 CEXIT: DW $+2 115.10 000974 ELSE 115.11 000974 .... CEXIT: DW DOCOLON 115.12 000976 ENDIF - 4e-config - Page 74 115.13 000976 ENDM 116 000976 ............* DW lit,EXIT,COMMAXT,EXIT 117 00097E 118 00097E ; ---------------------------------------------- ------------------------ 119 00097E ; CONTROL STRUCTURES 120 00097E ; These words allow Forth control structure words 121 00097E ; to be defined portably. 122 00097E 123 00097E ;Z ,BRANCH xt -- append a branch instructio n 124 00097E ; xt is the branch operator to use, e.g. qbranch or (loop). 125 00097E ; It does NOT append the destination address. 126 00097E ; On the MSP430 this is equivalent to ,XT (above). 127 00097E HEADER COMMABRANCH,7,',BRANCH',DOALIAS 127.1 000000 PUBLIC COMMABRANCH 127.2 00097E .... DW link 127.3 000980 FF DB 0FFh ; not immediate 127.4 000981 link SET $ 127.5 000981 07 DB 7 127.6 000982 2C4252414E43* DB ',BRANCH' 127.7 000989 00 EVEN 127.8 00098A IF 'DOALIAS'='DOCODE' 127.9 00098A COMMABRANCH: DW $+2 127.10 00098A ELSE 127.11 00098A .... COMMABRANCH: DW DOALIAS 127.12 00098C ENDIF 127.13 00098C ENDM 128 00098C .... DW ICOMMA 129 00098E 130 00098E ;Z ,DEST dest -- append a branch address 131 00098E ; IHERE - , ; 132 00098E ; This appends the given destination address to the branch instruction. 133 00098E ; The MSP430 uses relative addressing from the location of the offset cell, 134 00098E ; i.e., to branch to FOO the offset cell at $ contains FOO-$. 135 00098E HEADER COMMADEST,5,',DEST',DOCOLON 135.1 000000 PUBLIC COMMADEST 135.2 00098E .... DW link 135.3 000990 FF DB 0FFh ; not immediate 135.4 000991 link SET $ 135.5 000991 05 DB 5 135.6 000992 2C44455354 DB ',DEST' 135.7 000997 00 EVEN 135.8 000998 IF 'DOCOLON'='DOCODE' 135.9 000998 COMMADEST: DW $+2 135.10 000998 ELSE 135.11 000998 .... COMMADEST: DW DOCOLON 135.12 00099A ENDIF 135.13 00099A ENDM 136 00099A ............* DW IHERE,MINUS,ICOMMA,EXIT 137 0009A2 138 0009A2 ;Z !DEST dest adrs -- change a branch dest'n 139 0009A2 ; TUCK - SWAP I! ; 140 0009A2 ; Changes the destination address found at 'adrs' to the given 'dest'. 141 0009A2 ; The MSP430 uses relative addressing from the location of the offset cell, 142 0009A2 ; i.e., to branch to FOO the offset cell at $ contains FOO-$. 143 0009A2 HEADER STOREDEST,5,'!DEST',DOCOLON 143.1 000000 PUBLIC STOREDEST 143.2 0009A2 .... DW link 143.3 0009A4 FF DB 0FFh ; not immediate 143.4 0009A5 link SET $ 143.5 0009A5 05 DB 5 143.6 0009A6 2144455354 DB '!DEST' 143.7 0009AB 00 EVEN 143.8 0009AC IF 'DOCOLON'='DOCODE' 143.9 0009AC STOREDEST: DW $+2 - 4e-config - Page 75 143.10 0009AC ELSE 143.11 0009AC .... STOREDEST: DW DOCOLON 143.12 0009AE ENDIF 143.13 0009AE ENDM 144 0009AE ............* DW TUCK,MINUS,SWAP,ISTORE,EXIT 145 0009B8 146 0009B8 ;Z ,NONE -- append a null destination (Flashable) 147 0009B8 ; CELL IALLOT ; 148 0009B8 ; When compiling in Flash ROM a branch to be resolved later, we must 149 0009B8 ; skip the cell so that it can be programmed at a later time. 150 0009B8 ; In general Flash memory can only be written once! 151 0009B8 ; ,NONE should be used wherever !DEST will resolve the branch. 152 0009B8 HEADER COMMANONE,5,',NONE',DOCOLON 152.1 000000 PUBLIC COMMANONE 152.2 0009B8 .... DW link 152.3 0009BA FF DB 0FFh ; not immediate 152.4 0009BB link SET $ 152.5 0009BB 05 DB 5 152.6 0009BC 2C4E4F4E45 DB ',NONE' 152.7 0009C1 00 EVEN 152.8 0009C2 IF 'DOCOLON'='DOCODE' 152.9 0009C2 COMMANONE: DW $+2 152.10 0009C2 ELSE 152.11 0009C2 .... COMMANONE: DW DOCOLON 152.12 0009C4 ENDIF 152.13 0009C4 ENDM 153 0009C4 ............ DW CELL,IALLOT,EXIT 154 0009CA 155 0009CA ; ---------------------------------------------- ------------------------ 156 0009CA ; HEADER STRUCTURE 157 0009CA ; The structure of the Forth dictionary headers (name, link, immediate 158 0009CA ; flag, and "smudge" bit) does not necessarily differ across CPUs. This 159 0009CA ; structure is not easily factored into distinct "portable" words; 160 0009CA ; instead, it is implicit in the definitions of FIND and CREATE, and 161 0009CA ; also in NFA>LFA, NFA>CFA, IMMED?, IMMEDIATE, HIDE, and REVEAL. 162 0009CA ; These words must be (substantially) rewritten if either the header 163 0009CA ; structure or its inherent assumptions are changed. 164 0009CA ; ---------------------------------------------- ------------------------ 165 0009CA 39 0009CA #include "4e-hilvl430.s43" 1 0009CA ; ---------------------------------------------- ------------------------ 2 0009CA ; 4e4th is a Forth based on CamelForth 3 0009CA ; for the Texas Instruments MSP430 4 0009CA ; 5 0009CA ; This program is free software; you can redistribute it and/or modify 6 0009CA ; it under the terms of the GNU General Public License as published by 7 0009CA ; the Free Software Foundation; either version 3 of the License, or 8 0009CA ; (at your option) any later version. 9 0009CA ; 10 0009CA ; This program is distributed in the hope that it will be useful, 11 0009CA ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 0009CA ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 0009CA ; GNU General Public License for more details. 14 0009CA ; 15 0009CA ; You should have received a copy of the GNU General Public License - 4e-config - Page 76 16 0009CA ; along with this program. If not, see . 17 0009CA ; 18 0009CA ; See LICENSE TERMS in Brads file readme.txt as well. 19 0009CA 20 0009CA ; ---------------------------------------------- ------------------------ 21 0009CA ; 4e-hilvl430.s43 - High Level Words 22 0009CA ; ---------------------------------------------- ------------------------ 23 0009CA 24 0009CA ; Forth words are documented as follows: 25 0009CA ;x NAME stack -- stack description 26 0009CA ; where x=C for ANS Forth Core words, X for ANS 27 0009CA ; Extensions, Z for internal or private words. 28 0009CA ; ---------------------------------------------- ------------------------ 29 0009CA ; REVISION HISTORY 30 0009CA 31 0009CA ; 17 November 2013 32 0009CA ; Comments about making ISR in 4e4th 33 0009CA ; 05 June 2013 34 0009CA ; WORDS can stop and go now. 35 0009CA ; 11 Jan 2013 made comments, new features and words: 36 0009CA ; Indicate BASE in ok promt. 37 0009CA ; 0U.R ( u n -- ) print u with n leading zeros. 38 0009CA ; (VECWIPE) ( -- ) erase ISR flash. 39 0009CA ; VECWIPE ( -- ) do (VECWIPE) and set default reset vector. 40 0009CA ; cleaned up/added memory information words: 41 0009CA ; RESETADR ( -- adr) reset vector address 42 0009CA ; MEMBOT ( -- adr) bottom of USERflash 43 0009CA ; MEMTOP ( -- adr) top of USERflash 44 0009CA ; MEM ( -- u) unused bytes in flash 45 0009CA ; UNUSED ( -- u) unused bytes in RAM 46 0009CA ; VARBOT ( -- adr) bottom of variable area 47 0009CA ; TOPSEG ( -- adr) bottom of top most flash segment 48 0009CA ; VECBOT ( -- adr) bottom of interrupt vectors 49 0009CA ; ? ( adr -- u ) display content of variable 50 0009CA ; 08 Dez 2012 merged brads PARSE etc form camelforth/340 V4.1 51 0009CA ; which fixes the empty string bug. 52 0009CA ; Dez 2012 Added some features: 53 0009CA ; Save variables to info-c and restore from there on COLD. 54 0009CA ; Made upper most flash segment writable; you may write vectors now. 55 0009CA ; VEC! (x adr -- ) store x to adr in top most segment 56 0009CA ; VEC! will write _any_ flash location. !! dangerous!! 57 0009CA ; VECWIPE will erase flash but not kernel, sets reset vector to boot 4e4th. 58 0009CA ; Kernal is bigger now, user flash smaler; 59 0009CA ; see: XLINK configuration file for MSP430G2553 4e-lnk430G2553.xcl 60 0009CA ; 30 Mar 2012 mk fixed FM/MOD 61 0009CA ; 26 Feb 2012 mk - adopted to MSP430G2553 62 0009CA ; MEM ( -- n ) n = bytes left in flash 63 0009CA ; FLASHEND constant MEMTOP 64 0009CA ; FLASHSTART constant MEMBOT 65 0009CA ; kernel at $E000, IDP = FLASHSTART = C000 - 4e-config - Page 77 66 0009CA ; fixed backspace. 67 0009CA ; ok promt at end of line. 68 0009CA ; .S prints depth. 69 0009CA ; 70 0009CA ; 17 jan 09 bjr - changed label _DP to DDP for compatibility with token 71 0009CA ; naming convention. Now uses DEST macro to compute branch offsets. 72 0009CA ; 11 jan 09 bjr - modified QUIT for Xon/Xoff flow control 73 0009CA ; 4 jan 09 bjr - created from Camel86h.asm. 74 0009CA 75 0009CA ; SYSTEM VARIABLES & CONSTANTS ================= = 76 0009CA 77 0009CA ;Z u0 -- a-addr current user area adrs 78 0009CA ; 0 USER U0 79 0009CA HEADER U0,2,'U0',DOUSER 79.1 000000 PUBLIC U0 79.2 0009CA .... DW link 79.3 0009CC FF DB 0FFh ; not immediate 79.4 0009CD link SET $ 79.5 0009CD 02 DB 2 79.6 0009CE 5530 DB 'U0' 79.7 0009D0 EVEN 79.8 0009D0 IF 'DOUSER'='DOCODE' 79.9 0009D0 U0: DW $+2 79.10 0009D0 ELSE 79.11 0009D0 .... U0: DW DOUSER 79.12 0009D2 ENDIF 79.13 0009D2 ENDM 80 0009D2 0000 DW 0 81 0009D4 82 0009D4 ;C >IN -- a-addr holds offset into TIB 83 0009D4 ; 2 USER >IN 84 0009D4 HEADER TOIN,3,'>IN',DOUSER 84.1 000000 PUBLIC TOIN 84.2 0009D4 .... DW link 84.3 0009D6 FF DB 0FFh ; not immediate 84.4 0009D7 link SET $ 84.5 0009D7 03 DB 3 84.6 0009D8 3E494E DB '>IN' 84.7 0009DB 00 EVEN 84.8 0009DC IF 'DOUSER'='DOCODE' 84.9 0009DC TOIN: DW $+2 84.10 0009DC ELSE 84.11 0009DC .... TOIN: DW DOUSER 84.12 0009DE ENDIF 84.13 0009DE ENDM 85 0009DE 0200 DW 2 86 0009E0 87 0009E0 ;C BASE -- a-addr holds conversion radix 88 0009E0 ; 4 USER BASE 89 0009E0 HEADER BASE,4,'BASE',DOUSER 89.1 000000 PUBLIC BASE 89.2 0009E0 .... DW link 89.3 0009E2 FF DB 0FFh ; not immediate 89.4 0009E3 link SET $ 89.5 0009E3 04 DB 4 89.6 0009E4 42415345 DB 'BASE' 89.7 0009E8 EVEN 89.8 0009E8 IF 'DOUSER'='DOCODE' 89.9 0009E8 BASE: DW $+2 89.10 0009E8 ELSE 89.11 0009E8 .... BASE: DW DOUSER 89.12 0009EA ENDIF 89.13 0009EA ENDM 90 0009EA 0400 DW 4 91 0009EC 92 0009EC ;C STATE -- a-addr holds compiler state 93 0009EC ; 6 USER STATE 94 0009EC HEADER STATE,5,'STATE',DOUSER 94.1 000000 PUBLIC STATE 94.2 0009EC .... DW link - 4e-config - Page 78 94.3 0009EE FF DB 0FFh ; not immediate 94.4 0009EF link SET $ 94.5 0009EF 05 DB 5 94.6 0009F0 5354415445 DB 'STATE' 94.7 0009F5 00 EVEN 94.8 0009F6 IF 'DOUSER'='DOCODE' 94.9 0009F6 STATE: DW $+2 94.10 0009F6 ELSE 94.11 0009F6 .... STATE: DW DOUSER 94.12 0009F8 ENDIF 94.13 0009F8 ENDM 95 0009F8 0600 DW 6 96 0009FA 97 0009FA ;Z dp -- a-addr holds dictionary ptr 98 0009FA ; 8 USER DP 99 0009FA HEADER DDP,2,'DP',DOUSER 99.1 000000 PUBLIC DDP 99.2 0009FA .... DW link 99.3 0009FC FF DB 0FFh ; not immediate 99.4 0009FD link SET $ 99.5 0009FD 02 DB 2 99.6 0009FE 4450 DB 'DP' 99.7 000A00 EVEN 99.8 000A00 IF 'DOUSER'='DOCODE' 99.9 000A00 DDP: DW $+2 99.10 000A00 ELSE 99.11 000A00 .... DDP: DW DOUSER 99.12 000A02 ENDIF 99.13 000A02 ENDM 100 000A02 0800 DW 8 101 000A04 102 000A04 ;Z 'source -- a-addr two cells: len, adrs 103 000A04 ; 10 USER 'SOURCE 104 000A04 HEADER TICKSOURCE,7,'\'SOURCE',DOUSER 104.1 000000 PUBLIC TICKSOURCE 104.2 000A04 .... DW link 104.3 000A06 FF DB 0FFh ; not immediate 104.4 000A07 link SET $ 104.5 000A07 07 DB 7 104.6 000A08 27534F555243* DB '\'SOURCE' 104.7 000A0F 00 EVEN 104.8 000A10 IF 'DOUSER'='DOCODE' 104.9 000A10 TICKSOURCE: DW $+2 104.10 000A10 ELSE 104.11 000A10 .... TICKSOURCE: DW DOUSER 104.12 000A12 ENDIF 104.13 000A12 ENDM 105 000A12 0A00 DW 10 106 000A14 107 000A14 ;Z latest -- a-addr last word in dict. 108 000A14 ; 14 USER LATEST 109 000A14 HEADER LATEST,6,'LATEST',DOUSER 109.1 000000 PUBLIC LATEST 109.2 000A14 .... DW link 109.3 000A16 FF DB 0FFh ; not immediate 109.4 000A17 link SET $ 109.5 000A17 06 DB 6 109.6 000A18 4C4154455354 DB 'LATEST' 109.7 000A1E EVEN 109.8 000A1E IF 'DOUSER'='DOCODE' 109.9 000A1E LATEST: DW $+2 109.10 000A1E ELSE 109.11 000A1E .... LATEST: DW DOUSER 109.12 000A20 ENDIF 109.13 000A20 ENDM 110 000A20 0E00 DW 14 111 000A22 112 000A22 ;Z hp -- a-addr HOLD pointer 113 000A22 ; 16 USER HP 114 000A22 HEADER HP,2,'HP',DOUSER 114.1 000000 PUBLIC HP 114.2 000A22 .... DW link 114.3 000A24 FF DB 0FFh ; not immediate 114.4 000A25 link SET $ 114.5 000A25 02 DB 2 - 4e-config - Page 79 114.6 000A26 4850 DB 'HP' 114.7 000A28 EVEN 114.8 000A28 IF 'DOUSER'='DOCODE' 114.9 000A28 HP: DW $+2 114.10 000A28 ELSE 114.11 000A28 .... HP: DW DOUSER 114.12 000A2A ENDIF 114.13 000A2A ENDM 115 000A2A 1000 DW 16 116 000A2C 117 000A2C ;Z LP -- a-addr Leave-stack pointer 118 000A2C ; 18 USER LP 119 000A2C HEADER LP,2,'LP',DOUSER 119.1 000000 PUBLIC LP 119.2 000A2C .... DW link 119.3 000A2E FF DB 0FFh ; not immediate 119.4 000A2F link SET $ 119.5 000A2F 02 DB 2 119.6 000A30 4C50 DB 'LP' 119.7 000A32 EVEN 119.8 000A32 IF 'DOUSER'='DOCODE' 119.9 000A32 LP: DW $+2 119.10 000A32 ELSE 119.11 000A32 .... LP: DW DOUSER 119.12 000A34 ENDIF 119.13 000A34 ENDM 120 000A34 1200 DW 18 121 000A36 122 000A36 ;Z IDP -- a-addr ROM dictionary pointer 123 000A36 ; 20 USER IDP 124 000A36 HEADER IDP,3,'IDP',DOUSER 124.1 000000 PUBLIC IDP 124.2 000A36 .... DW link 124.3 000A38 FF DB 0FFh ; not immediate 124.4 000A39 link SET $ 124.5 000A39 03 DB 3 124.6 000A3A 494450 DB 'IDP' 124.7 000A3D 00 EVEN 124.8 000A3E IF 'DOUSER'='DOCODE' 124.9 000A3E IDP: DW $+2 124.10 000A3E ELSE 124.11 000A3E .... IDP: DW DOUSER 124.12 000A40 ENDIF 124.13 000A40 ENDM 125 000A40 1400 DW 20 126 000A42 127 000A42 ;Z NEWEST -- a-addr temporary LATEST storage 128 000A42 ; 22 USER NEWEST 129 000A42 HEADER NEWEST,6,'NEWEST',DOUSER 129.1 000000 PUBLIC NEWEST 129.2 000A42 .... DW link 129.3 000A44 FF DB 0FFh ; not immediate 129.4 000A45 link SET $ 129.5 000A45 06 DB 6 129.6 000A46 4E4557455354 DB 'NEWEST' 129.7 000A4C EVEN 129.8 000A4C IF 'DOUSER'='DOCODE' 129.9 000A4C NEWEST: DW $+2 129.10 000A4C ELSE 129.11 000A4C .... NEWEST: DW DOUSER 129.12 000A4E ENDIF 129.13 000A4E ENDM 130 000A4E 1600 DW 22 131 000A50 132 000A50 ;Z APP -- a-addr app pointer ( was TURNKEY) 133 000A50 ; 24 USER APP 134 000A50 HEADER APP,3,'APP',DOUSER 134.1 000000 PUBLIC APP 134.2 000A50 .... DW link 134.3 000A52 FF DB 0FFh ; not immediate 134.4 000A53 link SET $ 134.5 000A53 03 DB 3 134.6 000A54 415050 DB 'APP' 134.7 000A57 00 EVEN 134.8 000A58 IF 'DOUSER'='DOCODE' - 4e-config - Page 80 134.9 000A58 APP: DW $+2 134.10 000A58 ELSE 134.11 000A58 .... APP: DW DOUSER 134.12 000A5A ENDIF 134.13 000A5A ENDM 135 000A5A 1800 DW 24 136 000A5C 137 000A5C ;Z CAPS -- a-addr capitalize words pointer 138 000A5C ; 26 USER CAPS 139 000A5C HEADER CAPS,4,'CAPS',DOUSER 139.1 000000 PUBLIC CAPS 139.2 000A5C .... DW link 139.3 000A5E FF DB 0FFh ; not immediate 139.4 000A5F link SET $ 139.5 000A5F 04 DB 4 139.6 000A60 43415053 DB 'CAPS' 139.7 000A64 EVEN 139.8 000A64 IF 'DOUSER'='DOCODE' 139.9 000A64 CAPS: DW $+2 139.10 000A64 ELSE 139.11 000A64 .... CAPS: DW DOUSER 139.12 000A66 ENDIF 139.13 000A66 ENDM 140 000A66 1A00 DW 26 141 000A68 142 000A68 ;Z USERKEY -- a-addr KEY pointer 143 000A68 ; 28 USER KEY 144 000A68 HEADER USERKEY,7,'USERKEY',DOUSER 144.1 000000 PUBLIC USERKEY 144.2 000A68 .... DW link 144.3 000A6A FF DB 0FFh ; not immediate 144.4 000A6B link SET $ 144.5 000A6B 07 DB 7 144.6 000A6C 555345524B45* DB 'USERKEY' 144.7 000A73 00 EVEN 144.8 000A74 IF 'DOUSER'='DOCODE' 144.9 000A74 USERKEY: DW $+2 144.10 000A74 ELSE 144.11 000A74 .... USERKEY: DW DOUSER 144.12 000A76 ENDIF 144.13 000A76 ENDM 145 000A76 1C00 DW 28 146 000A78 147 000A78 ;Z USEREMIT -- a-addr EMIT pointer 148 000A78 ; 30 USER EMIT 149 000A78 HEADER USEREMIT,8,'USEREMIT',DOUSER 149.1 000000 PUBLIC USEREMIT 149.2 000A78 .... DW link 149.3 000A7A FF DB 0FFh ; not immediate 149.4 000A7B link SET $ 149.5 000A7B 08 DB 8 149.6 000A7C 55534552454D* DB 'USEREMIT' 149.7 000A84 EVEN 149.8 000A84 IF 'DOUSER'='DOCODE' 149.9 000A84 USEREMIT: DW $+2 149.10 000A84 ELSE 149.11 000A84 .... USEREMIT: DW DOUSER 149.12 000A86 ENDIF 149.13 000A86 ENDM 150 000A86 1E00 DW 30 151 000A88 152 000A88 ;Z NEWLINE -- a-addr CR pointer 153 000A88 ; 32 USER 154 000A88 HEADER NEWLINE,7,'NEWLINE',DOUSER 154.1 000000 PUBLIC NEWLINE 154.2 000A88 .... DW link 154.3 000A8A FF DB 0FFh ; not immediate 154.4 000A8B link SET $ 154.5 000A8B 07 DB 7 154.6 000A8C 4E45574C494E* DB 'NEWLINE' 154.7 000A93 00 EVEN 154.8 000A94 IF 'DOUSER'='DOCODE' 154.9 000A94 NEWLINE: DW $+2 154.10 000A94 ELSE 154.11 000A94 .... NEWLINE: DW DOUSER 154.12 000A96 ENDIF - 4e-config - Page 81 154.13 000A96 ENDM 155 000A96 2000 DW 32 156 000A98 157 000A98 ; 2 more for savety 34, 36 158 000A98 159 000A98 160 000A98 161 000A98 ;X PAD -- a-addr user PAD buffer 162 000A98 ; = end of hold area! 163 000A98 HEADER PAD,3,'PAD',DOUSER 163.1 000000 PUBLIC PAD 163.2 000A98 .... DW link 163.3 000A9A FF DB 0FFh ; not immediate 163.4 000A9B link SET $ 163.5 000A9B 03 DB 3 163.6 000A9C 504144 DB 'PAD' 163.7 000A9F 00 EVEN 163.8 000AA0 IF 'DOUSER'='DOCODE' 163.9 000AA0 PAD: DW $+2 163.10 000AA0 ELSE 163.11 000AA0 .... PAD: DW DOUSER 163.12 000AA2 ENDIF 163.13 000AA2 ENDM 164 000AA2 .... DW PADAREA-UAREA 165 000AA4 166 000AA4 ;Z l0 -- a-addr bottom of Leave stack 167 000AA4 HEADER L0,2,'L0',DOUSER 167.1 000000 PUBLIC L0 167.2 000AA4 .... DW link 167.3 000AA6 FF DB 0FFh ; not immediate 167.4 000AA7 link SET $ 167.5 000AA7 02 DB 2 167.6 000AA8 4C30 DB 'L0' 167.7 000AAA EVEN 167.8 000AAA IF 'DOUSER'='DOCODE' 167.9 000AAA L0: DW $+2 167.10 000AAA ELSE 167.11 000AAA .... L0: DW DOUSER 167.12 000AAC ENDIF 167.13 000AAC ENDM 168 000AAC .... DW LSTACK-UAREA 169 000AAE 170 000AAE ;Z r0 -- a-addr end of return stack 171 000AAE HEADER RZERO,2,'R0',DOUSER 171.1 000000 PUBLIC RZERO 171.2 000AAE .... DW link 171.3 000AB0 FF DB 0FFh ; not immediate 171.4 000AB1 link SET $ 171.5 000AB1 02 DB 2 171.6 000AB2 5230 DB 'R0' 171.7 000AB4 EVEN 171.8 000AB4 IF 'DOUSER'='DOCODE' 171.9 000AB4 RZERO: DW $+2 171.10 000AB4 ELSE 171.11 000AB4 .... RZERO: DW DOUSER 171.12 000AB6 ENDIF 171.13 000AB6 ENDM 172 000AB6 .... DW RSTACK-UAREA 173 000AB8 174 000AB8 ;Z s0 -- a-addr end of parameter stack 175 000AB8 HEADER S0,2,'S0',DOUSER 175.1 000000 PUBLIC S0 175.2 000AB8 .... DW link 175.3 000ABA FF DB 0FFh ; not immediate 175.4 000ABB link SET $ 175.5 000ABB 02 DB 2 175.6 000ABC 5330 DB 'S0' 175.7 000ABE EVEN 175.8 000ABE IF 'DOUSER'='DOCODE' 175.9 000ABE S0: DW $+2 175.10 000ABE ELSE 175.11 000ABE .... S0: DW DOUSER 175.12 000AC0 ENDIF 175.13 000AC0 ENDM - 4e-config - Page 82 176 000AC0 .... DW PSTACK-UAREA 177 000AC2 178 000AC2 ;X tib -- a-addr Terminal Input Buffer 179 000AC2 ; HEX 80 USER TIB 8086: above user area 180 000AC2 HEADER TIB,3,'TIB',DOUSER 180.1 000000 PUBLIC TIB 180.2 000AC2 .... DW link 180.3 000AC4 FF DB 0FFh ; not immediate 180.4 000AC5 link SET $ 180.5 000AC5 03 DB 3 180.6 000AC6 544942 DB 'TIB' 180.7 000AC9 00 EVEN 180.8 000ACA IF 'DOUSER'='DOCODE' 180.9 000ACA TIB: DW $+2 180.10 000ACA ELSE 180.11 000ACA .... TIB: DW DOUSER 180.12 000ACC ENDIF 180.13 000ACC ENDM 181 000ACC .... DW TIBAREA-UAREA 182 000ACE 183 000ACE ;Z tibsize -- n size of TIB 184 000ACE HEADER TIBSIZE,7,'TIBSIZE',DOCON 184.1 000000 PUBLIC TIBSIZE 184.2 000ACE .... DW link 184.3 000AD0 FF DB 0FFh ; not immediate 184.4 000AD1 link SET $ 184.5 000AD1 07 DB 7 184.6 000AD2 54494253495A* DB 'TIBSIZE' 184.7 000AD9 00 EVEN 184.8 000ADA IF 'DOCON'='DOCODE' 184.9 000ADA TIBSIZE: DW $+2 184.10 000ADA ELSE 184.11 000ADA .... TIBSIZE: DW DOCON 184.12 000ADC ENDIF 184.13 000ADC ENDM 185 000ADC .... DW TIB_SIZE-2 ; 2 chars safety zone 186 000ADE 187 000ADE ;C BL -- char an ASCII space 188 000ADE HEADER BLANK,2,'BL',DOCON 188.1 000000 PUBLIC BLANK 188.2 000ADE .... DW link 188.3 000AE0 FF DB 0FFh ; not immediate 188.4 000AE1 link SET $ 188.5 000AE1 02 DB 2 188.6 000AE2 424C DB 'BL' 188.7 000AE4 EVEN 188.8 000AE4 IF 'DOCON'='DOCODE' 188.9 000AE4 BLANK: DW $+2 188.10 000AE4 ELSE 188.11 000AE4 .... BLANK: DW DOCON 188.12 000AE6 ENDIF 188.13 000AE6 ENDM 189 000AE6 2000 DW 20h 190 000AE8 191 000AE8 ;Z uinit -- addr initial values for user area 192 000AE8 HEADER UINIT,5,'UINIT',DOROM 192.1 000000 PUBLIC UINIT 192.2 000AE8 .... DW link 192.3 000AEA FF DB 0FFh ; not immediate 192.4 000AEB link SET $ 192.5 000AEB 05 DB 5 192.6 000AEC 55494E4954 DB 'UINIT' 192.7 000AF1 00 EVEN 192.8 000AF2 IF 'DOROM'='DOCODE' 192.9 000AF2 UINIT: DW $+2 192.10 000AF2 ELSE 192.11 000AF2 .... UINIT: DW DOROM 192.12 000AF4 ENDIF 192.13 000AF4 ENDM 193 000AF4 uinitstart: 194 000AF4 000000000A00* DW 0,0,10,0 ; reserved,>IN,BASE,STAT E ; start in HEX mk - 4e-config - Page 83 195 000AFC .... DW RAMDICT ; DP 196 000AFE 00000000 DW 0,0 ; SOURCE init'd elsewhere 197 000B02 .... DW lastword ; LATEST 198 000B04 00000000 DW 0,0 ; HP,LP init'd elsewhere 199 000B08 00C0 DW USERFLASHSTART ; IDP 200 000B0A 0000 DW 0 ; NEWEST not init'd 201 000B0C .... DW DOTCOLD ; APP vector; default is .COLD 202 000B0E FFFF DW -1 ; CAPS flag; default is TRUE 203 000B10 .... DW DOKEY ; KEY vector 204 000B12 .... DW DOEMIT ; EMIT vector 205 000B14 .... DW DOCR ; CR vector 206 000B16 uinitend: 207 000022 uareasize = uinitend-uinitstart 208 000B16 209 000B16 /* not there mk 210 000B16 ; RAM interrupt vectors, 15 vectors of 2 cells each 211 000B16 MOV #nullirq,PC 212 000B16 MOV #nullirq,PC 213 000B16 MOV #nullirq,PC 214 000B16 MOV #nullirq,PC 215 000B16 MOV #nullirq,PC 216 000B16 MOV #nullirq,PC 217 000B16 MOV #nullirq,PC 218 000B16 MOV #nullirq,PC 219 000B16 MOV #nullirq,PC 220 000B16 MOV #nullirq,PC 221 000B16 MOV #nullirq,PC 222 000B16 MOV #nullirq,PC 223 000B16 MOV #nullirq,PC 224 000B16 MOV #nullirq,PC 225 000B16 MOV #nullirq,PC 226 000B16 */ 227 000B16 228 000B16 ;Z #init -- n #bytes of user area init data 229 000B16 HEADER NINIT,5,'#INIT',DOCON 229.1 000000 PUBLIC NINIT 229.2 000B16 .... DW link 229.3 000B18 FF DB 0FFh ; not immediate 229.4 000B19 link SET $ 229.5 000B19 05 DB 5 229.6 000B1A 23494E4954 DB '#INIT' 229.7 000B1F 00 EVEN 229.8 000B20 IF 'DOCON'='DOCODE' 229.9 000B20 NINIT: DW $+2 229.10 000B20 ELSE 229.11 000B20 .... NINIT: DW DOCON 229.12 000B22 ENDIF 229.13 000B22 ENDM 230 000B22 2200 DW uareasize 231 000B24 232 000B24 233 000000 EXTERN cor,infoB,AppU0,infoC,infoD 234 000B24 ;Z COR -- adr cause of reset 235 000B24 HEADER COR,3,'COR',DOCON 235.1 000000 PUBLIC COR 235.2 000B24 .... DW link 235.3 000B26 FF DB 0FFh ; not immediate 235.4 000B27 link SET $ 235.5 000B27 03 DB 3 235.6 000B28 434F52 DB 'COR' 235.7 000B2B 00 EVEN 235.8 000B2C IF 'DOCON'='DOCODE' 235.9 000B2C COR: DW $+2 235.10 000B2C ELSE 235.11 000B2C .... COR: DW DOCON 235.12 000B2E ENDIF 235.13 000B2E ENDM 236 000B2E .... DW cor 237 000B30 238 000B30 ;Z INFOB -- adr start of info B segment 239 000B30 HEADER INFOB,5,'INFOB',DOCON - 4e-config - Page 84 239.1 000000 PUBLIC INFOB 239.2 000B30 .... DW link 239.3 000B32 FF DB 0FFh ; not immediate 239.4 000B33 link SET $ 239.5 000B33 05 DB 5 239.6 000B34 494E464F42 DB 'INFOB' 239.7 000B39 00 EVEN 239.8 000B3A IF 'DOCON'='DOCODE' 239.9 000B3A INFOB: DW $+2 239.10 000B3A ELSE 239.11 000B3A .... INFOB: DW DOCON 239.12 000B3C ENDIF 239.13 000B3C ENDM 240 000B3C .... DW infoB 241 000B3E 242 000B3E ;Z INFOC -- adr start of info C segment 243 000B3E HEADER INFOC,5,'INFOC',DOCON 243.1 000000 PUBLIC INFOC 243.2 000B3E .... DW link 243.3 000B40 FF DB 0FFh ; not immediate 243.4 000B41 link SET $ 243.5 000B41 05 DB 5 243.6 000B42 494E464F43 DB 'INFOC' 243.7 000B47 00 EVEN 243.8 000B48 IF 'DOCON'='DOCODE' 243.9 000B48 INFOC: DW $+2 243.10 000B48 ELSE 243.11 000B48 .... INFOC: DW DOCON 243.12 000B4A ENDIF 243.13 000B4A ENDM 244 000B4A .... DW infoC 245 000B4C 246 000B4C ;Z INFOD -- adr start of info C segment 247 000B4C HEADER INFOD,5,'INFOD',DOCON 247.1 000000 PUBLIC INFOD 247.2 000B4C .... DW link 247.3 000B4E FF DB 0FFh ; not immediate 247.4 000B4F link SET $ 247.5 000B4F 05 DB 5 247.6 000B50 494E464F44 DB 'INFOD' 247.7 000B55 00 EVEN 247.8 000B56 IF 'DOCON'='DOCODE' 247.9 000B56 INFOD: DW $+2 247.10 000B56 ELSE 247.11 000B56 .... INFOD: DW DOCON 247.12 000B58 ENDIF 247.13 000B58 ENDM 248 000B58 .... DW infoD 249 000B5A 250 000B5A ;Z APPU0 -- adr start of Application user area 251 000B5A HEADER APPU0,5,'APPU0',DOCON 251.1 000000 PUBLIC APPU0 251.2 000B5A .... DW link 251.3 000B5C FF DB 0FFh ; not immediate 251.4 000B5D link SET $ 251.5 000B5D 05 DB 5 251.6 000B5E 4150505530 DB 'APPU0' 251.7 000B63 00 EVEN 251.8 000B64 IF 'DOCON'='DOCODE' 251.9 000B64 APPU0: DW $+2 251.10 000B64 ELSE 251.11 000B64 .... APPU0: DW DOCON 251.12 000B66 ENDIF 251.13 000B66 ENDM 252 000B66 .... DW AppU0 253 000B68 254 000B68 255 000B68 ; ARITHMETIC OPERATORS ========================= = 256 000B68 257 000B68 ;C S>D n -- d single -> double prec. 258 000B68 ; DUP 0< ; 259 000B68 HEADER STOD,3,'S>D',DOCOLON 259.1 000000 PUBLIC STOD - 4e-config - Page 85 259.2 000B68 .... DW link 259.3 000B6A FF DB 0FFh ; not immediate 259.4 000B6B link SET $ 259.5 000B6B 03 DB 3 259.6 000B6C 533E44 DB 'S>D' 259.7 000B6F 00 EVEN 259.8 000B70 IF 'DOCOLON'='DOCODE' 259.9 000B70 STOD: DW $+2 259.10 000B70 ELSE 259.11 000B70 .... STOD: DW DOCOLON 259.12 000B72 ENDIF 259.13 000B72 ENDM 260 000B72 ............ DW DUP,ZEROLESS,EXIT 261 000B78 262 000B78 ;Z ?NEGATE n1 n2 -- n3 negate n1 if n2 negative 263 000B78 ; 0< IF NEGATE THEN ; ...a common factor 264 000B78 HEADER QNEGATE,7,'?NEGATE',DOCOLON 264.1 000000 PUBLIC QNEGATE 264.2 000B78 .... DW link 264.3 000B7A FF DB 0FFh ; not immediate 264.4 000B7B link SET $ 264.5 000B7B 07 DB 7 264.6 000B7C 3F4E45474154* DB '?NEGATE' 264.7 000B83 00 EVEN 264.8 000B84 IF 'DOCOLON'='DOCODE' 264.9 000B84 QNEGATE: DW $+2 264.10 000B84 ELSE 264.11 000B84 .... QNEGATE: DW DOCOLON 264.12 000B86 ENDIF 264.13 000B86 ENDM 265 000B86 ........ DW ZEROLESS,qbran 266 000B8A DEST QNEG1 266.1 000B8A 0400 DW QNEG1-$ 266.2 000B8C ENDM 267 000B8C .... DW NEGATE 268 000B8E .... QNEG1: DW EXIT 269 000B90 270 000B90 ;C ABS n1 -- +n2 absolute value 271 000B90 ; DUP ?NEGATE ; 272 000B90 HEADER ABBS,3,'ABS',DOCOLON 272.1 000000 PUBLIC ABBS 272.2 000B90 .... DW link 272.3 000B92 FF DB 0FFh ; not immediate 272.4 000B93 link SET $ 272.5 000B93 03 DB 3 272.6 000B94 414253 DB 'ABS' 272.7 000B97 00 EVEN 272.8 000B98 IF 'DOCOLON'='DOCODE' 272.9 000B98 ABBS: DW $+2 272.10 000B98 ELSE 272.11 000B98 .... ABBS: DW DOCOLON 272.12 000B9A ENDIF 272.13 000B9A ENDM 273 000B9A ............ DW DUP,QNEGATE,EXIT 274 000BA0 275 000BA0 ;X DNEGATE d1 -- d2 negate double precision 276 000BA0 ; SWAP INVERT SWAP INVERT 1 M+ ; 277 000BA0 HEADER DNEGATE,7,'DNEGATE',DOCOLON 277.1 000000 PUBLIC DNEGATE 277.2 000BA0 .... DW link 277.3 000BA2 FF DB 0FFh ; not immediate 277.4 000BA3 link SET $ 277.5 000BA3 07 DB 7 277.6 000BA4 444E45474154* DB 'DNEGATE' 277.7 000BAB 00 EVEN 277.8 000BAC IF 'DOCOLON'='DOCODE' 277.9 000BAC DNEGATE: DW $+2 277.10 000BAC ELSE 277.11 000BAC .... DNEGATE: DW DOCOLON 277.12 000BAE ENDIF 277.13 000BAE ENDM 278 000BAE ............* DW SWAP,INVERT,SWAP,INVERT,lit,1,MPLUS 279 000BBC .... DW EXIT 280 000BBE 281 000BBE ;Z ?DNEGATE d1 n -- d2 negate d1 if n - 4e-config - Page 86 negative 282 000BBE ; 0< IF DNEGATE THEN ; ...a common factor 283 000BBE HEADER QDNEGATE,8,'?DNEGATE',DOCOLON 283.1 000000 PUBLIC QDNEGATE 283.2 000BBE .... DW link 283.3 000BC0 FF DB 0FFh ; not immediate 283.4 000BC1 link SET $ 283.5 000BC1 08 DB 8 283.6 000BC2 3F444E454741* DB '?DNEGATE' 283.7 000BCA EVEN 283.8 000BCA IF 'DOCOLON'='DOCODE' 283.9 000BCA QDNEGATE: DW $+2 283.10 000BCA ELSE 283.11 000BCA .... QDNEGATE: DW DOCOLON 283.12 000BCC ENDIF 283.13 000BCC ENDM 284 000BCC ........ DW ZEROLESS,qbran 285 000BD0 DEST DNEG1 285.1 000BD0 0400 DW DNEG1-$ 285.2 000BD2 ENDM 286 000BD2 .... DW DNEGATE 287 000BD4 .... DNEG1: DW EXIT 288 000BD6 289 000BD6 ;X DABS d1 -- +d2 absolute value dbl.prec. 290 000BD6 ; DUP ?DNEGATE ; 291 000BD6 HEADER DABS,4,'DABS',DOCOLON 291.1 000000 PUBLIC DABS 291.2 000BD6 .... DW link 291.3 000BD8 FF DB 0FFh ; not immediate 291.4 000BD9 link SET $ 291.5 000BD9 04 DB 4 291.6 000BDA 44414253 DB 'DABS' 291.7 000BDE EVEN 291.8 000BDE IF 'DOCOLON'='DOCODE' 291.9 000BDE DABS: DW $+2 291.10 000BDE ELSE 291.11 000BDE .... DABS: DW DOCOLON 291.12 000BE0 ENDIF 291.13 000BE0 ENDM 292 000BE0 ............ DW DUP,QDNEGATE,EXIT 293 000BE6 294 000BE6 ;C M* n1 n2 -- d signed 16*16->32 multiply 295 000BE6 ; 2DUP XOR >R carries sign of the result 296 000BE6 ; SWAP ABS SWAP ABS UM* 297 000BE6 ; R> ?DNEGATE ; 298 000BE6 HEADER MSTAR,2,'M*',DOCOLON 298.1 000000 PUBLIC MSTAR 298.2 000BE6 .... DW link 298.3 000BE8 FF DB 0FFh ; not immediate 298.4 000BE9 link SET $ 298.5 000BE9 02 DB 2 298.6 000BEA 4D2A DB 'M*' 298.7 000BEC EVEN 298.8 000BEC IF 'DOCOLON'='DOCODE' 298.9 000BEC MSTAR: DW $+2 298.10 000BEC ELSE 298.11 000BEC .... MSTAR: DW DOCOLON 298.12 000BEE ENDIF 298.13 000BEE ENDM 299 000BEE ............ DW TWODUP,XORR,TOR 300 000BF4 ............* DW SWAP,ABBS,SWAP,ABBS,UMSTAR 301 000BFE ............ DW RFROM,QDNEGATE,EXIT 302 000C04 303 000C04 ;C SM/REM d1 n1 -- n2 n3 symmetric signed div 304 000C04 ; 2DUP XOR >R sign of quotient 305 000C04 ; OVER >R sign of remainder 306 000C04 ; ABS >R DABS R> UM/MOD 307 000C04 ; SWAP R> ?NEGATE 308 000C04 ; SWAP R> ?NEGATE ; 309 000C04 ; Ref. dpANS-6 section 3.2.2.1. 310 000C04 HEADER SMSLASHREM,6,'SM/REM',DOCOLON 310.1 000000 PUBLIC SMSLASHREM 310.2 000C04 .... DW link - 4e-config - Page 87 310.3 000C06 FF DB 0FFh ; not immediate 310.4 000C07 link SET $ 310.5 000C07 06 DB 6 310.6 000C08 534D2F52454D DB 'SM/REM' 310.7 000C0E EVEN 310.8 000C0E IF 'DOCOLON'='DOCODE' 310.9 000C0E SMSLASHREM: DW $+2 310.10 000C0E ELSE 310.11 000C0E .... SMSLASHREM: DW DOCOLON 310.12 000C10 ENDIF 310.13 000C10 ENDM 311 000C10 ............* DW TWODUP,XORR,TOR,OVER,TOR 312 000C1A ............* DW ABBS,TOR,DABS,RFROM,UMSLASHMOD 313 000C24 ............* DW SWAP,RFROM,QNEGATE,SWAP,RFROM,QNEGATE 314 000C30 .... DW EXIT 315 000C32 316 000C32 ;C d1 n1 -- n2 n3 floored signed div'n 317 000C32 ; courtesy of Ed Smeda 318 000C32 ; DUP >R SM/REM 2DUP 1 < AND IF 319 000C32 ; SWAP R@ + SWAP 1- THEN 320 000C32 ; R> DROP ; 321 000C32 ; Ref. dpANS-6 section 3.2.2.1. 322 000C32 ; HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON 323 000C32 ; DW DUP,TOR,SMSLASHREM 324 000C32 ; DW TWODUP,lit,1,LESS,ANDD,qbran 325 000C32 ; DEST FMMOD1 326 000C32 ; DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS 327 000C32 ;FMMOD1: DW RFROM,DROP,EXIT 328 000C32 329 000C32 ; Fixed FM/MOD, added 12 nov 2012 330 000C32 ;C FM/MOD d1 n1 -- n2 n3 floored signed div'n 331 000C32 ; Ching-Tang Tseng Mar 24 2012 332 000C32 ; DUP >R OVER OVER XOR >R 333 000C32 ; SM/REM 334 000C32 ; OVER R> 0< AND 335 000C32 ; IF SWAP R@ + SWAP 1 - 336 000C32 ; THEN R> DROP ; 337 000C32 ; 1 0 2 FM/MOD(OK) . . 0 1 ok 338 000C32 ; 7 0 9 FM/MOD(OK) . . 0 7 ok 339 000C32 ; Ref. dpANS-6 section 3.2.2.1. 340 000C32 HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON 340.1 000000 PUBLIC FMSLASHMOD 340.2 000C32 .... DW link 340.3 000C34 FF DB 0FFh ; not immediate 340.4 000C35 link SET $ 340.5 000C35 06 DB 6 340.6 000C36 464D2F4D4F44 DB 'FM/MOD' 340.7 000C3C EVEN 340.8 000C3C IF 'DOCOLON'='DOCODE' 340.9 000C3C FMSLASHMOD: DW $+2 340.10 000C3C ELSE 340.11 000C3C .... FMSLASHMOD: DW DOCOLON 340.12 000C3E ENDIF 340.13 000C3E ENDM 341 000C3E ............* DW DUP,TOR,OVER,OVER,XORR,TOR 342 000C4A .... DW SMSLASHREM 343 000C4C ............* DW OVER,RFROM,ZEROLESS,ANDD,qbran 344 000C56 DEST FMMOD1 344.1 000C56 0C00 DW FMMOD1-$ 344.2 000C58 ENDM 345 000C58 ............* DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS 346 000C62 ............ FMMOD1: DW RFROM,DROP,EXIT 347 000C68 348 000C68 ;C * n1 n2 -- n3 signed multiply 349 000C68 ; M* DROP ; 350 000C68 HEADER STAR,1,'*',DOCOLON 350.1 000000 PUBLIC STAR 350.2 000C68 .... DW link 350.3 000C6A FF DB 0FFh ; not immediate 350.4 000C6B link SET $ 350.5 000C6B 01 DB 1 350.6 000C6C 2A DB '*' 350.7 000C6D 00 EVEN 350.8 000C6E IF 'DOCOLON'='DOCODE' 350.9 000C6E STAR: DW $+2 - 4e-config - Page 88 350.10 000C6E ELSE 350.11 000C6E .... STAR: DW DOCOLON 350.12 000C70 ENDIF 350.13 000C70 ENDM 351 000C70 ............ DW MSTAR,DROP,EXIT 352 000C76 353 000C76 ;C /MOD n1 n2 -- n3 n4 signed divide/rem'dr 354 000C76 ; >R S>D R> FM/MOD ; 355 000C76 HEADER SLASHMOD,4,'/MOD',DOCOLON 355.1 000000 PUBLIC SLASHMOD 355.2 000C76 .... DW link 355.3 000C78 FF DB 0FFh ; not immediate 355.4 000C79 link SET $ 355.5 000C79 04 DB 4 355.6 000C7A 2F4D4F44 DB '/MOD' 355.7 000C7E EVEN 355.8 000C7E IF 'DOCOLON'='DOCODE' 355.9 000C7E SLASHMOD: DW $+2 355.10 000C7E ELSE 355.11 000C7E .... SLASHMOD: DW DOCOLON 355.12 000C80 ENDIF 355.13 000C80 ENDM 356 000C80 ............* DW TOR,STOD,RFROM,FMSLASHMOD,EXIT 357 000C8A 358 000C8A ;C / n1 n2 -- n3 signed divide 359 000C8A ; /MOD nip ; 360 000C8A HEADER SLASH,1,'/',DOCOLON 360.1 000000 PUBLIC SLASH 360.2 000C8A .... DW link 360.3 000C8C FF DB 0FFh ; not immediate 360.4 000C8D link SET $ 360.5 000C8D 01 DB 1 360.6 000C8E 2F DB '/' 360.7 000C8F 00 EVEN 360.8 000C90 IF 'DOCOLON'='DOCODE' 360.9 000C90 SLASH: DW $+2 360.10 000C90 ELSE 360.11 000C90 .... SLASH: DW DOCOLON 360.12 000C92 ENDIF 360.13 000C92 ENDM 361 000C92 ............ DW SLASHMOD,NIP,EXIT 362 000C98 363 000C98 ;C MOD n1 n2 -- n3 signed remainder 364 000C98 ; /MOD DROP ; 365 000C98 HEADER MODD,3,'MOD',DOCOLON 365.1 000000 PUBLIC MODD 365.2 000C98 .... DW link 365.3 000C9A FF DB 0FFh ; not immediate 365.4 000C9B link SET $ 365.5 000C9B 03 DB 3 365.6 000C9C 4D4F44 DB 'MOD' 365.7 000C9F 00 EVEN 365.8 000CA0 IF 'DOCOLON'='DOCODE' 365.9 000CA0 MODD: DW $+2 365.10 000CA0 ELSE 365.11 000CA0 .... MODD: DW DOCOLON 365.12 000CA2 ENDIF 365.13 000CA2 ENDM 366 000CA2 ............ DW SLASHMOD,DROP,EXIT 367 000CA8 368 000CA8 ;C */MOD n1 n2 n3 -- n4 n5 n1*n2/n3, rem" 369 000CA8 ; >R M* R> FM/MOD ; 370 000CA8 HEADER SSMOD,5,'*/MOD',DOCOLON 370.1 000000 PUBLIC SSMOD 370.2 000CA8 .... DW link 370.3 000CAA FF DB 0FFh ; not immediate 370.4 000CAB link SET $ 370.5 000CAB 05 DB 5 370.6 000CAC 2A2F4D4F44 DB '*/MOD' 370.7 000CB1 00 EVEN 370.8 000CB2 IF 'DOCOLON'='DOCODE' 370.9 000CB2 SSMOD: DW $+2 370.10 000CB2 ELSE 370.11 000CB2 .... SSMOD: DW DOCOLON 370.12 000CB4 ENDIF 370.13 000CB4 ENDM 371 000CB4 ............* DW TOR,MSTAR,RFROM,FMSLASHMOD,EXIT - 4e-config - Page 89 372 000CBE 373 000CBE ;C */ n1 n2 n3 -- n4 n1*n2/n3 374 000CBE ; */MOD nip ; 375 000CBE HEADER STARSLASH,2,'*/',DOCOLON 375.1 000000 PUBLIC STARSLASH 375.2 000CBE .... DW link 375.3 000CC0 FF DB 0FFh ; not immediate 375.4 000CC1 link SET $ 375.5 000CC1 02 DB 2 375.6 000CC2 2A2F DB '*/' 375.7 000CC4 EVEN 375.8 000CC4 IF 'DOCOLON'='DOCODE' 375.9 000CC4 STARSLASH: DW $+2 375.10 000CC4 ELSE 375.11 000CC4 .... STARSLASH: DW DOCOLON 375.12 000CC6 ENDIF 375.13 000CC6 ENDM 376 000CC6 ............ DW SSMOD,NIP,EXIT 377 000CCC 378 000CCC ;C MAX n1 n2 -- n3 signed maximum 379 000CCC ; 2DUP < IF SWAP THEN DROP ; 380 000CCC HEADER MAX,3,'MAX',DOCOLON 380.1 000000 PUBLIC MAX 380.2 000CCC .... DW link 380.3 000CCE FF DB 0FFh ; not immediate 380.4 000CCF link SET $ 380.5 000CCF 03 DB 3 380.6 000CD0 4D4158 DB 'MAX' 380.7 000CD3 00 EVEN 380.8 000CD4 IF 'DOCOLON'='DOCODE' 380.9 000CD4 MAX: DW $+2 380.10 000CD4 ELSE 380.11 000CD4 .... MAX: DW DOCOLON 380.12 000CD6 ENDIF 380.13 000CD6 ENDM 381 000CD6 ............ DW TWODUP,LESS,qbran 382 000CDC DEST MAX1 382.1 000CDC 0400 DW MAX1-$ 382.2 000CDE ENDM 383 000CDE .... DW SWAP 384 000CE0 ........ MAX1: DW DROP,EXIT 385 000CE4 386 000CE4 ;C MIN n1 n2 -- n3 signed minimum 387 000CE4 ; 2DUP > IF SWAP THEN DROP ; 388 000CE4 HEADER MIN,3,'MIN',DOCOLON 388.1 000000 PUBLIC MIN 388.2 000CE4 .... DW link 388.3 000CE6 FF DB 0FFh ; not immediate 388.4 000CE7 link SET $ 388.5 000CE7 03 DB 3 388.6 000CE8 4D494E DB 'MIN' 388.7 000CEB 00 EVEN 388.8 000CEC IF 'DOCOLON'='DOCODE' 388.9 000CEC MIN: DW $+2 388.10 000CEC ELSE 388.11 000CEC .... MIN: DW DOCOLON 388.12 000CEE ENDIF 388.13 000CEE ENDM 389 000CEE ............ DW TWODUP,GREATER,qbran 390 000CF4 DEST MIN1 390.1 000CF4 0400 DW MIN1-$ 390.2 000CF6 ENDM 391 000CF6 .... DW SWAP 392 000CF8 ........ MIN1: DW DROP,EXIT 393 000CFC 394 000CFC ; DOUBLE OPERATORS ============================= = 395 000CFC 396 000CFC ;C 2@ a-addr -- x1 x2 fetch 2 cells 397 000CFC ; DUP CELL+ @ SWAP @ ; 398 000CFC ; the lower address will appear on top of stack 399 000CFC HEADER TWOFETCH,2,'2@',DOCOLON 399.1 000000 PUBLIC TWOFETCH 399.2 000CFC .... DW link 399.3 000CFE FF DB 0FFh ; not immediate 399.4 000CFF link SET $ 399.5 000CFF 02 DB 2 - 4e-config - Page 90 399.6 000D00 3240 DB '2@' 399.7 000D02 EVEN 399.8 000D02 IF 'DOCOLON'='DOCODE' 399.9 000D02 TWOFETCH: DW $+2 399.10 000D02 ELSE 399.11 000D02 .... TWOFETCH: DW DOCOLON 399.12 000D04 ENDIF 399.13 000D04 ENDM 400 000D04 ............* DW DUP,CELLPLUS,FETCH,SWAP,FETCH,EXIT 401 000D10 402 000D10 ;C 2! x1 x2 a-addr -- store 2 cells 403 000D10 ; SWAP OVER ! CELL+ ! ; 404 000D10 ; the top of stack is stored at the lower adrs 405 000D10 HEADER TWOSTORE,2,'2!',DOCOLON 405.1 000000 PUBLIC TWOSTORE 405.2 000D10 .... DW link 405.3 000D12 FF DB 0FFh ; not immediate 405.4 000D13 link SET $ 405.5 000D13 02 DB 2 405.6 000D14 3221 DB '2!' 405.7 000D16 EVEN 405.8 000D16 IF 'DOCOLON'='DOCODE' 405.9 000D16 TWOSTORE: DW $+2 405.10 000D16 ELSE 405.11 000D16 .... TWOSTORE: DW DOCOLON 405.12 000D18 ENDIF 405.13 000D18 ENDM 406 000D18 ............* DW SWAP,OVER,STORE,CELLPLUS,STORE,EXIT 407 000D24 408 000D24 ;C 2DROP x1 x2 -- drop 2 cells 409 000D24 ; DROP DROP ; 410 000D24 HEADER TWODROP,5,'2DROP',DOCOLON 410.1 000000 PUBLIC TWODROP 410.2 000D24 .... DW link 410.3 000D26 FF DB 0FFh ; not immediate 410.4 000D27 link SET $ 410.5 000D27 05 DB 5 410.6 000D28 3244524F50 DB '2DROP' 410.7 000D2D 00 EVEN 410.8 000D2E IF 'DOCOLON'='DOCODE' 410.9 000D2E TWODROP: DW $+2 410.10 000D2E ELSE 410.11 000D2E .... TWODROP: DW DOCOLON 410.12 000D30 ENDIF 410.13 000D30 ENDM 411 000D30 ............ DW DROP,DROP,EXIT 412 000D36 413 000D36 ;C 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2 cells 414 000D36 ; OVER OVER ; 415 000D36 HEADER TWODUP,4,'2DUP',DOCOLON 415.1 000000 PUBLIC TWODUP 415.2 000D36 .... DW link 415.3 000D38 FF DB 0FFh ; not immediate 415.4 000D39 link SET $ 415.5 000D39 04 DB 4 415.6 000D3A 32445550 DB '2DUP' 415.7 000D3E EVEN 415.8 000D3E IF 'DOCOLON'='DOCODE' 415.9 000D3E TWODUP: DW $+2 415.10 000D3E ELSE 415.11 000D3E .... TWODUP: DW DOCOLON 415.12 000D40 ENDIF 415.13 000D40 ENDM 416 000D40 ............ DW OVER,OVER,EXIT 417 000D46 418 000D46 ;C 2SWAP x1 x2 x3 x4 -- x3 x4 x1 x2 per diagram 419 000D46 ; ROT >R ROT R> ; 420 000D46 HEADER TWOSWAP,5,'2SWAP',DOCOLON 420.1 000000 PUBLIC TWOSWAP 420.2 000D46 .... DW link 420.3 000D48 FF DB 0FFh ; not immediate 420.4 000D49 link SET $ 420.5 000D49 05 DB 5 420.6 000D4A 3253574150 DB '2SWAP' 420.7 000D4F 00 EVEN - 4e-config - Page 91 420.8 000D50 IF 'DOCOLON'='DOCODE' 420.9 000D50 TWOSWAP: DW $+2 420.10 000D50 ELSE 420.11 000D50 .... TWOSWAP: DW DOCOLON 420.12 000D52 ENDIF 420.13 000D52 ENDM 421 000D52 ............* DW ROT,TOR,ROT,RFROM,EXIT 422 000D5C 423 000D5C ;C 2OVER x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 424 000D5C ; >R >R 2DUP R> R> 2SWAP ; 425 000D5C HEADER TWOOVER,5,'2OVER',DOCOLON 425.1 000000 PUBLIC TWOOVER 425.2 000D5C .... DW link 425.3 000D5E FF DB 0FFh ; not immediate 425.4 000D5F link SET $ 425.5 000D5F 05 DB 5 425.6 000D60 324F564552 DB '2OVER' 425.7 000D65 00 EVEN 425.8 000D66 IF 'DOCOLON'='DOCODE' 425.9 000D66 TWOOVER: DW $+2 425.10 000D66 ELSE 425.11 000D66 .... TWOOVER: DW DOCOLON 425.12 000D68 ENDIF 425.13 000D68 ENDM 426 000D68 ............* DW TOR,TOR,TWODUP,RFROM,RFROM 427 000D72 ........ DW TWOSWAP,EXIT 428 000D76 429 000D76 ; INPUT/OUTPUT ================================= = 430 000D76 431 000000 PUBLIC DOCR 432 000D76 433 000D76 ;C COUNT c-addr1 -- c-addr2 u counted->adr/le n 434 000D76 ; DUP CHAR+ SWAP C@ ; 435 000D76 HEADER COUNT,5,'COUNT',DOCOLON 435.1 000000 PUBLIC COUNT 435.2 000D76 .... DW link 435.3 000D78 FF DB 0FFh ; not immediate 435.4 000D79 link SET $ 435.5 000D79 05 DB 5 435.6 000D7A 434F554E54 DB 'COUNT' 435.7 000D7F 00 EVEN 435.8 000D80 IF 'DOCOLON'='DOCODE' 435.9 000D80 COUNT: DW $+2 435.10 000D80 ELSE 435.11 000D80 .... COUNT: DW DOCOLON 435.12 000D82 ENDIF 435.13 000D82 ENDM 436 000D82 ............* DW DUP,CHARPLUS,SWAP,CFETCH,EXIT 437 000D8C 438 000D8C ;C DOCR -- output newline 439 000D8C ; 0D EMIT 0A EMIT ; 440 000D8C HEADER DOCR,4,'DOCR',DOCOLON 440.1 000D8C PUBLIC DOCR 440.2 000D8C .... DW link 440.3 000D8E FF DB 0FFh ; not immediate 440.4 000D8F link SET $ 440.5 000D8F 04 DB 4 440.6 000D90 444F4352 DB 'DOCR' 440.7 000D94 EVEN 440.8 000D94 IF 'DOCOLON'='DOCODE' 440.9 000D94 DOCR: DW $+2 440.10 000D94 ELSE 440.11 000D94 .... DOCR: DW DOCOLON 440.12 000D96 ENDIF 440.13 000D96 ENDM 441 000D96 ....0D00....* DW lit,0dh,EMIT,lit,0ah,EMIT,EXIT 442 000DA4 443 000DA4 ;C CR -- output newline 444 000DA4 ; userkey @ execute ; 445 000DA4 HEADER CR,2,'CR',DOCOLON 445.1 000000 PUBLIC CR 445.2 000DA4 .... DW link 445.3 000DA6 FF DB 0FFh ; not immediate 445.4 000DA7 link SET $ - 4e-config - Page 92 445.5 000DA7 02 DB 2 445.6 000DA8 4352 DB 'CR' 445.7 000DAA EVEN 445.8 000DAA IF 'DOCOLON'='DOCODE' 445.9 000DAA CR: DW $+2 445.10 000DAA ELSE 445.11 000DAA .... CR: DW DOCOLON 445.12 000DAC ENDIF 445.13 000DAC ENDM 446 000DAC ............* DW NEWLINE,FETCH,EXECUTE,EXIT 447 000DB4 448 000DB4 ;C SPACE -- output a space 449 000DB4 ; BL EMIT ; 450 000DB4 HEADER SPACE,5,'SPACE',DOCOLON 450.1 000000 PUBLIC SPACE 450.2 000DB4 .... DW link 450.3 000DB6 FF DB 0FFh ; not immediate 450.4 000DB7 link SET $ 450.5 000DB7 05 DB 5 450.6 000DB8 5350414345 DB 'SPACE' 450.7 000DBD 00 EVEN 450.8 000DBE IF 'DOCOLON'='DOCODE' 450.9 000DBE SPACE: DW $+2 450.10 000DBE ELSE 450.11 000DBE .... SPACE: DW DOCOLON 450.12 000DC0 ENDIF 450.13 000DC0 ENDM 451 000DC0 ............ DW BLANK,EMIT,EXIT 452 000DC6 453 000DC6 ;C SPACES n -- output n spaces 454 000DC6 ; BEGIN DUP WHILE SPACE 1- REPEAT DROP ; 455 000DC6 HEADER SPACES,6,'SPACES',DOCOLON 455.1 000000 PUBLIC SPACES 455.2 000DC6 .... DW link 455.3 000DC8 FF DB 0FFh ; not immediate 455.4 000DC9 link SET $ 455.5 000DC9 06 DB 6 455.6 000DCA 535041434553 DB 'SPACES' 455.7 000DD0 EVEN 455.8 000DD0 IF 'DOCOLON'='DOCODE' 455.9 000DD0 SPACES: DW $+2 455.10 000DD0 ELSE 455.11 000DD0 .... SPACES: DW DOCOLON 455.12 000DD2 ENDIF 455.13 000DD2 ENDM 456 000DD2 ........ SPCS1: DW DUP,qbran 457 000DD6 DEST SPCS2 457.1 000DD6 0A00 DW SPCS2-$ 457.2 000DD8 ENDM 458 000DD8 ............ DW SPACE,ONEMINUS,bran 459 000DDE DEST SPCS1 459.1 000DDE F4FF DW SPCS1-$ 459.2 000DE0 ENDM 460 000DE0 ........ SPCS2: DW DROP,EXIT 461 000DE4 462 000DE4 ;Z umin u1 u2 -- u unsigned minimum 463 000DE4 ; 2DUP U> IF SWAP THEN DROP ; 464 000DE4 HEADER UMIN,4,'UMIN',DOCOLON 464.1 000000 PUBLIC UMIN 464.2 000DE4 .... DW link 464.3 000DE6 FF DB 0FFh ; not immediate 464.4 000DE7 link SET $ 464.5 000DE7 04 DB 4 464.6 000DE8 554D494E DB 'UMIN' 464.7 000DEC EVEN 464.8 000DEC IF 'DOCOLON'='DOCODE' 464.9 000DEC UMIN: DW $+2 464.10 000DEC ELSE 464.11 000DEC .... UMIN: DW DOCOLON 464.12 000DEE ENDIF 464.13 000DEE ENDM 465 000DEE ............ DW TWODUP,UGREATER,qbran 466 000DF4 DEST UMIN1 466.1 000DF4 0400 DW UMIN1-$ 466.2 000DF6 ENDM 467 000DF6 .... DW SWAP 468 000DF8 ........ UMIN1: DW DROP,EXIT - 4e-config - Page 93 469 000DFC 470 000DFC ;Z umax u1 u2 -- u unsigned maximum 471 000DFC ; 2DUP U< IF SWAP THEN DROP ; 472 000DFC HEADER UMAX,4,'UMAX',DOCOLON 472.1 000000 PUBLIC UMAX 472.2 000DFC .... DW link 472.3 000DFE FF DB 0FFh ; not immediate 472.4 000DFF link SET $ 472.5 000DFF 04 DB 4 472.6 000E00 554D4158 DB 'UMAX' 472.7 000E04 EVEN 472.8 000E04 IF 'DOCOLON'='DOCODE' 472.9 000E04 UMAX: DW $+2 472.10 000E04 ELSE 472.11 000E04 .... UMAX: DW DOCOLON 472.12 000E06 ENDIF 472.13 000E06 ENDM 473 000E06 ............ DW TWODUP,ULESS,qbran 474 000E0C DEST UMAX1 474.1 000E0C 0400 DW UMAX1-$ 474.2 000E0E ENDM 475 000E0E .... DW SWAP 476 000E10 ........ UMAX1: DW DROP,EXIT 477 000E14 478 000E14 ; C .ERR# n -- print error number 479 000E14 HEADER DOTERRN,5,'.ERR#',DOCOLON 479.1 000000 PUBLIC DOTERRN 479.2 000E14 .... DW link 479.3 000E16 FF DB 0FFh ; not immediate 479.4 000E17 link SET $ 479.5 000E17 05 DB 5 479.6 000E18 2E45525223 DB '.ERR#' 479.7 000E1D 00 EVEN 479.8 000E1E IF 'DOCOLON'='DOCODE' 479.9 000E1E DOTERRN: DW $+2 479.10 000E1E ELSE 479.11 000E1E .... DOTERRN: DW DOCOLON 479.12 000E20 ENDIF 479.13 000E20 ENDM 480 000E20 ....1500.... DW lit,15H,EMIT ; emit a NAK ($15) 481 000E26 ....3F00.... DW lit,3FH,EMIT 482 000E2C ............* DW BASE,FETCH,TOR,DECIMAL 483 000E34 .... DW DOT 484 000E36 ............ DW RFROM,BASE,STORE 485 000E3C .... DW EXIT 486 000E3E 487 000E3E ; C ?TIB adr1 adr2 -- error if line too long 488 000E3E HEADERLESS QTIB,4,'?TIB',DOCOLON 488.1 000000 PUBLIC QTIB 488.2 000E3E IF 'DOCOLON'='DOCODE' 488.3 000E3E QTIB: DW $+2 488.4 000E3E ELSE 488.5 000E3E .... QTIB: DW DOCOLON 488.6 000E40 ENDIF 488.7 000E40 ENDM 489 000E40 ........ DW GREATER,qbran 490 000E44 DEST QTIB1 490.1 000E44 0C00 DW QTIB1-$ 490.2 000E46 ENDM 491 000E46 ....9601.... DW lit,406,DOTERRN 492 000E4C ........ DW CR,ABORT 493 000E50 .... QTIB1: DW EXIT 494 000E52 495 000E52 ;C ACCEPT c-addr +n -- +n' get line from term'l 496 000E52 ; OVER + 1- OVER -- sa ea a 497 000E52 ; BEGIN KEY -- sa ea a c 498 000E52 ; DUP 0D <> WHILE 499 000E52 ; DUP EMIT -- sa ea a c 500 000E52 ; DUP 8 = IF DROP 1- >R OVER R> UMAX 501 000E52 ; ELSE OVER C! 1+ OVER UMIN 502 000E52 ; THEN -- sa ea a 503 000E52 ; REPEAT -- sa ea a c 504 000E52 ; DROP NIP SWAP - ; 505 000E52 HEADER ACCEPT,6,'ACCEPT',DOCOLON - 4e-config - Page 94 505.1 000000 PUBLIC ACCEPT 505.2 000E52 .... DW link 505.3 000E54 FF DB 0FFh ; not immediate 505.4 000E55 link SET $ 505.5 000E55 06 DB 6 505.6 000E56 414343455054 DB 'ACCEPT' 505.7 000E5C EVEN 505.8 000E5C IF 'DOCOLON'='DOCODE' 505.9 000E5C ACCEPT: DW $+2 505.10 000E5C ELSE 505.11 000E5C .... ACCEPT: DW DOCOLON 505.12 000E5E ENDIF 505.13 000E5E ENDM 506 000E5E ............* DW OVER,PLUS,ONEMINUS,OVER 507 000E66 ACC1: ; DW KEY,DUP,lit,0DH,NOTEQUAL,qbran 508 000E66 .... DW KEY 509 000E68 ........0D00* DW DUP,lit,0DH,NOTEQUAL ; ( -- c f ) CR 510 000E70 ; DW OVER,lit,0AH,NOTEQUAL ; ( -- c f f ) LF 511 000E70 ; DW ANDD 512 000E70 .... DW qbran 513 000E72 DEST ACC5 513.1 000E72 3A00 DW ACC5-$ 513.2 000E74 ENDM 514 000E74 ........ DW DUP,EMIT 515 000E78 ; DW DUP,STORELEDS ; testing 516 000E78 ........0800* DW DUP,lit,8,EQUAL,qbran ;mk BS received? 517 000E82 DEST ACC3 517.1 000E82 1A00 DW ACC3-$ 517.2 000E84 ENDM 518 000E84 ............* DW DROP,ONEMINUS,TOR,OVER,RFROM,UMAX ;mk backspace handling 519 000E90 ........0800* DW SPACE,lit,8,EMIT ;mk $08 == BS (for tera term and hyterterminal) 520 000E98 .... DW bran 521 000E9A DEST ACC4 521.1 000E9A 0E00 DW ACC4-$ 521.2 000E9C ENDM 522 000E9C ; ( -- sa ea a c ) 523 000E9C ............ ACC3: DW OVER,CSTORE,ONEPLUS 524 000EA2 ; ( -- sa ea a+1 ) 525 000EA2 ; DW OVER,UMIN ; einfacher zähler stillstand 526 000EA2 ............ DW TWODUP,SWAP,QTIB ; line too long? 527 000EA8 .... ACC4: DW bran 528 000EAA DEST ACC1 528.1 000EAA BCFF DW ACC1-$ 528.2 000EAC ENDM 529 000EAC ............*ACC5: DW DROP,NIP,SWAP,MINUS,EXIT 530 000EB6 531 000EB6 ;C TYPE c-addr +n -- type line to term'l 532 000EB6 ; ?DUP IF 533 000EB6 ; OVER + SWAP DO I C@ EMIT LOOP 534 000EB6 ; ELSE DROP THEN ; 535 000EB6 HEADER TYP,4,'TYPE',DOCOLON 535.1 000000 PUBLIC TYP 535.2 000EB6 .... DW link 535.3 000EB8 FF DB 0FFh ; not immediate 535.4 000EB9 link SET $ 535.5 000EB9 04 DB 4 535.6 000EBA 54595045 DB 'TYPE' 535.7 000EBE EVEN 535.8 000EBE IF 'DOCOLON'='DOCODE' 535.9 000EBE TYP: DW $+2 535.10 000EBE ELSE 535.11 000EBE .... TYP: DW DOCOLON 535.12 000EC0 ENDIF 535.13 000EC0 ENDM 536 000EC0 ........ DW QDUP,qbran 537 000EC4 DEST TYP4 537.1 000EC4 1800 DW TYP4-$ 537.2 000EC6 ENDM 538 000EC6 ............* DW OVER,PLUS,SWAP,xdo - 4e-config - Page 95 539 000ECE ............*TYP3: DW II,CFETCH,EMIT,xloop 540 000ED6 DEST TYP3 540.1 000ED6 F8FF DW TYP3-$ 540.2 000ED8 ENDM 541 000ED8 .... DW bran 542 000EDA DEST TYP5 542.1 000EDA 0400 DW TYP5-$ 542.2 000EDC ENDM 543 000EDC .... TYP4: DW DROP 544 000EDE .... TYP5: DW EXIT 545 000EE0 546 000EE0 #define ITYPE TYP 547 000EE0 #define ICOUNT COUNT 548 000EE0 549 000EE0 ; HARVARD MODEL EXTENSIONS (split Code & Data) 550 000EE0 551 000EE0 /* 552 000EE0 ;Z ICOUNT c-addr1 -- c-addr2 u counted->adr/le n 553 000EE0 ; DUP CHAR+ SWAP IC@ ; from Code space 554 000EE0 HEADER ICOUNT,6,'ICOUNT',DOCOLON 555 000EE0 DW DUP,CHARPLUS,SWAP,ICFETCH,EXIT 556 000EE0 557 000EE0 ;Z ITYPE c-addr +n -- type line to term'l 558 000EE0 ; ?DUP IF from Code space 559 000EE0 ; OVER + SWAP DO I IC@ EMIT LOOP 560 000EE0 ; ELSE DROP THEN ; 561 000EE0 HEADER ITYPE,5,'ITYPE',DOCOLON 562 000EE0 DW QDUP,qbran 563 000EE0 DEST ITYP4 564 000EE0 DW OVER,PLUS,SWAP,xdo 565 000EE0 ITYP3: DW II,ICFETCH,EMIT,xloop 566 000EE0 DEST ITYP3 567 000EE0 DW bran 568 000EE0 DEST ITYP5 569 000EE0 ITYP4: DW DROP 570 000EE0 ITYP5: DW EXIT 571 000EE0 */ 572 000EE0 573 000EE0 574 000EE0 ;Z (IS") -- c-addr u run-time code for S" 575 000EE0 ; R> ICOUNT 2DUP + ALIGNED >R ; 576 000EE0 ; Harvard model, for string stored in Code space 577 000EE0 ; e.g. as used by ." 578 000EE0 HEADER XISQUOTE,5,'(IS")',DOCOLON 578.1 000000 PUBLIC XISQUOTE 578.2 000EE0 .... DW link 578.3 000EE2 FF DB 0FFh ; not immediate 578.4 000EE3 link SET $ 578.5 000EE3 05 DB 5 578.6 000EE4 2849532229 DB '(IS")' 578.7 000EE9 00 EVEN 578.8 000EEA IF 'DOCOLON'='DOCODE' 578.9 000EEA XISQUOTE: DW $+2 578.10 000EEA ELSE 578.11 000EEA .... XISQUOTE: DW DOCOLON 578.12 000EEC ENDIF 578.13 000EEC ENDM 579 000EEC ............* DW RFROM,ICOUNT,TWODUP,PLUS,ALIGNED,TOR 580 000EF8 .... DW EXIT 581 000EFA 582 000EFA ;Z (S") -- c-addr u run-time code for S" 583 000EFA ; R@ I@ get Data address 584 000EFA ; R> CELL+ DUP IC@ CHAR+ -- Dadr Radr+2 n+1 585 000EFA ; 2DUP + ALIGNED >R -- Dadr Iadr n+1 586 000EFA ; >R OVER R> I->D -- Dadr 587 000EFA ; COUNT ; 588 000EFA ; Harvard model, for string stored in Code - 4e-config - Page 96 space 589 000EFA ; which is copied to Data space. 590 000EFA HEADER XSQUOTE,4,'(S")',DOCOLON 590.1 000000 PUBLIC XSQUOTE 590.2 000EFA .... DW link 590.3 000EFC FF DB 0FFh ; not immediate 590.4 000EFD link SET $ 590.5 000EFD 04 DB 4 590.6 000EFE 28532229 DB '(S")' 590.7 000F02 EVEN 590.8 000F02 IF 'DOCOLON'='DOCODE' 590.9 000F02 XSQUOTE: DW $+2 590.10 000F02 ELSE 590.11 000F02 .... XSQUOTE: DW DOCOLON 590.12 000F04 ENDIF 590.13 000F04 ENDM 591 000F04 ........ DW RFETCH,IFETCH 592 000F08 ............* DW RFROM,CELLPLUS,DUP,ICFETCH,CHARPLUS 593 000F12 ............* DW TWODUP,PLUS,ALIGNED,TOR 594 000F1A ............* DW TOR,OVER,RFROM,ITOD,COUNT,EXIT 595 000F26 596 000F26 ;Z IS" -- compile in-line string 597 000F26 ; COMPILE (IS") [ HEX ] 598 000F26 ; 22 PARSE ( -- c-addr n ) 599 000F26 ; DUP >R IC, IHERE R@ D->I 600 000F26 ; R> IALLOT ALIGN ; IMMEDIATE 601 000F26 ; Harvard model: string is stored in Code space 602 000F26 IMMED ISQUOTE,3,'IS"',DOCOLON 602.1 000000 PUBLIC ISQUOTE 602.2 000F26 .... DW link 602.3 000F28 FE DB 0FEh // ; immediate (LSB=0) 602.4 000F29 link SET $ 602.5 000F29 03 DB 3 602.6 000F2A 495322 DB 'IS"' 602.7 000F2D 00 EVEN 602.8 000F2E IF 'DOCOLON'='DOCODE' 602.9 000F2E ISQUOTE: DW $+2 602.10 000F2E ELSE 602.11 000F2E .... ISQUOTE: DW DOCOLON 602.12 000F30 ENDIF 602.13 000F30 ENDM 603 000F30 ............ DW lit,XISQUOTE,COMMAXT 604 000F36 ....2200.... DW lit,22H,PARSE 605 000F3C ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI 606 000F48 ............* DW RFROM,IALLOT,ALIGNN,EXIT 607 000F50 608 000F50 ;Z IS" -- compile in-line string OLD DEF'N 609 000F50 ; COMPILE (IS") [ HEX ] 610 000F50 ; 22 IWORD 611 000F50 ; IC@ 1+ ALIGNED IALLOT ; IMMEDIATE 612 000F50 ; Harvard model: string is stored in Code space 613 000F50 ; IMMED ISQUOTE,3,'IS"',DOCOLON 614 000F50 ; DW lit,XISQUOTE,COMMAXT 615 000F50 ; DW lit,22H,IWORD 616 000F50 ; DW ICFETCH,ONEPLUS,ALIGNED,IALLOT,EXIT 617 000F50 618 000F50 ;C S" -- compile in-line string 619 000F50 ; COMPILE (S") [ HEX ] 620 000F50 ; HERE I, data address 621 000F50 ; 22 PARSE ( -- c-addr n ) 622 000F50 ; DUP >R IC, IHERE R@ D->I 623 000F50 ; R@ 1+ ALLOT reserve RAM space 624 000F50 ; R> IALLOT ALIGN ; IMMEDIATE 625 000F50 ; Harvard model: string is stored in Code space 626 000F50 IMMED SQUOTE,2,'S"',DOCOLON 626.1 000000 PUBLIC SQUOTE 626.2 000F50 .... DW link 626.3 000F52 FE DB 0FEh // ; immediate (LSB=0) 626.4 000F53 link SET $ - 4e-config - Page 97 626.5 000F53 02 DB 2 626.6 000F54 5322 DB 'S"' 626.7 000F56 EVEN 626.8 000F56 IF 'DOCOLON'='DOCODE' 626.9 000F56 SQUOTE: DW $+2 626.10 000F56 ELSE 626.11 000F56 .... SQUOTE: DW DOCOLON 626.12 000F58 ENDIF 626.13 000F58 ENDM 627 000F58 ............ DW lit,XSQUOTE,COMMAXT 628 000F5E ............* DW HERE,ICOMMA,lit,22H,PARSE 629 000F68 ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI 630 000F74 ............ DW RFETCH,ONEPLUS,ALLOT 631 000F7A ............* DW RFROM,IALLOT,ALIGNN,EXIT 632 000F82 633 000F82 ;C S" -- compile in-line string OLD DEF'N 634 000F82 ; COMPILE (S") [ HEX ] 635 000F82 ; HERE I, data address 636 000F82 ; 22 IWORD 637 000F82 ; IC@ 1+ ALIGNED 638 000F82 ; DUP ALLOT IALLOT ; IMMEDIATE 639 000F82 ; Harvard model: string is stored in Code space 640 000F82 ; IMMED SQUOTE,2,'S"',DOCOLON 641 000F82 ; DW lit,XSQUOTE,COMMAXT 642 000F82 ; DW HERE,ICOMMA,lit,22H,IWORD 643 000F82 ; DW ICFETCH,ONEPLUS,ALIGNED 644 000F82 ; DW DUP,ALLOT,IALLOT,EXIT 645 000F82 646 000F82 ;C ." -- compile string to print 647 000F82 ; POSTPONE IS" POSTPONE ITYPE ; IMMEDIATE 648 000F82 IMMED DOTQUOTE,2,'."',DOCOLON 648.1 000000 PUBLIC DOTQUOTE 648.2 000F82 .... DW link 648.3 000F84 FE DB 0FEh // ; immediate (LSB=0) 648.4 000F85 link SET $ 648.5 000F85 02 DB 2 648.6 000F86 2E22 DB '."' 648.7 000F88 EVEN 648.8 000F88 IF 'DOCOLON'='DOCODE' 648.9 000F88 DOTQUOTE: DW $+2 648.10 000F88 ELSE 648.11 000F88 .... DOTQUOTE: DW DOCOLON 648.12 000F8A ENDIF 648.13 000F8A ENDM 649 000F8A .... DW ISQUOTE 650 000F8C ............ DW lit,ITYPE,COMMAXT 651 000F92 .... DW EXIT 652 000F94 653 000F94 ;Z IWORD c -- c-addr WORD to Code space 654 000F94 ; WORD 655 000F94 ; IHERE TUCK OVER C@ CHAR+ D->I ; 656 000F94 HEADER IWORD,5,'IWORD',DOCOLON 656.1 000000 PUBLIC IWORD 656.2 000F94 .... DW link 656.3 000F96 FF DB 0FFh ; not immediate 656.4 000F97 link SET $ 656.5 000F97 05 DB 5 656.6 000F98 49574F5244 DB 'IWORD' 656.7 000F9D 00 EVEN 656.8 000F9E IF 'DOCOLON'='DOCODE' 656.9 000F9E IWORD: DW $+2 656.10 000F9E ELSE 656.11 000F9E .... IWORD: DW DOCOLON 656.12 000FA0 ENDIF 656.13 000FA0 ENDM 657 000FA0 .... DW WORDD 658 000FA2 ............*IWORD1: DW IHERE,TUCK,OVER,CFETCH 659 000FAA ............ DW CHARPLUS,DTOI,EXIT 660 000FB0 661 000FB0 ;Z IWORDC c -- c-addr maybe capitalize WORD to Code space 662 000FB0 ; WORD CAPITALIZE 663 000FB0 ; IHERE TUCK OVER C@ CHAR+ D->I ; - 4e-config - Page 98 664 000FB0 ; HEADER IWORDC,6,'IWORDC',DOCOLON 665 000FB0 HEADLESS IWORDC, DOCOLON 665.1 000000 PUBLIC IWORDC 665.2 000FB0 IF 'DOCOLON'='DOCODE' 665.3 000FB0 IWORDC: DW $+2 665.4 000FB0 ELSE 665.5 000FB0 .... IWORDC: DW DOCOLON 665.6 000FB2 ENDIF 665.7 000FB2 ENDM 666 000FB2 ........ DW WORDD, CAPITALIZE 667 000FB6 .... DW bran 668 000FB8 DEST IWORD1 668.1 000FB8 EAFF DW IWORD1-$ 668.2 000FBA ENDM 669 000FBA 670 000FBA ; SEPARATE HEADER EXTENSIONS ARE NOT USED 671 000FBA #define HCOUNT ICOUNT 672 000FBA #define HTYPE ITYPE 673 000FBA #define HWORD IWORDC 674 000FBA 675 000FBA ; NUMERIC OUTPUT =============================== = 676 000FBA ; Numeric conversion is done l.s.digit first, so 677 000FBA ; the output buffer is built backwards in memory. 678 000FBA 679 000FBA ; Some double-precision arithmetic operators are 680 000FBA ; needed to implement ANSI numeric conversion. 681 000FBA 682 000FBA ;Z UD/MOD ud1 u2 -- u3 ud4 32/16->32 divide 683 000FBA ; >R 0 R@ UM/MOD ROT ROT R> UM/MOD ROT ; 684 000FBA HEADER UDSLASHMOD,6,'UD/MOD',DOCOLON 684.1 000000 PUBLIC UDSLASHMOD 684.2 000FBA .... DW link 684.3 000FBC FF DB 0FFh ; not immediate 684.4 000FBD link SET $ 684.5 000FBD 06 DB 6 684.6 000FBE 55442F4D4F44 DB 'UD/MOD' 684.7 000FC4 EVEN 684.8 000FC4 IF 'DOCOLON'='DOCODE' 684.9 000FC4 UDSLASHMOD: DW $+2 684.10 000FC4 ELSE 684.11 000FC4 .... UDSLASHMOD: DW DOCOLON 684.12 000FC6 ENDIF 684.13 000FC6 ENDM 685 000FC6 ............* DW TOR,ZERO,RFETCH,UMSLASHMOD,ROT,ROT 686 000FD2 ............* DW RFROM,UMSLASHMOD,ROT,EXIT 687 000FDA 688 000FDA ;Z UD* ud1 d2 -- ud3 32*16->32 multiply 689 000FDA ; DUP >R UM* DROP SWAP R> UM* ROT + ; 690 000FDA HEADER UDSTAR,3,'UD*',DOCOLON 690.1 000000 PUBLIC UDSTAR 690.2 000FDA .... DW link 690.3 000FDC FF DB 0FFh ; not immediate 690.4 000FDD link SET $ 690.5 000FDD 03 DB 3 690.6 000FDE 55442A DB 'UD*' 690.7 000FE1 00 EVEN 690.8 000FE2 IF 'DOCOLON'='DOCODE' 690.9 000FE2 UDSTAR: DW $+2 690.10 000FE2 ELSE 690.11 000FE2 .... UDSTAR: DW DOCOLON 690.12 000FE4 ENDIF 690.13 000FE4 ENDM 691 000FE4 ............* DW DUP,TOR,UMSTAR,DROP 692 000FEC ............* DW SWAP,RFROM,UMSTAR,ROT,PLUS,EXIT 693 000FF8 694 000FF8 ;C HOLD char -- add char to output string 695 000FF8 ; -1 HP +! HP @ C! ; 696 000FF8 HEADER HOLD,4,'HOLD',DOCOLON 696.1 000000 PUBLIC HOLD - 4e-config - Page 99 696.2 000FF8 .... DW link 696.3 000FFA FF DB 0FFh ; not immediate 696.4 000FFB link SET $ 696.5 000FFB 04 DB 4 696.6 000FFC 484F4C44 DB 'HOLD' 696.7 001000 EVEN 696.8 001000 IF 'DOCOLON'='DOCODE' 696.9 001000 HOLD: DW $+2 696.10 001000 ELSE 696.11 001000 .... HOLD: DW DOCOLON 696.12 001002 ENDIF 696.13 001002 ENDM 697 001002 ....FFFF....* DW lit,-1,HP,PLUSSTORE 698 00100A ............* DW HP,FETCH,CSTORE,EXIT 699 001012 700 001012 ;C <# -- begin numeric conversion 701 001012 ; PAD HP ! ; (initialize Hold Pointer) 702 001012 HEADER LESSNUM,2,'<#',DOCOLON 702.1 000000 PUBLIC LESSNUM 702.2 001012 .... DW link 702.3 001014 FF DB 0FFh ; not immediate 702.4 001015 link SET $ 702.5 001015 02 DB 2 702.6 001016 3C23 DB '<#' 702.7 001018 EVEN 702.8 001018 IF 'DOCOLON'='DOCODE' 702.9 001018 LESSNUM: DW $+2 702.10 001018 ELSE 702.11 001018 .... LESSNUM: DW DOCOLON 702.12 00101A ENDIF 702.13 00101A ENDM 703 00101A ............* DW PAD,HP,STORE,EXIT 704 001022 705 001022 ;Z >digit n -- c convert to 0..9A..Z 706 001022 ; [ HEX ] DUP 9 > 7 AND + 30 + ; 707 001022 HEADER TODIGIT,6,'>DIGIT',DOCOLON 707.1 000000 PUBLIC TODIGIT 707.2 001022 .... DW link 707.3 001024 FF DB 0FFh ; not immediate 707.4 001025 link SET $ 707.5 001025 06 DB 6 707.6 001026 3E4449474954 DB '>DIGIT' 707.7 00102C EVEN 707.8 00102C IF 'DOCOLON'='DOCODE' 707.9 00102C TODIGIT: DW $+2 707.10 00102C ELSE 707.11 00102C .... TODIGIT: DW DOCOLON 707.12 00102E ENDIF 707.13 00102E ENDM 708 00102E ........0900* DW DUP,lit,9,GREATER,lit,7,ANDD,PLUS 709 00103E ....3000....* DW lit,30H,PLUS,EXIT 710 001046 711 001046 ;C # ud1 -- ud2 convert 1 digit of output 712 001046 ; BASE @ UD/MOD ROT >digit HOLD ; 713 001046 HEADER NUM,1,'#',DOCOLON 713.1 000000 PUBLIC NUM 713.2 001046 .... DW link 713.3 001048 FF DB 0FFh ; not immediate 713.4 001049 link SET $ 713.5 001049 01 DB 1 713.6 00104A 23 DB '#' 713.7 00104B 00 EVEN 713.8 00104C IF 'DOCOLON'='DOCODE' 713.9 00104C NUM: DW $+2 713.10 00104C ELSE 713.11 00104C .... NUM: DW DOCOLON 713.12 00104E ENDIF 713.13 00104E ENDM 714 00104E ............* DW BASE,FETCH,UDSLASHMOD,ROT,TODIGIT 715 001058 ........ DW HOLD,EXIT 716 00105C 717 00105C ;C #S ud1 -- ud2 convert remaining digits 718 00105C ; BEGIN # 2DUP OR 0= UNTIL ; 719 00105C HEADER NUMS,2,'#S',DOCOLON 719.1 000000 PUBLIC NUMS - 4e-config - Page 100 719.2 00105C .... DW link 719.3 00105E FF DB 0FFh ; not immediate 719.4 00105F link SET $ 719.5 00105F 02 DB 2 719.6 001060 2353 DB '#S' 719.7 001062 EVEN 719.8 001062 IF 'DOCOLON'='DOCODE' 719.9 001062 NUMS: DW $+2 719.10 001062 ELSE 719.11 001062 .... NUMS: DW DOCOLON 719.12 001064 ENDIF 719.13 001064 ENDM 720 001064 ............*NUMS1: DW NUM,TWODUP,ORR,ZEROEQUAL,qbran 721 00106E DEST NUMS1 721.1 00106E F6FF DW NUMS1-$ 721.2 001070 ENDM 722 001070 .... DW EXIT 723 001072 724 001072 ;C #> ud1 -- c-addr u end conv., get string 725 001072 ; 2DROP HP @ PAD OVER - ; 726 001072 HEADER NUMGREATER,2,'#>',DOCOLON 726.1 000000 PUBLIC NUMGREATER 726.2 001072 .... DW link 726.3 001074 FF DB 0FFh ; not immediate 726.4 001075 link SET $ 726.5 001075 02 DB 2 726.6 001076 233E DB '#>' 726.7 001078 EVEN 726.8 001078 IF 'DOCOLON'='DOCODE' 726.9 001078 NUMGREATER: DW $+2 726.10 001078 ELSE 726.11 001078 .... NUMGREATER: DW DOCOLON 726.12 00107A ENDIF 726.13 00107A ENDM 727 00107A ............* DW TWODROP,HP,FETCH,PAD,OVER,MINUS,EXIT 728 001088 729 001088 ;C SIGN n -- add minus sign if n<0 730 001088 ; 0< IF 2D HOLD THEN ; 731 001088 HEADER SIGN,4,'SIGN',DOCOLON 731.1 000000 PUBLIC SIGN 731.2 001088 .... DW link 731.3 00108A FF DB 0FFh ; not immediate 731.4 00108B link SET $ 731.5 00108B 04 DB 4 731.6 00108C 5349474E DB 'SIGN' 731.7 001090 EVEN 731.8 001090 IF 'DOCOLON'='DOCODE' 731.9 001090 SIGN: DW $+2 731.10 001090 ELSE 731.11 001090 .... SIGN: DW DOCOLON 731.12 001092 ENDIF 731.13 001092 ENDM 732 001092 ........ DW ZEROLESS,qbran 733 001096 DEST SIGN1 733.1 001096 0800 DW SIGN1-$ 733.2 001098 ENDM 734 001098 ....2D00.... DW lit,2DH,HOLD 735 00109E .... SIGN1: DW EXIT 736 0010A0 737 0010A0 ;C U. u -- display u unsigned 738 0010A0 ; <# 0 #S #> TYPE SPACE ; 739 0010A0 HEADER UDOT,2,'U.',DOCOLON 739.1 000000 PUBLIC UDOT 739.2 0010A0 .... DW link 739.3 0010A2 FF DB 0FFh ; not immediate 739.4 0010A3 link SET $ 739.5 0010A3 02 DB 2 739.6 0010A4 552E DB 'U.' 739.7 0010A6 EVEN 739.8 0010A6 IF 'DOCOLON'='DOCODE' 739.9 0010A6 UDOT: DW $+2 739.10 0010A6 ELSE 739.11 0010A6 .... UDOT: DW DOCOLON 739.12 0010A8 ENDIF 739.13 0010A8 ENDM 740 0010A8 ............* DW LESSNUM,ZERO,NUMS,NUMGREATER,TYP - 4e-config - Page 101 741 0010B2 ........ DW SPACE,EXIT 742 0010B6 743 0010B6 ;C . n -- display n signed 744 0010B6 ; <# DUP ABS 0 #S ROT SIGN #> TYPE SPACE ; 745 0010B6 HEADER DOT,1,'.',DOCOLON 745.1 000000 PUBLIC DOT 745.2 0010B6 .... DW link 745.3 0010B8 FF DB 0FFh ; not immediate 745.4 0010B9 link SET $ 745.5 0010B9 01 DB 1 745.6 0010BA 2E DB '.' 745.7 0010BB 00 EVEN 745.8 0010BC IF 'DOCOLON'='DOCODE' 745.9 0010BC DOT: DW $+2 745.10 0010BC ELSE 745.11 0010BC .... DOT: DW DOCOLON 745.12 0010BE ENDIF 745.13 0010BE ENDM 746 0010BE ............* DW LESSNUM,DUP,ABBS,ZERO,NUMS 747 0010C8 ............* DW ROT,SIGN,NUMGREATER,TYP,SPACE,EXIT 748 0010D4 749 0010D4 ;C DECIMAL -- set number base to decimal 750 0010D4 ; 10 BASE ! ; 751 0010D4 HEADER DECIMAL,7,'DECIMAL',DOCOLON 751.1 000000 PUBLIC DECIMAL 751.2 0010D4 .... DW link 751.3 0010D6 FF DB 0FFh ; not immediate 751.4 0010D7 link SET $ 751.5 0010D7 07 DB 7 751.6 0010D8 444543494D41* DB 'DECIMAL' 751.7 0010DF 00 EVEN 751.8 0010E0 IF 'DOCOLON'='DOCODE' 751.9 0010E0 DECIMAL: DW $+2 751.10 0010E0 ELSE 751.11 0010E0 .... DECIMAL: DW DOCOLON 751.12 0010E2 ENDIF 751.13 0010E2 ENDM 752 0010E2 ....0A00....* DW lit,10,BASE,STORE,EXIT 753 0010EC 754 0010EC ;X HEX -- set number base to hex 755 0010EC ; 16 BASE ! ; 756 0010EC HEADER HEX,3,'HEX',DOCOLON 756.1 000000 PUBLIC HEX 756.2 0010EC .... DW link 756.3 0010EE FF DB 0FFh ; not immediate 756.4 0010EF link SET $ 756.5 0010EF 03 DB 3 756.6 0010F0 484558 DB 'HEX' 756.7 0010F3 00 EVEN 756.8 0010F4 IF 'DOCOLON'='DOCODE' 756.9 0010F4 HEX: DW $+2 756.10 0010F4 ELSE 756.11 0010F4 .... HEX: DW DOCOLON 756.12 0010F6 ENDIF 756.13 0010F6 ENDM 757 0010F6 ....1000....* DW lit,16,BASE,STORE,EXIT 758 001100 759 001100 ; DICTIONARY MANAGEMENT ======================== = 760 001100 761 001100 ;C HERE -- addr returns dictionary ptr 762 001100 ; DP @ ; 763 001100 HEADER HERE,4,'HERE',DOCOLON 763.1 000000 PUBLIC HERE 763.2 001100 .... DW link 763.3 001102 FF DB 0FFh ; not immediate 763.4 001103 link SET $ 763.5 001103 04 DB 4 763.6 001104 48455245 DB 'HERE' 763.7 001108 EVEN 763.8 001108 IF 'DOCOLON'='DOCODE' 763.9 001108 HERE: DW $+2 763.10 001108 ELSE 763.11 001108 .... HERE: DW DOCOLON - 4e-config - Page 102 763.12 00110A ENDIF 763.13 00110A ENDM 764 00110A ............ DW DDP,FETCH,EXIT 765 001110 766 001110 ;C ALLOT n -- allocate n bytes in dict 767 001110 ; DP +! ; 768 001110 HEADER ALLOT,5,'ALLOT',DOCOLON 768.1 000000 PUBLIC ALLOT 768.2 001110 .... DW link 768.3 001112 FF DB 0FFh ; not immediate 768.4 001113 link SET $ 768.5 001113 05 DB 5 768.6 001114 414C4C4F54 DB 'ALLOT' 768.7 001119 00 EVEN 768.8 00111A IF 'DOCOLON'='DOCODE' 768.9 00111A ALLOT: DW $+2 768.10 00111A ELSE 768.11 00111A .... ALLOT: DW DOCOLON 768.12 00111C ENDIF 768.13 00111C ENDM 769 00111C ............ DW DDP,PLUSSTORE,EXIT 770 001122 771 001122 ;C , x -- append cell to dict 772 001122 ; HERE ! 1 CELLS ALLOT ; 773 001122 HEADER COMMA,1,',',DOCOLON 773.1 000000 PUBLIC COMMA 773.2 001122 .... DW link 773.3 001124 FF DB 0FFh ; not immediate 773.4 001125 link SET $ 773.5 001125 01 DB 1 773.6 001126 2C DB ',' 773.7 001127 00 EVEN 773.8 001128 IF 'DOCOLON'='DOCODE' 773.9 001128 COMMA: DW $+2 773.10 001128 ELSE 773.11 001128 .... COMMA: DW DOCOLON 773.12 00112A ENDIF 773.13 00112A ENDM 774 00112A ............* DW HERE,STORE,lit,1,CELLS,ALLOT,EXIT 775 001138 776 001138 ;C C, char -- append char to dict 777 001138 ; HERE C! 1 CHARS ALLOT ; 778 001138 HEADER CCOMMA,2,'C,',DOCOLON 778.1 000000 PUBLIC CCOMMA 778.2 001138 .... DW link 778.3 00113A FF DB 0FFh ; not immediate 778.4 00113B link SET $ 778.5 00113B 02 DB 2 778.6 00113C 432C DB 'C,' 778.7 00113E EVEN 778.8 00113E IF 'DOCOLON'='DOCODE' 778.9 00113E CCOMMA: DW $+2 778.10 00113E ELSE 778.11 00113E .... CCOMMA: DW DOCOLON 778.12 001140 ENDIF 778.13 001140 ENDM 779 001140 ............* DW HERE,CSTORE,lit,1,CHARS,ALLOT,EXIT 780 00114E 781 00114E ; The following additional words support the 782 00114E ; "Harvard" model, with separate address spaces 783 00114E ; for Instructions (Code) and Data. ANSI 784 00114E ; requires DP to manage the Data space, so a 785 00114E ; separate Instruction Dictionary Pointer, IDP, 786 00114E ; is added to manage the Code space. Also added: 787 00114E ; I@ IC@ I! IC! I->D D->I (in the primitives ) 788 00114E ; ITYPE ICOUNT IWORD (above) 789 00114E ; IHERE IALLOT I, IC, (below) 790 00114E ; It should be possible to convert the Harvard 791 00114E ; implementation to a combined-code-and-data 792 00114E ; system, by equating these words to their - 4e-config - Page 103 793 00114E ; Data-space counterparts. 794 00114E 795 00114E ; on MSP430 we have Neumann, but 796 00114E ; I! IC! D->I (in the primitives) work on flash 797 00114E ; I@ IC@ alias @ C@ 798 00114E ; I->D alias CMOVE 799 00114E ; IWORD works on flash 800 00114E ; IHERE IALLOT I, IC, work on flash 801 00114E 802 00114E ;C IHERE -- addr returns Code dictionary ptr 803 00114E ; IDP @ ; 804 00114E HEADER IHERE,5,'IHERE',DOCOLON 804.1 000000 PUBLIC IHERE 804.2 00114E .... DW link 804.3 001150 FF DB 0FFh ; not immediate 804.4 001151 link SET $ 804.5 001151 05 DB 5 804.6 001152 4948455245 DB 'IHERE' 804.7 001157 00 EVEN 804.8 001158 IF 'DOCOLON'='DOCODE' 804.9 001158 IHERE: DW $+2 804.10 001158 ELSE 804.11 001158 .... IHERE: DW DOCOLON 804.12 00115A ENDIF 804.13 00115A ENDM 805 00115A ............ DW IDP,FETCH,EXIT 806 001160 807 001160 ;C IALLOT n -- allocate n bytes in Code dict 808 001160 ; IDP +! ; 809 001160 HEADER IALLOT,6,'IALLOT',DOCOLON 809.1 000000 PUBLIC IALLOT 809.2 001160 .... DW link 809.3 001162 FF DB 0FFh ; not immediate 809.4 001163 link SET $ 809.5 001163 06 DB 6 809.6 001164 49414C4C4F54 DB 'IALLOT' 809.7 00116A EVEN 809.8 00116A IF 'DOCOLON'='DOCODE' 809.9 00116A IALLOT: DW $+2 809.10 00116A ELSE 809.11 00116A .... IALLOT: DW DOCOLON 809.12 00116C ENDIF 809.13 00116C ENDM 810 00116C ............ DW IDP,PLUSSTORE,EXIT 811 001172 812 001172 ;C I, x -- append cell to Code dict 813 001172 ; IHERE I! 1 CELLS IALLOT ; 814 001172 HEADER ICOMMA,2,'I,',DOCOLON 814.1 000000 PUBLIC ICOMMA 814.2 001172 .... DW link 814.3 001174 FF DB 0FFh ; not immediate 814.4 001175 link SET $ 814.5 001175 02 DB 2 814.6 001176 492C DB 'I,' 814.7 001178 EVEN 814.8 001178 IF 'DOCOLON'='DOCODE' 814.9 001178 ICOMMA: DW $+2 814.10 001178 ELSE 814.11 001178 .... ICOMMA: DW DOCOLON 814.12 00117A ENDIF 814.13 00117A ENDM 815 00117A ............* DW IHERE,ISTORE,lit,1,CELLS,IALLOT,EXIT 816 001188 817 001188 ;C IC, char -- append char to Code dict 818 001188 ; IHERE IC! 1 CHARS IALLOT ; 819 001188 HEADER ICCOMMA,3,'IC,',DOCOLON 819.1 000000 PUBLIC ICCOMMA 819.2 001188 .... DW link 819.3 00118A FF DB 0FFh ; not immediate 819.4 00118B link SET $ 819.5 00118B 03 DB 3 819.6 00118C 49432C DB 'IC,' 819.7 00118F 00 EVEN - 4e-config - Page 104 819.8 001190 IF 'DOCOLON'='DOCODE' 819.9 001190 ICCOMMA: DW $+2 819.10 001190 ELSE 819.11 001190 .... ICCOMMA: DW DOCOLON 819.12 001192 ENDIF 819.13 001192 ENDM 820 001192 ............* DW IHERE,ICSTORE,lit,1,CHARS,IALLOT,EXIT 821 0011A0 822 0011A0 ; SEPARATE HEADER EXTENSIONS ARE NOT USED 823 0011A0 #define HHERE IHERE 824 0011A0 #define HALLOT IALLOT 825 0011A0 #define HCOMMA ICOMMA 826 0011A0 #define HCCOMMA ICCOMMA 827 0011A0 #define HCFETCH ICFETCH 828 0011A0 #define HFETCH IFETCH 829 0011A0 #define HCSTORE ICSTORE 830 0011A0 #define HSTORE ISTORE 831 0011A0 832 0011A0 ; INTERPRETER ================================== = 833 0011A0 ; Note that NFA>LFA, NFA>CFA, IMMED?, and FIND 834 0011A0 ; are dependent on the structure of the Forth 835 0011A0 ; header. This may be common across many CPUs, 836 0011A0 ; or it may be different. 837 0011A0 838 0011A0 ; ?STACK -- 839 0011A0 ; depth 0< abort" SUF" ; stack underflow 840 0011A0 HEADER QSTACK,6,'?STACK',DOCOLON 840.1 000000 PUBLIC QSTACK 840.2 0011A0 .... DW link 840.3 0011A2 FF DB 0FFh ; not immediate 840.4 0011A3 link SET $ 840.5 0011A3 06 DB 6 840.6 0011A4 3F535441434B DB '?STACK' 840.7 0011AA EVEN 840.8 0011AA IF 'DOCOLON'='DOCODE' 840.9 0011AA QSTACK: DW $+2 840.10 0011AA ELSE 840.11 0011AA .... QSTACK: DW DOCOLON 840.12 0011AC ENDIF 840.13 0011AC ENDM 841 0011AC ............ DW DEPTH,ZEROLESS,XISQUOTE 842 0011B2 03535546 DB 3,'SUF' 843 0011B6 ........ DW QABORT,EXIT 844 0011BA 845 0011BA ;C SOURCE -- adr n current input buffer 846 0011BA ; 'SOURCE 2@ ; length is at lower adrs 847 0011BA HEADER SOURCE,6,'SOURCE',DOCOLON 847.1 000000 PUBLIC SOURCE 847.2 0011BA .... DW link 847.3 0011BC FF DB 0FFh ; not immediate 847.4 0011BD link SET $ 847.5 0011BD 06 DB 6 847.6 0011BE 534F55524345 DB 'SOURCE' 847.7 0011C4 EVEN 847.8 0011C4 IF 'DOCOLON'='DOCODE' 847.9 0011C4 SOURCE: DW $+2 847.10 0011C4 ELSE 847.11 0011C4 .... SOURCE: DW DOCOLON 847.12 0011C6 ENDIF 847.13 0011C6 ENDM 848 0011C6 ............ DW TICKSOURCE,TWOFETCH,EXIT 849 0011CC 850 0011CC ;X /STRING a u n -- a+n u-n trim string 851 0011CC ; ROT OVER + ROT ROT - ; 852 0011CC HEADER SLASHSTRING,7,'/STRING',DOCOLON 852.1 000000 PUBLIC SLASHSTRING 852.2 0011CC .... DW link 852.3 0011CE FF DB 0FFh ; not immediate 852.4 0011CF link SET $ 852.5 0011CF 07 DB 7 852.6 0011D0 2F535452494E* DB '/STRING' 852.7 0011D7 00 EVEN 852.8 0011D8 IF 'DOCOLON'='DOCODE' - 4e-config - Page 105 852.9 0011D8 SLASHSTRING: DW $+2 852.10 0011D8 ELSE 852.11 0011D8 .... SLASHSTRING: DW DOCOLON 852.12 0011DA ENDIF 852.13 0011DA ENDM 853 0011DA ............* DW ROT,OVER,PLUS,ROT,ROT,MINUS,EXIT 854 0011E8 855 0011E8 ;Z >counted src n dst -- copy to counted str 856 0011E8 ; 2DUP C! CHAR+ SWAP CMOVE ; 857 0011E8 HEADER TOCOUNTED,8,'>COUNTED',DOCOLON 857.1 000000 PUBLIC TOCOUNTED 857.2 0011E8 .... DW link 857.3 0011EA FF DB 0FFh ; not immediate 857.4 0011EB link SET $ 857.5 0011EB 08 DB 8 857.6 0011EC 3E434F554E54* DB '>COUNTED' 857.7 0011F4 EVEN 857.8 0011F4 IF 'DOCOLON'='DOCODE' 857.9 0011F4 TOCOUNTED: DW $+2 857.10 0011F4 ELSE 857.11 0011F4 .... TOCOUNTED: DW DOCOLON 857.12 0011F6 ENDIF 857.13 0011F6 ENDM 858 0011F6 ............* DW TWODUP,CSTORE,CHARPLUS,SWAP,CMOVE,EXI T 859 001202 860 001202 ;Z ADR>IN c-addr' -- set >IN to offset to given adr 861 001202 ; SOURCE -- adr' adr n 862 001202 ; ROT ROT - -- n adr'-adr 863 001202 ; MIN 0 MAX -- n' 864 001202 ; >IN ! ; 865 001202 HEADER ADRTOIN,6,'ADR>IN',DOCOLON 865.1 000000 PUBLIC ADRTOIN 865.2 001202 .... DW link 865.3 001204 FF DB 0FFh ; not immediate 865.4 001205 link SET $ 865.5 001205 06 DB 6 865.6 001206 4144523E494E DB 'ADR>IN' 865.7 00120C EVEN 865.8 00120C IF 'DOCOLON'='DOCODE' 865.9 00120C ADRTOIN: DW $+2 865.10 00120C ELSE 865.11 00120C .... ADRTOIN: DW DOCOLON 865.12 00120E ENDIF 865.13 00120E ENDM 866 00120E ............* DW SOURCE,ROT,ROT,MINUS,MIN,lit,0,MAX 867 00121E ............ DW TOIN,STORE,EXIT 868 001224 869 001224 ;X PARSE char -- c-addr n word delim'd by char 870 001224 ; SOURCE >IN @ /STRING -- c adr n 871 001224 ; OVER >R save adr of string start 872 001224 ; ROT SCAN -- adr" n" 873 001224 ; OVER SWAP IF CHAR+ THEN skip trailing delim. if any 874 001224 ; ADR>IN advance >IN -- adr" 875 001224 ; R> TUCK - ; -- adr n' 876 001224 HEADER PARSE,5,'PARSE',DOCOLON 876.1 000000 PUBLIC PARSE 876.2 001224 .... DW link 876.3 001226 FF DB 0FFh ; not immediate 876.4 001227 link SET $ 876.5 001227 05 DB 5 876.6 001228 5041525345 DB 'PARSE' 876.7 00122D 00 EVEN 876.8 00122E IF 'DOCOLON'='DOCODE' 876.9 00122E PARSE: DW $+2 876.10 00122E ELSE 876.11 00122E .... PARSE: DW DOCOLON 876.12 001230 ENDIF 876.13 001230 ENDM - 4e-config - Page 106 877 001230 ............* DW SOURCE,TOIN,FETCH,SLASHSTRING 878 001238 ............* DW OVER,TOR,ROT,SCAN 879 001240 ............ DW OVER,SWAP,qbran 880 001246 DEST PARSE1 880.1 001246 0400 DW PARSE1-$ 880.2 001248 ENDM 881 001248 .... DW ONEPLUS ; char+ 882 00124A .... PARSE1: DW ADRTOIN 883 00124C ............* DW RFROM,TUCK,MINUS,EXIT 884 001254 885 001254 ;C WORD char -- c-addr word delim'd by char 886 001254 ; DUP SOURCE >IN @ /STRING -- c c adr n 887 001254 ; ROT SKIP -- c adr' n' 888 001254 ; DROP ADR>IN PARSE -- adr" n" 889 001254 ; HERE >counted -- 890 001254 ; HERE -- a 891 001254 ; BL OVER COUNT + C! ; append trailing blank 892 001254 HEADER WORDD,4,'WORD',DOCOLON 892.1 000000 PUBLIC WORDD 892.2 001254 .... DW link 892.3 001256 FF DB 0FFh ; not immediate 892.4 001257 link SET $ 892.5 001257 04 DB 4 892.6 001258 574F5244 DB 'WORD' 892.7 00125C EVEN 892.8 00125C IF 'DOCOLON'='DOCODE' 892.9 00125C WORDD: DW $+2 892.10 00125C ELSE 892.11 00125C .... WORDD: DW DOCOLON 892.12 00125E ENDIF 892.13 00125E ENDM 893 00125E ............* DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING 894 001268 ........ DW ROT,SKIP 895 00126C ............ DW DROP,ADRTOIN,PARSE 896 001272 ............ DW HERE,TOCOUNTED,HERE 897 001278 ............* DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT 898 001284 899 001284 ;C WORD char -- c-addr word delim'd by char OLD DEF'N 900 001284 ; DUP SOURCE >IN @ /STRING -- c c adr n 901 001284 ; DUP >R ROT SKIP -- c adr' n' 902 001284 ; OVER >R ROT SCAN -- adr" n" 903 001284 ; DUP IF CHAR- THEN skip trailing delim. 904 001284 ; R> R> ROT - >IN +! update >IN offset 905 001284 ; TUCK - -- adr' N 906 001284 ; HERE >counted -- 907 001284 ; HERE -- a 908 001284 ; BL OVER COUNT + C! ; append trailing blank 909 001284 ; HEADER WORDD,4,'WORD',DOCOLON 910 001284 ; DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING 911 001284 ; DW DUP,TOR,ROT,SKIP 912 001284 ; DW OVER,TOR,ROT,SCAN 913 001284 ; DW DUP,qbran 914 001284 ; DEST WORD1 915 001284 ; DW ONEMINUS ; char- 916 001284 ;WORD1: DW RFROM,RFROM,ROT,MINUS,TOIN,PLUSSTORE 917 001284 ; DW TUCK,MINUS 918 001284 ; DW HERE,TOCOUNTED,HERE 919 001284 ; DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT 920 001284 921 001284 ;Z NFA>LFA nfa -- lfa name adr -> link field 922 001284 ; 3 - ; 923 001284 HEADER NFATOLFA,7,'NFA>LFA',DOCOLON 923.1 000000 PUBLIC NFATOLFA 923.2 001284 .... DW link - 4e-config - Page 107 923.3 001286 FF DB 0FFh ; not immediate 923.4 001287 link SET $ 923.5 001287 07 DB 7 923.6 001288 4E46413E4C46* DB 'NFA>LFA' 923.7 00128F 00 EVEN 923.8 001290 IF 'DOCOLON'='DOCODE' 923.9 001290 NFATOLFA: DW $+2 923.10 001290 ELSE 923.11 001290 .... NFATOLFA: DW DOCOLON 923.12 001292 ENDIF 923.13 001292 ENDM 924 001292 ....0300....* DW lit,3,MINUS,EXIT 925 00129A 926 00129A ;Z NFA>CFA nfa -- cfa name adr -> code field 927 00129A ; HCOUNT 7F AND + ALIGNED ; mask off 'smudge' bit 928 00129A HEADER NFATOCFA,7,'NFA>CFA',DOCOLON 928.1 000000 PUBLIC NFATOCFA 928.2 00129A .... DW link 928.3 00129C FF DB 0FFh ; not immediate 928.4 00129D link SET $ 928.5 00129D 07 DB 7 928.6 00129E 4E46413E4346* DB 'NFA>CFA' 928.7 0012A5 00 EVEN 928.8 0012A6 IF 'DOCOLON'='DOCODE' 928.9 0012A6 NFATOCFA: DW $+2 928.10 0012A6 ELSE 928.11 0012A6 .... NFATOCFA: DW DOCOLON 928.12 0012A8 ENDIF 928.13 0012A8 ENDM 929 0012A8 .... DW HCOUNT 930 0012AA ....7F00....* DW lit,07FH,ANDD,PLUS,ALIGNED,EXIT 931 0012B6 932 0012B6 ;Z IMMED? nfa -- f fetch immediate flag 933 0012B6 ; 1- HC@ 1 AND 0= ; Flashable model, LSB=0 if immed 934 0012B6 HEADER IMMEDQ,6,'IMMED?',DOCOLON 934.1 000000 PUBLIC IMMEDQ 934.2 0012B6 .... DW link 934.3 0012B8 FF DB 0FFh ; not immediate 934.4 0012B9 link SET $ 934.5 0012B9 06 DB 6 934.6 0012BA 494D4D45443F DB 'IMMED?' 934.7 0012C0 EVEN 934.8 0012C0 IF 'DOCOLON'='DOCODE' 934.9 0012C0 IMMEDQ: DW $+2 934.10 0012C0 ELSE 934.11 0012C0 .... IMMEDQ: DW DOCOLON 934.12 0012C2 ENDIF 934.13 0012C2 ENDM 935 0012C2 ............* DW ONEMINUS,HCFETCH,lit,1,ANDD,ZEROEQUAL ,EXIT 936 0012D0 937 0012D0 ;C FIND c-addr -- c-addr 0 if not found 938 0012D0 ;C FIND c-addr -- xt 1 if immediate 939 0012D0 ;C FIND c-addr -- xt -1 if "normal" 940 0012D0 ; LATEST @ BEGIN -- a nfa 941 0012D0 ; 2DUP OVER C@ CHAR+ -- a nfa a nfa n+1 942 0012D0 ; N= -- a nfa f 943 0012D0 ; DUP IF 944 0012D0 ; DROP 945 0012D0 ; NFA>LFA H@ DUP -- a link link 946 0012D0 ; THEN 947 0012D0 ; 0= UNTIL -- a nfa OR a 0 948 0012D0 ; DUP IF 949 0012D0 ; NIP DUP NFA>CFA -- nfa xt 950 0012D0 ; SWAP IMMED? -- xt iflag 951 0012D0 ; 0= 1 OR -- xt 1/-1 952 0012D0 ; THEN ; 953 0012D0 HEADER FIND,4,'FIND',DOCOLON 953.1 000000 PUBLIC FIND 953.2 0012D0 .... DW link - 4e-config - Page 108 953.3 0012D2 FF DB 0FFh ; not immediate 953.4 0012D3 link SET $ 953.5 0012D3 04 DB 4 953.6 0012D4 46494E44 DB 'FIND' 953.7 0012D8 EVEN 953.8 0012D8 IF 'DOCOLON'='DOCODE' 953.9 0012D8 FIND: DW $+2 953.10 0012D8 ELSE 953.11 0012D8 .... FIND: DW DOCOLON 953.12 0012DA ENDIF 953.13 0012DA ENDM 954 0012DA ........ DW LATEST,FETCH 955 0012DE ............*FIND1: DW TWODUP,OVER,CFETCH,CHARPLUS 956 0012E6 ............ DW NEQUAL,DUP,qbran 957 0012EC DEST FIND2 957.1 0012EC 0A00 DW FIND2-$ 957.2 0012EE ENDM 958 0012EE ............* DW DROP,NFATOLFA,HFETCH,DUP 959 0012F6 ........ FIND2: DW ZEROEQUAL,qbran 960 0012FA DEST FIND1 960.1 0012FA E4FF DW FIND1-$ 960.2 0012FC ENDM 961 0012FC ........ DW DUP,qbran 962 001300 DEST FIND3 962.1 001300 1400 DW FIND3-$ 962.2 001302 ENDM 963 001302 ............ DW NIP,DUP,NFATOCFA 964 001308 ............* DW SWAP,IMMEDQ,ZEROEQUAL,lit,1,ORR 965 001314 .... FIND3: DW EXIT 966 001316 967 001316 ;C UPC char -- char capitalize character 968 001316 ; 969 001316 ; DUP [CHAR] a < OVER [CHAR] z > OR IF EXIT THEN 970 001316 ; [ CHAR A CHAR a - ] LITERAL + ; 971 001316 ; HEADER UPC,3,'UPC',DOCOLON 972 001316 HEADLESS UPC, DOCOLON 972.1 000000 PUBLIC UPC 972.2 001316 IF 'DOCOLON'='DOCODE' 972.3 001316 UPC: DW $+2 972.4 001316 ELSE 972.5 001316 .... UPC: DW DOCOLON 972.6 001318 ENDIF 972.7 001318 ENDM 973 001318 ........6100* DW DUP, lit, 'a', LESS, OVER, lit, 'z', GREATER 974 001328 ........ DW ORR, qbran 975 00132C DEST UPC1 975.1 00132C 0400 DW UPC1-$ 975.2 00132E ENDM 976 00132E .... DW EXIT 977 001330 ....E0FF.... UPC1: DW lit, 'A'-'a', PLUS 978 001336 .... DW EXIT 979 001338 980 001338 ;C CAPITALIZE c-addr -- c-addr capitalize string 981 001338 ; 982 001338 ; CAPS @ IF DUP COUNT OVER + SWAP ?DO I c@ upc I c! LOOP THEN 983 001338 ; HEADER CAPITALIZE, 10, 'CAPITALIZE', DOCOLON 984 001338 HEADLESS CAPITALIZE, DOCOLON 984.1 000000 PUBLIC CAPITALIZE 984.2 001338 IF 'DOCOLON'='DOCODE' 984.3 001338 CAPITALIZE: DW $+2 984.4 001338 ELSE 984.5 001338 .... CAPITALIZE: DW DOCOLON 984.6 00133A ENDIF 984.7 00133A ENDM 985 00133A ............ DW CAPS, FETCH, qbran 986 001340 DEST CAPS2 986.1 001340 1C00 DW CAPS2-$ 986.2 001342 ENDM 987 001342 ............* DW DUP, COUNT, OVER, PLUS, SWAP, xdo 988 00134E ............*CAPS1: DW II, CFETCH, UPC, II, CSTORE 989 001358 .... DW xloop 990 00135A DEST CAPS1 - 4e-config - Page 109 990.1 00135A F4FF DW CAPS1-$ 990.2 00135C ENDM 991 00135C .... CAPS2: DW EXIT 992 00135E 993 00135E ;C LITERAL x -- append numeric literal 994 00135E ; STATE @ IF ['] LIT ,XT I, THEN ; IMMEDIATE 995 00135E ; This tests STATE so that it can also be used 996 00135E ; interpretively. (ANSI doesn't require this.) 997 00135E IMMED LITERAL,7,'LITERAL',DOCOLON 997.1 000000 PUBLIC LITERAL 997.2 00135E .... DW link 997.3 001360 FE DB 0FEh // ; immediate (LSB=0) 997.4 001361 link SET $ 997.5 001361 07 DB 7 997.6 001362 4C4954455241* DB 'LITERAL' 997.7 001369 00 EVEN 997.8 00136A IF 'DOCOLON'='DOCODE' 997.9 00136A LITERAL: DW $+2 997.10 00136A ELSE 997.11 00136A .... LITERAL: DW DOCOLON 997.12 00136C ENDIF 997.13 00136C ENDM 998 00136C ............ DW STATE,FETCH,qbran 999 001372 DEST LITER1 999.1 001372 0A00 DW LITER1-$ 999.2 001374 ENDM 1000 001374 ............* DW lit,lit,COMMAXT,ICOMMA 1001 00137C .... LITER1: DW EXIT 1002 00137E 1003 00137E ;Z DIGIT? c -- n -1 if c is a valid digit 1004 00137E ;Z DIGIT? c -- x 0 otherwise 1005 00137E ; [ HEX ] DUP 39 > 100 AND + silly looking 1006 00137E ; DUP 140 > 107 AND - 30 - but it works! 1007 00137E ; DUP BASE @ U< ; 1008 00137E HEADER DIGITQ,6,'DIGIT?',DOCOLON 1008.1 000000 PUBLIC DIGITQ 1008.2 00137E .... DW link 1008.3 001380 FF DB 0FFh ; not immediate 1008.4 001381 link SET $ 1008.5 001381 06 DB 6 1008.6 001382 44494749543F DB 'DIGIT?' 1008.7 001388 EVEN 1008.8 001388 IF 'DOCOLON'='DOCODE' 1008.9 001388 DIGITQ: DW $+2 1008.10 001388 ELSE 1008.11 001388 .... DIGITQ: DW DOCOLON 1008.12 00138A ENDIF 1008.13 00138A ENDM 1009 00138A ........3900* DW DUP,lit,39H,GREATER,lit,100H,ANDD,PLU S 1010 00139A ........4001* DW DUP,lit,140H,GREATER,lit,107H,ANDD 1011 0013A8 ........3000* DW MINUS,lit,30H,MINUS 1012 0013B0 ............* DW DUP,BASE,FETCH,ULESS,EXIT 1013 0013BA 1014 0013BA ;Z ?SIGN adr n -- adr' n' f get optional sign 1015 0013BA ;Z advance adr/n if sign; return NZ if negative 1016 0013BA ; OVER C@ -- adr n c 1017 0013BA ; 2C - DUP ABS 1 = AND -- +=-1, -=+1, else 0 1018 0013BA ; DUP IF 1+ -- +=0, -=+2 1019 0013BA ; >R 1 /STRING R> -- adr' n' f 1020 0013BA ; THEN ; 1021 0013BA HEADER QSIGN,5,'?SIGN',DOCOLON 1021.1 000000 PUBLIC QSIGN 1021.2 0013BA .... DW link 1021.3 0013BC FF DB 0FFh ; not immediate 1021.4 0013BD link SET $ 1021.5 0013BD 05 DB 5 - 4e-config - Page 110 1021.6 0013BE 3F5349474E DB '?SIGN' 1021.7 0013C3 00 EVEN 1021.8 0013C4 IF 'DOCOLON'='DOCODE' 1021.9 0013C4 QSIGN: DW $+2 1021.10 0013C4 ELSE 1021.11 0013C4 .... QSIGN: DW DOCOLON 1021.12 0013C6 ENDIF 1021.13 0013C6 ENDM 1022 0013C6 ............* DW OVER,CFETCH,lit,2CH,MINUS,DUP,ABBS 1023 0013D4 ....0100....* DW lit,1,EQUAL,ANDD,DUP,qbran 1024 0013E0 DEST QSIGN1 1024.1 0013E0 0E00 DW QSIGN1-$ 1024.2 0013E2 ENDM 1025 0013E2 ............* DW ONEPLUS,TOR,lit,1,SLASHSTRING,RFROM 1026 0013EE .... QSIGN1: DW EXIT 1027 0013F0 1028 0013F0 ;C >NUMBER ud adr u -- ud' adr' u' 1029 0013F0 ;C convert string to number 1030 0013F0 ; BEGIN 1031 0013F0 ; DUP WHILE 1032 0013F0 ; OVER C@ DIGIT? 1033 0013F0 ; 0= IF DROP EXIT THEN 1034 0013F0 ; >R 2SWAP BASE @ UD* 1035 0013F0 ; R> M+ 2SWAP 1036 0013F0 ; 1 /STRING 1037 0013F0 ; REPEAT ; 1038 0013F0 HEADER TONUMBER,7,'>NUMBER',DOCOLON 1038.1 000000 PUBLIC TONUMBER 1038.2 0013F0 .... DW link 1038.3 0013F2 FF DB 0FFh ; not immediate 1038.4 0013F3 link SET $ 1038.5 0013F3 07 DB 7 1038.6 0013F4 3E4E554D4245* DB '>NUMBER' 1038.7 0013FB 00 EVEN 1038.8 0013FC IF 'DOCOLON'='DOCODE' 1038.9 0013FC TONUMBER: DW $+2 1038.10 0013FC ELSE 1038.11 0013FC .... TONUMBER: DW DOCOLON 1038.12 0013FE ENDIF 1038.13 0013FE ENDM 1039 0013FE ........ TONUM1: DW DUP,qbran 1040 001402 DEST TONUM3 1040.1 001402 2C00 DW TONUM3-$ 1040.2 001404 ENDM 1041 001404 ............ DW OVER,CFETCH,DIGITQ 1042 00140A ........ DW ZEROEQUAL,qbran 1043 00140E DEST TONUM2 1043.1 00140E 0600 DW TONUM2-$ 1043.2 001410 ENDM 1044 001410 ........ DW DROP,EXIT 1045 001414 ............*TONUM2: DW TOR,TWOSWAP,BASE,FETCH,UDSTAR 1046 00141E ............ DW RFROM,MPLUS,TWOSWAP 1047 001424 ....0100....* DW lit,1,SLASHSTRING,bran 1048 00142C DEST TONUM1 1048.1 00142C D2FF DW TONUM1-$ 1048.2 00142E ENDM 1049 00142E .... TONUM3: DW EXIT 1050 001430 1051 001430 ;Z ?NUMBER c-addr -- n -1 string->number 1052 001430 ;Z ?NUMBER c-addr -- c-addr 0 if convert error 1053 001430 ; DUP 0 0 ROT COUNT -- ca ud adr n 1054 001430 ; ?SIGN >R >NUMBER -- ca ud adr' n' 1055 001430 ; IF R> 2DROP 2DROP 0 -- ca 0 (error) 1056 001430 ; ELSE 2DROP NIP R> 1057 001430 ; IF NEGATE THEN -1 -- n -1 (ok) 1058 001430 ; THEN ; 1059 001430 HEADER QNUMBER,7,'?NUMBER',DOCOLON 1059.1 000000 PUBLIC QNUMBER 1059.2 001430 .... DW link 1059.3 001432 FF DB 0FFh ; not immediate 1059.4 001433 link SET $ 1059.5 001433 07 DB 7 1059.6 001434 3F4E554D4245* DB '?NUMBER' 1059.7 00143B 00 EVEN - 4e-config - Page 111 1059.8 00143C IF 'DOCOLON'='DOCODE' 1059.9 00143C QNUMBER: DW $+2 1059.10 00143C ELSE 1059.11 00143C .... QNUMBER: DW DOCOLON 1059.12 00143E ENDIF 1059.13 00143E ENDM 1060 00143E ............* DW DUP,ZERO,DUP,ROT,COUNT 1061 001448 ............* DW QSIGN,TOR,TONUMBER,qbran 1062 001450 DEST QNUM1 1062.1 001450 1000 DW QNUM1-$ 1062.2 001452 ENDM 1063 001452 ............* DW RFROM,TWODROP,TWODROP,lit,0 1064 00145C .... DW bran 1065 00145E DEST QNUM3 1065.1 00145E 1200 DW QNUM3-$ 1065.2 001460 ENDM 1066 001460 ............*QNUM1: DW TWODROP,NIP,RFROM,qbran 1067 001468 DEST QNUM2 1067.1 001468 0400 DW QNUM2-$ 1067.2 00146A ENDM 1068 00146A .... DW NEGATE 1069 00146C ....FFFF QNUM2: DW lit,-1 1070 001470 .... QNUM3: DW EXIT 1071 001472 1072 001472 ;Z INTERPRET i*x c-addr u -- j*x interpret given buffer 1073 001472 ; This is a common factor of EVALUATE and QUIT. 1074 001472 ; ref. dpANS-6, 3.4 The Forth Text Interpreter 1075 001472 ; 'SOURCE 2! 0 >IN ! 1076 001472 ; BEGIN 1077 001472 ; BL WORD DUP C@ WHILE -- textadr 1078 001472 ; CAPITALIZE 1079 001472 ; FIND -- a 0/1/-1 1080 001472 ; ?DUP IF -- xt 1/-1 1081 001472 ; 1+ STATE @ 0= OR IMMED or interp? 1082 001472 ; IF EXECUTE ELSE ,XT THEN 1083 001472 ; ELSE -- textadr 1084 001472 ; ?NUMBER 1085 001472 ; IF POSTPONE LITERAL converted ok 1086 001472 ; ELSE COUNT TYPE 3F EMIT CR ABORT err 1087 001472 ; THEN 1088 001472 ; THEN 1089 001472 ; REPEAT DROP ; 1090 001472 HEADER INTERPRET,9,'INTERPRET',DOCOLON 1090.1 000000 PUBLIC INTERPRET 1090.2 001472 .... DW link 1090.3 001474 FF DB 0FFh ; not immediate 1090.4 001475 link SET $ 1090.5 001475 09 DB 9 1090.6 001476 494E54455250* DB 'INTERPRET' 1090.7 00147F 00 EVEN 1090.8 001480 IF 'DOCOLON'='DOCODE' 1090.9 001480 INTERPRET: DW $+2 1090.10 001480 ELSE 1090.11 001480 .... INTERPRET: DW DOCOLON 1090.12 001482 ENDIF 1090.13 001482 ENDM 1091 001482 ............* DW TICKSOURCE,TWOSTORE,ZERO,TOIN,STORE 1092 00148C .... INTER1: DW QSTACK ; ?stack prüft auf stck underflow mk 1093 00148E ............* DW BLANK,WORDD,DUP,CFETCH,qbran 1094 001498 DEST INTER9 1094.1 001498 4A00 DW INTER9-$ 1094.2 00149A ENDM 1095 00149A .... DW CAPITALIZE 1096 00149C ............ DW FIND,QDUP,qbran 1097 0014A2 DEST INTER4 1097.1 0014A2 1C00 DW INTER4-$ 1097.2 0014A4 ENDM 1098 0014A4 ............* DW ONEPLUS,STATE,FETCH,ZEROEQUAL,ORR 1099 0014AE .... DW qbran 1100 0014B0 DEST INTER2 1100.1 0014B0 0800 DW INTER2-$ 1100.2 0014B2 ENDM - 4e-config - Page 112 1101 0014B2 ........ DW EXECUTE,bran 1102 0014B6 DEST INTER3 1102.1 0014B6 0400 DW INTER3-$ 1102.2 0014B8 ENDM 1103 0014B8 .... INTER2: DW COMMAXT 1104 0014BA .... INTER3: DW bran 1105 0014BC DEST INTER8 1105.1 0014BC 2200 DW INTER8-$ 1105.2 0014BE ENDM 1106 0014BE ........ INTER4: DW QNUMBER,qbran 1107 0014C2 DEST INTER5 1107.1 0014C2 0800 DW INTER5-$ 1107.2 0014C4 ENDM 1108 0014C4 ........ DW LITERAL,bran 1109 0014C8 DEST INTER6 1109.1 0014C8 1600 DW INTER6-$ 1109.2 0014CA ENDM 1110 0014CA ........ INTER5: DW COUNT,TYP 1111 0014CE ....1500.... DW lit,15H,EMIT ; emit a NAK ($15) 1112 0014D4 ....3F00.... DW lit,3FH,EMIT 1113 0014DA ; DW TOIN,FETCH,DOT 1114 0014DA ........ DW CR,ABORT 1115 0014DE INTER6: 1116 0014DE .... INTER8: DW bran 1117 0014E0 DEST INTER1 1117.1 0014E0 ACFF DW INTER1-$ 1117.2 0014E2 ENDM 1118 0014E2 ........ INTER9: DW DROP,EXIT 1119 0014E6 1120 0014E6 ;C EVALUATE i*x c-addr u -- j*x interprt string 1121 0014E6 ; 'SOURCE 2@ >R >R >IN @ >R 1122 0014E6 ; INTERPRET 1123 0014E6 ; R> >IN ! R> R> 'SOURCE 2! ; 1124 0014E6 HEADER EVALUATE,8,'EVALUATE',DOCOLON 1124.1 000000 PUBLIC EVALUATE 1124.2 0014E6 .... DW link 1124.3 0014E8 FF DB 0FFh ; not immediate 1124.4 0014E9 link SET $ 1124.5 0014E9 08 DB 8 1124.6 0014EA 4556414C5541* DB 'EVALUATE' 1124.7 0014F2 EVEN 1124.8 0014F2 IF 'DOCOLON'='DOCODE' 1124.9 0014F2 EVALUATE: DW $+2 1124.10 0014F2 ELSE 1124.11 0014F2 .... EVALUATE: DW DOCOLON 1124.12 0014F4 ENDIF 1124.13 0014F4 ENDM 1125 0014F4 ............* DW TICKSOURCE,TWOFETCH,TOR,TOR 1126 0014FC ............* DW TOIN,FETCH,TOR,INTERPRET 1127 001504 ............* DW RFROM,TOIN,STORE,RFROM,RFROM 1128 00150E ............ DW TICKSOURCE,TWOSTORE,EXIT 1129 001514 1130 001514 #define PREFIXPROMPT 0 1131 001514 1132 001514 ; C DOTSTATUS -- display system status 1133 001514 HEADLESS DOTSTATUS,DOCOLON 1133.1 000000 PUBLIC DOTSTATUS 1133.2 001514 IF 'DOCOLON'='DOCODE' 1133.3 001514 DOTSTATUS: DW $+2 1133.4 001514 ELSE 1133.5 001514 .... DOTSTATUS: DW DOCOLON 1133.6 001516 ENDIF 1133.7 001516 ENDM 1134 001516 ....1100.... DW lit,11H,EMIT ; send XON 1135 00151C .... DW CR 1136 00151E IF PREFIXPROMPT=1 1137 00151E DW XISQUOTE 1138 00151E DB 3,'OK ' ; for prefix prompt style 1139 00151E DW ITYPE 1140 00151E ENDIF 1141 00151E .... DW EXIT 1142 001520 1143 001520 ; C PROMPT -- prompt user 1144 001520 HEADLESS PROMPT,DOCOLON 1144.1 000000 PUBLIC PROMPT - 4e-config - Page 113 1144.2 001520 IF 'DOCOLON'='DOCODE' 1144.3 001520 PROMPT: DW $+2 1144.4 001520 ELSE 1144.5 001520 .... PROMPT: DW DOCOLON 1144.6 001522 ENDIF 1144.7 001522 ENDM 1145 001522 IF PREFIXPROMPT!=1 1146 001522 ............* DW STATE,FETCH,ZEROEQUAL,qbran 1147 00152A DEST PROMPT1 1147.1 00152A 2800 DW PROMPT1-$ 1147.2 00152C ENDM 1148 00152C ....0600.... DW lit,06H,EMIT ; send ACK 1149 001532 ............* DW BASE,FETCH,DUP,HEX,lit,'$',EMIT,lit ,02,ZEROUDOTR,BASE,STORE 1150 00154A .... DW XISQUOTE 1151 00154C 036F6B20 DB 3,'ok ' ; for traditional Forth style 1152 001550 .... DW ITYPE 1153 001552 ENDIF 1154 001552 .... PROMPT1:DW EXIT 1155 001554 1156 001554 1157 001554 ;C QUIT -- R: i*x -- interpret from kbd 1158 001554 ; L0 LP ! R0 RP! 0 STATE ! 1159 001554 ; BEGIN 1160 001554 ; xon EMIT 1161 001554 ; TIB DUP TIBSIZE ACCEPT 1162 001554 ; xoff EMIT SPACE 1163 001554 ; INTERPRET 1164 001554 ; CR STATE @ 0= IF ." OK" THEN 1165 001554 ; AGAIN ; 1166 001554 HEADER QUIT,4,'QUIT',DOCOLON 1166.1 000000 PUBLIC QUIT 1166.2 001554 .... DW link 1166.3 001556 FF DB 0FFh ; not immediate 1166.4 001557 link SET $ 1166.5 001557 04 DB 4 1166.6 001558 51554954 DB 'QUIT' 1166.7 00155C EVEN 1166.8 00155C IF 'DOCOLON'='DOCODE' 1166.9 00155C QUIT: DW $+2 1166.10 00155C ELSE 1166.11 00155C .... QUIT: DW DOCOLON 1166.12 00155E ENDIF 1166.13 00155E ENDM 1167 00155E ............ DW L0,LP,STORE 1168 001564 ............* DW RZERO,RPSTORE,ZERO,STATE,STORE 1169 00156E .... QUIT1: DW DOTSTATUS 1170 001570 ............* DW TIB,DUP,TIBSIZE,ACCEPT 1171 001578 ; DW lit,13H,EMIT ; send XOFF 1172 001578 .... DW SPACE 1173 00157A .... DW INTERPRET 1174 00157C .... DW PROMPT 1175 00157E .... DW bran 1176 001580 DEST QUIT1 1176.1 001580 EEFF DW QUIT1-$ 1176.2 001582 ENDM 1177 000000 PUBLIC QUITIP 1178 001582 QUITIP equ QUIT+2 1179 001582 1180 001582 ;C ABORT i*x -- R: j*x -- clear stk & QUIT 1181 001582 ; S0 SP! QUIT ; 1182 001582 HEADER ABORT,5,'ABORT',DOCOLON 1182.1 000000 PUBLIC ABORT 1182.2 001582 .... DW link 1182.3 001584 FF DB 0FFh ; not immediate 1182.4 001585 link SET $ 1182.5 001585 05 DB 5 1182.6 001586 41424F5254 DB 'ABORT' 1182.7 00158B 00 EVEN 1182.8 00158C IF 'DOCOLON'='DOCODE' 1182.9 00158C ABORT: DW $+2 1182.10 00158C ELSE 1182.11 00158C .... ABORT: DW DOCOLON 1182.12 00158E ENDIF - 4e-config - Page 114 1182.13 00158E ENDM 1183 00158E ............ abort1 DW S0,SPSTORE,QUIT ; QUIT never returns 1184 001594 1185 001594 ;Z ?ABORT f c-addr u -- abort & print msg 1186 001594 ; ROT IF ITYPE ABORT THEN 2DROP ; 1187 001594 HEADER QABORT,6,'?ABORT',DOCOLON 1187.1 000000 PUBLIC QABORT 1187.2 001594 .... DW link 1187.3 001596 FF DB 0FFh ; not immediate 1187.4 001597 link SET $ 1187.5 001597 06 DB 6 1187.6 001598 3F41424F5254 DB '?ABORT' 1187.7 00159E EVEN 1187.8 00159E IF 'DOCOLON'='DOCODE' 1187.9 00159E QABORT: DW $+2 1187.10 00159E ELSE 1187.11 00159E .... QABORT: DW DOCOLON 1187.12 0015A0 ENDIF 1187.13 0015A0 ENDM 1188 0015A0 ........ DW ROT,qbran 1189 0015A4 DEST QABO1 1189.1 0015A4 0600 DW QABO1-$ 1189.2 0015A6 ENDM 1190 0015A6 ........ DW ITYPE,ABORT 1191 0015AA ........ QABO1: DW TWODROP,EXIT 1192 0015AE 1193 0015AE ;C ABORT" i*x 0 -- i*x R: j*x -- j*x x1=0 1194 0015AE ;C ABORT" i*x x1 -- R: j*x -- x1<>0 1195 0015AE ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE 1196 0015AE IMMED ABORTQUOTE,6,'ABORT"',DOCOLON 1196.1 000000 PUBLIC ABORTQUOTE 1196.2 0015AE .... DW link 1196.3 0015B0 FE DB 0FEh // ; immediate (LSB=0 ) 1196.4 0015B1 link SET $ 1196.5 0015B1 06 DB 6 1196.6 0015B2 41424F525422 DB 'ABORT"' 1196.7 0015B8 EVEN 1196.8 0015B8 IF 'DOCOLON'='DOCODE' 1196.9 0015B8 ABORTQUOTE: DW $+2 1196.10 0015B8 ELSE 1196.11 0015B8 .... ABORTQUOTE: DW DOCOLON 1196.12 0015BA ENDIF 1196.13 0015BA ENDM 1197 0015BA .... DW ISQUOTE 1198 0015BC ............ DW lit,QABORT,COMMAXT 1199 0015C2 .... DW EXIT 1200 0015C4 1201 0015C4 ;C ' -- xt find word in dictionary 1202 0015C4 ; BL WORD CAPITALIZE FIND 1203 0015C4 ; 0= ABORT" ?" ; 1204 0015C4 HEADER TICK,1,27h,DOCOLON 1204.1 000000 PUBLIC TICK 1204.2 0015C4 .... DW link 1204.3 0015C6 FF DB 0FFh ; not immediate 1204.4 0015C7 link SET $ 1204.5 0015C7 01 DB 1 1204.6 0015C8 27 DB 27h 1204.7 0015C9 00 EVEN 1204.8 0015CA IF 'DOCOLON'='DOCODE' 1204.9 0015CA TICK: DW $+2 1204.10 0015CA ELSE 1204.11 0015CA .... TICK: DW DOCOLON 1204.12 0015CC ENDIF 1204.13 0015CC ENDM 1205 0015CC ............* DW BLANK,WORDD,CAPITALIZE,FIND,ZEROEQUAL ,XISQUOTE 1206 0015D8 013F DB 1,'?' 1207 0015DA ........ DW QABORT,EXIT 1208 0015DE 1209 0015DE ;C CHAR -- char parse ASCII character 1210 0015DE ; BL WORD 1+ C@ ; - 4e-config - Page 115 1211 0015DE HEADER CHARR,4,'CHAR',DOCOLON 1211.1 000000 PUBLIC CHARR 1211.2 0015DE .... DW link 1211.3 0015E0 FF DB 0FFh ; not immediate 1211.4 0015E1 link SET $ 1211.5 0015E1 04 DB 4 1211.6 0015E2 43484152 DB 'CHAR' 1211.7 0015E6 EVEN 1211.8 0015E6 IF 'DOCOLON'='DOCODE' 1211.9 0015E6 CHARR: DW $+2 1211.10 0015E6 ELSE 1211.11 0015E6 .... CHARR: DW DOCOLON 1211.12 0015E8 ENDIF 1211.13 0015E8 ENDM 1212 0015E8 ............* DW BLANK,WORDD,ONEPLUS,CFETCH,EXIT 1213 0015F2 1214 0015F2 ;C [CHAR] -- compile character literal 1215 0015F2 ; CHAR ['] LIT ,XT I, ; IMMEDIATE 1216 0015F2 IMMED BRACCHAR,6,'[CHAR]',DOCOLON 1216.1 000000 PUBLIC BRACCHAR 1216.2 0015F2 .... DW link 1216.3 0015F4 FE DB 0FEh // ; immediate (LSB=0) 1216.4 0015F5 link SET $ 1216.5 0015F5 06 DB 6 1216.6 0015F6 5B434841525D DB '[CHAR]' 1216.7 0015FC EVEN 1216.8 0015FC IF 'DOCOLON'='DOCODE' 1216.9 0015FC BRACCHAR: DW $+2 1216.10 0015FC ELSE 1216.11 0015FC .... BRACCHAR: DW DOCOLON 1216.12 0015FE ENDIF 1216.13 0015FE ENDM 1217 0015FE .... DW CHARR 1218 001600 ............ DW lit,lit,COMMAXT 1219 001606 ........ DW ICOMMA,EXIT 1220 00160A 1221 00160A ;C ( -- skip input until ) 1222 00160A ; [ HEX ] 29 PARSE 2DROP ; IMMEDIATE 1223 00160A IMMED PAREN,1,'(',DOCOLON 1223.1 000000 PUBLIC PAREN 1223.2 00160A .... DW link 1223.3 00160C FE DB 0FEh // ; immediate (LSB=0) 1223.4 00160D link SET $ 1223.5 00160D 01 DB 1 1223.6 00160E 28 DB '(' 1223.7 00160F 00 EVEN 1223.8 001610 IF 'DOCOLON'='DOCODE' 1223.9 001610 PAREN: DW $+2 1223.10 001610 ELSE 1223.11 001610 .... PAREN: DW DOCOLON 1223.12 001612 ENDIF 1223.13 001612 ENDM 1224 001612 ....2900....* DW lit,29H,PARSE,TWODROP,EXIT 1225 00161C 1226 00161C ; COMPILER ===================================== = 1227 00161C 1228 00161C ;Z HEADER -- create a Forth word header 1229 00161C ; LATEST @ H, 0FF HC, link & IMMED field 1230 00161C ; HHERE LATEST ! new "latest" link 1231 00161C ; BL HWORD HC@ 1+ HALLOT name field 1232 00161C ; ALIGN ; 1233 00161C ; Separate headers model. 1234 00161C HEADER HEADR,6,'HEADER',DOCOLON 1234.1 000000 PUBLIC HEADR 1234.2 00161C .... DW link 1234.3 00161E FF DB 0FFh ; not immediate 1234.4 00161F link SET $ 1234.5 00161F 06 DB 6 1234.6 001620 484541444552 DB 'HEADER' 1234.7 001626 EVEN - 4e-config - Page 116 1234.8 001626 IF 'DOCOLON'='DOCODE' 1234.9 001626 HEADR: DW $+2 1234.10 001626 ELSE 1234.11 001626 .... HEADR: DW DOCOLON 1234.12 001628 ENDIF 1234.13 001628 ENDM 1235 001628 ............ DW LATEST,FETCH,HCOMMA ; link 1236 00162E ....FF00.... DW lit,0FFh,HCCOMMA ; immediate flag - see note below 1237 001634 ............ DW HHERE,LATEST,STORE 1238 00163A ............* DW BLANK,HWORD,HCFETCH,ONEPLUS,HALLOT 1239 001644 ........ DW ALIGNN,EXIT ; MSP430: headers in I space must be aligned 1240 001648 ; Note for Flashable MSP430: when compiling to RAM, we need to set 1241 001648 ; the immediate byte to 0FFH. When compiling to Flash, the word IC! 1242 001648 ; will not write 0FFH to erased Flash (because the byte is already 0FFH). 1243 001648 ; Thus we can write this byte at a later time (with IMMEDIATE). 1244 001648 1245 001648 ;Z ) -- run-time action of DOES> 1262 00167A ; R> adrs of headless DOES> def'n 1263 00167A ; LATEST @ NFA>CFA code field to fix up - 4e-config - Page 117 1264 00167A ; !CF ; 1265 00167A HEADER XDOES,7,'(DOES>)',DOCOLON 1265.1 000000 PUBLIC XDOES 1265.2 00167A .... DW link 1265.3 00167C FF DB 0FFh ; not immediate 1265.4 00167D link SET $ 1265.5 00167D 07 DB 7 1265.6 00167E 28444F45533E* DB '(DOES>)' 1265.7 001685 00 EVEN 1265.8 001686 IF 'DOCOLON'='DOCODE' 1265.9 001686 XDOES: DW $+2 1265.10 001686 ELSE 1265.11 001686 .... XDOES: DW DOCOLON 1265.12 001688 ENDIF 1265.13 001688 ENDM 1266 001688 ............* DW RFROM,LATEST,FETCH,NFATOCFA,STORECF 1267 001692 .... DW EXIT 1268 001694 1269 001694 ;C DOES> -- change action of latest def'n 1270 001694 ; COMPILE (DOES>) 1271 001694 ; dodoes ,JMP ; IMMEDIATE 1272 001694 ; Note that MSP430 uses a JMP, not a CALL, to DODOES. 1273 001694 IMMED DOES,5,'DOES>',DOCOLON 1273.1 000000 PUBLIC DOES 1273.2 001694 .... DW link 1273.3 001696 FE DB 0FEh // ; immediate (LSB=0) 1273.4 001697 link SET $ 1273.5 001697 05 DB 5 1273.6 001698 444F45533E DB 'DOES>' 1273.7 00169D 00 EVEN 1273.8 00169E IF 'DOCOLON'='DOCODE' 1273.9 00169E DOES: DW $+2 1273.10 00169E ELSE 1273.11 00169E .... DOES: DW DOCOLON 1273.12 0016A0 ENDIF 1273.13 0016A0 ENDM 1274 0016A0 ............ DW lit,XDOES,COMMAXT 1275 0016A6 ............* DW lit,dodoes,COMMAJMP,EXIT 1276 0016AE 1277 0016AE ;C RECURSE -- recurse current definition 1278 0016AE ; LATEST @ NFA>CFA ,XT ; IMMEDIATE 1279 0016AE ; NEWEST @ NFA>CFA ,XT ; IMMEDIATE Flashable 1280 0016AE IMMED RECURSE,7,'RECURSE',DOCOLON 1280.1 000000 PUBLIC RECURSE 1280.2 0016AE .... DW link 1280.3 0016B0 FE DB 0FEh // ; immediate (LSB=0) 1280.4 0016B1 link SET $ 1280.5 0016B1 07 DB 7 1280.6 0016B2 524543555253* DB 'RECURSE' 1280.7 0016B9 00 EVEN 1280.8 0016BA IF 'DOCOLON'='DOCODE' 1280.9 0016BA RECURSE: DW $+2 1280.10 0016BA ELSE 1280.11 0016BA .... RECURSE: DW DOCOLON 1280.12 0016BC ENDIF 1280.13 0016BC ENDM 1281 0016BC ............* DW NEWEST,FETCH,NFATOCFA,COMMAXT,EXIT 1282 0016C6 1283 0016C6 ;C [ -- enter interpretive state 1284 0016C6 ; 0 STATE ! ; IMMEDIATE 1285 0016C6 IMMED LEFTBRACKET,1,'[',DOCOLON 1285.1 000000 PUBLIC LEFTBRACKET 1285.2 0016C6 .... DW link 1285.3 0016C8 FE DB 0FEh // ; immediate (LSB=0) 1285.4 0016C9 link SET $ 1285.5 0016C9 01 DB 1 1285.6 0016CA 5B DB '[' 1285.7 0016CB 00 EVEN 1285.8 0016CC IF 'DOCOLON'='DOCODE' 1285.9 0016CC LEFTBRACKET: DW $+2 1285.10 0016CC ELSE - 4e-config - Page 118 1285.11 0016CC .... LEFTBRACKET: DW DOCOLON 1285.12 0016CE ENDIF 1285.13 0016CE ENDM 1286 0016CE ............* DW ZERO,STATE,STORE,EXIT 1287 0016D6 1288 0016D6 ;C ] -- enter compiling state 1289 0016D6 ; -1 STATE ! ; 1290 0016D6 HEADER RIGHTBRACKET,1,']',DOCOLON 1290.1 000000 PUBLIC RIGHTBRACKET 1290.2 0016D6 .... DW link 1290.3 0016D8 FF DB 0FFh ; not immediate 1290.4 0016D9 link SET $ 1290.5 0016D9 01 DB 1 1290.6 0016DA 5D DB ']' 1290.7 0016DB 00 EVEN 1290.8 0016DC IF 'DOCOLON'='DOCODE' 1290.9 0016DC RIGHTBRACKET: DW $+2 1290.10 0016DC ELSE 1290.11 0016DC .... RIGHTBRACKET: DW DOCOLON 1290.12 0016DE ENDIF 1290.13 0016DE ENDM 1291 0016DE ....FFFF....* DW lit,-1,STATE,STORE,EXIT 1292 0016E8 1293 0016E8 ;Z HIDE -- "hide" latest definition Flashable 1294 0016E8 ; LATEST @ DUP NEWEST ! NFA>LFA H@ LATEST ! ; 1295 0016E8 HEADER HIDE,4,'HIDE',DOCOLON 1295.1 000000 PUBLIC HIDE 1295.2 0016E8 .... DW link 1295.3 0016EA FF DB 0FFh ; not immediate 1295.4 0016EB link SET $ 1295.5 0016EB 04 DB 4 1295.6 0016EC 48494445 DB 'HIDE' 1295.7 0016F0 EVEN 1295.8 0016F0 IF 'DOCOLON'='DOCODE' 1295.9 0016F0 HIDE: DW $+2 1295.10 0016F0 ELSE 1295.11 0016F0 .... HIDE: DW DOCOLON 1295.12 0016F2 ENDIF 1295.13 0016F2 ENDM 1296 0016F2 ............* DW LATEST,FETCH,DUP,NEWEST,STORE 1297 0016FC ............* DW NFATOLFA,HFETCH,LATEST,STORE,EXIT 1298 001706 1299 001706 ;Z REVEAL -- "reveal" latest definition Flashable 1300 001706 ; NEWEST @ LATEST ! ; 1301 001706 HEADER REVEAL,6,'REVEAL',DOCOLON 1301.1 000000 PUBLIC REVEAL 1301.2 001706 .... DW link 1301.3 001708 FF DB 0FFh ; not immediate 1301.4 001709 link SET $ 1301.5 001709 06 DB 6 1301.6 00170A 52455645414C DB 'REVEAL' 1301.7 001710 EVEN 1301.8 001710 IF 'DOCOLON'='DOCODE' 1301.9 001710 REVEAL: DW $+2 1301.10 001710 ELSE 1301.11 001710 .... REVEAL: DW DOCOLON 1301.12 001712 ENDIF 1301.13 001712 ENDM 1302 001712 ............* DW NEWEST,FETCH,LATEST,STORE,EXIT 1303 00171C 1304 00171C ;C IMMEDIATE -- make last def'n immediate 1305 00171C ; 0FE LATEST @ 1- HC! ; set Flashable immediate flag 1306 00171C HEADER IMMEDIATE,9,'IMMEDIATE',DOCOLON 1306.1 000000 PUBLIC IMMEDIATE 1306.2 00171C .... DW link 1306.3 00171E FF DB 0FFh ; not immediate 1306.4 00171F link SET $ 1306.5 00171F 09 DB 9 1306.6 001720 494D4D454449* DB 'IMMEDIATE' 1306.7 001729 00 EVEN 1306.8 00172A IF 'DOCOLON'='DOCODE' 1306.9 00172A IMMEDIATE: DW $+2 1306.10 00172A ELSE 1306.11 00172A .... IMMEDIATE: DW DOCOLON - 4e-config - Page 119 1306.12 00172C ENDIF 1306.13 00172C ENDM 1307 00172C ....FE00....* DW lit,0FEh,LATEST,FETCH,ONEMINUS,HCSTOR E 1308 001738 .... DW EXIT 1309 00173A 1310 00173A ;C : -- begin a colon definition 1311 00173A ; DUP CELL+ >R @ ,XT ; 1358 0017AC ; The phrase ['] xxx ,XT appears so often that 1359 0017AC ; this word was created to combine the actions 1360 0017AC ; of LIT and ,XT. It takes an inline literal 1361 0017AC ; execution token and appends it to the dict. 1362 0017AC ; HEADER COMPILE,7,'COMPILE',DOCOLON 1363 0017AC ; DW RFROM,DUP,CELLPLUS,TOR 1364 0017AC ; DW FETCH,COMMAXT,EXIT 1365 0017AC ; N.B.: not used in the current implementation 1366 0017AC 1367 0017AC ; CONTROL STRUCTURES =========================== = 1368 0017AC 1369 0017AC ;C IF -- adrs conditional forward branch 1370 0017AC ; ['] qbran ,BRANCH IHERE ,NONE ; Flashable 1371 0017AC ; IMMEDIATE 1372 0017AC IMMED IFF,2,'IF',DOCOLON 1372.1 000000 PUBLIC IFF 1372.2 0017AC .... DW link - 4e-config - Page 121 1372.3 0017AE FE DB 0FEh // ; immediate (LSB=0) 1372.4 0017AF link SET $ 1372.5 0017AF 02 DB 2 1372.6 0017B0 4946 DB 'IF' 1372.7 0017B2 EVEN 1372.8 0017B2 IF 'DOCOLON'='DOCODE' 1372.9 0017B2 IFF: DW $+2 1372.10 0017B2 ELSE 1372.11 0017B2 .... IFF: DW DOCOLON 1372.12 0017B4 ENDIF 1372.13 0017B4 ENDM 1373 0017B4 ............ DW lit,qbran,COMMABRANCH 1374 0017BA ............ DW IHERE,COMMANONE,EXIT 1375 0017C0 1376 0017C0 ;C THEN adrs -- resolve forward branch 1377 0017C0 ; IHERE SWAP !DEST ; IMMEDIATE 1378 0017C0 IMMED THEN,4,'THEN',DOCOLON 1378.1 000000 PUBLIC THEN 1378.2 0017C0 .... DW link 1378.3 0017C2 FE DB 0FEh // ; immediate (LSB=0) 1378.4 0017C3 link SET $ 1378.5 0017C3 04 DB 4 1378.6 0017C4 5448454E DB 'THEN' 1378.7 0017C8 EVEN 1378.8 0017C8 IF 'DOCOLON'='DOCODE' 1378.9 0017C8 THEN: DW $+2 1378.10 0017C8 ELSE 1378.11 0017C8 .... THEN: DW DOCOLON 1378.12 0017CA ENDIF 1378.13 0017CA ENDM 1379 0017CA ............* DW IHERE,SWAP,STOREDEST,EXIT 1380 0017D2 1381 0017D2 ;C ELSE adrs1 -- adrs2 branch for IF..ELSE 1382 0017D2 ; ['] branch ,BRANCH IHERE ,NONE Flashable 1383 0017D2 ; SWAP POSTPONE THEN ; IMMEDIATE 1384 0017D2 IMMED ELSS,4,'ELSE',DOCOLON 1384.1 000000 PUBLIC ELSS 1384.2 0017D2 .... DW link 1384.3 0017D4 FE DB 0FEh // ; immediate (LSB=0) 1384.4 0017D5 link SET $ 1384.5 0017D5 04 DB 4 1384.6 0017D6 454C5345 DB 'ELSE' 1384.7 0017DA EVEN 1384.8 0017DA IF 'DOCOLON'='DOCODE' 1384.9 0017DA ELSS: DW $+2 1384.10 0017DA ELSE 1384.11 0017DA .... ELSS: DW DOCOLON 1384.12 0017DC ENDIF 1384.13 0017DC ENDM 1385 0017DC ............ DW lit,bran,COMMABRANCH 1386 0017E2 ........ DW IHERE,COMMANONE 1387 0017E6 ............ DW SWAP,THEN,EXIT 1388 0017EC 1389 0017EC ;C BEGIN -- adrs target for bwd. branch 1390 0017EC ; IHERE ; IMMEDIATE 1391 0017EC IMMED BEGIN,5,'BEGIN',DOCOLON 1391.1 000000 PUBLIC BEGIN 1391.2 0017EC .... DW link 1391.3 0017EE FE DB 0FEh // ; immediate (LSB=0) 1391.4 0017EF link SET $ 1391.5 0017EF 05 DB 5 1391.6 0017F0 424547494E DB 'BEGIN' 1391.7 0017F5 00 EVEN 1391.8 0017F6 IF 'DOCOLON'='DOCODE' 1391.9 0017F6 BEGIN: DW $+2 1391.10 0017F6 ELSE 1391.11 0017F6 .... BEGIN: DW DOCOLON 1391.12 0017F8 ENDIF 1391.13 0017F8 ENDM 1392 0017F8 ........ DW IHERE,EXIT - 4e-config - Page 122 1393 0017FC 1394 0017FC ;C UNTIL adrs -- conditional backward branch 1395 0017FC ; ['] qbran ,BRANCH ,DEST ; IMMEDIATE 1396 0017FC ; conditional backward branch 1397 0017FC IMMED UNTIL,5,'UNTIL',DOCOLON 1397.1 000000 PUBLIC UNTIL 1397.2 0017FC .... DW link 1397.3 0017FE FE DB 0FEh // ; immediate (LSB=0) 1397.4 0017FF link SET $ 1397.5 0017FF 05 DB 5 1397.6 001800 554E54494C DB 'UNTIL' 1397.7 001805 00 EVEN 1397.8 001806 IF 'DOCOLON'='DOCODE' 1397.9 001806 UNTIL: DW $+2 1397.10 001806 ELSE 1397.11 001806 .... UNTIL: DW DOCOLON 1397.12 001808 ENDIF 1397.13 001808 ENDM 1398 001808 ............ DW lit,qbran,COMMABRANCH 1399 00180E ........ DW COMMADEST,EXIT 1400 001812 1401 001812 ;X AGAIN adrs -- uncond'l backward branch 1402 001812 ; ['] branch ,BRANCH ,DEST ; IMMEDIATE 1403 001812 ; unconditional backward branch 1404 001812 IMMED AGAIN,5,'AGAIN',DOCOLON 1404.1 000000 PUBLIC AGAIN 1404.2 001812 .... DW link 1404.3 001814 FE DB 0FEh // ; immediate (LSB=0) 1404.4 001815 link SET $ 1404.5 001815 05 DB 5 1404.6 001816 414741494E DB 'AGAIN' 1404.7 00181B 00 EVEN 1404.8 00181C IF 'DOCOLON'='DOCODE' 1404.9 00181C AGAIN: DW $+2 1404.10 00181C ELSE 1404.11 00181C .... AGAIN: DW DOCOLON 1404.12 00181E ENDIF 1404.13 00181E ENDM 1405 00181E ............ DW lit,bran,COMMABRANCH 1406 001824 ........ DW COMMADEST,EXIT 1407 001828 1408 001828 ;C WHILE adrs1 -- adrs2 adrs1 branch for WHILE loop 1409 001828 ; POSTPONE IF SWAP ; IMMEDIATE 1410 001828 IMMED WHILE,5,'WHILE',DOCOLON 1410.1 000000 PUBLIC WHILE 1410.2 001828 .... DW link 1410.3 00182A FE DB 0FEh // ; immediate (LSB=0) 1410.4 00182B link SET $ 1410.5 00182B 05 DB 5 1410.6 00182C 5748494C45 DB 'WHILE' 1410.7 001831 00 EVEN 1410.8 001832 IF 'DOCOLON'='DOCODE' 1410.9 001832 WHILE: DW $+2 1410.10 001832 ELSE 1410.11 001832 .... WHILE: DW DOCOLON 1410.12 001834 ENDIF 1410.13 001834 ENDM 1411 001834 ............ DW IFF,SWAP,EXIT 1412 00183A 1413 00183A ;C REPEAT adrs2 adrs1 -- resolve WHILE loop 1414 00183A ; POSTPONE AGAIN POSTPONE THEN ; IMMEDIATE 1415 00183A IMMED REPEAT,6,'REPEAT',DOCOLON 1415.1 000000 PUBLIC REPEAT 1415.2 00183A .... DW link 1415.3 00183C FE DB 0FEh // ; immediate (LSB=0) 1415.4 00183D link SET $ 1415.5 00183D 06 DB 6 1415.6 00183E 524550454154 DB 'REPEAT' 1415.7 001844 EVEN 1415.8 001844 IF 'DOCOLON'='DOCODE' - 4e-config - Page 123 1415.9 001844 REPEAT: DW $+2 1415.10 001844 ELSE 1415.11 001844 .... REPEAT: DW DOCOLON 1415.12 001846 ENDIF 1415.13 001846 ENDM 1416 001846 ............ DW AGAIN,THEN,EXIT 1417 00184C 1418 00184C ;Z >L x -- L: -- x move to leave stack 1419 00184C ; CELL LP +! LP @ ! ; (L stack grows up) 1420 00184C HEADER TOL,2,'>L',DOCOLON 1420.1 000000 PUBLIC TOL 1420.2 00184C .... DW link 1420.3 00184E FF DB 0FFh ; not immediate 1420.4 00184F link SET $ 1420.5 00184F 02 DB 2 1420.6 001850 3E4C DB '>L' 1420.7 001852 EVEN 1420.8 001852 IF 'DOCOLON'='DOCODE' 1420.9 001852 TOL: DW $+2 1420.10 001852 ELSE 1420.11 001852 .... TOL: DW DOCOLON 1420.12 001854 ENDIF 1420.13 001854 ENDM 1421 001854 ............* DW CELL,LP,PLUSSTORE,LP,FETCH,STORE,EXIT 1422 001862 1423 001862 ;Z L> -- x L: x -- move from leave stack 1424 001862 ; LP @ @ CELL NEGATE LP +! ; 1425 001862 HEADER LFROM,2,'L>',DOCOLON 1425.1 000000 PUBLIC LFROM 1425.2 001862 .... DW link 1425.3 001864 FF DB 0FFh ; not immediate 1425.4 001865 link SET $ 1425.5 001865 02 DB 2 1425.6 001866 4C3E DB 'L>' 1425.7 001868 EVEN 1425.8 001868 IF 'DOCOLON'='DOCODE' 1425.9 001868 LFROM: DW $+2 1425.10 001868 ELSE 1425.11 001868 .... LFROM: DW DOCOLON 1425.12 00186A ENDIF 1425.13 00186A ENDM 1426 00186A ............ DW LP,FETCH,FETCH 1427 001870 ............* DW CELL,NEGATE,LP,PLUSSTORE,EXIT 1428 00187A 1429 00187A ;C DO -- adrs L: -- 0 start a loop 1430 00187A ; ['] xdo ,XT IHERE target for bwd branch 1431 00187A ; 0 >L ; IMMEDIATE marker for LEAVEs 1432 00187A IMMED DO,2,'DO',DOCOLON 1432.1 000000 PUBLIC DO 1432.2 00187A .... DW link 1432.3 00187C FE DB 0FEh // ; immediate (LSB=0) 1432.4 00187D link SET $ 1432.5 00187D 02 DB 2 1432.6 00187E 444F DB 'DO' 1432.7 001880 EVEN 1432.8 001880 IF 'DOCOLON'='DOCODE' 1432.9 001880 DO: DW $+2 1432.10 001880 ELSE 1432.11 001880 .... DO: DW DOCOLON 1432.12 001882 ENDIF 1432.13 001882 ENDM 1433 001882 ............* DW lit,xdo,COMMAXT,IHERE 1434 00188A ............ DW ZERO,TOL,EXIT 1435 001890 1436 001890 ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- common factor of LOOP and +LOOP 1437 001890 ; ,BRANCH ,DEST backward loop 1438 001890 ; BEGIN L> ?DUP WHILE POSTPONE THEN REPEAT ; 1439 001890 ; resolve - 4e-config - Page 124 LEAVEs 1440 001890 ; This is a common factor of LOOP and +LOOP. 1441 001890 HEADER ENDLOOP,7,'ENDLOOP',DOCOLON 1441.1 000000 PUBLIC ENDLOOP 1441.2 001890 .... DW link 1441.3 001892 FF DB 0FFh ; not immediate 1441.4 001893 link SET $ 1441.5 001893 07 DB 7 1441.6 001894 454E444C4F4F* DB 'ENDLOOP' 1441.7 00189B 00 EVEN 1441.8 00189C IF 'DOCOLON'='DOCODE' 1441.9 00189C ENDLOOP: DW $+2 1441.10 00189C ELSE 1441.11 00189C .... ENDLOOP: DW DOCOLON 1441.12 00189E ENDIF 1441.13 00189E ENDM 1442 00189E ........ DW COMMABRANCH,COMMADEST 1443 0018A2 ............ LOOP1: DW LFROM,QDUP,qbran 1444 0018A8 DEST LOOP2 1444.1 0018A8 0800 DW LOOP2-$ 1444.2 0018AA ENDM 1445 0018AA ........ DW THEN,bran 1446 0018AE DEST LOOP1 1446.1 0018AE F4FF DW LOOP1-$ 1446.2 0018B0 ENDM 1447 0018B0 .... LOOP2: DW EXIT 1448 0018B2 1449 0018B2 ;C LOOP adrs -- L: 0 a1 a2 .. aN -- finish a loop 1450 0018B2 ; ['] xloop ENDLOOP ; IMMEDIATE 1451 0018B2 IMMED LOO,4,'LOOP',DOCOLON 1451.1 000000 PUBLIC LOO 1451.2 0018B2 .... DW link 1451.3 0018B4 FE DB 0FEh // ; immediate (LSB=0) 1451.4 0018B5 link SET $ 1451.5 0018B5 04 DB 4 1451.6 0018B6 4C4F4F50 DB 'LOOP' 1451.7 0018BA EVEN 1451.8 0018BA IF 'DOCOLON'='DOCODE' 1451.9 0018BA LOO: DW $+2 1451.10 0018BA ELSE 1451.11 0018BA .... LOO: DW DOCOLON 1451.12 0018BC ENDIF 1451.13 0018BC ENDM 1452 0018BC ............* DW lit,xloop,ENDLOOP,EXIT 1453 0018C4 1454 0018C4 ;C +LOOP adrs -- L: 0 a1 a2 .. aN -- finish a loop 1455 0018C4 ; ['] xplusloop ENDLOOP ; IMMEDIATE 1456 0018C4 IMMED PLUSLOOP,5,'+LOOP',DOCOLON 1456.1 000000 PUBLIC PLUSLOOP 1456.2 0018C4 .... DW link 1456.3 0018C6 FE DB 0FEh // ; immediate (LSB=0) 1456.4 0018C7 link SET $ 1456.5 0018C7 05 DB 5 1456.6 0018C8 2B4C4F4F50 DB '+LOOP' 1456.7 0018CD 00 EVEN 1456.8 0018CE IF 'DOCOLON'='DOCODE' 1456.9 0018CE PLUSLOOP: DW $+2 1456.10 0018CE ELSE 1456.11 0018CE .... PLUSLOOP: DW DOCOLON 1456.12 0018D0 ENDIF 1456.13 0018D0 ENDM 1457 0018D0 ............* DW lit,xplusloop,ENDLOOP,EXIT 1458 0018D8 1459 0018D8 ;C LEAVE -- L: -- adrs 1460 0018D8 ; ['] UNLOOP ,XT 1461 0018D8 ; ['] branch ,BRANCH IHERE ,NONE >L 1462 0018D8 ; ; IMMEDIATE unconditional forward branch 1463 0018D8 IMMED LEAV,5,'LEAVE',DOCOLON 1463.1 000000 PUBLIC LEAV 1463.2 0018D8 .... DW link 1463.3 0018DA FE DB 0FEh // ; immediate (LSB=0) 1463.4 0018DB link SET $ - 4e-config - Page 125 1463.5 0018DB 05 DB 5 1463.6 0018DC 4C45415645 DB 'LEAVE' 1463.7 0018E1 00 EVEN 1463.8 0018E2 IF 'DOCOLON'='DOCODE' 1463.9 0018E2 LEAV: DW $+2 1463.10 0018E2 ELSE 1463.11 0018E2 .... LEAV: DW DOCOLON 1463.12 0018E4 ENDIF 1463.13 0018E4 ENDM 1464 0018E4 ............ DW lit,UNLOOP,COMMAXT 1465 0018EA ............ DW lit,bran,COMMABRANCH 1466 0018F0 ............* DW IHERE,COMMANONE,TOL,EXIT 1467 0018F8 1468 0018F8 ; OTHER OPERATIONS ============================= = 1469 0018F8 1470 0018F8 ;X WITHIN n1|u1 n2|u2 n3|u3 -- f n2<=n1R - R> U< ; per ANS document 1472 0018F8 HEADER WITHIN,6,'WITHIN',DOCOLON 1472.1 000000 PUBLIC WITHIN 1472.2 0018F8 .... DW link 1472.3 0018FA FF DB 0FFh ; not immediate 1472.4 0018FB link SET $ 1472.5 0018FB 06 DB 6 1472.6 0018FC 57495448494E DB 'WITHIN' 1472.7 001902 EVEN 1472.8 001902 IF 'DOCOLON'='DOCODE' 1472.9 001902 WITHIN: DW $+2 1472.10 001902 ELSE 1472.11 001902 .... WITHIN: DW DOCOLON 1472.12 001904 ENDIF 1472.13 001904 ENDM 1473 001904 ............* DW OVER,MINUS,TOR,MINUS,RFROM,ULESS,EXIT 1474 001912 1475 001912 ;C MOVE addr1 addr2 u -- smart move 1476 001912 ; VERSION FOR 1 ADDRESS UNIT = 1 CHAR 1477 001912 ; >R 2DUP SWAP DUP R@ + -- ... dst src src+n 1478 001912 ; WITHIN IF R> CMOVE> src <= dst < src+n 1479 001912 ; ELSE R> CMOVE THEN ; otherwise 1480 001912 HEADER MOVE,4,'MOVE',DOCOLON 1480.1 000000 PUBLIC MOVE 1480.2 001912 .... DW link 1480.3 001914 FF DB 0FFh ; not immediate 1480.4 001915 link SET $ 1480.5 001915 04 DB 4 1480.6 001916 4D4F5645 DB 'MOVE' 1480.7 00191A EVEN 1480.8 00191A IF 'DOCOLON'='DOCODE' 1480.9 00191A MOVE: DW $+2 1480.10 00191A ELSE 1480.11 00191A .... MOVE: DW DOCOLON 1480.12 00191C ENDIF 1480.13 00191C ENDM 1481 00191C ............* DW TOR,TWODUP,SWAP,DUP,RFETCH,PLUS 1482 001928 ........ DW WITHIN,qbran 1483 00192C DEST MOVE1 1483.1 00192C 0A00 DW MOVE1-$ 1483.2 00192E ENDM 1484 00192E ............ DW RFROM,CMOVEUP,bran 1485 001934 DEST MOVE2 1485.1 001934 0600 DW MOVE2-$ 1485.2 001936 ENDM 1486 001936 ........ MOVE1: DW RFROM,CMOVE 1487 00193A .... MOVE2: DW EXIT 1488 00193C 1489 00193C ;C DEPTH -- +n number of items on stack 1490 00193C ; SP@ S0 SWAP - 2/ ; 16-BIT VERSION! 1491 00193C HEADER DEPTH,5,'DEPTH',DOCOLON 1491.1 000000 PUBLIC DEPTH 1491.2 00193C .... DW link 1491.3 00193E FF DB 0FFh ; not immediate - 4e-config - Page 126 1491.4 00193F link SET $ 1491.5 00193F 05 DB 5 1491.6 001940 4445505448 DB 'DEPTH' 1491.7 001945 00 EVEN 1491.8 001946 IF 'DOCOLON'='DOCODE' 1491.9 001946 DEPTH: DW $+2 1491.10 001946 ELSE 1491.11 001946 .... DEPTH: DW DOCOLON 1491.12 001948 ENDIF 1491.13 001948 ENDM 1492 001948 ............* DW SPFETCH,S0,SWAP,MINUS,TWOSLASH,EXIT 1493 001954 1494 001954 ;C ENVIRONMENT? c-addr u -- false system query 1495 001954 ; -- i*x true 1496 001954 ; 2DROP 0 ; the minimal definition! 1497 001954 HEADER ENVIRONMENTQ,12,'ENVIRONMENT?',DOCOL ON 1497.1 000000 PUBLIC ENVIRONMENTQ 1497.2 001954 .... DW link 1497.3 001956 FF DB 0FFh ; not immediate 1497.4 001957 link SET $ 1497.5 001957 0C DB 12 1497.6 001958 454E5649524F* DB 'ENVIRONMENT?' 1497.7 001964 EVEN 1497.8 001964 IF 'DOCOLON'='DOCODE' 1497.9 001964 ENVIRONMENTQ: DW $+2 1497.10 001964 ELSE 1497.11 001964 .... ENVIRONMENTQ: DW DOCOLON 1497.12 001966 ENDIF 1497.13 001966 ENDM 1498 001966 ............ DW TWODROP,ZERO,EXIT 1499 00196C 1500 00196C ;U UTILITY WORDS ===================== 1501 00196C 1502 00196C ;Z NOOP -- do nothing 1503 00196C HEADER NOOP,4,'NOOP',DOCOLON 1503.1 000000 PUBLIC NOOP 1503.2 00196C .... DW link 1503.3 00196E FF DB 0FFh ; not immediate 1503.4 00196F link SET $ 1503.5 00196F 04 DB 4 1503.6 001970 4E4F4F50 DB 'NOOP' 1503.7 001974 EVEN 1503.8 001974 IF 'DOCOLON'='DOCODE' 1503.9 001974 NOOP: DW $+2 1503.10 001974 ELSE 1503.11 001974 .... NOOP: DW DOCOLON 1503.12 001976 ENDIF 1503.13 001976 ENDM 1504 001976 .... DW EXIT 1505 001978 1506 001978 ;Z FLALIGNED a -- a' align IDP to flash boundary 1507 001978 ; $200 OVER - $1FF AND + ; 1508 001978 HEADER FLALIGNED,9,'FLALIGNED',DOCOLON 1508.1 000000 PUBLIC FLALIGNED 1508.2 001978 .... DW link 1508.3 00197A FF DB 0FFh ; not immediate 1508.4 00197B link SET $ 1508.5 00197B 09 DB 9 1508.6 00197C 464C414C4947* DB 'FLALIGNED' 1508.7 001985 00 EVEN 1508.8 001986 IF 'DOCOLON'='DOCODE' 1508.9 001986 FLALIGNED: DW $+2 1508.10 001986 ELSE 1508.11 001986 .... FLALIGNED: DW DOCOLON 1508.12 001988 ENDIF 1508.13 001988 ENDM 1509 001988 ....0002....* DW lit,0200h,OVER,MINUS,lit,01FFh,ANDD,P LUS,EXIT 1510 00199A 1511 00199A ;X MARKER -- create word to restore dictionary 1512 00199A ; LATEST @ IHERE HERE 1513 00199A ; IHERE FLALIGNED IDP ! align new word to flash boundary 1514 00199A ; DUP I@ 1516 00199A ; SWAP CELL+ DUP I@ 1517 00199A ; SWAP CELL+ I@ fetch saved -- dp idp latest 1518 00199A ; OVER FLALIGNED IHERE OVER - FLERASE erase Flash from saved to IHERE 1519 00199A ; LATEST ! IDP ! DP ! ; 1520 00199A HEADER MARKER,6,'MARKER',DOCOLON 1520.1 000000 PUBLIC MARKER 1520.2 00199A .... DW link 1520.3 00199C FF DB 0FFh ; not immediate 1520.4 00199D link SET $ 1520.5 00199D 06 DB 6 1520.6 00199E 4D41524B4552 DB 'MARKER' 1520.7 0019A4 EVEN 1520.8 0019A4 IF 'DOCOLON'='DOCODE' 1520.9 0019A4 MARKER: DW $+2 1520.10 0019A4 ELSE 1520.11 0019A4 .... MARKER: DW DOCOLON 1520.12 0019A6 ENDIF 1520.13 0019A6 ENDM 1521 0019A6 ............* DW LATEST,FETCH,IHERE,HERE 1522 0019AE ............* DW IHERE,FLALIGNED,IDP,STORE 1523 0019B6 ............* DW BUILDS,ICOMMA,ICOMMA,ICOMMA,XDOES 1524 0019C0 3040.... MOV #dodoes,PC ; long direct jump to DODOES 1525 0019C4 ........ DW DUP,IFETCH 1526 0019C8 ............* DW SWAP,CELLPLUS,DUP,IFETCH 1527 0019D0 ............ DW SWAP,CELLPLUS,IFETCH 1528 0019D6 ............* DW OVER,FLALIGNED,IHERE,OVER,MINUS,FLERA SE 1529 0019E2 ............* DW LATEST,STORE,IDP,STORE,DDP,STORE,EXIT 1530 0019F0 1531 0019F0 /*** 1532 0019F0 ;X WORDS -- list all words in dict. 1533 0019F0 ; LATEST @ BEGIN 1534 0019F0 ; DUP HCOUNT 7F AND HTYPE SPACE 1535 0019F0 ; NFA>LFA H@ 1536 0019F0 ; DUP 0= UNTIL 1537 0019F0 ; DROP ; 1538 0019F0 HEADER WORDS,5,'WORDS',DOCOLON 1539 0019F0 DW LATEST,FETCH 1540 0019F0 WDS1: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE 1541 0019F0 DW NFATOLFA,HFETCH 1542 0019F0 DW DUP,ZEROEQUAL,qbran 1543 0019F0 DEST WDS1 1544 0019F0 DW DROP,EXIT 1545 0019F0 ***/ 1546 0019F0 1547 0019F0 ;X WORDS -- list all words in dict. Stop and go key version. 1548 0019F0 ; LATEST @ BEGIN 1549 0019F0 ; KEY? IF KEY DROP KEY 0x0D = IF DROP EXIT THEN THEN 1550 0019F0 ; DUP HCOUNT 7F AND HTYPE SPACE 1551 0019F0 ; NFA>LFA H@ 1552 0019F0 ; DUP 0= UNTIL 1553 0019F0 ; DROP ; 1554 0019F0 HEADER WORDS,5,'WORDS',DOCOLON 1554.1 000000 PUBLIC WORDS 1554.2 0019F0 .... DW link 1554.3 0019F2 FF DB 0FFh ; not immediate 1554.4 0019F3 link SET $ 1554.5 0019F3 05 DB 5 1554.6 0019F4 574F524453 DB 'WORDS' 1554.7 0019F9 00 EVEN 1554.8 0019FA IF 'DOCOLON'='DOCODE' 1554.9 0019FA WORDS: DW $+2 1554.10 0019FA ELSE 1554.11 0019FA .... WORDS: DW DOCOLON 1554.12 0019FC ENDIF 1554.13 0019FC ENDM 1555 0019FC ........ DW LATEST,FETCH 1556 001A00 ........ WDS1: DW KEYQ,qbran 1557 001A04 DEST WDS2 1557.1 001A04 1000 DW WDS2-$ 1557.2 001A06 ENDM - 4e-config - Page 128 1558 001A06 ........ DW KEY,DROP ; halt 1559 001A0A ............* DW KEY,BLANK,EQUAL,qbran ; go on if blank, else quit words 1560 001A12 DEST WDS3 1560.1 001A12 1C00 DW WDS3-$ 1560.2 001A14 ENDM 1561 001A14 ............*WDS2: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE 1562 001A22 ........ DW NFATOLFA,HFETCH 1563 001A26 ............ DW DUP,ZEROEQUAL,qbran 1564 001A2C DEST WDS1 1564.1 001A2C D4FF DW WDS1-$ 1564.2 001A2E ENDM 1565 001A2E ........ WDS3: DW DROP,EXIT 1566 001A32 1567 001A32 ;X (U.R) u n -- xxx display u unsigned in n width; primitiv 1568 001A32 ; >R <# 0 #S #> R> OVER - 0 MAX (jump) ; 1569 001A32 HEADLESS PARENUDOTR,DOCOLON 1569.1 000000 PUBLIC PARENUDOTR 1569.2 001A32 IF 'DOCOLON'='DOCODE' 1569.3 001A32 PARENUDOTR: DW $+2 1569.4 001A32 ELSE 1569.5 001A32 .... PARENUDOTR: DW DOCOLON 1569.6 001A34 ENDIF 1569.7 001A34 ENDM 1570 001A34 ............* DW TOR,LESSNUM,ZERO,NUMS,NUMGREATER 1571 001A3E ............* DW RFROM,OVER,MINUS,ZERO,MAX 1572 001A48 .... DW EXIT 1573 001A4A 1574 001A4A ;X U.R u n -- display u unsigned in n width 1575 001A4A ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE ; 1576 001A4A HEADER UDOTR,3,'U.R',DOCOLON 1576.1 000000 PUBLIC UDOTR 1576.2 001A4A .... DW link 1576.3 001A4C FF DB 0FFh ; not immediate 1576.4 001A4D link SET $ 1576.5 001A4D 03 DB 3 1576.6 001A4E 552E52 DB 'U.R' 1576.7 001A51 00 EVEN 1576.8 001A52 IF 'DOCOLON'='DOCODE' 1576.9 001A52 UDOTR: DW $+2 1576.10 001A52 ELSE 1576.11 001A52 .... UDOTR: DW DOCOLON 1576.12 001A54 ENDIF 1576.13 001A54 ENDM 1577 001A54 .... DW PARENUDOTR 1578 001A56 ............ DW SPACES,TYP,EXIT 1579 001A5C 1580 001A5C ;X 0U.R u n -- display u unsigned in n width with leading zeros 1581 001A5C ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE ; 1582 001A5C HEADER ZEROUDOTR,4,'0U.R',DOCOLON 1582.1 000000 PUBLIC ZEROUDOTR 1582.2 001A5C .... DW link 1582.3 001A5E FF DB 0FFh ; not immediate 1582.4 001A5F link SET $ 1582.5 001A5F 04 DB 4 1582.6 001A60 30552E52 DB '0U.R' 1582.7 001A64 EVEN 1582.8 001A64 IF 'DOCOLON'='DOCODE' 1582.9 001A64 ZEROUDOTR: DW $+2 1582.10 001A64 ELSE 1582.11 001A64 .... ZEROUDOTR: DW DOCOLON 1582.12 001A66 ENDIF 1582.13 001A66 ENDM 1583 001A66 .... DW PARENUDOTR 1584 001A68 ............ DW ZEROS,TYP,EXIT 1585 001A6E 1586 001A6E ;X ZEROS n -- output n zeros 1587 001A6E ; BEGIN DUP WHILE ZERO 1- REPEAT DROP ; 1588 001A6E HEADER ZEROS,5,'ZEROS',DOCOLON - 4e-config - Page 129 1588.1 000000 PUBLIC ZEROS 1588.2 001A6E .... DW link 1588.3 001A70 FF DB 0FFh ; not immediate 1588.4 001A71 link SET $ 1588.5 001A71 05 DB 5 1588.6 001A72 5A45524F53 DB 'ZEROS' 1588.7 001A77 00 EVEN 1588.8 001A78 IF 'DOCOLON'='DOCODE' 1588.9 001A78 ZEROS: DW $+2 1588.10 001A78 ELSE 1588.11 001A78 .... ZEROS: DW DOCOLON 1588.12 001A7A ENDIF 1588.13 001A7A ENDM 1589 001A7A ........ ZEROS1: DW DUP,qbran 1590 001A7E DEST ZEROS2 1590.1 001A7E 0E00 DW ZEROS2-$ 1590.2 001A80 ENDM 1591 001A80 ....3000....* DW lit,'0',EMIT,ONEMINUS,bran 1592 001A8A DEST ZEROS1 1592.1 001A8A F0FF DW ZEROS1-$ 1592.2 001A8C ENDM 1593 001A8C ........ ZEROS2: DW DROP,EXIT 1594 001A90 1595 001A90 1596 001A90 1597 001A90 ;X DUMP adr n -- dump memory 1598 001A90 ; OVER + SWAP DO 1599 001A90 ; CR I 4 U.R SPACE SPACE 1600 001A90 ; I $10 + I DO I C@ 3 U.R LOOP SPACE SPACE 1601 001A90 ; I $10 + I DO I C@ $7F AND $7E MIN BL MAX EMIT LOOP 1602 001A90 ; 10 +LOOP ; 1603 001A90 HEADER DUMP,4,'DUMP',DOCOLON 1603.1 000000 PUBLIC DUMP 1603.2 001A90 .... DW link 1603.3 001A92 FF DB 0FFh ; not immediate 1603.4 001A93 link SET $ 1603.5 001A93 04 DB 4 1603.6 001A94 44554D50 DB 'DUMP' 1603.7 001A98 EVEN 1603.8 001A98 IF 'DOCOLON'='DOCODE' 1603.9 001A98 DUMP: DW $+2 1603.10 001A98 ELSE 1603.11 001A98 .... DUMP: DW DOCOLON 1603.12 001A9A ENDIF 1603.13 001A9A ENDM 1604 001A9A ............* DW OVER,PLUS,SWAP,xdo 1605 001AA2 ............*LDUMP1: DW CR,II,lit,4,UDOTR,SPACE,SPACE 1606 001AB0 ........1000* DW II,lit,10h,PLUS,II,xdo 1607 001ABC ............*LDUMP2: DW II,CFETCH,lit,3,UDOTR,xloop 1608 001AC8 DEST LDUMP2 1608.1 001AC8 F4FF DW LDUMP2-$ 1608.2 001ACA ENDM 1609 001ACA ........ DW SPACE,SPACE 1610 001ACE ........1000* DW II,lit,10h,PLUS,II,xdo 1611 001ADA ............*LDUMP3: DW II,CFETCH,lit,7Fh,ANDD,lit,7Eh,MIN,BL ANK,MAX,EMIT,xloop 1612 001AF2 DEST LDUMP3 1612.1 001AF2 E8FF DW LDUMP3-$ 1612.2 001AF4 ENDM 1613 001AF4 ....1000.... DW lit,10h,xplusloop 1614 001AFA DEST LDUMP1 1614.1 001AFA A8FF DW LDUMP1-$ 1614.2 001AFC ENDM 1615 001AFC .... DW EXIT 1616 001AFE 1617 001AFE ;X .S -- print stack contents 1618 001AFE ; [char] < EMIT DEPTH . BS [char] > EMIT 1619 001AFE ; SP@ S0 < IF 1620 001AFE ; SP@ S0 2 - DO I @ U. -2 +LOOP 1621 001AFE ; THEN ; 1622 001AFE HEADER DOTS,2,'.S',DOCOLON 1622.1 000000 PUBLIC DOTS 1622.2 001AFE .... DW link 1622.3 001B00 FF DB 0FFh ; not immediate 1622.4 001B01 link SET $ - 4e-config - Page 130 1622.5 001B01 02 DB 2 1622.6 001B02 2E53 DB '.S' 1622.7 001B04 EVEN 1622.8 001B04 IF 'DOCOLON'='DOCODE' 1622.9 001B04 DOTS: DW $+2 1622.10 001B04 ELSE 1622.11 001B04 .... DOTS: DW DOCOLON 1622.12 001B06 ENDIF 1622.13 001B06 ENDM 1623 001B06 ;mk gforth style 1624 001B06 ....3C00.... DW lit,$3C,EMIT 1625 001B0C ........ DW DEPTH,DOT 1626 001B10 ....0800....* DW lit,$08,EMIT,lit,$3E,EMIT,SPACE 1627 001B1E ;/mk 1628 001B1E ............* DW SPFETCH,S0,LESS,qbran 1629 001B26 DEST DOTS2 1629.1 001B26 1C00 DW DOTS2-$ 1629.2 001B28 ENDM 1630 001B28 ............* DW SPFETCH,S0,lit,2,MINUS 1631 001B32 ; DW TWODUP,TOR,TOR, 1632 001B32 .... DW xdo 1633 001B34 ............*DOTS1: DW II,FETCH,UDOT,lit,-2,xplusloop 1634 001B40 DEST DOTS1 1634.1 001B40 F4FF DW DOTS1-$ 1634.2 001B42 ENDM 1635 001B42 ; DW lit,'|',EMIT,RFROM,RFROM 1636 001B42 ; DW xdo 1637 001B42 ;DOTS11: DW II,FETCH,UDOT,lit,-2,xplusloop 1638 001B42 ; DEST DOTS11 1639 001B42 .... DOTS2: DW EXIT 1640 001B44 1641 001B44 1642 001B44 ;U ccrc n c -- n' crc process byte 1643 001B44 ; 8 LSHIFT XOR 1644 001B44 ; 8 0 DO ( n' ) 1645 001B44 ; DUP 1 LSHIFT SWAP 8000 AND 0= INVERT 1021 ( CRC-16 ) AND XOR 1646 001B44 ; LOOP 1647 001B44 ; FFFF AND ; 1648 001B44 ; HEADER CCRC,4,'ccrc',DOCODE 1649 001B44 HEADLESS CCRC,DOCODE 1649.1 000000 PUBLIC CCRC 1649.2 001B44 IF 'DOCODE'='DOCODE' 1649.3 001B44 .... CCRC: DW $+2 1649.4 001B46 ELSE 1649.5 001B46 CCRC: DW DOCODE 1649.6 001B46 ENDIF 1649.7 001B46 ENDM 1650 001B46 37F0FF00 AND #00FFh,TOS 1651 001B4A 8710 SWPB TOS 1652 001B4C 37E4 XOR @PSP+,TOS 1653 001B4E 3642 MOV #8,W 1654 001B50 0757 ccrc1: RLA TOS 1655 001B52 0228 JNC ccrc2 1656 001B54 37E02110 XOR #01021h,TOS 1657 001B58 1683 ccrc2: DEC W 1658 001B5A FA23 JNZ ccrc1 1659 001B5C NEXT 1659.1 001B5C 3645 MOV @IP+,W // ; fetch word address into W 1659.2 001B5E 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1659.3 001B60 ENDM 1660 001B60 1661 001B60 ;U crc n addr len -- n' crc process string 1662 001B60 ; dup IF over + swap DO ( n ) I C@ ccrc LOOP ELSE 2drop THEN ; 1663 001B60 HEADER CRC,3,'CRC',DOCOLON 1663.1 000000 PUBLIC CRC 1663.2 001B60 .... DW link 1663.3 001B62 FF DB 0FFh ; not immediate 1663.4 001B63 link SET $ 1663.5 001B63 03 DB 3 1663.6 001B64 435243 DB 'CRC' 1663.7 001B67 00 EVEN - 4e-config - Page 131 1663.8 001B68 IF 'DOCOLON'='DOCODE' 1663.9 001B68 CRC: DW $+2 1663.10 001B68 ELSE 1663.11 001B68 .... CRC: DW DOCOLON 1663.12 001B6A ENDIF 1663.13 001B6A ENDM 1664 001B6A ........ DW DUP,qbran 1665 001B6E DEST pcrc2 1665.1 001B6E 1800 DW pcrc2-$ 1665.2 001B70 ENDM 1666 001B70 ............* DW OVER,PLUS,SWAP,xdo 1667 001B78 ............*pcrc1: DW II,CFETCH,CCRC, xloop 1668 001B80 DEST pcrc1 1668.1 001B80 F8FF DW pcrc1-$ 1668.2 001B82 ENDM 1669 001B82 .... DW bran 1670 001B84 DEST pcrc3 1670.1 001B84 0400 DW pcrc3-$ 1670.2 001B86 ENDM 1671 001B86 .... pcrc2: DW TWODROP 1672 001B88 .... pcrc3: DW EXIT 1673 001B8A 1674 001B8A 1675 001B8A 1676 001B8A ;U MISC ======================================== ================================ 1677 001B8A 1678 001B8A ;C 2CONSTANT w1 w2 -- define a Forth double constant 1679 001B8A ; (machine code fragment) 1681 001B8A ; Note that the constant is stored in Code space. 1682 001B8A HEADER TWOCONSTANT,9,'2CONSTANT',DOCOLON 1682.1 000000 PUBLIC TWOCONSTANT 1682.2 001B8A .... DW link 1682.3 001B8C FF DB 0FFh ; not immediate 1682.4 001B8D link SET $ 1682.5 001B8D 09 DB 9 1682.6 001B8E 32434F4E5354* DB '2CONSTANT' 1682.7 001B97 00 EVEN 1682.8 001B98 IF 'DOCOLON'='DOCODE' 1682.9 001B98 TWOCONSTANT: DW $+2 1682.10 001B98 ELSE 1682.11 001B98 .... TWOCONSTANT: DW DOCOLON 1682.12 001B9A ENDIF 1682.13 001B9A ENDM 1683 001B9A ............* DW BUILDS,ICOMMA,ICOMMA,XDOES 1684 000000 PUBLIC DOTWOCON 1685 001BA2 DOTWOCON: ; ( -- w1 w2 ) 1686 001BA2 2482 SUB #4,PSP ; make room on stack 1687 001BA4 84470200 MOV TOS,2(PSP) 1688 001BA8 3746 MOV @W+,TOS ; fetch from parameter field to TOS 1689 001BAA A4460000 MOV @W,0(PSP) ; fetch secon word from parameter field to NOS 1690 001BAE NEXT 1690.1 001BAE 3645 MOV @IP+,W // ; fetch word address into W 1690.2 001BB0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1690.3 001BB2 ENDM 1691 001BB2 1692 001BB2 ;U \ -- backslash 1693 001BB2 ; everything up to the end of the current line is a comment. 1694 001BB2 ; SOURCE >IN ! DROP ; 1695 001BB2 IMMED BACKSLASH,1,'\\',DOCOLON 1695.1 000000 PUBLIC BACKSLASH 1695.2 001BB2 .... DW link 1695.3 001BB4 FE DB 0FEh // ; immediate (LSB=0) 1695.4 001BB5 link SET $ 1695.5 001BB5 01 DB 1 1695.6 001BB6 5C DB '\\' 1695.7 001BB7 00 EVEN - 4e-config - Page 132 1695.8 001BB8 IF 'DOCOLON'='DOCODE' 1695.9 001BB8 BACKSLASH: DW $+2 1695.10 001BB8 ELSE 1695.11 001BB8 .... BACKSLASH: DW DOCOLON 1695.12 001BBA ENDIF 1695.13 001BBA ENDM 1696 001BBA ............* DW SOURCE,TOIN,STORE,DROP,EXIT 1697 001BC4 1698 001BC4 ;Z .VER -- type message 1699 001BC4 HEADER DOTVER,4,'.VER',DOCOLON 1699.1 000000 PUBLIC DOTVER 1699.2 001BC4 .... DW link 1699.3 001BC6 FF DB 0FFh ; not immediate 1699.4 001BC7 link SET $ 1699.5 001BC7 04 DB 4 1699.6 001BC8 2E564552 DB '.VER' 1699.7 001BCC EVEN 1699.8 001BCC IF 'DOCOLON'='DOCODE' 1699.9 001BCC DOTVER: DW $+2 1699.10 001BCC ELSE 1699.11 001BCC .... DOTVER: DW DOCOLON 1699.12 001BCE ENDIF 1699.13 001BCE ENDM 1700 001BCE ............* DW lit,version,COUNT,ITYPE ; # of version 1701 001BD6 ............* DW lit,stamp,COUNT,ONEMINUS,ITYPE ; time stamp of version 1702 001BE0 .... DW DOTBOOTVERSION 1703 001BE2 .... DW SPACE 1704 001BE4 ............ DW BASE,FETCH,BIN 1705 001BEA ............* DW COR,FETCH,lit,16,ZEROUDOTR ; flags indicating reset procedure. 1706 001BF4 ........ DW BASE,STORE 1707 001BF8 .... DW EXIT 1708 001BFA 1709 001BFA ;U BELL -- send $07 to Terminal 1710 001BFA HEADER BELL,4,'BELL',DOCOLON 1710.1 000000 PUBLIC BELL 1710.2 001BFA .... DW link 1710.3 001BFC FF DB 0FFh ; not immediate 1710.4 001BFD link SET $ 1710.5 001BFD 04 DB 4 1710.6 001BFE 42454C4C DB 'BELL' 1710.7 001C02 EVEN 1710.8 001C02 IF 'DOCOLON'='DOCODE' 1710.9 001C02 BELL: DW $+2 1710.10 001C02 ELSE 1710.11 001C02 .... BELL: DW DOCOLON 1710.12 001C04 ENDIF 1710.13 001C04 ENDM 1711 001C04 ....0700....* DW lit,7,EMIT,EXIT 1712 001C0C 1713 001C0C ;U ESC[ -- start esc-sequence 1714 001C0C ; 27 emit 91 emit ; 1715 001C0C HEADERLESS ESCPAR,4,'ESC[',DOCOLON 1715.1 000000 PUBLIC ESCPAR 1715.2 001C0C IF 'DOCOLON'='DOCODE' 1715.3 001C0C ESCPAR: DW $+2 1715.4 001C0C ELSE 1715.5 001C0C .... ESCPAR: DW DOCOLON 1715.6 001C0E ENDIF 1715.7 001C0E ENDM 1716 001C0E ....1B00....* DW lit,27,EMIT, lit,91,EMIT 1717 001C1A .... DW EXIT 1718 001C1C 1719 001C1C ;U PN -- send parameter of esc-sequence 1720 001C1C ; base @ swap decimal 0 u.r base ! ; 1721 001C1C HEADERLESS PN,2,'PN',DOCOLON 1721.1 000000 PUBLIC PN 1721.2 001C1C IF 'DOCOLON'='DOCODE' 1721.3 001C1C PN: DW $+2 - 4e-config - Page 133 1721.4 001C1C ELSE 1721.5 001C1C .... PN: DW DOCOLON 1721.6 001C1E ENDIF 1721.7 001C1E ENDM 1722 001C1E ........ DW BASE,FETCH 1723 001C22 ............* DW SWAP,DECIMAL,ZERO,UDOTR 1724 001C2A ........ DW BASE,STORE 1725 001C2E .... DW EXIT 1726 001C30 1727 001C30 ;U ;PN -- send delimiter ; followed by parameter 1728 001C30 ; 59 emit pn ; 1729 001C30 HEADERLESS SEMIPN,3,';PN',DOCOLON 1729.1 000000 PUBLIC SEMIPN 1729.2 001C30 IF 'DOCOLON'='DOCODE' 1729.3 001C30 SEMIPN: DW $+2 1729.4 001C30 ELSE 1729.5 001C30 .... SEMIPN: DW DOCOLON 1729.6 001C32 ENDIF 1729.7 001C32 ENDM 1730 001C32 ....3B00....* DW lit,59,EMIT,PN 1731 001C3A .... DW EXIT 1732 001C3C 1733 001C3C ;U AT-XY x y -- send esc-sequence to terminal 1734 001C3C ; 1+ swap 1+ swap ESC[ pn ;pn 72 emit ; 1735 001C3C HEADER ATXY,5,'AT-XY',DOCOLON 1735.1 000000 PUBLIC ATXY 1735.2 001C3C .... DW link 1735.3 001C3E FF DB 0FFh ; not immediate 1735.4 001C3F link SET $ 1735.5 001C3F 05 DB 5 1735.6 001C40 41542D5859 DB 'AT-XY' 1735.7 001C45 00 EVEN 1735.8 001C46 IF 'DOCOLON'='DOCODE' 1735.9 001C46 ATXY: DW $+2 1735.10 001C46 ELSE 1735.11 001C46 .... ATXY: DW DOCOLON 1735.12 001C48 ENDIF 1735.13 001C48 ENDM 1736 001C48 ............* DW ONEPLUS,SWAP,ONEPLUS,SWAP 1737 001C50 ........ DW ESCPAR,PN 1738 001C54 ........4800* DW SEMIPN, lit,72,EMIT 1739 001C5C .... DW EXIT 1740 001C5E 1741 001C5E ;U PAGE -- send "page" command to terminal to clear screen. 1742 001C5E ; esc[ ." 2J" 0 0 at-xy ; 1743 001C5E HEADER PAGEE,4,'PAGE',DOCOLON 1743.1 000000 PUBLIC PAGEE 1743.2 001C5E .... DW link 1743.3 001C60 FF DB 0FFh ; not immediate 1743.4 001C61 link SET $ 1743.5 001C61 04 DB 4 1743.6 001C62 50414745 DB 'PAGE' 1743.7 001C66 EVEN 1743.8 001C66 IF 'DOCOLON'='DOCODE' 1743.9 001C66 PAGEE: DW $+2 1743.10 001C66 ELSE 1743.11 001C66 .... PAGEE: DW DOCOLON 1743.12 001C68 ENDIF 1743.13 001C68 ENDM 1744 001C68 .... DW ESCPAR 1745 001C6A .... DW XISQUOTE 1746 001C6C 03 DB (ESC1-ESC0) 1747 001C6D 324A ESC0: DB '2J' 1748 001C6F 00 EVEN 1749 001C70 .... ESC1: DW ITYPE 1750 001C72 ............ DW ZERO,ZERO,ATXY 1751 001C78 .... DW EXIT 1752 001C7A 1753 001C7A ;U BIN -- set number base to binary 1754 001C7A HEADER BIN,3,'BIN',DOCOLON 1754.1 000000 PUBLIC BIN 1754.2 001C7A .... DW link 1754.3 001C7C FF DB 0FFh ; not immediate - 4e-config - Page 134 1754.4 001C7D link SET $ 1754.5 001C7D 03 DB 3 1754.6 001C7E 42494E DB 'BIN' 1754.7 001C81 00 EVEN 1754.8 001C82 IF 'DOCOLON'='DOCODE' 1754.9 001C82 BIN: DW $+2 1754.10 001C82 ELSE 1754.11 001C82 .... BIN: DW DOCOLON 1754.12 001C84 ENDIF 1754.13 001C84 ENDM 1755 001C84 ....0200....* DW lit,2,BASE,STORE,EXIT 1756 001C8E 1757 001C8E ; ommitted, MSP430G2553 RAM is too smal. 1758 001C8E ;U RAM -- compile into RAM. SAVE your system befor using RAM. 1759 001C8E ; here unused 10 - allot idp ! ; Use COLD to swich back to flash. 1760 001C8E ; HEADER RAM,3,'RAM',DOCOLON 1761 001C8E ; DW HERE,UNUSED,lit,0x10,MINUS,ALLOT,ID P,STORE,EXIT 1762 001C8E 1763 001C8E ;U TRUE -- f true flag 1764 001C8E HEADER TRUE,4,'TRUE',DOCON 1764.1 000000 PUBLIC TRUE 1764.2 001C8E .... DW link 1764.3 001C90 FF DB 0FFh ; not immediate 1764.4 001C91 link SET $ 1764.5 001C91 04 DB 4 1764.6 001C92 54525545 DB 'TRUE' 1764.7 001C96 EVEN 1764.8 001C96 IF 'DOCON'='DOCODE' 1764.9 001C96 TRUE: DW $+2 1764.10 001C96 ELSE 1764.11 001C96 .... TRUE: DW DOCON 1764.12 001C98 ENDIF 1764.13 001C98 ENDM 1765 001C98 FFFF DW 0xFFFF 1766 001C9A 1767 001C9A ;U FALSE -- f false flag 1768 001C9A HEADER FALSE,5,'FALSE',DOCON 1768.1 000000 PUBLIC FALSE 1768.2 001C9A .... DW link 1768.3 001C9C FF DB 0FFh ; not immediate 1768.4 001C9D link SET $ 1768.5 001C9D 05 DB 5 1768.6 001C9E 46414C5345 DB 'FALSE' 1768.7 001CA3 00 EVEN 1768.8 001CA4 IF 'DOCON'='DOCODE' 1768.9 001CA4 FALSE: DW $+2 1768.10 001CA4 ELSE 1768.11 001CA4 .... FALSE: DW DOCON 1768.12 001CA6 ENDIF 1768.13 001CA6 ENDM 1769 001CA6 0000 DW 0x0 1770 001CA8 1771 001CA8 ;C TABLE -- create an empty definition pointing to FLASH 1772 001CA8 ; HEADER 1773 001CA8 ; docreate ,CF code field 1774 001CA8 ; IHERE I, ; store data adr (Harvard) 1775 001CA8 ; Harvard model, separate Code and Data spaces. 1776 001CA8 ; Separate headers model. 1777 001CA8 ; or do this (4e4th): 1778 001CA8 ; : TABLE @ ; 1779 001CA8 HEADER TABLE,5,'TABLE',DOCOLON 1779.1 000000 PUBLIC TABLE 1779.2 001CA8 .... DW link 1779.3 001CAA FF DB 0FFh ; not immediate 1779.4 001CAB link SET $ 1779.5 001CAB 05 DB 5 1779.6 001CAC 5441424C45 DB 'TABLE' 1779.7 001CB1 00 EVEN 1779.8 001CB2 IF 'DOCOLON'='DOCODE' 1779.9 001CB2 TABLE: DW $+2 1779.10 001CB2 ELSE - 4e-config - Page 135 1779.11 001CB2 .... TABLE: DW DOCOLON 1779.12 001CB4 ENDIF 1779.13 001CB4 ENDM 1780 001CB4 .... DW HEADR 1781 001CB6 ............ DW lit,docreate,COMMACF 1782 001CBC ............* DW IHERE,CELL,PLUS,ICOMMA,EXIT 1783 001CC6 1784 001CC6 1785 001CC6 ;U Bit manipulation words ---------------------- -------------------------------- 1786 001CC6 ; based on http://www.forth.org/svfig/Len/bits. htm 1787 001CC6 1788 001CC6 ;U SET mask addr -- set bit from mask in addr (cell); use even adr! 1789 001CC6 HEADER wset,3,'SET',DOCODE 1789.1 000000 PUBLIC wset 1789.2 001CC6 .... DW link 1789.3 001CC8 FF DB 0FFh ; not immediate 1789.4 001CC9 link SET $ 1789.5 001CC9 03 DB 3 1789.6 001CCA 534554 DB 'SET' 1789.7 001CCD 00 EVEN 1789.8 001CCE IF 'DOCODE'='DOCODE' 1789.9 001CCE .... wset: DW $+2 1789.10 001CD0 ELSE 1789.11 001CD0 wset: DW DOCODE 1789.12 001CD0 ENDIF 1789.13 001CD0 ENDM 1790 001CD0 A7D40000 BIS @PSP,0(TOS) 1791 001CD4 2453 ADD #2,PSP 1792 001CD6 3744 MOV @PSP+,TOS 1793 001CD8 NEXT 1793.1 001CD8 3645 MOV @IP+,W // ; fetch word address into W 1793.2 001CDA 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1793.3 001CDC ENDM 1794 001CDC 1795 001CDC ;U CSET mask addr -- set bit from mask in addr (byte) 1796 001CDC HEADER cset,4,'CSET',DOCODE 1796.1 000000 PUBLIC cset 1796.2 001CDC .... DW link 1796.3 001CDE FF DB 0FFh ; not immediate 1796.4 001CDF link SET $ 1796.5 001CDF 04 DB 4 1796.6 001CE0 43534554 DB 'CSET' 1796.7 001CE4 EVEN 1796.8 001CE4 IF 'DOCODE'='DOCODE' 1796.9 001CE4 .... cset: DW $+2 1796.10 001CE6 ELSE 1796.11 001CE6 cset: DW DOCODE 1796.12 001CE6 ENDIF 1796.13 001CE6 ENDM 1797 001CE6 E7D40000 BIS.B @PSP,0(TOS) 1798 001CEA 2453 ADD #2,PSP 1799 001CEC 3744 MOV @PSP+,TOS 1800 001CEE NEXT 1800.1 001CEE 3645 MOV @IP+,W // ; fetch word address into W 1800.2 001CF0 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1800.3 001CF2 ENDM 1801 001CF2 1802 001CF2 ;U CLR mask addr -- reset bit from mask in addr (cell); use even adr! 1803 001CF2 HEADER wclr,3,'CLR',DOCODE 1803.1 000000 PUBLIC wclr 1803.2 001CF2 .... DW link 1803.3 001CF4 FF DB 0FFh ; not immediate 1803.4 001CF5 link SET $ 1803.5 001CF5 03 DB 3 1803.6 001CF6 434C52 DB 'CLR' 1803.7 001CF9 00 EVEN 1803.8 001CFA IF 'DOCODE'='DOCODE' 1803.9 001CFA .... wclr: DW $+2 1803.10 001CFC ELSE - 4e-config - Page 136 1803.11 001CFC wclr: DW DOCODE 1803.12 001CFC ENDIF 1803.13 001CFC ENDM 1804 001CFC A7C40000 BIC @PSP,0(TOS) 1805 001D00 2453 ADD #2,PSP 1806 001D02 3744 MOV @PSP+,TOS 1807 001D04 NEXT 1807.1 001D04 3645 MOV @IP+,W // ; fetch word address into W 1807.2 001D06 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1807.3 001D08 ENDM 1808 001D08 1809 001D08 ;U CCLR mask addr -- reset bit from mask in addr (byte) 1810 001D08 HEADER cclr,4,'CCLR',DOCODE 1810.1 000000 PUBLIC cclr 1810.2 001D08 .... DW link 1810.3 001D0A FF DB 0FFh ; not immediate 1810.4 001D0B link SET $ 1810.5 001D0B 04 DB 4 1810.6 001D0C 43434C52 DB 'CCLR' 1810.7 001D10 EVEN 1810.8 001D10 IF 'DOCODE'='DOCODE' 1810.9 001D10 .... cclr: DW $+2 1810.10 001D12 ELSE 1810.11 001D12 cclr: DW DOCODE 1810.12 001D12 ENDIF 1810.13 001D12 ENDM 1811 001D12 E7C40000 BIC.B @PSP,0(TOS) 1812 001D16 2453 ADD #2,PSP 1813 001D18 3744 MOV @PSP+,TOS 1814 001D1A NEXT 1814.1 001D1A 3645 MOV @IP+,W // ; fetch word address into W 1814.2 001D1C 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1814.3 001D1E ENDM 1815 001D1E 1816 001D1E ;U CTOGGLE mask addr -- flip bit from mask in addr (byte) 1817 001D1E HEADER ctoggle,7,'CTOGGLE',DOCODE 1817.1 000000 PUBLIC ctoggle 1817.2 001D1E .... DW link 1817.3 001D20 FF DB 0FFh ; not immediate 1817.4 001D21 link SET $ 1817.5 001D21 07 DB 7 1817.6 001D22 43544F47474C* DB 'CTOGGLE' 1817.7 001D29 00 EVEN 1817.8 001D2A IF 'DOCODE'='DOCODE' 1817.9 001D2A .... ctoggle: DW $+2 1817.10 001D2C ELSE 1817.11 001D2C ctoggle: DW DOCODE 1817.12 001D2C ENDIF 1817.13 001D2C ENDM 1818 001D2C E7E40000 XOR.B @PSP,0(TOS) 1819 001D30 2453 ADD #2,PSP 1820 001D32 3744 MOV @PSP+,TOS 1821 001D34 NEXT 1821.1 001D34 3645 MOV @IP+,W // ; fetch word address into W 1821.2 001D36 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1821.3 001D38 ENDM 1822 001D38 1823 001D38 ;U CGET mask addr -- flag test bit from mask in addr (byte) 1824 001D38 HEADER cget,4,'CGET',DOCODE 1824.1 000000 PUBLIC cget 1824.2 001D38 .... DW link 1824.3 001D3A FF DB 0FFh ; not immediate 1824.4 001D3B link SET $ 1824.5 001D3B 04 DB 4 1824.6 001D3C 43474554 DB 'CGET' 1824.7 001D40 EVEN 1824.8 001D40 IF 'DOCODE'='DOCODE' 1824.9 001D40 .... cget: DW $+2 1824.10 001D42 ELSE - 4e-config - Page 137 1824.11 001D42 cget: DW DOCODE 1824.12 001D42 ENDIF 1824.13 001D42 ENDM 1825 001D42 E7B40000 BIT.B @PSP,0(TOS) 1826 001D46 0224 JZ cget1 1827 001D48 3743 MOV #-1,TOS 1828 001D4A 013C JMP cget2 1829 001D4C 0743 cget1:MOV #0, TOS 1830 001D4E 2453 cget2:ADD #2,PSP 1831 001D50 NEXT 1831.1 001D50 3645 MOV @IP+,W // ; fetch word address into W 1831.2 001D52 3046 MOV @W+,PC // ; fetch code address into PC, W=PFA 1831.3 001D54 ENDM 1832 001D54 1833 001D54 1834 001D54 ;U Memory infos -------------------------------- --------------------------------- 1835 001D54 1836 001D54 /* see also: XLINK configuration file for MSP430G2553 1837 001D54 ram =: 0200-03FF 1838 001D54 0200-03C9 forth system; userarea, stacks, tib, pad ... 1839 001D54 03CA-03FF VARAREA for forth variables; check UNUSED ram. 1840 001D54 1841 001D54 flash =: C000-FFFF 1842 001D54 C000-D7FF MEMBOT to MEMTOP is user flash. Check unsused MEM. 1843 001D54 D800-FDFF kernel (may differ with type of board and system loaded) 1844 001D54 FE00-FFFF INTSEG 1845 001D54 FFE0-FFFF INTVEC 1846 001D54 FFFE-FFFF RESET 1847 001D54 */ 1848 001D54 1849 000000 EXTERN resetvec 1850 001D54 ;Z RESETADR -- adr reset vector address 1851 001D54 HEADER RESETADR,8,'RESETADR',DOCON 1851.1 000000 PUBLIC RESETADR 1851.2 001D54 .... DW link 1851.3 001D56 FF DB 0FFh ; not immediate 1851.4 001D57 link SET $ 1851.5 001D57 08 DB 8 1851.6 001D58 524553455441* DB 'RESETADR' 1851.7 001D60 EVEN 1851.8 001D60 IF 'DOCON'='DOCODE' 1851.9 001D60 RESETADR: DW $+2 1851.10 001D60 ELSE 1851.11 001D60 .... RESETADR: DW DOCON 1851.12 001D62 ENDIF 1851.13 001D62 ENDM 1852 001D62 .... DW resetvec 1853 001D64 1854 001D64 ;Z MEMBOT -- adr begining of USERflash 1855 001D64 HEADER MEMBOT,6,'MEMBOT',DOCON 1855.1 000000 PUBLIC MEMBOT 1855.2 001D64 .... DW link 1855.3 001D66 FF DB 0FFh ; not immediate 1855.4 001D67 link SET $ 1855.5 001D67 06 DB 6 1855.6 001D68 4D454D424F54 DB 'MEMBOT' 1855.7 001D6E EVEN 1855.8 001D6E IF 'DOCON'='DOCODE' 1855.9 001D6E MEMBOT: DW $+2 1855.10 001D6E ELSE 1855.11 001D6E .... MEMBOT: DW DOCON 1855.12 001D70 ENDIF 1855.13 001D70 ENDM 1856 001D70 00C0 DW USERFLASHSTART 1857 001D72 1858 001D72 ;Z MEMTOP -- adr end of USERflash 1859 001D72 HEADER MEMTOP,6,'MEMTOP',DOCON - 4e-config - Page 138 1859.1 000000 PUBLIC MEMTOP 1859.2 001D72 .... DW link 1859.3 001D74 FF DB 0FFh ; not immediate 1859.4 001D75 link SET $ 1859.5 001D75 06 DB 6 1859.6 001D76 4D454D544F50 DB 'MEMTOP' 1859.7 001D7C EVEN 1859.8 001D7C IF 'DOCON'='DOCODE' 1859.9 001D7C MEMTOP: DW $+2 1859.10 001D7C ELSE 1859.11 001D7C .... MEMTOP: DW DOCON 1859.12 001D7E ENDIF 1859.13 001D7E ENDM 1860 001D7E FFD7 DW USERFLASHEND 1861 001D80 1862 001D80 ;U MEM -- u bytes left in flash 1863 001D80 ; memtop ihere - ; 1864 001D80 HEADER MEM,3,'MEM',DOCOLON 1864.1 000000 PUBLIC MEM 1864.2 001D80 .... DW link 1864.3 001D82 FF DB 0FFh ; not immediate 1864.4 001D83 link SET $ 1864.5 001D83 03 DB 3 1864.6 001D84 4D454D DB 'MEM' 1864.7 001D87 00 EVEN 1864.8 001D88 IF 'DOCOLON'='DOCODE' 1864.9 001D88 MEM: DW $+2 1864.10 001D88 ELSE 1864.11 001D88 .... MEM: DW DOCOLON 1864.12 001D8A ENDIF 1864.13 001D8A ENDM 1865 001D8A ............ DW MEMTOP,IHERE,MINUS 1866 001D90 .... DW EXIT 1867 001D92 1868 001D92 ;U UNUSED -- u bytes left in RAM 1869 001D92 HEADER UNUSED,6,'UNUSED',DOCOLON 1869.1 000000 PUBLIC UNUSED 1869.2 001D92 .... DW link 1869.3 001D94 FF DB 0FFh ; not immediate 1869.4 001D95 link SET $ 1869.5 001D95 06 DB 6 1869.6 001D96 554E55534544 DB 'UNUSED' 1869.7 001D9C EVEN 1869.8 001D9C IF 'DOCOLON'='DOCODE' 1869.9 001D9C UNUSED: DW $+2 1869.10 001D9C ELSE 1869.11 001D9C .... UNUSED: DW DOCOLON 1869.12 001D9E ENDIF 1869.13 001D9E ENDM 1870 001D9E ....0004....* DW lit,RAMEND,HERE,MINUS 1871 001DA6 .... DW EXIT 1872 001DA8 1873 001DA8 ;Z VARBOT -- a-addr bottom of Variable Area 1874 001DA8 HEADER VARBOT,6,'VARBOT',DOCON 1874.1 000000 PUBLIC VARBOT 1874.2 001DA8 .... DW link 1874.3 001DAA FF DB 0FFh ; not immediate 1874.4 001DAB link SET $ 1874.5 001DAB 06 DB 6 1874.6 001DAC 564152424F54 DB 'VARBOT' 1874.7 001DB2 EVEN 1874.8 001DB2 IF 'DOCON'='DOCODE' 1874.9 001DB2 VARBOT: DW $+2 1874.10 001DB2 ELSE 1874.11 001DB2 .... VARBOT: DW DOCON 1874.12 001DB4 ENDIF 1874.13 001DB4 ENDM 1875 001DB4 .... DW VARAREA 1876 001DB6 1877 000000 EXTERN intseg,intvecs 1878 001DB6 ;Z TOPSEG -- a-addr bottom of top most segment 1879 001DB6 HEADER TOPSEG,6,'TOPSEG',DOCON 1879.1 000000 PUBLIC TOPSEG 1879.2 001DB6 .... DW link 1879.3 001DB8 FF DB 0FFh ; not immediate 1879.4 001DB9 link SET $ - 4e-config - Page 139 1879.5 001DB9 06 DB 6 1879.6 001DBA 544F50534547 DB 'TOPSEG' 1879.7 001DC0 EVEN 1879.8 001DC0 IF 'DOCON'='DOCODE' 1879.9 001DC0 TOPSEG: DW $+2 1879.10 001DC0 ELSE 1879.11 001DC0 .... TOPSEG: DW DOCON 1879.12 001DC2 ENDIF 1879.13 001DC2 ENDM 1880 001DC2 .... DW intseg 1881 001DC4 1882 001DC4 ;Z VECBOT -- a-addr begining of vector segment 1883 001DC4 HEADER VECBOT,6,'VECBOT',DOCON 1883.1 000000 PUBLIC VECBOT 1883.2 001DC4 .... DW link 1883.3 001DC6 FF DB 0FFh ; not immediate 1883.4 001DC7 link SET $ 1883.5 001DC7 06 DB 6 1883.6 001DC8 564543424F54 DB 'VECBOT' 1883.7 001DCE EVEN 1883.8 001DCE IF 'DOCON'='DOCODE' 1883.9 001DCE VECBOT: DW $+2 1883.10 001DCE ELSE 1883.11 001DCE .... VECBOT: DW DOCON 1883.12 001DD0 ENDIF 1883.13 001DD0 ENDM 1884 001DD0 .... DW intvecs 1885 001DD2 1886 001DD2 1887 001DD2 ;U ? adr -- u display content of variable 1888 001DD2 ; @ u. ; 1889 001DD2 HEADER QQ,1,'?',DOCOLON 1889.1 000000 PUBLIC QQ 1889.2 001DD2 .... DW link 1889.3 001DD4 FF DB 0FFh ; not immediate 1889.4 001DD5 link SET $ 1889.5 001DD5 01 DB 1 1889.6 001DD6 3F DB '?' 1889.7 001DD7 00 EVEN 1889.8 001DD8 IF 'DOCOLON'='DOCODE' 1889.9 001DD8 QQ: DW $+2 1889.10 001DD8 ELSE 1889.11 001DD8 .... QQ: DW DOCOLON 1889.12 001DDA ENDIF 1889.13 001DDA ENDM 1890 001DDA ........ DW FETCH,UDOT 1891 001DDE .... DW EXIT 1892 001DE0 1893 001DE0 1894 001DE0 1895 001DE0 ; Note: the first character sent from the MSP430 seems to get 1896 001DE0 ; scrambled. I conjecture this is because the baud rate generator 1897 001DE0 ; has not reset to the new rate when we attempt to send a character. 1898 001DE0 ; See init430f1611.s43 for delay after initialization. 1899 001DE0 1900 001DE0 ; EOF 40 001DE0 #include "4e-startup.s43" 1 001DE0 ;U STARTUP WORDS =============================== ================================ 2 001DE0 3 001DE0 ;U .BOOTVERSION -- print boot version 4 001DE0 HEADLESS DOTBOOTVERSION,DOCOLON 4.1 000000 PUBLIC DOTBOOTVERSION 4.2 001DE0 IF 'DOCOLON'='DOCODE' 4.3 001DE0 DOTBOOTVERSION: DW $+2 4.4 001DE0 ELSE 4.5 001DE0 .... DOTBOOTVERSION: DW DOCOLON 4.6 001DE2 ENDIF 4.7 001DE2 ENDM 5 001DE2 .... DW XISQUOTE 6 001DE4 07 DB (doboot1-doboot0) - 4e-config - Page 140 7 001DE5 206465627567*doboot0: DB ' debug ' 8 001DEC EVEN 9 001DEC .... doboot1: DW ITYPE 10 001DEE .... DW EXIT 11 001DF0 12 001DF0 ;Z ITHERE -- adr find first free flash cell 13 001DF0 ; MEMTOP BEGIN 1- 14 001DF0 ; DUP C@ FF <> 15 001DF0 ; OVER FL0 < OR UNTIL 1+ ; 16 001DF0 HEADER ITHERE,6,'ITHERE',DOCOLON 16.1 000000 PUBLIC ITHERE 16.2 001DF0 .... DW link 16.3 001DF2 FF DB 0FFh ; not immediate 16.4 001DF3 link SET $ 16.5 001DF3 06 DB 6 16.6 001DF4 495448455245 DB 'ITHERE' 16.7 001DFA EVEN 16.8 001DFA IF 'DOCOLON'='DOCODE' 16.9 001DFA ITHERE: DW $+2 16.10 001DFA ELSE 16.11 001DFA .... ITHERE: DW DOCOLON 16.12 001DFC ENDIF 16.13 001DFC ENDM 17 001DFC .... DW MEMTOP 18 001DFE ............*ih1 DW ONEMINUS,DUP,CFETCH,lit,$FF,NOTEQUAL 19 001E0A ............* DW OVER,MEMBOT,LESS,ORR,qbran 20 001E14 DEST ih1 20.1 001E14 EAFF DW ih1-$ 20.2 001E16 ENDM 21 001E16 ........ DW ONEPLUS,EXIT 22 001E1A 23 001E1A ;U APPCRC -- crc CRC of APP-dictionary 24 001E1A ; 0 MEMBOT ITHERE OVER - (crc APPU0 #INIT (crc ; 25 001E1A ; HEADER APPCRC,6,'APPCRC',DOCOLON 26 001E1A HEADLESS APPCRC,DOCOLON 26.1 000000 PUBLIC APPCRC 26.2 001E1A IF 'DOCOLON'='DOCODE' 26.3 001E1A APPCRC: DW $+2 26.4 001E1A ELSE 26.5 001E1A .... APPCRC: DW DOCOLON 26.6 001E1C ENDIF 26.7 001E1C ENDM 27 001E1C ....0000 DW lit,0 28 001E20 ............* DW MEMBOT,ITHERE,OVER,MINUS,CRC 29 001E2A ............* DW APPU0,NINIT,CRC,EXIT 30 001E32 31 000000 EXTERN crcval 32 001E32 33 001E32 ;U VALID? -- f check if user app crc matches infoB 34 001E32 ; APPCRC crcval I@ = ; 35 001E32 ; HEADER VALIDQ,6,'VALID?',DOCOLON 36 001E32 HEADLESS VALIDQ,DOCOLON 36.1 000000 PUBLIC VALIDQ 36.2 001E32 IF 'DOCOLON'='DOCODE' 36.3 001E32 VALIDQ: DW $+2 36.4 001E32 ELSE 36.5 001E32 .... VALIDQ: DW DOCOLON 36.6 001E34 ENDIF 36.7 001E34 ENDM 37 001E34 ............* DW APPCRC,lit,crcval,IFETCH,EQUAL,EXIT 38 001E40 39 001E40 ;U SAVE -- save user area to infoB 40 001E40 ; InfoB [ 63 2 + ] Literal FLERASE 41 001E40 ; U0 APPU0 #INIT D->I 42 001E40 ; APPCRC [ crcval ] Literal I! ; 43 001E40 HEADER SAVE,4,'SAVE',DOCOLON 43.1 000000 PUBLIC SAVE 43.2 001E40 .... DW link 43.3 001E42 FF DB 0FFh ; not immediate 43.4 001E43 link SET $ 43.5 001E43 04 DB 4 43.6 001E44 53415645 DB 'SAVE' 43.7 001E48 EVEN 43.8 001E48 IF 'DOCOLON'='DOCODE' 43.9 001E48 SAVE: DW $+2 - 4e-config - Page 141 43.10 001E48 ELSE 43.11 001E48 .... SAVE: DW DOCOLON 43.12 001E4A ENDIF 43.13 001E4A ENDM 44 001E4A ; save user area to infoB 45 001E4A ........4100* DW INFOB,lit,63+2,FLERASE 46 001E52 ............* DW U0,APPU0,NINIT,DTOI 47 001E5A ............* DW APPCRC,lit,crcval,ISTORE 48 001E62 ; save variable area to infoC 49 001E62 ........4100* DW INFOC,lit,63+2,FLERASE 50 001E6A ............* DW HERE,UNUSED,ZERO,FILL 51 001E72 ............* DW VARBOT,INFOC,lit,(VAR_SIZE)*2,DTOI 52 001E7C .... DW EXIT 53 001E7E 54 00018E CORREST EQU 018Eh 55 000186 CORPOWERON EQU 0186h 56 001E7E 57 001E7E ;Z BOOT -- boot system 58 001E7E HEADER BOOT,4,'BOOT',DOCOLON 58.1 000000 PUBLIC BOOT 58.2 001E7E .... DW link 58.3 001E80 FF DB 0FFh ; not immediate 58.4 001E81 link SET $ 58.5 001E81 04 DB 4 58.6 001E82 424F4F54 DB 'BOOT' 58.7 001E86 EVEN 58.8 001E86 IF 'DOCOLON'='DOCODE' 58.9 001E86 BOOT: DW $+2 58.10 001E86 ELSE 58.11 001E86 .... BOOT: DW DOCOLON 58.12 001E88 ENDIF 58.13 001E88 ENDM 59 001E88 ............ DW S2,cget,qbran 60 001E8E DEST boot1 60.1 001E8E 2800 DW boot1-$ 60.2 001E90 ENDM 61 001E90 ........ DW VALIDQ,qbran 62 001E94 DEST invalid 62.1 001E94 0400 DW invalid-$ 62.2 001E96 ENDM 63 001E96 .... valid: DW COLD ; valid infoB and dictionary 64 001E98 ............*invalid:DW COR,FETCH,lit,CORPOWERON,NOTEQUAL,qbr an 65 001EA4 DEST boot1 65.1 001EA4 1200 DW boot1-$ 65.2 001EA6 ENDM 66 001EA6 reset1: ; reset and invalid infoB 67 001EA6 ............* DW LATEST,FETCH,MEMBOT,ITHERE,WITHIN,qbr an ; check RAM latest 68 001EB2 DEST boot1 68.1 001EB2 0400 DW boot1-$ 68.2 001EB4 ENDM 69 001EB4 .... DW WARM ; invalid infoB but seemingly valid RAM 70 001EB6 .... boot1: DW WIPE ; invalid infoB but power on or RAM invalid 71 001EB8 72 000000 PUBLIC BOOTIP ; used to init IP register. 73 001EB8 BOOTIP equ BOOT+2 74 001EB8 75 001EB8 ;Z WARM -- use user area from RAM (hopefully intact) 76 001EB8 HEADER WARM,4,'WARM',DOCOLON 76.1 000000 PUBLIC WARM 76.2 001EB8 .... DW link 76.3 001EBA FF DB 0FFh ; not immediate 76.4 001EBB link SET $ 76.5 001EBB 04 DB 4 76.6 001EBC 5741524D DB 'WARM' 76.7 001EC0 EVEN 76.8 001EC0 IF 'DOCOLON'='DOCODE' 76.9 001EC0 WARM: DW $+2 76.10 001EC0 ELSE 76.11 001EC0 .... WARM: DW DOCOLON 76.12 001EC2 ENDIF 76.13 001EC2 ENDM 77 001EC2 .... DW XISQUOTE - 4e-config - Page 142 78 001EC4 05 DB (warm1-warm0) 79 001EC5 5761726D warm0: DB 'Warm' 80 001EC9 00 EVEN 81 001ECA .... warm1: DW ITYPE 82 001ECC .... DW ABORT 83 001ECE 84 001ECE ;U .COLD -- display COLD message 85 001ECE HEADLESS DOTCOLD,DOCOLON 85.1 000000 PUBLIC DOTCOLD 85.2 001ECE IF 'DOCOLON'='DOCODE' 85.3 001ECE DOTCOLD: DW $+2 85.4 001ECE ELSE 85.5 001ECE .... DOTCOLD: DW DOCOLON 85.6 001ED0 ENDIF 85.7 001ED0 ENDM 86 001ED0 .... DW XISQUOTE 87 001ED2 05 DB (dotcold1-dotcold0) 88 001ED3 436F6C64 dotcold0:DB 'Cold' 89 001ED7 00 EVEN 90 001ED8 .... dotcold1:DW ITYPE 91 001EDA .... DW EXIT 92 001EDC 93 001EDC PUBLIC DOTCOLD 94 001EDC 95 001EDC ;Z COLD -- set user area to latest application 96 001EDC HEADER COLD,4,'COLD',DOCOLON 96.1 000000 PUBLIC COLD 96.2 001EDC .... DW link 96.3 001EDE FF DB 0FFh ; not immediate 96.4 001EDF link SET $ 96.5 001EDF 04 DB 4 96.6 001EE0 434F4C44 DB 'COLD' 96.7 001EE4 EVEN 96.8 001EE4 IF 'DOCOLON'='DOCODE' 96.9 001EE4 COLD: DW $+2 96.10 001EE4 ELSE 96.11 001EE4 .... COLD: DW DOCOLON 96.12 001EE6 ENDIF 96.13 001EE6 ENDM 97 001EE6 ............* DW APPU0,U0,NINIT,ITOD ; use application user area 98 001EEE ............* DW INFOC,VARBOT,lit,0x20,ITOD ; use applicatio n variable area 99 001EF8 ............ DW APP,FETCH,EXECUTE ; AUTOSTART Application 100 001EFE .... DW ABORT 101 001F00 102 000000 PUBLIC COLDIP ; used to init IP register while testing. 103 001F00 COLDIP equ COLD+2 104 001F00 105 001F00 ;Z FACTORY -- set user area to plain kernel 106 001F00 ; UINIT U0 #INIT I->D SAVE init user area 107 001F00 ; ABORT ; 108 001F00 HEADER FACTORY,7,'FACTORY',DOCOLON 108.1 000000 PUBLIC FACTORY 108.2 001F00 .... DW link 108.3 001F02 FF DB 0FFh ; not immediate 108.4 001F03 link SET $ 108.5 001F03 07 DB 7 108.6 001F04 464143544F52* DB 'FACTORY' 108.7 001F0B 00 EVEN 108.8 001F0C IF 'DOCOLON'='DOCODE' 108.9 001F0C FACTORY: DW $+2 108.10 001F0C ELSE 108.11 001F0C .... FACTORY: DW DOCOLON 108.12 001F0E ENDIF 108.13 001F0E ENDM 109 001F0E ............* DW UINIT,U0,NINIT,ITOD ; store kernel user area table to user area 110 001F16 ............* DW VARBOT,lit,(VAR_SIZE)*2,ZERO,FILL ; - 4e-config - Page 143 set variables to ZERO 111 001F20 .... DW SAVE 112 001F22 .... DW DOTVER 113 001F24 .... DW EXIT 114 001F26 115 000000 PUBLIC FACTORYIP ; used to init IP register. 116 001F26 FACTORYIP equ FACTORY+2 117 001F26 118 001F26 119 001F26 ;U PROFUSE -- adr address of production fuse. 120 001F26 ; constant PROFUSEADR 121 001F26 HEADER PROFUSEADR,7,'PROFUSE',DOCON 121.1 000000 PUBLIC PROFUSEADR 121.2 001F26 .... DW link 121.3 001F28 FF DB 0FFh ; not immediate 121.4 001F29 link SET $ 121.5 001F29 07 DB 7 121.6 001F2A 50524F465553* DB 'PROFUSE' 121.7 001F31 00 EVEN 121.8 001F32 IF 'DOCON'='DOCODE' 121.9 001F32 PROFUSEADR: DW $+2 121.10 001F32 ELSE 121.11 001F32 .... PROFUSEADR: DW DOCON 121.12 001F34 ENDIF 121.13 001F34 ENDM 122 001F34 .... DW PROFUSE 123 001F36 124 001F36 ;U 4E4THPRO -- save app and blow production fuse. 125 001F36 ; SAVE ZERO PROFUSEADR VEC! ; 126 001F36 HEADER FORTHPRO,8,'4E4THPRO',DOCOLON 126.1 000000 PUBLIC FORTHPRO 126.2 001F36 .... DW link 126.3 001F38 FF DB 0FFh ; not immediate 126.4 001F39 link SET $ 126.5 001F39 08 DB 8 126.6 001F3A 344534544850* DB '4E4THPRO' 126.7 001F42 EVEN 126.8 001F42 IF 'DOCOLON'='DOCODE' 126.9 001F42 FORTHPRO: DW $+2 126.10 001F42 ELSE 126.11 001F42 .... FORTHPRO: DW DOCOLON 126.12 001F44 ENDIF 126.13 001F44 ENDM 127 001F44 ............* DW SAVE,ZERO,PROFUSEADR,VECSTORE 128 001F4C .... DW EXIT 129 001F4E 130 001F4E ;U WIPE -- erase flash but not kernel, reset user area. 131 001F4E ; PROFUSEADR @ IF WIPE ELSE COLD TEHN ; 132 001F4E HEADER WIPE,4,'WIPE',DOCOLON 132.1 000000 PUBLIC WIPE 132.2 001F4E .... DW link 132.3 001F50 FF DB 0FFh ; not immediate 132.4 001F51 link SET $ 132.5 001F51 04 DB 4 132.6 001F52 57495045 DB 'WIPE' 132.7 001F56 EVEN 132.8 001F56 IF 'DOCOLON'='DOCODE' 132.9 001F56 WIPE: DW $+2 132.10 001F56 ELSE 132.11 001F56 .... WIPE: DW DOCOLON 132.12 001F58 ENDIF 132.13 001F58 ENDM 133 001F58 ............ DW PROFUSEADR,FETCH,qbran 134 001F5E DEST wipe1 134.1 001F5E 0400 DW wipe1-$ 134.2 001F60 ENDM 135 001F60 .... DW PARENWIPE 136 001F62 .... wipe1: DW COLD 137 001F64 138 001F64 ;U (WIPE) -- erase flash but not kernel, reset user area. 139 001F64 ; MEMBOT USERMEM FLERASE 140 001F64 ; FACTORY ." Wiped" ABORT ; 141 001F64 HEADER PARENWIPE,6,'(WIPE)',DOCOLON 141.1 000000 PUBLIC PARENWIPE - 4e-config - Page 144 141.2 001F64 .... DW link 141.3 001F66 FF DB 0FFh ; not immediate 141.4 001F67 link SET $ 141.5 001F67 06 DB 6 141.6 001F68 285749504529 DB '(WIPE)' 141.7 001F6E EVEN 141.8 001F6E IF 'DOCOLON'='DOCODE' 141.9 001F6E PARENWIPE: DW $+2 141.10 001F6E ELSE 141.11 001F6E .... PARENWIPE: DW DOCOLON 141.12 001F70 ENDIF 141.13 001F70 ENDM 142 001F70 ........0018* DW MEMBOT,lit,USERFLASHEND-USERFLASHSTAR T+1,FLERASE 143 001F78 .... DW FACTORY 144 001F7A .... DW XISQUOTE 145 001F7C 07 DB (wipmsg1-wipmsg0) 146 001F7D 205769706564 wipmsg0:DB ' Wiped' 147 001F83 00 EVEN 148 001F84 .... wipmsg1:DW ITYPE 149 001F86 .... DW ABORT ; ABORT never returns 150 001F88 151 001F88 ; finis 41 001F88 42 001F88 #include "4e-MSP430G2553.s43" 1 001F88 ;U MCU specific words - MSP430G2553 ============ ========================== 2 001F88 3 001F88 /* 4 001F88 ; .ID -- Print MCU identifier. 5 001F88 HEADER DOTID,3,'.ID',DOCOLON 6 001F88 DW lit,id,COUNT,ITYPE 7 001F88 DW EXIT 8 001F88 */ 9 001F88 10 001F88 ;U 1MS -- wait about 1 millisecond 11 001F88 ; xx 0 DO yy 0 DO LOOP LOOP ; adjust xx and yy to get a msec. 12 001F88 HEADER ONEMS,3,'1MS',DOCOLON 12.1 000000 PUBLIC ONEMS 12.2 001F88 .... DW link 12.3 001F8A FF DB 0FFh ; not immediate 12.4 001F8B link SET $ 12.5 001F8B 03 DB 3 12.6 001F8C 314D53 DB '1MS' 12.7 001F8F 00 EVEN 12.8 001F90 IF 'DOCOLON'='DOCODE' 12.9 001F90 ONEMS: DW $+2 12.10 001F90 ELSE 12.11 001F90 .... ONEMS: DW DOCOLON 12.12 001F92 ENDIF 12.13 001F92 ENDM 13 001F92 ....2900....* DW lit,41,ZERO,xdo 14 001F9A ....0B00....*onems1: DW lit,11,ZERO,xdo 15 001FA2 .... onems2: DW xloop 16 001FA4 DEST onems2 16.1 001FA4 FEFF DW onems2-$ 16.2 001FA6 ENDM 17 001FA6 .... DW xloop 18 001FA8 DEST onems1 18.1 001FA8 F2FF DW onems1-$ 18.2 001FAA ENDM 19 001FAA .... DW EXIT 20 001FAC 21 001FAC ;U MS n -- wait about n milliseconds 22 001FAC ; 0 DO 1MS LOOP ; 23 001FAC HEADER MS,2,'MS',DOCOLON 23.1 000000 PUBLIC MS 23.2 001FAC .... DW link 23.3 001FAE FF DB 0FFh ; not immediate 23.4 001FAF link SET $ 23.5 001FAF 02 DB 2 23.6 001FB0 4D53 DB 'MS' 23.7 001FB2 EVEN 23.8 001FB2 IF 'DOCOLON'='DOCODE' 23.9 001FB2 MS: DW $+2 - 4e-config - Page 145 23.10 001FB2 ELSE 23.11 001FB2 .... MS: DW DOCOLON 23.12 001FB4 ENDIF 23.13 001FB4 ENDM 24 001FB4 ........ DW ZERO,xdo 25 001FB8 ........ ms1: DW ONEMS,xloop 26 001FBC DEST ms1 26.1 001FBC FCFF DW ms1-$ 26.2 001FBE ENDM 27 001FBE .... DW EXIT 28 001FC0 29 001FC0 ;U MCU Peripherie ------------------------------ -------------------------------- 30 001FC0 31 001FC0 ;Z P1 -- adr address of port1 output register 32 001FC0 HEADER P1,2,'P1',DOCON 32.1 000000 PUBLIC P1 32.2 001FC0 .... DW link 32.3 001FC2 FF DB 0FFh ; not immediate 32.4 001FC3 link SET $ 32.5 001FC3 02 DB 2 32.6 001FC4 5031 DB 'P1' 32.7 001FC6 EVEN 32.8 001FC6 IF 'DOCON'='DOCODE' 32.9 001FC6 P1: DW $+2 32.10 001FC6 ELSE 32.11 001FC6 .... P1: DW DOCON 32.12 001FC8 ENDIF 32.13 001FC8 ENDM 33 001FC8 2100 DW P1OUT 34 001FCA 35 001FCA ;Z P2 -- adr address of port2 output register 36 001FCA HEADER P2,2,'P2',DOCON 36.1 000000 PUBLIC P2 36.2 001FCA .... DW link 36.3 001FCC FF DB 0FFh ; not immediate 36.4 001FCD link SET $ 36.5 001FCD 02 DB 2 36.6 001FCE 5032 DB 'P2' 36.7 001FD0 EVEN 36.8 001FD0 IF 'DOCON'='DOCODE' 36.9 001FD0 P2: DW $+2 36.10 001FD0 ELSE 36.11 001FD0 .... P2: DW DOCON 36.12 001FD2 ENDIF 36.13 001FD2 ENDM 37 001FD2 2900 DW P2OUT 38 001FD4 39 001FD4 ;Z P3 -- adr address of port2 output register 40 001FD4 HEADER P3,2,'P3',DOCON 40.1 000000 PUBLIC P3 40.2 001FD4 .... DW link 40.3 001FD6 FF DB 0FFh ; not immediate 40.4 001FD7 link SET $ 40.5 001FD7 02 DB 2 40.6 001FD8 5033 DB 'P3' 40.7 001FDA EVEN 40.8 001FDA IF 'DOCON'='DOCODE' 40.9 001FDA P3: DW $+2 40.10 001FDA ELSE 40.11 001FDA .... P3: DW DOCON 40.12 001FDC ENDIF 40.13 001FDC ENDM 41 001FDC 1900 DW P3OUT 42 001FDE 43 001FDE ; finis 43 001FDE #include "4e-LaunchPad.s43" 1 001FDE ; ---------------------------------------------- ------------------------ 2 001FDE ; 4e4th is a Forth based on CamelForth 3 001FDE ; for the Texas Instruments MSP430 4 001FDE ; 5 001FDE ; This program is free software; you can redistribute it and/or modify - 4e-config - Page 146 6 001FDE ; it under the terms of the GNU General Public License as published by 7 001FDE ; the Free Software Foundation; either version 3 of the License, or 8 001FDE ; (at your option) any later version. 9 001FDE ; 10 001FDE ; This program is distributed in the hope that it will be useful, 11 001FDE ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 001FDE ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 001FDE ; GNU General Public License for more details. 14 001FDE ; 15 001FDE ; You should have received a copy of the GNU General Public License 16 001FDE ; along with this program. If not, see . 17 001FDE ; 18 001FDE ; See LICENSE TERMS in Brads file readme.txt as well. 19 001FDE 20 001FDE ; ---------------------------------------------- ------------------------ 21 001FDE ; 4e-LaunchPad.s43 - LaunchPad Suporting Words 22 001FDE ; ---------------------------------------------- ------------------------ 23 001FDE 24 001FDE 25 001FDE ;U PORTS --------------------------------------- ------------------------ 26 001FDE 27 001FDE ; TI document SLAU144I - December 2004 - Revised January 2012 28 001FDE ; The digital I/O registers are listed in Table 8-2. 29 001FDE 30 001FDE ;U \ P1in = $20 31 001FDE ;U \ P1out = $21 32 001FDE ;U \ P1dir = $22 33 001FDE 34 001FDE ;U \ P2in = $28 35 001FDE ;U \ P2out = $29 36 001FDE ;U \ P2dir = $2A 37 001FDE 38 001FDE ;U \ LED - portpinX->---resistor---LED---GND 39 001FDE ;U \ P1.0 - red LED 40 001FDE ;U \ P1.6 - green LED 41 001FDE 42 001FDE ;U RED -- mask port red LED mask and port address 43 001FDE HEADER red,3,'RED',DOTWOCON 43.1 000000 PUBLIC red 43.2 001FDE .... DW link 43.3 001FE0 FF DB 0FFh ; not immediate 43.4 001FE1 link SET $ 43.5 001FE1 03 DB 3 43.6 001FE2 524544 DB 'RED' 43.7 001FE5 00 EVEN 43.8 001FE6 IF 'DOTWOCON'='DOCODE' 43.9 001FE6 red: DW $+2 43.10 001FE6 ELSE 43.11 001FE6 .... red: DW DOTWOCON 43.12 001FE8 ENDIF 43.13 001FE8 ENDM 44 001FE8 2100 DW P1OUT 45 001FEA 0100 DW 00000001b 46 001FEC 47 001FEC ;U GREEN -- mask port green LED mask and port address 48 001FEC HEADER green,5,'GREEN',DOTWOCON 48.1 000000 PUBLIC green 48.2 001FEC .... DW link 48.3 001FEE FF DB 0FFh ; not immediate 48.4 001FEF link SET $ 48.5 001FEF 05 DB 5 48.6 001FF0 475245454E DB 'GREEN' - 4e-config - Page 147 48.7 001FF5 00 EVEN 48.8 001FF6 IF 'DOTWOCON'='DOCODE' 48.9 001FF6 green: DW $+2 48.10 001FF6 ELSE 48.11 001FF6 .... green: DW DOTWOCON 48.12 001FF8 ENDIF 48.13 001FF8 ENDM 49 001FF8 2100 DW P1OUT 50 001FFA 4000 DW 01000000b 51 001FFC 52 001FFC ;U \ Switch S2 53 001FFC ;U portpin P1.3 --->0_0----GND 54 001FFC ;U S2 -- mask port second button mask and port address 55 001FFC HEADER S2,2,'S2',DOTWOCON 55.1 000000 PUBLIC S2 55.2 001FFC .... DW link 55.3 001FFE FF DB 0FFh ; not immediate 55.4 001FFF link SET $ 55.5 001FFF 02 DB 2 55.6 002000 5332 DB 'S2' 55.7 002002 EVEN 55.8 002002 IF 'DOTWOCON'='DOCODE' 55.9 002002 S2: DW $+2 55.10 002002 ELSE 55.11 002002 .... S2: DW DOTWOCON 55.12 002004 ENDIF 55.13 002004 ENDM 56 002004 2000 DW P1IN 57 002006 0800 DW 00001000b 58 002008 59 002008 ;U S2? -- f test button S2, true is pressed 60 002008 HEADER SQEST,3,'S2?',DOCOLON 60.1 000000 PUBLIC SQEST 60.2 002008 .... DW link 60.3 00200A FF DB 0FFh ; not immediate 60.4 00200B link SET $ 60.5 00200B 03 DB 3 60.6 00200C 53323F DB 'S2?' 60.7 00200F 00 EVEN 60.8 002010 IF 'DOCOLON'='DOCODE' 60.9 002010 SQEST: DW $+2 60.10 002010 ELSE 60.11 002010 .... SQEST: DW DOCOLON 60.12 002012 ENDIF 60.13 002012 ENDM 61 002012 ............* DW S2, cget, ZEROEQUAL, EXIT 62 00201A 63 00201A ; ---------------------------------------------- ------------------------ 44 00201A 45 00201A ; #include "4e-isrsup430.s43" 46 00201A ; #include "4e-onewire.s43" 47 00201A ; #include "4e-LPM.s43" 48 00201A ; #include "4e-WAS430G2553.s43" 49 00201A 50 00201A 51 000000 PUBLIC lastword 52 00201A lastword equ link 53 00201A 54 00201A END ACCVIE #define, value: (0x20), line: 132:2 ACCVIFG #define, value: (0x0004u), line: 448:2 ADC10AE0_ #define, value: (0x004Au), line: 167:2 168:2 ADC10B1 #define, value: (0x002), line: 271:2 ADC10BUSY #define, value: (0x0001u), line: 211:2 ADC10CT #define, value: (0x004), line: 272:2 ADC10CTL0_ #define, value: (0x01B0u), line: 170:2 171:2 ADC10CTL1_ #define, value: (0x01B2u), line: 172:2 173:2 ADC10DF #define, value: (0x0200u), line: 220:2 ADC10DISABLE #define, value: (0x000), line: 274:2 ADC10DIV0 #define, value: (0x0020u), line: 216:2 ADC10DIV1 #define, value: (0x0040u), line: 217:2 ADC10DIV2 #define, value: (0x0080u), line: 218:2 ADC10DIV_0 #define, value: (0*0x20u), line: 238:2 - 4e-config - Page 148 ADC10DIV_1 #define, value: (1*0x20u), line: 239:2 ADC10DIV_2 #define, value: (2*0x20u), line: 240:2 ADC10DIV_3 #define, value: (3*0x20u), line: 241:2 ADC10DIV_4 #define, value: (4*0x20u), line: 242:2 ADC10DIV_5 #define, value: (5*0x20u), line: 243:2 ADC10DIV_6 #define, value: (6*0x20u), line: 244:2 ADC10DIV_7 #define, value: (7*0x20u), line: 245:2 ADC10DTC0_ #define, value: (0x0048u), line: 163:2 164:2 ADC10DTC1_ #define, value: (0x0049u), line: 165:2 166:2 ADC10FETCH #define, value: (0x001), line: 270:2 ADC10IE #define, value: (0x008), line: 183:2 ADC10IFG #define, value: (0x004), line: 182:2 ADC10MEM_ #define, value: (0x01B4u), line: 174:2 175:2 ADC10ON #define, value: (0x010), line: 184:2 ADC10SA_ #define, value: (0x01BCu), line: 176:2 177:2 ADC10SC #define, value: (0x001), line: 180:2 ADC10SHT0 #define, value: (0x800), line: 191:2 ADC10SHT1 #define, value: (0x1000u), line: 192:2 ADC10SHT_0 #define, value: (0*0x800u), line: 196:2 ADC10SHT_1 #define, value: (1*0x800u), line: 197:2 ADC10SHT_2 #define, value: (2*0x800u), line: 198:2 ADC10SHT_3 #define, value: (3*0x800u), line: 199:2 ADC10SR #define, value: (0x400), line: 190:2 ADC10SSEL0 #define, value: (0x0008u), line: 214:2 ADC10SSEL1 #define, value: (0x0010u), line: 215:2 ADC10SSEL_0 #define, value: (0*8u), line: 233:2 ADC10SSEL_1 #define, value: (1*8u), line: 234:2 ADC10SSEL_2 #define, value: (2*8u), line: 235:2 ADC10SSEL_3 #define, value: (3*8u), line: 236:2 ADC10TB #define, value: (0x008), line: 273:2 ADC10_VECTOR #define, value: (5 * 2u), line: 965:2 BCSCTL1_ #define, value: (0x0057u), line: 283:2 284:2 BCSCTL2_ #define, value: (0x0058u), line: 285:2 286:2 BCSCTL3_ #define, value: (0x0053u), line: 287:2 288:2 BIT0 #define, value: (0x0001u), line: 57:2 BIT1 #define, value: (0x0002u), line: 58:2 BIT2 #define, value: (0x0004u), line: 59:2 BIT3 #define, value: (0x0008u), line: 60:2 BIT4 #define, value: (0x0010u), line: 61:2 BIT5 #define, value: (0x0020u), line: 62:2 BIT6 #define, value: (0x0040u), line: 63:2 BIT7 #define, value: (0x0080u), line: 64:2 BIT8 #define, value: (0x0100u), line: 65:2 BIT9 #define, value: (0x0200u), line: 66:2 BITA #define, value: (0x0400u), line: 67:2 BITB #define, value: (0x0800u), line: 68:2 BITC #define, value: (0x1000u), line: 69:2 BITD #define, value: (0x2000u), line: 70:2 BITE #define, value: (0x4000u), line: 71:2 BITF #define, value: (0x8000u), line: 72:2 BLKWRT #define, value: (0x0080u), line: 423:2 BUSY #define, value: (0x0001u), line: 446:2 C #define, value: (0x0001u), line: 78:2 CACTL1_ #define, value: (0x0059u), line: 365:2 366:2 CACTL2_ #define, value: (0x005Au), line: 367:2 368:2 CAEX #define, value: (0x80), line: 379:2 CAF #define, value: (0x02), line: 387:2 CAIE #define, value: (0x02), line: 373:2 CAIES #define, value: (0x04), line: 374:2 CAIFG #define, value: (0x01), line: 372:2 CALBC1_12MHZ_ #define, value: (0x10FBu), line: 946:2 947:2 CALBC1_16MHZ_ #define, value: (0x10F9u), line: 942:2 943:2 CALBC1_1MHZ_ #define, value: (0x10FFu), line: 954:2 955:2 CALBC1_8MHZ_ #define, value: (0x10FDu), line: 950:2 951:2 CALDCO_12MHZ_ #define, value: (0x10FAu), line: 944:2 945:2 CALDCO_16MHZ_ #define, value: (0x10F8u), line: 940:2 941:2 CALDCO_1MHZ_ #define, value: (0x10FEu), line: 952:2 953:2 CALDCO_8MHZ_ #define, value: (0x10FCu), line: 948:2 949:2 CAON #define, value: (0x08), line: 375:2 CAOUT #define, value: (0x01), line: 386:2 CAP #define, value: (0x0100u), line: 604:2 CAPD0 #define, value: (0x01), line: 395:2 CAPD1 #define, value: (0x02), line: 396:2 CAPD2 #define, value: (0x04), line: 397:2 CAPD3 #define, value: (0x08), line: 398:2 CAPD4 #define, value: (0x10), line: 399:2 CAPD5 #define, value: (0x20), line: 400:2 CAPD6 #define, value: (0x40), line: 401:2 - 4e-config - Page 149 CAPD7 #define, value: (0x80), line: 402:2 CAPD_ #define, value: (0x005Bu), line: 369:2 370:2 CAREF0 #define, value: (0x10), line: 376:2 CAREF1 #define, value: (0x20), line: 377:2 CAREF_0 #define, value: (0x00), line: 381:2 CAREF_1 #define, value: (0x10), line: 382:2 CAREF_2 #define, value: (0x20), line: 383:2 CAREF_3 #define, value: (0x30), line: 384:2 CARSEL #define, value: (0x40), line: 378:2 CASHORT #define, value: (0x80), line: 393:2 CCI #define, value: (0x0008u), line: 609:2 CCIE #define, value: (0x0010u), line: 608:2 CCIFG #define, value: (0x0001u), line: 612:2 CCIS0 #define, value: (0x1000u), line: 601:2 CCIS1 #define, value: (0x2000u), line: 600:2 CCIS_0 #define, value: (0*0x1000u), line: 622:2 CCIS_1 #define, value: (1*0x1000u), line: 623:2 CCIS_2 #define, value: (2*0x1000u), line: 624:2 CCIS_3 #define, value: (3*0x1000u), line: 625:2 CCR0 #define, value: TACCR0, line: 565:2 CCR0_ #define, value: TACCR0_, line: 571:2 CCR1 #define, value: TACCR1, line: 566:2 CCR1_ #define, value: TACCR1_, line: 572:2 CCR2 #define, value: TACCR2, line: 567:2 CCR2_ #define, value: TACCR2_, line: 573:2 CCTL0 #define, value: TACCTL0, line: 562:2 CCTL0_ #define, value: TACCTL0_, line: 568:2 CCTL1 #define, value: TACCTL1, line: 563:2 CCTL1_ #define, value: TACCTL1_, line: 569:2 CCTL2 #define, value: TACCTL2, line: 564:2 CCTL2_ #define, value: TACCTL2_, line: 570:2 CM0 #define, value: (0x4000u), line: 599:2 CM1 #define, value: (0x8000u), line: 598:2 CM_0 #define, value: (0*0x4000u), line: 626:2 CM_1 #define, value: (1*0x4000u), line: 627:2 CM_2 #define, value: (2*0x4000u), line: 628:2 CM_3 #define, value: (3*0x4000u), line: 629:2 COMPARATORA_VECTOR #define, value: (11 * 2u), line: 971:2 CONSEQ0 #define, value: (0x0002u), line: 212:2 CONSEQ1 #define, value: (0x0004u), line: 213:2 CONSEQ_0 #define, value: (0*2u), line: 228:2 CONSEQ_1 #define, value: (1*2u), line: 229:2 CONSEQ_2 #define, value: (2*2u), line: 230:2 CONSEQ_3 #define, value: (3*2u), line: 231:2 COV #define, value: (0x0002u), line: 611:2 CPUOFF #define, value: (0x0010u), line: 83:2 DCO0 #define, value: (0x20), line: 295:2 DCO1 #define, value: (0x40), line: 296:2 DCO2 #define, value: (0x80), line: 297:2 DCOCTL_ #define, value: (0x0056u), line: 281:2 282:2 DEFC #define, line: 42:2 128:2 135:2 143:2 151:2 164:2 166:2 168:2 282:2 284:2 286:2 288:2 366:2 368:2 370:2 462:2 464:2 466:2 468:2 470:2 472:2 474:2 476:2 478:2 481:2 483:2 485:2 487:2 489:2 491:2 493:2 495:2 497:2 505:2 507:2 509:2 511:2 513:2 515:2 677:2 679:2 681:2 683:2 685:2 687:2 689:2 691:2 693:2 695:2 697:2 702:2 704:2 706:2 708:2 710:2 712:2 714:2 716:2 941:2 943:2 945:2 947:2 949:2 951:2 953:2 955:2 DEFW #define, line: 43:2 171:2 173:2 175:2 177:2 410:2 412:2 414:2 523:2 525:2 527:2 529:2 531:2 533:2 535:2 537:2 539:2 645:2 647:2 649:2 651:2 653:2 655:2 657:2 659:2 661:2 718:2 720:2 893:2 DIVA0 #define, value: (0x10), line: 303:2 DIVA1 #define, value: (0x20), line: 304:2 DIVA_0 #define, value: (0x00), line: 308:2 DIVA_1 #define, value: (0x10), line: 309:2 - 4e-config - Page 150 DIVA_2 #define, value: (0x20), line: 310:2 DIVA_3 #define, value: (0x30), line: 311:2 DIVM0 #define, value: (0x10), line: 316:2 DIVM1 #define, value: (0x20), line: 317:2 DIVM_0 #define, value: (0x00), line: 326:2 DIVM_1 #define, value: (0x10), line: 327:2 DIVM_2 #define, value: (0x20), line: 328:2 DIVM_3 #define, value: (0x30), line: 329:2 DIVS0 #define, value: (0x02), line: 313:2 DIVS1 #define, value: (0x04), line: 314:2 DIVS_0 #define, value: (0x00), line: 321:2 DIVS_1 #define, value: (0x02), line: 322:2 DIVS_2 #define, value: (0x04), line: 323:2 DIVS_3 #define, value: (0x06), line: 324:2 EMEX #define, value: (0x0020u), line: 451:2 ENC #define, value: (0x002), line: 181:2 ERASE #define, value: (0x0002u), line: 420:2 327:4 FAIL #define, value: (0x0080u), line: 453:2 FCTL1_ #define, value: (0x0128u), line: 409:2 410:2 FCTL2_ #define, value: (0x012Au), line: 411:2 412:2 FCTL3_ #define, value: (0x012Cu), line: 413:2 414:2 FN0 #define, value: (0x0001u), line: 426:2 FN1 #define, value: (0x0002u), line: 427:2 FN2 #define, value: (0x0004u), line: 429:2 FN3 #define, value: (0x0008u), line: 432:2 FN4 #define, value: (0x0010u), line: 435:2 FN5 #define, value: (0x0020u), line: 437:2 FRKEY #define, value: (0x9600u), line: 416:2 FSSEL0 #define, value: (0x0040u), line: 438:2 FSSEL1 #define, value: (0x0080u), line: 439:2 FSSEL_0 #define, value: (0x0000u), line: 441:2 FSSEL_1 #define, value: (0x0040u), line: 442:2 FSSEL_2 #define, value: (0x0080u), line: 443:2 FSSEL_3 #define, value: (0x00C0u), line: 444:2 FWKEY #define, value: (0xA500u), line: 417:2 326:4 327:4 329:4 330:4 371:4 372:4 375:4 376:4 392:4 393:4 395:4 396:4 426:4 427:4 430:4 431:4 461:4 462:4 480:4 481:4 FXKEY #define, value: (0x3300u), line: 418:2 GIE #define, value: (0x0008u), line: 82:2 HALLOT #define, value: IALLOT, line: 824:6 1238:6 HCCOMMA #define, value: ICCOMMA, line: 826:6 1236:6 HCFETCH #define, value: ICFETCH, line: 827:6 935:6 1238:6 HCOMMA #define, value: ICOMMA, line: 825:6 1235:6 HCOUNT #define, value: ICOUNT, line: 671:6 929:6 1561:6 HCSTORE #define, value: ICSTORE, line: 829:6 1307:6 HFETCH #define, value: IFETCH, line: 828:6 958:6 1297:6 1562:6 HHERE #define, value: IHERE, line: 823:6 1237:6 HSTORE #define, value: ISTORE, line: 830:6 HTYPE #define, value: ITYPE, line: 672:6 1561:6 HWORD #define, value: IWORDC, line: 673:6 1238:6 ICFETCH #define, value: CFETCH, line: 444:4 592:6 935:6 1238:6 ICOUNT #define, value: COUNT, line: 547:6 579:6 929:6 1561:6 ID0 #define, value: (0x0040u), line: 578:2 ID1 #define, value: (0x0080u), line: 577:2 ID_0 #define, value: (0*0x40u), line: 589:2 ID_1 #define, value: (1*0x40u), line: 590:2 ID_2 #define, value: (2*0x40u), line: 591:2 ID_3 #define, value: (3*0x40u), line: 592:2 IE1_ #define, value: (0x0000u), line: 127:2 128:2 IE2_ #define, value: (0x0001u), line: 142:2 143:2 IFETCH #define, value: FETCH, line: 443:4 591:6 958:6 1297:6 1525:6 1526:6 1527:6 1562:6 37:7 IFG1_ #define, value: (0x0002u), line: 134:2 135:2 IFG2_ #define, value: (0x0003u), line: 150:2 151:2 INCH0 #define, value: (0x1000u), line: 223:2 INCH1 #define, value: (0x2000u), line: 224:2 INCH2 #define, value: (0x4000u), line: 225:2 INCH3 #define, value: (0x8000u), line: 226:2 INCH_0 #define, value: (0*0x1000u), line: 252:2 INCH_1 #define, value: (1*0x1000u), line: 253:2 INCH_10 #define, value: (10*0x1000u), line: 262:2 INCH_11 #define, value: (11*0x1000u), line: 263:2 INCH_12 #define, value: (12*0x1000u), line: 264:2 INCH_13 #define, value: (13*0x1000u), line: 265:2 INCH_14 #define, value: (14*0x1000u), line: 266:2 INCH_15 #define, value: (15*0x1000u), line: 267:2 - 4e-config - Page 151 INCH_2 #define, value: (2*0x1000u), line: 254:2 INCH_3 #define, value: (3*0x1000u), line: 255:2 INCH_4 #define, value: (4*0x1000u), line: 256:2 INCH_5 #define, value: (5*0x1000u), line: 257:2 INCH_6 #define, value: (6*0x1000u), line: 258:2 INCH_7 #define, value: (7*0x1000u), line: 259:2 INCH_8 #define, value: (8*0x1000u), line: 260:2 INCH_9 #define, value: (9*0x1000u), line: 261:2 INDEX #define, value: R8, line: 51:3 681:4 684:4 685:4 694:4 698:4 706:4 711:4 719:4 733:4 INFOEND #define, value: (0x10FF), line: 28:3 318:4 362:4 417:4 INFOSEG #define, value: (128), line: 36:3 339:4 340:4 INFOSTART #define, value: (0x1000), line: 27:3 316:4 360:4 415:4 IP #define, value: R5, line: 46:3 52:4 53:4 57:4 58:4 67:4 68:4 69:4 97:4 107:4 119:4 147:4 148:4 149:4 150:4 167:4 173:4 178:4 185:4 193:4 201:4 206:4 216:4 223:4 230:4 237:4 243:4 250:4 256:4 268:4 274:4 279:4 286:4 343:4 380:4 400:4 487:4 495:4 501:4 508:4 515:4 520:4 525:4 530:4 535:4 541:4 546:4 551:4 556:4 561:4 566:4 577:4 589:4 598:4 605:4 613:4 625:4 660:4 660:4 661:4 668:4 669:4 687:4 697:4 700:4 710:4 713:4 721:4 729:4 735:4 764:4 795:4 811:4 828:4 845:4 868:4 883:4 903:4 945:4 956:4 1659:6 1690:6 1793:6 1800:6 1807:6 1814:6 1821:6 1831:6 IRACL #define, value: R12, line: 67:3 746:4 754:4 762:4 775:4 780:4 794:4 IRACM #define, value: R13, line: 68:3 747:4 755:4 763:4 IRBT #define, value: W, line: 69:3 751:4 752:4 759:4 776:4 782:4 IROP1 #define, value: TOS, line: 64:3 752:4 777:4 779:4 787:4 IROP2L #define, value: R10, line: 65:3 743:4 754:4 756:4 770:4 784:4 IROP2M #define, value: R11, line: 66:3 750:4 755:4 757:4 769:4 777:4 779:4 785:4 787:4 793:4 ISREND #define, value: (0xFFDF), line: 34:3 311:4 ISRSTART #define, value: (0xFE00), line: 33:3 309:4 ISSH #define, value: (0x0100u), line: 219:2 ITYPE #define, value: TYP, line: 546:6 650:6 1152:6 1190:6 1561:6 1700:6 1701:6 1749:6 9:7 81:7 90:7 148:7 KEYV #define, value: (0x0002u), line: 447:2 LFXT1OF #define, value: (0x01), line: 336:2 LFXT1S0 #define, value: (0x10), line: 340:2 LFXT1S1 #define, value: (0x20), line: 341:2 LFXT1S_0 #define, value: (0x00), line: 350:2 LFXT1S_1 #define, value: (0x10), line: 351:2 LFXT1S_2 #define, value: (0x20), line: 352:2 LFXT1S_3 #define, value: (0x30), line: 353:2 LIMIT #define, value: R9, line: 52:3 680:4 682:4 683:4 685:4 699:4 712:4 720:4 734:4 LOCK #define, value: (0x0010u), line: 450:2 330:4 376:4 396:4 431:4 481:4 LOCKA #define, value: (0x0040u), line: 452:2 LPM0 #define, value: (CPUOFF), line: 91:2 LPM1 #define, value: (SCG0+CPUOFF), line: 92:2 LPM2 #define, value: (SCG1+CPUOFF), line: 93:2 LPM3 #define, value: (SCG1+SCG0+CPUOFF), line: 94:2 LPM4 #define, value: (SCG1+SCG0+OSCOFF+CPUOFF), line: 95:2 MAINSEG #define, value: (512), line: 35:3 339:4 MC0 #define, value: (0x0010u), line: 580:2 MC1 #define, value: (0x0020u), line: 579:2 MC_0 #define, value: (0*0x10u), line: 585:2 MC_1 #define, value: (1*0x10u), line: 586:2 MC_2 #define, value: (2*0x10u), line: 587:2 MC_3 #define, value: (3*0x10u), line: 588:2 - 4e-config - Page 152 MERAS #define, value: (0x0004u), line: 421:2 MOD0 #define, value: (0x01), line: 290:2 MOD1 #define, value: (0x02), line: 291:2 MOD2 #define, value: (0x04), line: 292:2 MOD3 #define, value: (0x08), line: 293:2 MOD4 #define, value: (0x10), line: 294:2 MSC #define, value: (0x080), line: 187:2 N #define, value: (0x0004u), line: 80:2 NMIIE #define, value: (0x10), line: 131:2 NMIIFG #define, value: (0x10), line: 140:2 NMI_VECTOR #define, value: (14 * 2u), line: 974:2 OFIE #define, value: (0x02), line: 130:2 OFIFG #define, value: (0x02), line: 137:2 OSCOFF #define, value: (0x0020u), line: 84:2 OUT #define, value: (0x0004u), line: 610:2 OUTMOD0 #define, value: (0x0020u), line: 607:2 OUTMOD1 #define, value: (0x0040u), line: 606:2 OUTMOD2 #define, value: (0x0080u), line: 605:2 OUTMOD_0 #define, value: (0*0x20u), line: 614:2 OUTMOD_1 #define, value: (1*0x20u), line: 615:2 OUTMOD_2 #define, value: (2*0x20u), line: 616:2 OUTMOD_3 #define, value: (3*0x20u), line: 617:2 OUTMOD_4 #define, value: (4*0x20u), line: 618:2 OUTMOD_5 #define, value: (5*0x20u), line: 619:2 OUTMOD_6 #define, value: (6*0x20u), line: 620:2 OUTMOD_7 #define, value: (7*0x20u), line: 621:2 P1DIR_ #define, value: (0x0022u), line: 465:2 466:2 P1IES_ #define, value: (0x0024u), line: 469:2 470:2 P1IE_ #define, value: (0x0025u), line: 471:2 472:2 P1IFG_ #define, value: (0x0023u), line: 467:2 468:2 P1IN_ #define, value: (0x0020u), line: 461:2 462:2 P1OUT_ #define, value: (0x0021u), line: 463:2 464:2 P1REN_ #define, value: (0x0027u), line: 477:2 478:2 P1SEL2_ #define, value: (0x0041u), line: 475:2 476:2 P1SEL_ #define, value: (0x0026u), line: 473:2 474:2 P2CA0 #define, value: (0x04), line: 388:2 P2CA1 #define, value: (0x08), line: 389:2 P2CA2 #define, value: (0x10), line: 390:2 P2CA3 #define, value: (0x20), line: 391:2 P2CA4 #define, value: (0x40), line: 392:2 P2DIR_ #define, value: (0x002Au), line: 484:2 485:2 P2IES_ #define, value: (0x002Cu), line: 488:2 489:2 P2IE_ #define, value: (0x002Du), line: 490:2 491:2 P2IFG_ #define, value: (0x002Bu), line: 486:2 487:2 P2IN_ #define, value: (0x0028u), line: 480:2 481:2 P2OUT_ #define, value: (0x0029u), line: 482:2 483:2 P2REN_ #define, value: (0x002Fu), line: 496:2 497:2 P2SEL2_ #define, value: (0x0042u), line: 494:2 495:2 P2SEL_ #define, value: (0x002Eu), line: 492:2 493:2 P3DIR_ #define, value: (0x001Au), line: 508:2 509:2 P3IN_ #define, value: (0x0018u), line: 504:2 505:2 P3OUT_ #define, value: (0x0019u), line: 506:2 507:2 P3REN_ #define, value: (0x0010u), line: 514:2 515:2 P3SEL2_ #define, value: (0x0043u), line: 512:2 513:2 P3SEL_ #define, value: (0x001Bu), line: 510:2 511:2 PORIFG #define, value: (0x04), line: 138:2 PORT1_VECTOR #define, value: (2 * 2u), line: 963:2 PORT2_VECTOR #define, value: (3 * 2u), line: 964:2 PREFIXPROMPT #define, value: 0, line: 1130:6 1136:6 1145:6 PSP #define, value: R4, line: 45:3 44:4 50:4 51:4 94:4 95:4 104:4 105:4 115:4 116:4 144:4 145:4 165:4 166:4 177:4 182:4 183:4 189:4 190:4 191:4 197:4 198:4 199:4 200:4 205:4 215:4 220:4 221:4 227:4 228:4 234:4 235:4 236:4 241:4 242:4 247:4 248:4 255:4 272:4 273:4 283:4 285:4 295:4 342:4 349:4 379:4 385:4 399:4 406:4 454:4 455:4 486:4 494:4 499:4 500:4 505:4 506:4 507:4 512:4 519:4 524:4 529:4 570:4 581:4 609:4 621:4 633:4 646:4 647:4 666:4 683:4 686:4 707:4 717:4 718:4 725:4 726:4 - 4e-config - Page 153 743:4 762:4 769:4 770:4 793:4 802:4 803:4 810:4 819:4 820:4 827:4 833:4 834:4 844:4 857:4 858:4 866:4 872:4 873:4 881:4 888:4 889:4 944:4 952:4 953:4 969:4 970:4 1652:6 1686:6 1687:6 1689:6 1790:6 1791:6 1792:6 1797:6 1798:6 1799:6 1804:6 1805:6 1806:6 1811:6 1812:6 1813:6 1818:6 1819:6 1820:6 1825:6 1830:6 Q #define, value: R12, line: 57:3 470:4 471:4 472:4 RAMEND #define, value: (0x0400), line: 30:3 1870:6 RAMSTART #define, value: (0x0200), line: 29:3 READ_ONLY #define, value: const, line: 50:2 462:2 481:2 505:2 523:2 645:2 689:2 714:2 941:2 943:2 945:2 947:2 949:2 951:2 953:2 955:2 REF2_5V #define, value: (0x040), line: 186:2 REFBURST #define, value: (0x100), line: 188:2 REFON #define, value: (0x020), line: 185:2 REFOUT #define, value: (0x200), line: 189:2 RESET_VECTOR #define, value: (15 * 2u), line: 975:2 RSEL0 #define, value: (0x01), line: 299:2 RSEL1 #define, value: (0x02), line: 300:2 RSEL2 #define, value: (0x04), line: 301:2 RSEL3 #define, value: (0x08), line: 302:2 RSP #define, value: SP, line: 42:3 57:4 222:4 229:4 249:4 254:4 679:4 680:4 681:4 698:4 699:4 711:4 712:4 727:4 728:4 733:4 734:4 RSTIFG #define, value: (0x08), line: 139:2 SCCI #define, value: (0x0400u), line: 603:2 SCG0 #define, value: (0x0040u), line: 85:2 SCG1 #define, value: (0x0080u), line: 86:2 SCS #define, value: (0x0800u), line: 602:2 SEGWRT #define, value: (0x0080u), line: 424:2 SELM0 #define, value: (0x40), line: 318:2 SELM1 #define, value: (0x80), line: 319:2 SELM_0 #define, value: (0x00), line: 331:2 SELM_1 #define, value: (0x40), line: 332:2 SELM_2 #define, value: (0x80), line: 333:2 SELM_3 #define, value: (0xC0), line: 334:2 SELS #define, value: (0x08), line: 315:2 SHS0 #define, value: (0x0400u), line: 221:2 SHS1 #define, value: (0x0800u), line: 222:2 SHS_0 #define, value: (0*0x400u), line: 247:2 SHS_1 #define, value: (1*0x400u), line: 248:2 SHS_2 #define, value: (2*0x400u), line: 249:2 SHS_3 #define, value: (3*0x400u), line: 250:2 SREF0 #define, value: (0x2000u), line: 193:2 SREF1 #define, value: (0x4000u), line: 194:2 SREF2 #define, value: (0x8000u), line: 195:2 SREF_0 #define, value: (0*0x2000u), line: 201:2 SREF_1 #define, value: (1*0x2000u), line: 202:2 SREF_2 #define, value: (2*0x2000u), line: 203:2 SREF_3 #define, value: (3*0x2000u), line: 204:2 SREF_4 #define, value: (4*0x2000u), line: 205:2 SREF_5 #define, value: (5*0x2000u), line: 206:2 SREF_6 #define, value: (6*0x2000u), line: 207:2 SREF_7 #define, value: (7*0x2000u), line: 208:2 T #define, value: R13, line: 58:3 TA0CCR0_ #define, value: (0x0172u), line: 534:2 535:2 TA0CCR1_ #define, value: (0x0174u), line: 536:2 537:2 TA0CCR2_ #define, value: (0x0176u), line: 538:2 539:2 TA0CCTL0_ #define, value: (0x0162u), line: 526:2 527:2 TA0CCTL1_ #define, value: (0x0164u), line: 528:2 529:2 TA0CCTL2_ #define, value: (0x0166u), line: 530:2 531:2 TA0CTL_ #define, value: (0x0160u), line: 524:2 525:2 TA0IV_ #define, value: (0x012Eu), line: 522:2 523:2 TA0IV_6 #define, value: (0x0006u), line: 635:2 TA0IV_8 #define, value: (0x0008u), line: 636:2 TA0IV_NONE #define, value: (0x0000u), line: 632:2 TA0IV_TACCR1 #define, value: (0x0002u), line: 633:2 TA0IV_TACCR2 #define, value: (0x0004u), line: 634:2 TA0IV_TAIFG #define, value: (0x000Au), line: 637:2 TA0R_ #define, value: (0x0170u), line: 532:2 533:2 - 4e-config - Page 154 TA1CCR0_ #define, value: (0x0192u), line: 656:2 657:2 TA1CCR1_ #define, value: (0x0194u), line: 658:2 659:2 TA1CCR2_ #define, value: (0x0196u), line: 660:2 661:2 TA1CCTL0_ #define, value: (0x0182u), line: 648:2 649:2 TA1CCTL1_ #define, value: (0x0184u), line: 650:2 651:2 TA1CCTL2_ #define, value: (0x0186u), line: 652:2 653:2 TA1CTL_ #define, value: (0x0180u), line: 646:2 647:2 TA1IV_ #define, value: (0x011Eu), line: 644:2 645:2 TA1IV_NONE #define, value: (0x0000u), line: 666:2 TA1IV_TACCR1 #define, value: (0x0002u), line: 667:2 TA1IV_TACCR2 #define, value: (0x0004u), line: 668:2 TA1IV_TAIFG #define, value: (0x000Au), line: 669:2 TA1R_ #define, value: (0x0190u), line: 654:2 655:2 TACCR0 #define, value: TA0CCR0, line: 548:2 TACCR0_ #define, value: TA0CCR0_, line: 557:2 TACCR1 #define, value: TA0CCR1, line: 549:2 TACCR1_ #define, value: TA0CCR1_, line: 558:2 TACCR2 #define, value: TA0CCR2, line: 550:2 TACCR2_ #define, value: TA0CCR2_, line: 559:2 TACCTL0 #define, value: TA0CCTL0, line: 544:2 TACCTL0_ #define, value: TA0CCTL0_, line: 553:2 TACCTL1 #define, value: TA0CCTL1, line: 545:2 TACCTL1_ #define, value: TA0CCTL1_, line: 554:2 TACCTL2 #define, value: TA0CCTL2, line: 546:2 TACCTL2_ #define, value: TA0CCTL2_, line: 555:2 TACLR #define, value: (0x0004u), line: 581:2 TACTL #define, value: TA0CTL, line: 543:2 TACTL_ #define, value: TA0CTL_, line: 552:2 TAIE #define, value: (0x0002u), line: 582:2 TAIFG #define, value: (0x0001u), line: 583:2 TAIV #define, value: TA0IV, line: 542:2 TAIV_ #define, value: TA0IV_, line: 551:2 TAR #define, value: TA0R, line: 547:2 TAR_ #define, value: TA0R_, line: 556:2 TASSEL0 #define, value: (0x0100u), line: 576:2 TASSEL1 #define, value: (0x0200u), line: 575:2 TASSEL_0 #define, value: (0*0x100u), line: 593:2 TASSEL_1 #define, value: (1*0x100u), line: 594:2 TASSEL_2 #define, value: (2*0x100u), line: 595:2 TASSEL_3 #define, value: (3*0x100u), line: 596:2 TIMER0_A0_VECTOR #define, value: (9 * 2u), line: 969:2 TIMER0_A1_VECTOR #define, value: (8 * 2u), line: 968:2 TIMER1_A0_VECTOR #define, value: (13 * 2u), line: 973:2 TIMER1_A1_VECTOR #define, value: (12 * 2u), line: 972:2 TOS #define, value: R7, line: 48:3 43:4 44:4 51:4 52:4 95:4 96:4 105:4 106:4 116:4 117:4 118:4 145:4 146:4 166:4 171:4 177:4 183:4 184:4 191:4 192:4 198:4 199:4 214:4 215:4 221:4 222:4 228:4 229:4 235:4 236:4 241:4 242:4 248:4 249:4 254:4 255:4 267:4 267:4 272:4 273:4 278:4 278:4 284:4 285:4 296:4 298:4 342:4 350:4 352:4 355:4 357:4 360:4 362:4 374:4 379:4 386:4 388:4 394:4 399:4 407:4 410:4 412:4 415:4 417:4 429:4 456:4 465:4 475:4 484:4 486:4 494:4 499:4 500:4 505:4 507:4 513:4 514:4 519:4 524:4 529:4 534:4 539:4 540:4 545:4 550:4 555:4 560:4 560:4 565:4 571:4 574:4 576:4 582:4 586:4 588:4 596:4 597:4 597:4 602:4 602:4 603:4 603:4 604:4 610:4 612:4 622:4 624:4 634:4 644:4 647:4 665:4 666:4 684:4 686:4 706:4 707:4 718:4 719:4 720:4 726:4 727:4 728:4 752:4 763:4 777:4 779:4 787:4 794:4 806:4 810:4 821:4 825:4 827:4 835:4 837:4 838:4 - 4e-config - Page 155 842:4 844:4 861:4 867:4 876:4 882:4 890:4 895:4 900:4 900:4 901:4 901:4 902:4 943:4 944:4 953:4 954:4 970:4 57:5 1650:6 1651:6 1652:6 1654:6 1656:6 1687:6 1688:6 1790:6 1792:6 1797:6 1799:6 1804:6 1806:6 1811:6 1813:6 1818:6 1820:6 1825:6 1827:6 1829:6 UC0IE #define, value: IE2, line: 144:2 UC0IFG #define, value: IFG2, line: 152:2 UC7BIT #define, value: (0x10), line: 726:2 UCA0ABCTL_ #define, value: (0x005Du), line: 692:2 693:2 UCA0BR0_ #define, value: (0x0062u), line: 680:2 681:2 UCA0BR1_ #define, value: (0x0063u), line: 682:2 683:2 UCA0CTL0_ #define, value: (0x0060u), line: 676:2 677:2 UCA0CTL1_ #define, value: (0x0061u), line: 678:2 679:2 UCA0IRRCTL_ #define, value: (0x005Fu), line: 696:2 697:2 UCA0IRTCTL_ #define, value: (0x005Eu), line: 694:2 695:2 UCA0MCTL_ #define, value: (0x0064u), line: 684:2 685:2 UCA0RXBUF_ #define, value: (0x0066u), line: 688:2 689:2 UCA0RXIE #define, value: (0x01), line: 145:2 UCA0RXIFG #define, value: (0x01), line: 153:2 950:4 971:4 UCA0STAT_ #define, value: (0x0065u), line: 686:2 687:2 UCA0TXBUF_ #define, value: (0x0067u), line: 690:2 691:2 UCA0TXIE #define, value: (0x02), line: 146:2 UCA0TXIFG #define, value: (0x02), line: 154:2 941:4 UCA10 #define, value: (0x80), line: 738:2 UCABDEN #define, value: (0x01), line: 862:2 UCADDR #define, value: (0x02), line: 816:2 UCALIE #define, value: (0x01), line: 827:2 UCALIFG #define, value: (0x01), line: 835:2 UCB0BR0_ #define, value: (0x006Au), line: 705:2 706:2 UCB0BR1_ #define, value: (0x006Bu), line: 707:2 708:2 UCB0CTL0_ #define, value: (0x0068u), line: 701:2 702:2 UCB0CTL1_ #define, value: (0x0069u), line: 703:2 704:2 UCB0I2CIE_ #define, value: (0x006Cu), line: 709:2 710:2 UCB0I2COA_ #define, value: (0x0118u), line: 717:2 718:2 UCB0I2CSA_ #define, value: (0x011Au), line: 719:2 720:2 UCB0RXBUF_ #define, value: (0x006Eu), line: 713:2 714:2 UCB0RXIE #define, value: (0x04), line: 147:2 UCB0RXIFG #define, value: (0x04), line: 155:2 UCB0STAT_ #define, value: (0x006Du), line: 711:2 712:2 UCB0TXBUF_ #define, value: (0x006Fu), line: 715:2 716:2 UCB0TXIE #define, value: (0x08), line: 148:2 UCB0TXIFG #define, value: (0x08), line: 156:2 UCBBUSY #define, value: (0x10), line: 831:2 UCBRF0 #define, value: (0x10), line: 778:2 UCBRF1 #define, value: (0x20), line: 777:2 UCBRF2 #define, value: (0x40), line: 776:2 UCBRF3 #define, value: (0x80), line: 775:2 UCBRF_0 #define, value: (0x00), line: 784:2 UCBRF_1 #define, value: (0x10), line: 785:2 UCBRF_10 #define, value: (0xA0), line: 794:2 UCBRF_11 #define, value: (0xB0), line: 795:2 UCBRF_12 #define, value: (0xC0), line: 796:2 UCBRF_13 #define, value: (0xD0), line: 797:2 UCBRF_14 #define, value: (0xE0), line: 798:2 UCBRF_15 #define, value: (0xF0), line: 799:2 UCBRF_2 #define, value: (0x20), line: 786:2 UCBRF_3 #define, value: (0x30), line: 787:2 UCBRF_4 #define, value: (0x40), line: 788:2 UCBRF_5 #define, value: (0x50), line: 789:2 UCBRF_6 #define, value: (0x60), line: 790:2 UCBRF_7 #define, value: (0x70), line: 791:2 UCBRF_8 #define, value: (0x80), line: 792:2 UCBRF_9 #define, value: (0x90), line: 793:2 UCBRK #define, value: (0x08), line: 814:2 UCBRKIE #define, value: (0x10), line: 751:2 UCBRS0 #define, value: (0x02), line: 781:2 UCBRS1 #define, value: (0x04), line: 780:2 UCBRS2 #define, value: (0x08), line: 779:2 UCBRS_0 #define, value: (0x00), line: 801:2 UCBRS_1 #define, value: (0x02), line: 802:2 UCBRS_2 #define, value: (0x04), line: 803:2 UCBRS_3 #define, value: (0x06), line: 804:2 UCBRS_4 #define, value: (0x08), line: 805:2 - 4e-config - Page 156 UCBRS_5 #define, value: (0x0A), line: 806:2 UCBRS_6 #define, value: (0x0C), line: 807:2 UCBRS_7 #define, value: (0x0E), line: 808:2 UCBTOE #define, value: (0x04), line: 860:2 UCBUSY #define, value: (0x01), line: 817:2 UCCKPH #define, value: (0x80), line: 733:2 UCCKPL #define, value: (0x40), line: 734:2 UCDELIM0 #define, value: (0x10), line: 858:2 UCDELIM1 #define, value: (0x20), line: 857:2 UCDORM #define, value: (0x08), line: 752:2 UCFE #define, value: (0x40), line: 811:2 UCGC #define, value: (0x20), line: 830:2 UCGCEN #define, value: (0x8000u), line: 864:2 UCIDLE #define, value: (0x02), line: 818:2 UCIREN #define, value: (0x01), line: 844:2 UCIRRXFE #define, value: (0x01), line: 853:2 UCIRRXFL0 #define, value: (0x04), line: 851:2 UCIRRXFL1 #define, value: (0x08), line: 850:2 UCIRRXFL2 #define, value: (0x10), line: 849:2 UCIRRXFL3 #define, value: (0x20), line: 848:2 UCIRRXFL4 #define, value: (0x40), line: 847:2 UCIRRXFL5 #define, value: (0x80), line: 846:2 UCIRRXPL #define, value: (0x02), line: 852:2 UCIRTXCLK #define, value: (0x02), line: 843:2 UCIRTXPL0 #define, value: (0x04), line: 842:2 UCIRTXPL1 #define, value: (0x08), line: 841:2 UCIRTXPL2 #define, value: (0x10), line: 840:2 UCIRTXPL3 #define, value: (0x20), line: 839:2 UCIRTXPL4 #define, value: (0x40), line: 838:2 UCIRTXPL5 #define, value: (0x80), line: 837:2 UCLISTEN #define, value: (0x80), line: 810:2 UCMM #define, value: (0x20), line: 740:2 UCMODE0 #define, value: (0x02), line: 729:2 UCMODE1 #define, value: (0x04), line: 728:2 UCMODE_0 #define, value: (0x00), line: 742:2 UCMODE_1 #define, value: (0x02), line: 743:2 UCMODE_2 #define, value: (0x04), line: 744:2 UCMODE_3 #define, value: (0x06), line: 745:2 UCMSB #define, value: (0x20), line: 725:2 UCMST #define, value: (0x08), line: 735:2 UCNACKIE #define, value: (0x08), line: 824:2 UCNACKIFG #define, value: (0x08), line: 832:2 UCOA0 #define, value: (0x0001u), line: 874:2 UCOA1 #define, value: (0x0002u), line: 873:2 UCOA2 #define, value: (0x0004u), line: 872:2 UCOA3 #define, value: (0x0008u), line: 871:2 UCOA4 #define, value: (0x0010u), line: 870:2 UCOA5 #define, value: (0x0020u), line: 869:2 UCOA6 #define, value: (0x0040u), line: 868:2 UCOA7 #define, value: (0x0080u), line: 867:2 UCOA8 #define, value: (0x0100u), line: 866:2 UCOA9 #define, value: (0x0200u), line: 865:2 UCOE #define, value: (0x20), line: 812:2 UCOS16 #define, value: (0x01), line: 782:2 UCPAR #define, value: (0x40), line: 724:2 UCPE #define, value: (0x10), line: 813:2 UCPEN #define, value: (0x80), line: 723:2 UCRXEIE #define, value: (0x20), line: 750:2 UCRXERR #define, value: (0x04), line: 815:2 UCSA0 #define, value: (0x0001u), line: 885:2 UCSA1 #define, value: (0x0002u), line: 884:2 UCSA2 #define, value: (0x0004u), line: 883:2 UCSA3 #define, value: (0x0008u), line: 882:2 UCSA4 #define, value: (0x0010u), line: 881:2 UCSA5 #define, value: (0x0020u), line: 880:2 UCSA6 #define, value: (0x0040u), line: 879:2 UCSA7 #define, value: (0x0080u), line: 878:2 UCSA8 #define, value: (0x0100u), line: 877:2 UCSA9 #define, value: (0x0200u), line: 876:2 UCSCLLOW #define, value: (0x40), line: 829:2 UCSLA10 #define, value: (0x40), line: 739:2 UCSPB #define, value: (0x08), line: 727:2 UCSSEL0 #define, value: (0x40), line: 749:2 UCSSEL1 #define, value: (0x80), line: 748:2 UCSSEL_0 #define, value: (0x00), line: 770:2 UCSSEL_1 #define, value: (0x40), line: 771:2 UCSSEL_2 #define, value: (0x80), line: 772:2 UCSSEL_3 #define, value: (0xC0), line: 773:2 - 4e-config - Page 157 UCSTOE #define, value: (0x08), line: 859:2 UCSTPIE #define, value: (0x04), line: 825:2 UCSTPIFG #define, value: (0x04), line: 833:2 UCSTTIE #define, value: (0x02), line: 826:2 UCSTTIFG #define, value: (0x02), line: 834:2 UCSWRST #define, value: (0x01), line: 755:2 UCSYNC #define, value: (0x01), line: 730:2 UCTR #define, value: (0x10), line: 766:2 UCTXADDR #define, value: (0x04), line: 753:2 UCTXBRK #define, value: (0x02), line: 754:2 UCTXNACK #define, value: (0x08), line: 767:2 UCTXSTP #define, value: (0x04), line: 768:2 UCTXSTT #define, value: (0x02), line: 769:2 USCIAB0RX_VECTOR #define, value: (7 * 2u), line: 967:2 USCIAB0TX_VECTOR #define, value: (6 * 2u), line: 966:2 USERFLASHEND #define, value: (0xD7FF), line: 32:3 303:4 337:4 357:4 412:4 1860:6 142:7 USERFLASHSTART #define, value: (0xC000), line: 31:3 301:4 335:4 355:4 410:4 199:6 1856:6 142:7 V #define, value: (0x0100u), line: 81:2 W #define, value: R6, line: 47:3 43:4 45:4 53:4 53:4 58:4 58:4 68:4 69:4 69:4 96:4 97:4 97:4 106:4 107:4 107:4 117:4 119:4 119:4 127:4 127:4 128:4 146:4 148:4 150:4 150:4 167:4 167:4 173:4 173:4 178:4 178:4 182:4 184:4 185:4 185:4 189:4 192:4 193:4 193:4 197:4 200:4 201:4 201:4 206:4 206:4 216:4 216:4 223:4 223:4 230:4 230:4 237:4 237:4 243:4 243:4 250:4 250:4 256:4 256:4 268:4 268:4 274:4 274:4 279:4 279:4 283:4 284:4 286:4 286:4 295:4 296:4 298:4 301:4 303:4 309:4 311:4 316:4 318:4 328:4 335:4 337:4 339:4 340:4 343:4 343:4 349:4 352:4 374:4 380:4 380:4 385:4 388:4 394:4 400:4 400:4 406:4 407:4 429:4 454:4 467:4 473:4 474:4 477:4 478:4 487:4 487:4 495:4 495:4 501:4 501:4 508:4 508:4 512:4 513:4 514:4 515:4 515:4 520:4 520:4 525:4 525:4 530:4 530:4 535:4 535:4 541:4 541:4 546:4 546:4 551:4 551:4 556:4 556:4 561:4 561:4 566:4 566:4 570:4 573:4 573:4 576:4 577:4 577:4 581:4 585:4 588:4 589:4 589:4 598:4 598:4 605:4 605:4 609:4 610:4 613:4 613:4 621:4 622:4 625:4 625:4 633:4 634:4 661:4 661:4 669:4 669:4 687:4 687:4 700:4 700:4 713:4 713:4 721:4 721:4 729:4 729:4 735:4 735:4 751:4 752:4 759:4 764:4 764:4 776:4 782:4 795:4 795:4 803:4 806:4 807:4 811:4 811:4 819:4 823:4 824:4 828:4 828:4 833:4 837:4 840:4 841:4 845:4 845:4 858:4 861:4 863:4 866:4 868:4 868:4 873:4 876:4 878:4 881:4 883:4 883:4 888:4 892:4 903:4 903:4 945:4 945:4 956:4 956:4 1653:6 1657:6 1659:6 1659:6 1688:6 1689:6 1690:6 1690:6 1793:6 - 4e-config - Page 158 1793:6 1800:6 1800:6 1807:6 1807:6 1814:6 1814:6 1821:6 1821:6 1831:6 1831:6 WAIT #define, value: (0x0008u), line: 449:2 WDTCNTCL #define, value: (0x0008u), line: 898:2 WDTCTL_ #define, value: (0x0120u), line: 892:2 893:2 WDTHOLD #define, value: (0x0080u), line: 902:2 WDTIE #define, value: (0x01), line: 129:2 WDTIFG #define, value: (0x01), line: 136:2 WDTIS0 #define, value: (0x0001u), line: 895:2 WDTIS1 #define, value: (0x0002u), line: 896:2 WDTNMI #define, value: (0x0020u), line: 900:2 WDTNMIES #define, value: (0x0040u), line: 901:2 WDTPW #define, value: (0x5A00u), line: 904:2 WDTSSEL #define, value: (0x0004u), line: 897:2 WDTTMSEL #define, value: (0x0010u), line: 899:2 WDT_ADLY_1000 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL), line: 913:2 WDT_ADLY_16 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1), line: 915:2 WDT_ADLY_1_9 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line: 916:2 WDT_ADLY_250 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0), line: 914:2 WDT_ARST_1000 #define, value: (WDTPW+WDTCNTCL+WDTSSEL), line: 924:2 WDT_ARST_16 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1), line: 926:2 WDT_ARST_1_9 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line: 927:2 WDT_ARST_250 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0), line: 925:2 WDT_MDLY_0_064 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0), line: 911:2 WDT_MDLY_0_5 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1), line: 910:2 WDT_MDLY_32 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL), line: 908:2 WDT_MDLY_8 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0), line: 909:2 WDT_MRST_0_064 #define, value: (WDTPW+WDTCNTCL+WDTIS1+WDTIS0), line: 922:2 WDT_MRST_0_5 #define, value: (WDTPW+WDTCNTCL+WDTIS1), line: 921:2 WDT_MRST_32 #define, value: (WDTPW+WDTCNTCL), line: 919:2 WDT_MRST_8 #define, value: (WDTPW+WDTCNTCL+WDTIS0), line: 920:2 WDT_VECTOR #define, value: (10 * 2u), line: 970:2 WRT #define, value: (0x0040u), line: 422:2 372:4 393:4 427:4 462:4 X #define, value: R10, line: 55:3 455:4 469:4 470:4 477:4 802:4 804:4 808:4 820:4 823:4 834:4 838:4 839:4 841:4 857:4 859:4 864:4 867:4 872:4 874:4 879:4 882:4 889:4 892:4 894:4 XCAP0 #define, value: (0x04), line: 338:2 XCAP1 #define, value: (0x08), line: 339:2 XCAP_0 #define, value: (0x00), line: 345:2 XCAP_1 #define, value: (0x04), line: 346:2 XCAP_2 #define, value: (0x08), line: 347:2 XCAP_3 #define, value: (0x0C), line: 348:2 XT2OF #define, value: (0x02), line: 337:2 XT2OFF #define, value: (0x80), line: 306:2 XT2S0 #define, value: (0x40), line: 342:2 XT2S1 #define, value: (0x80), line: 343:2 XT2S_0 #define, value: (0x00), line: 355:2 XT2S_1 #define, value: (0x40), line: 356:2 XT2S_2 #define, value: (0x80), line: 357:2 XT2S_3 #define, value: (0xC0), line: 358:2 XTS #define, value: (0x40), line: 305:2 Y #define, value: R11, line: 56:3 469:4 472:4 473:4 Z #define, value: (0x0002u), line: 79:2 __430X_CORE__ #define, value: 1, line: 0 __430_CORE__ #define, value: 0, line: 0 __A430__ #define, value: 1, line: 0 __BUILD_NUMBER__ #define, line: 0 __CORE__ #define, value: 0, line: 0 __DATE__ #define, line: 0 22 __FILE__ #define, line: 0 __IAR_SYSTEMS_ASM #define, line: 0 __IAR_SYSTEMS_ASM__ #define, line: 0 __LINE__ #define, line: 0 __MSP430G2553 #define, value: , line: 16:2 __MSP430G2553__ #define, value: 1, line: 0 __MSP430_HAS_ADC10__ #define, value: , line: 161:2 __MSP430_HAS_BC2__ #define, value: , line: 279:2 __MSP430_HAS_CAPLUS__ #define, value: , line: 363:2 __MSP430_HAS_FLASH2__ #define, value: , line: 407:2 __MSP430_HAS_PORT1_R__ #define, value: , line: 458:2 __MSP430_HAS_PORT2_R__ #define, value: , line: 459:2 __MSP430_HAS_PORT3_R__ #define, value: , line: 502:2 __MSP430_HAS_T1A3__ #define, value: , line: 642:2 __MSP430_HAS_TA3__ #define, value: , line: 520:2 - 4e-config - Page 159 __MSP430_HAS_USCI__ #define, value: , line: 674:2 __MSP430_HAS_WDT__ #define, value: , line: 890:2 __SUBVERSION__ #define, line: 0 __TID__ #define, line: 0 24:2 __TIME__ #define, line: 0 22 __VER__ #define, line: 0 __msp430 #define, value: , line: 9:1 Segment Type Mode ---------------------------------------- CODE UNTYPED REL Label Mode Type Segment Value/Offset ------------------------------------------------------------------------------ ABBS REL CONST PUB UNTYP. CODE B98 ABORT REL CONST PUB UNTYP. CODE 158C ABORTQUOTE REL CONST PUB UNTYP. CODE 15B8 ACC1 REL CONST UNTYP. CODE E66 ACC3 REL CONST UNTYP. CODE E9C ACC4 REL CONST UNTYP. CODE EA8 ACC5 REL CONST UNTYP. CODE EAC ACCEPT REL CONST PUB UNTYP. CODE E5C ADC10AE0 ABS CONST UNTYP. ASEG 4A ADC10CTL0 ABS CONST UNTYP. ASEG 1B0 ADC10CTL1 ABS CONST UNTYP. ASEG 1B2 ADC10DTC0 ABS CONST UNTYP. ASEG 48 ADC10DTC1 ABS CONST UNTYP. ASEG 49 ADC10MEM ABS CONST UNTYP. ASEG 1B4 ADC10SA ABS CONST UNTYP. ASEG 1BC ADRTOIN REL CONST PUB UNTYP. CODE 120C AGAIN REL CONST PUB UNTYP. CODE 181C ALIGNED REL CONST PUB UNTYP. CODE 89A ALIGNN REL CONST PUB UNTYP. CODE 880 ALLOT REL CONST PUB UNTYP. CODE 111A ANDD REL CONST PUB UNTYP. CODE 44E APP REL CONST PUB UNTYP. CODE A58 APPCRC REL CONST PUB UNTYP. CODE 1E1A APPU0 REL CONST PUB UNTYP. CODE B64 ATXY REL CONST PUB UNTYP. CODE 1C46 AppU0 ABS CONST EXT [013] UNTYP. __EXTERNS Solved Extern BACKSLASH REL CONST PUB UNTYP. CODE 1BB8 BASE REL CONST PUB UNTYP. CODE 9E8 BCSCTL1 ABS CONST UNTYP. ASEG 57 BCSCTL2 ABS CONST UNTYP. ASEG 58 BCSCTL3 ABS CONST UNTYP. ASEG 53 BEGIN REL CONST PUB UNTYP. CODE 17F6 BELL REL CONST PUB UNTYP. CODE 1C02 BIN REL CONST PUB UNTYP. CODE 1C82 BLANK REL CONST PUB UNTYP. CODE AE4 BOOT REL CONST PUB UNTYP. CODE 1E86 BOOTIP REL CONST PUB UNTYP. CODE 1E88 BRACCHAR REL CONST PUB UNTYP. CODE 15FC BRACTICK REL CONST PUB UNTYP. CODE 1764 BUILDS REL CONST PUB UNTYP. CODE 1654 CACTL1 ABS CONST UNTYP. ASEG 59 CACTL2 ABS CONST UNTYP. ASEG 5A CALBC1_12MHZ ABS CONST UNTYP. ASEG 10FB CALBC1_16MHZ ABS CONST UNTYP. ASEG 10F9 CALBC1_1MHZ ABS CONST UNTYP. ASEG 10FF CALBC1_8MHZ ABS CONST UNTYP. ASEG 10FD CALDCO_12MHZ ABS CONST UNTYP. ASEG 10FA CALDCO_16MHZ ABS CONST UNTYP. ASEG 10F8 CALDCO_1MHZ ABS CONST UNTYP. ASEG 10FE CALDCO_8MHZ ABS CONST UNTYP. ASEG 10FC CAPD ABS CONST UNTYP. ASEG 5B CAPITALIZE REL CONST PUB UNTYP. CODE 1338 CAPS REL CONST PUB UNTYP. CODE A64 CAPS1 REL CONST UNTYP. CODE 134E CAPS2 REL CONST UNTYP. CODE 135C CCOMMA REL CONST PUB UNTYP. CODE 113E CCRC REL CONST PUB UNTYP. CODE 1B44 CELL REL CONST PUB UNTYP. CODE 8B0 CELLPLUS REL CONST PUB UNTYP. CODE 8BE CELLS REL CONST PUB UNTYP. CODE 8CE CEXIT REL CONST PUB UNTYP. CODE 974 CFETCH REL CONST PUB UNTYP. CODE 236 CHARPLUS REL CONST PUB UNTYP. CODE 8DA CHARR REL CONST PUB UNTYP. CODE 15E6 - 4e-config - Page 160 CHARS REL CONST PUB UNTYP. CODE 8E6 CMOVE REL CONST PUB UNTYP. CODE 728 CMOVEUP REL CONST PUB UNTYP. CODE 74C CMOVE_1 REL CONST UNTYP. CODE 732 CMOVE_X REL CONST UNTYP. CODE 73C CMOVU_1 REL CONST UNTYP. CODE 75A CMOVU_X REL CONST UNTYP. CODE 766 COLD REL CONST PUB UNTYP. CODE 1EE4 COLDIP REL CONST PUB UNTYP. CODE 1EE6 COLON REL CONST PUB UNTYP. CODE 1740 COMMA REL CONST PUB UNTYP. CODE 1128 COMMABRANCH REL CONST PUB UNTYP. CODE 98A COMMACALL REL CONST PUB UNTYP. CODE 930 COMMACF REL CONST PUB UNTYP. CODE 918 COMMADEST REL CONST PUB UNTYP. CODE 998 COMMAJMP REL CONST PUB UNTYP. CODE 944 COMMANONE REL CONST PUB UNTYP. CODE 9C2 COMMAXT REL CONST PUB UNTYP. CODE 900 CONSTANT REL CONST PUB UNTYP. CODE 90 COR REL CONST PUB UNTYP. CODE B2C CORPOWERON ABS CONST UNTYP. CODE 186 CORREST ABS CONST UNTYP. CODE 18E COUNT REL CONST PUB UNTYP. CODE D80 CR REL CONST PUB UNTYP. CODE DAA CRC REL CONST PUB UNTYP. CODE 1B68 CREATE REL CONST PUB UNTYP. CODE 166A CSTORE REL CONST PUB UNTYP. CODE 244 CamelForthEnd REL CONST UNTYP. CODE 876 DABS REL CONST PUB UNTYP. CODE BDE DCOCTL ABS CONST UNTYP. ASEG 56 DDP REL CONST PUB UNTYP. CODE A00 DECIMAL REL CONST PUB UNTYP. CODE 10E0 DEPTH REL CONST PUB UNTYP. CODE 1946 DIGITQ REL CONST PUB UNTYP. CODE 1388 DIV1 REL CONST UNTYP. CODE 6D6 DIV2 REL CONST UNTYP. CODE 6DC DIV3 REL CONST UNTYP. CODE 6F0 DIV4 REL CONST UNTYP. CODE 6F2 DIVIDE REL CONST UNTYP. CODE 6D0 DNEG1 REL CONST UNTYP. CODE BD4 DNEGATE REL CONST PUB UNTYP. CODE BAC DO REL CONST PUB UNTYP. CODE 1880 DOALIAS REL CONST PUB UNTYP. CODE D0 DOCODE REL CONST UNTYP. CODE Not solved DOCOLON REL CONST PUB UNTYP. CODE 66 DOCON REL CONST PUB UNTYP. CODE 98 DOCR REL CONST PUB UNTYP. CODE D94 DOEMIT REL CONST PUB UNTYP. CODE 7FC DOES REL CONST PUB UNTYP. CODE 169E DOKEY REL CONST PUB UNTYP. CODE 818 DOROM REL CONST PUB UNTYP. CODE A4 DOT REL CONST PUB UNTYP. CODE 10BC DOTBOOTVERSION REL CONST PUB UNTYP. CODE 1DE0 DOTCOLD REL CONST PUB UNTYP. CODE 1ECE DOTERRN REL CONST PUB UNTYP. CODE E1E DOTQUOTE REL CONST PUB UNTYP. CODE F88 DOTS REL CONST PUB UNTYP. CODE 1B04 DOTS1 REL CONST UNTYP. CODE 1B34 DOTS2 REL CONST UNTYP. CODE 1B42 DOTSTATUS REL CONST PUB UNTYP. CODE 1514 DOTVER REL CONST PUB UNTYP. CODE 1BCC DOTWOCON REL CONST PUB UNTYP. CODE 1BA2 DOUSER REL CONST PUB UNTYP. CODE C0 DOVAR REL CONST PUB UNTYP. CODE 98 DROP REL CONST PUB UNTYP. CODE 116 DTOI REL CONST PUB UNTYP. CODE 3AC DTOI_BYTE REL CONST UNTYP. CODE 3E0 DTOI_END REL CONST UNTYP. CODE 3E6 DTOI_LOOP REL CONST UNTYP. CODE 3B6 DTOI_WORD REL CONST UNTYP. CODE 3CE DTOI_X REL CONST UNTYP. CODE 3F8 DUMP REL CONST PUB UNTYP. CODE 1A98 DUP REL CONST PUB UNTYP. CODE F0 ELSS REL CONST PUB UNTYP. CODE 17DA EMIT REL CONST PUB UNTYP. CODE 848 EMITLOOPx REL CONST UNTYP. CODE 7FE ENDLOOP REL CONST PUB UNTYP. CODE 189C ENVIRONMENTQ REL CONST PUB UNTYP. CODE 1964 - 4e-config - Page 161 EQUAL REL CONST PUB UNTYP. CODE 54A ESC0 REL CONST UNTYP. CODE 1C6D ESC1 REL CONST UNTYP. CODE 1C70 ESCPAR REL CONST PUB UNTYP. CODE 1C0C EVALUATE REL CONST PUB UNTYP. CODE 14F2 EXECUTE REL CONST PUB UNTYP. CODE 38 EXIT REL CONST PUB UNTYP. CODE 5E FACTORY REL CONST PUB UNTYP. CODE 1F0C FACTORYIP REL CONST PUB UNTYP. CODE 1F0E FALSE REL CONST PUB UNTYP. CODE 1CA4 FCTL1 ABS CONST UNTYP. ASEG 128 FCTL2 ABS CONST UNTYP. ASEG 12A FCTL3 ABS CONST UNTYP. ASEG 12C FETCH REL CONST PUB UNTYP. CODE 216 FILL REL CONST PUB UNTYP. CODE 704 FILL_1 REL CONST UNTYP. CODE 70E FILL_X REL CONST UNTYP. CODE 718 FIND REL CONST PUB UNTYP. CODE 12D8 FIND1 REL CONST UNTYP. CODE 12DE FIND2 REL CONST UNTYP. CODE 12F6 FIND3 REL CONST UNTYP. CODE 1314 FLALIGNED REL CONST PUB UNTYP. CODE 1986 FLERASE REL CONST PUB UNTYP. CODE 25E FLE_1 REL CONST UNTYP. CODE 264 FLE_INFO REL CONST UNTYP. CODE 280 FLE_OK REL CONST UNTYP. CODE 28C FLE_VEC REL CONST UNTYP. CODE 274 FLE_X REL CONST UNTYP. CODE 2C4 FL_INFO REL CONST UNTYP. CODE 2BE FMMOD1 REL CONST UNTYP. CODE C62 FMSLASHMOD REL CONST PUB UNTYP. CODE C3C FORTHPRO REL CONST PUB UNTYP. CODE 1F42 GREATER REL CONST PUB UNTYP. CODE 580 HEADR REL CONST PUB UNTYP. CODE 1626 HERE REL CONST PUB UNTYP. CODE 1108 HEX REL CONST PUB UNTYP. CODE 10F4 HIDE REL CONST PUB UNTYP. CODE 16F0 HOLD REL CONST PUB UNTYP. CODE 1000 HP REL CONST PUB UNTYP. CODE A28 IALLOT REL CONST PUB UNTYP. CODE 116A ICCOMMA REL CONST PUB UNTYP. CODE 1190 ICOMMA REL CONST PUB UNTYP. CODE 1178 ICSTORE REL CONST PUB UNTYP. CODE 360 ICST_INFO REL CONST UNTYP. CODE 374 ICST_OK REL CONST UNTYP. CODE 380 ICST_RAM REL CONST UNTYP. CODE 390 IDP REL CONST PUB UNTYP. CODE A3E IE1 ABS CONST UNTYP. ASEG 0 IE2 ABS CONST UNTYP. ASEG 1 IFF REL CONST PUB UNTYP. CODE 17B2 IFG1 ABS CONST UNTYP. ASEG 2 IFG2 ABS CONST UNTYP. ASEG 3 IHERE REL CONST PUB UNTYP. CODE 1158 II REL CONST PUB UNTYP. CODE 656 IMMEDIATE REL CONST PUB UNTYP. CODE 172A IMMEDQ REL CONST PUB UNTYP. CODE 12C0 INFOB REL CONST PUB UNTYP. CODE B3A INFOC REL CONST PUB UNTYP. CODE B48 INFOD REL CONST PUB UNTYP. CODE B56 INTER1 REL CONST UNTYP. CODE 148C INTER2 REL CONST UNTYP. CODE 14B8 INTER3 REL CONST UNTYP. CODE 14BA INTER4 REL CONST UNTYP. CODE 14BE INTER5 REL CONST UNTYP. CODE 14CA INTER6 REL CONST UNTYP. CODE 14DE INTER8 REL CONST UNTYP. CODE 14DE INTER9 REL CONST UNTYP. CODE 14E2 INTERPRET REL CONST PUB UNTYP. CODE 1480 INVERT REL CONST PUB UNTYP. CODE 47E ISQUOTE REL CONST PUB UNTYP. CODE F2E ISTORE REL CONST PUB UNTYP. CODE 2D0 IST_INFO REL CONST UNTYP. CODE 2E8 IST_OK REL CONST UNTYP. CODE 2F4 IST_RAM REL CONST UNTYP. CODE 304 IST_X REL CONST UNTYP. CODE 316 IST_X2 REL CONST UNTYP. CODE 352 ITHERE REL CONST PUB UNTYP. CODE 1DFA ITOD REL CONST PUB UNTYP. CODE 774 - 4e-config - Page 162 IWORD REL CONST PUB UNTYP. CODE F9E IWORD1 REL CONST UNTYP. CODE FA2 IWORDC REL CONST PUB UNTYP. CODE FB0 JJ REL CONST PUB UNTYP. CODE 66C KEY REL CONST PUB UNTYP. CODE 836 KEYLOOPx REL CONST UNTYP. CODE 81A KEYQ REL CONST PUB UNTYP. CODE 85A L$002 REL CONST UNTYP. CODE 6A6 L$01 REL CONST UNTYP. CODE 6AE L0 REL CONST PUB UNTYP. CODE AAA LATEST REL CONST PUB UNTYP. CODE A1E LDUMP1 REL CONST UNTYP. CODE 1AA2 LDUMP2 REL CONST UNTYP. CODE 1ABC LDUMP3 REL CONST UNTYP. CODE 1ADA LEAV REL CONST PUB UNTYP. CODE 18E2 LEFTBRACKET REL CONST PUB UNTYP. CODE 16CC LESS REL CONST PUB UNTYP. CODE 56C LESSNUM REL CONST PUB UNTYP. CODE 1018 LFROM REL CONST PUB UNTYP. CODE 1868 LITER1 REL CONST UNTYP. CODE 137C LITERAL REL CONST PUB UNTYP. CODE 136A LOO REL CONST PUB UNTYP. CODE 18BA LOOP1 REL CONST UNTYP. CODE 18A2 LOOP2 REL CONST UNTYP. CODE 18B0 LP REL CONST PUB UNTYP. CODE A32 LSHIFT REL CONST PUB UNTYP. CODE 4EA LSH_1 REL CONST UNTYP. CODE 4F4 LSH_X REL CONST UNTYP. CODE 4FA LSTACK ABS CONST EXT [003] UNTYP. __EXTERNS Solved Extern MACU REL CONST UNTYP. CODE 6A2 MARKER REL CONST PUB UNTYP. CODE 19A4 MAX REL CONST PUB UNTYP. CODE CD4 MAX1 REL CONST UNTYP. CODE CE0 MEM REL CONST PUB UNTYP. CODE 1D88 MEMBOT REL CONST PUB UNTYP. CODE 1D6E MEMTOP REL CONST PUB UNTYP. CODE 1D7C MIN REL CONST PUB UNTYP. CODE CEC MIN1 REL CONST UNTYP. CODE CF8 MINUS REL CONST PUB UNTYP. CODE 43A MODD REL CONST PUB UNTYP. CODE CA0 MOVE REL CONST PUB UNTYP. CODE 191A MOVE1 REL CONST UNTYP. CODE 1936 MOVE2 REL CONST UNTYP. CODE 193A MPLUS REL CONST PUB UNTYP. CODE 424 MPYU REL CONST UNTYP. CODE 69E MS REL CONST PUB UNTYP. CODE 1FB2 MSTAR REL CONST PUB UNTYP. CODE BEC NEGATE REL CONST PUB UNTYP. CODE 490 NEQUAL REL CONST PUB UNTYP. CODE 7F0 NEWEST REL CONST PUB UNTYP. CODE A4C NEWLINE REL CONST PUB UNTYP. CODE A94 NFATOCFA REL CONST PUB UNTYP. CODE 12A6 NFATOLFA REL CONST PUB UNTYP. CODE 1290 NINIT REL CONST PUB UNTYP. CODE B20 NIP REL CONST PUB UNTYP. CODE 170 NODUP REL CONST UNTYP. CODE 10A NOOP REL CONST PUB UNTYP. CODE 1974 NOTEQUAL REL CONST PUB UNTYP. CODE 55E NUM REL CONST PUB UNTYP. CODE 104C NUMGREATER REL CONST PUB UNTYP. CODE 1078 NUMS REL CONST PUB UNTYP. CODE 1062 NUMS1 REL CONST UNTYP. CODE 1064 ONEMINUS REL CONST PUB UNTYP. CODE 4AE ONEMS REL CONST PUB UNTYP. CODE 1F90 ONEPLUS REL CONST PUB UNTYP. CODE 4A0 ORR REL CONST PUB UNTYP. CODE 45C OVER REL CONST PUB UNTYP. CODE 13C P1 REL CONST PUB UNTYP. CODE 1FC6 P1DIR ABS CONST UNTYP. ASEG 22 P1IE ABS CONST UNTYP. ASEG 25 P1IES ABS CONST UNTYP. ASEG 24 P1IFG ABS CONST UNTYP. ASEG 23 P1IN ABS CONST UNTYP. ASEG 20 P1OUT ABS CONST UNTYP. ASEG 21 P1REN ABS CONST UNTYP. ASEG 27 P1SEL ABS CONST UNTYP. ASEG 26 P1SEL2 ABS CONST UNTYP. ASEG 41 P2 REL CONST PUB UNTYP. CODE 1FD0 - 4e-config - Page 163 P2DIR ABS CONST UNTYP. ASEG 2A P2IE ABS CONST UNTYP. ASEG 2D P2IES ABS CONST UNTYP. ASEG 2C P2IFG ABS CONST UNTYP. ASEG 2B P2IN ABS CONST UNTYP. ASEG 28 P2OUT ABS CONST UNTYP. ASEG 29 P2REN ABS CONST UNTYP. ASEG 2F P2SEL ABS CONST UNTYP. ASEG 2E P2SEL2 ABS CONST UNTYP. ASEG 42 P3 REL CONST PUB UNTYP. CODE 1FDA P3DIR ABS CONST UNTYP. ASEG 1A P3IN ABS CONST UNTYP. ASEG 18 P3OUT ABS CONST UNTYP. ASEG 19 P3REN ABS CONST UNTYP. ASEG 10 P3SEL ABS CONST UNTYP. ASEG 1B P3SEL2 ABS CONST UNTYP. ASEG 43 PAD REL CONST PUB UNTYP. CODE AA0 PADAREA ABS CONST EXT [002] UNTYP. __EXTERNS Solved Extern PAGEE REL CONST PUB UNTYP. CODE 1C66 PAREN REL CONST PUB UNTYP. CODE 1610 PARENUDOTR REL CONST PUB UNTYP. CODE 1A32 PARENWIPE REL CONST PUB UNTYP. CODE 1F6E PARSE REL CONST PUB UNTYP. CODE 122E PARSE1 REL CONST UNTYP. CODE 124A PLUS REL CONST PUB UNTYP. CODE 404 PLUSLOOP REL CONST PUB UNTYP. CODE 18CE PLUSSTORE REL CONST PUB UNTYP. CODE 412 PN REL CONST PUB UNTYP. CODE 1C1C POST1 REL CONST UNTYP. CODE 17A8 POST2 REL CONST UNTYP. CODE 17AA POSTPONE REL CONST PUB UNTYP. CODE 177E PROFUSE REL CONST UNTYP. CODE 0 PROFUSEADR REL CONST PUB UNTYP. CODE 1F32 PROMPT REL CONST PUB UNTYP. CODE 1520 PROMPT1 REL CONST UNTYP. CODE 1552 PSTACK ABS CONST EXT [004] UNTYP. __EXTERNS Solved Extern PUSHTOS REL CONST UNTYP. CODE F2 QABO1 REL CONST UNTYP. CODE 15AA QABORT REL CONST PUB UNTYP. CODE 159E QDNEGATE REL CONST PUB UNTYP. CODE BCA QDUP REL CONST PUB UNTYP. CODE 104 QNEG1 REL CONST UNTYP. CODE B8E QNEGATE REL CONST PUB UNTYP. CODE B84 QNUM1 REL CONST UNTYP. CODE 1460 QNUM2 REL CONST UNTYP. CODE 146C QNUM3 REL CONST UNTYP. CODE 1470 QNUMBER REL CONST PUB UNTYP. CODE 143C QQ REL CONST PUB UNTYP. CODE 1DD8 QSIGN REL CONST PUB UNTYP. CODE 13C4 QSIGN1 REL CONST UNTYP. CODE 13EE QSTACK REL CONST PUB UNTYP. CODE 11AA QTIB REL CONST PUB UNTYP. CODE E3E QTIB1 REL CONST UNTYP. CODE E50 QUIT REL CONST PUB UNTYP. CODE 155C QUIT1 REL CONST UNTYP. CODE 156E QUITIP REL CONST PUB UNTYP. CODE 155E RAMDICT ABS CONST EXT [007] UNTYP. __EXTERNS Solved Extern RECURSE REL CONST PUB UNTYP. CODE 16BA REPEAT REL CONST PUB UNTYP. CODE 1844 RESETADR REL CONST PUB UNTYP. CODE 1D60 REVEAL REL CONST PUB UNTYP. CODE 1710 RFETCH REL CONST PUB UNTYP. CODE 1A2 RFROM REL CONST PUB UNTYP. CODE 18E RIGHTBRACKET REL CONST PUB UNTYP. CODE 16DC RLAA REL CONST PUB UNTYP. CODE 5AE ROMDICT ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern ROT REL CONST PUB UNTYP. CODE 154 RPFETCH REL CONST PUB UNTYP. CODE 1E0 RPSTORE REL CONST PUB UNTYP. CODE 1F6 RSHIFT REL CONST PUB UNTYP. CODE 50A RSH_1 REL CONST UNTYP. CODE 514 RSH_X REL CONST UNTYP. CODE 51C RSTACK ABS CONST EXT [005] UNTYP. __EXTERNS Solved Extern RZERO REL CONST PUB UNTYP. CODE AB4 S0 REL CONST PUB UNTYP. CODE ABE S2 REL CONST PUB UNTYP. CODE 2002 SAVE REL CONST PUB UNTYP. CODE 1E48 SCAN REL CONST PUB UNTYP. CODE 7A4 - 4e-config - Page 164 SCAN_1 REL CONST UNTYP. CODE 7AE SCAN_X REL CONST UNTYP. CODE 7B8 SEMICOLON REL CONST PUB UNTYP. CODE 1752 SEMIPN REL CONST PUB UNTYP. CODE 1C30 SEQUAL REL CONST PUB UNTYP. CODE 7C8 SEQU_1 REL CONST UNTYP. CODE 7D2 SEQU_X REL CONST UNTYP. CODE 7E6 SIGN REL CONST PUB UNTYP. CODE 1090 SIGN1 REL CONST UNTYP. CODE 109E SKIP REL CONST PUB UNTYP. CODE 77E SKIP_1 REL CONST UNTYP. CODE 788 SKIP_X REL CONST UNTYP. CODE 792 SLASH REL CONST PUB UNTYP. CODE C90 SLASHMOD REL CONST PUB UNTYP. CODE C7E SLASHSTRING REL CONST PUB UNTYP. CODE 11D8 SMISMATCH REL CONST UNTYP. CODE 7E0 SMSLASHREM REL CONST PUB UNTYP. CODE C0E SOURCE REL CONST PUB UNTYP. CODE 11C4 SPACE REL CONST PUB UNTYP. CODE DBE SPACES REL CONST PUB UNTYP. CODE DD0 SPCS1 REL CONST UNTYP. CODE DD2 SPCS2 REL CONST UNTYP. CODE DE0 SPFETCH REL CONST PUB UNTYP. CODE 1B8 SPSTORE REL CONST PUB UNTYP. CODE 1CE SQEST REL CONST PUB UNTYP. CODE 2010 SQUOTE REL CONST PUB UNTYP. CODE F56 SSMOD REL CONST PUB UNTYP. CODE CB2 STAR REL CONST PUB UNTYP. CODE C6E STARSLASH REL CONST PUB UNTYP. CODE CC4 STATE REL CONST PUB UNTYP. CODE 9F6 STOD REL CONST PUB UNTYP. CODE B70 STORCOLON REL CONST PUB UNTYP. CODE 95A STORE REL CONST PUB UNTYP. CODE 224 STORECF REL CONST PUB UNTYP. CODE 90C STOREDEST REL CONST PUB UNTYP. CODE 9AC SWAP REL CONST PUB UNTYP. CODE 126 SWAPBYTES REL CONST PUB UNTYP. CODE 4BC TA0CCR0 ABS CONST UNTYP. ASEG 172 TA0CCR1 ABS CONST UNTYP. ASEG 174 TA0CCR2 ABS CONST UNTYP. ASEG 176 TA0CCTL0 ABS CONST UNTYP. ASEG 162 TA0CCTL1 ABS CONST UNTYP. ASEG 164 TA0CCTL2 ABS CONST UNTYP. ASEG 166 TA0CTL ABS CONST UNTYP. ASEG 160 TA0IV ABS CONST UNTYP. ASEG 12E TA0R ABS CONST UNTYP. ASEG 170 TA1CCR0 ABS CONST UNTYP. ASEG 192 TA1CCR1 ABS CONST UNTYP. ASEG 194 TA1CCR2 ABS CONST UNTYP. ASEG 196 TA1CCTL0 ABS CONST UNTYP. ASEG 182 TA1CCTL1 ABS CONST UNTYP. ASEG 184 TA1CCTL2 ABS CONST UNTYP. ASEG 186 TA1CTL ABS CONST UNTYP. ASEG 180 TA1IV ABS CONST UNTYP. ASEG 11E TA1R ABS CONST UNTYP. ASEG 190 TABLE REL CONST PUB UNTYP. CODE 1CB2 THEN REL CONST PUB UNTYP. CODE 17C8 TIB REL CONST PUB UNTYP. CODE ACA TIBAREA ABS CONST EXT [006] UNTYP. __EXTERNS Solved Extern TIBSIZE REL CONST PUB UNTYP. CODE ADA TIB_SIZE ABS CONST EXT [008] UNTYP. __EXTERNS Solved Extern TICK REL CONST PUB UNTYP. CODE 15CA TICKSOURCE REL CONST PUB UNTYP. CODE A10 TOBODY REL CONST PUB UNTYP. CODE 8F2 TOCOUNTED REL CONST PUB UNTYP. CODE 11F4 TODIGIT REL CONST PUB UNTYP. CODE 102C TOIN REL CONST PUB UNTYP. CODE 9DC TOL REL CONST PUB UNTYP. CODE 1852 TONUM1 REL CONST UNTYP. CODE 13FE TONUM2 REL CONST UNTYP. CODE 1414 TONUM3 REL CONST UNTYP. CODE 142E TONUMBER REL CONST PUB UNTYP. CODE 13FC TOPSEG REL CONST PUB UNTYP. CODE 1DC0 TOR REL CONST PUB UNTYP. CODE 17E TOSFALSE REL CONST UNTYP. CODE 552 TOSTRUE REL CONST UNTYP. CODE 574 TRUE REL CONST PUB UNTYP. CODE 1C96 TUCK REL CONST PUB UNTYP. CODE 208 - 4e-config - Page 165 TWOCONSTANT REL CONST PUB UNTYP. CODE 1B98 TWODROP REL CONST PUB UNTYP. CODE D2E TWODUP REL CONST PUB UNTYP. CODE D3E TWOFETCH REL CONST PUB UNTYP. CODE D02 TWOOVER REL CONST PUB UNTYP. CODE D66 TWOSLASH REL CONST PUB UNTYP. CODE 4D8 TWOSTAR REL CONST PUB UNTYP. CODE 4CA TWOSTORE REL CONST PUB UNTYP. CODE D16 TWOSWAP REL CONST PUB UNTYP. CODE D50 TYP REL CONST PUB UNTYP. CODE EBE TYP3 REL CONST UNTYP. CODE ECE TYP4 REL CONST UNTYP. CODE EDC TYP5 REL CONST UNTYP. CODE EDE U0 REL CONST PUB UNTYP. CODE 9D0 UAREA ABS CONST EXT [001] UNTYP. __EXTERNS Solved Extern UAREA_SIZE ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern UCA0ABCTL ABS CONST UNTYP. ASEG 5D UCA0BR0 ABS CONST UNTYP. ASEG 62 UCA0BR1 ABS CONST UNTYP. ASEG 63 UCA0CTL0 ABS CONST UNTYP. ASEG 60 UCA0CTL1 ABS CONST UNTYP. ASEG 61 UCA0IRRCTL ABS CONST UNTYP. ASEG 5F UCA0IRTCTL ABS CONST UNTYP. ASEG 5E UCA0MCTL ABS CONST UNTYP. ASEG 64 UCA0RXBUF ABS CONST UNTYP. ASEG 66 UCA0STAT ABS CONST UNTYP. ASEG 65 UCA0TXBUF ABS CONST UNTYP. ASEG 67 UCB0BR0 ABS CONST UNTYP. ASEG 6A UCB0BR1 ABS CONST UNTYP. ASEG 6B UCB0CTL0 ABS CONST UNTYP. ASEG 68 UCB0CTL1 ABS CONST UNTYP. ASEG 69 UCB0I2CIE ABS CONST UNTYP. ASEG 6C UCB0I2COA ABS CONST UNTYP. ASEG 118 UCB0I2CSA ABS CONST UNTYP. ASEG 11A UCB0RXBUF ABS CONST UNTYP. ASEG 6E UCB0STAT ABS CONST UNTYP. ASEG 6D UCB0TXBUF ABS CONST UNTYP. ASEG 6F UDOT REL CONST PUB UNTYP. CODE 10A6 UDOTR REL CONST PUB UNTYP. CODE 1A52 UDSLASHMOD REL CONST PUB UNTYP. CODE FC4 UDSTAR REL CONST PUB UNTYP. CODE FE2 UGREATER REL CONST PUB UNTYP. CODE 59E UINIT REL CONST PUB UNTYP. CODE AF2 ULESS REL CONST PUB UNTYP. CODE 58E UMAX REL CONST PUB UNTYP. CODE E04 UMAX1 REL CONST UNTYP. CODE E10 UMIN REL CONST PUB UNTYP. CODE DEC UMIN1 REL CONST UNTYP. CODE DF8 UMSLASHMOD REL CONST PUB UNTYP. CODE 6CA UMSTAR REL CONST PUB UNTYP. CODE 69A UNLOOP REL CONST PUB UNTYP. CODE 688 UNTIL REL CONST PUB UNTYP. CODE 1806 UNUSED REL CONST PUB UNTYP. CODE 1D9C UP ABS CONST EXT [000] UNTYP. __EXTERNS Solved Extern UPC REL CONST PUB UNTYP. CODE 1316 UPC1 REL CONST UNTYP. CODE 1330 USER REL CONST PUB UNTYP. CODE B8 USEREMIT REL CONST PUB UNTYP. CODE A84 USERKEY REL CONST PUB UNTYP. CODE A74 VALIDQ REL CONST PUB UNTYP. CODE 1E32 VARAREA ABS CONST EXT [009] UNTYP. __EXTERNS Solved Extern VARBOT REL CONST PUB UNTYP. CODE 1DB2 VARIABLE REL CONST PUB UNTYP. CODE 7A VAR_SIZE ABS CONST EXT [010] UNTYP. __EXTERNS Solved Extern VECBOT REL CONST PUB UNTYP. CODE 1DCE VECSTORE REL CONST PUB UNTYP. CODE 324 WARM REL CONST PUB UNTYP. CODE 1EC0 WDS1 REL CONST UNTYP. CODE 1A00 WDS2 REL CONST UNTYP. CODE 1A14 WDS3 REL CONST UNTYP. CODE 1A2E WDTCTL ABS CONST UNTYP. ASEG 120 WHILE REL CONST PUB UNTYP. CODE 1832 WIPE REL CONST PUB UNTYP. CODE 1F56 WITHIN REL CONST PUB UNTYP. CODE 1902 WORDD REL CONST PUB UNTYP. CODE 125C WORDS REL CONST PUB UNTYP. CODE 19FA XDOES REL CONST PUB UNTYP. CODE 1686 XISQUOTE REL CONST PUB UNTYP. CODE EEA - 4e-config - Page 166 XORR REL CONST PUB UNTYP. CODE 46C XSQUOTE REL CONST PUB UNTYP. CODE F02 ZERO REL CONST PUB UNTYP. CODE 872 ZEROEQUAL REL CONST PUB UNTYP. CODE 528 ZEROLESS REL CONST PUB UNTYP. CODE 538 ZEROS REL CONST PUB UNTYP. CODE 1A78 ZEROS1 REL CONST UNTYP. CODE 1A7A ZEROS2 REL CONST UNTYP. CODE 1A8C ZEROUDOTR REL CONST PUB UNTYP. CODE 1A64 __MSP430G2203__ ABS CONST UNTYP. ASEG Not solved abort1 REL CONST UNTYP. CODE 158E boot1 REL CONST UNTYP. CODE 1EB6 bran REL CONST PUB UNTYP. CODE 5CA cclr REL CONST PUB UNTYP. CODE 1D10 ccrc1 REL CONST UNTYP. CODE 1B50 ccrc2 REL CONST UNTYP. CODE 1B58 cget REL CONST PUB UNTYP. CODE 1D40 cget1 REL CONST UNTYP. CODE 1D4C cget2 REL CONST UNTYP. CODE 1D4E cor ABS CONST EXT [011] UNTYP. __EXTERNS Solved Extern crcval ABS CONST EXT [019] UNTYP. __EXTERNS Solved Extern cset REL CONST PUB UNTYP. CODE 1CE4 ctoggle REL CONST PUB UNTYP. CODE 1D2A doboot0 REL CONST UNTYP. CODE 1DE5 doboot1 REL CONST UNTYP. CODE 1DEC dobran REL CONST UNTYP. CODE 5CC docreate REL CONST PUB UNTYP. CODE 98 dodoes REL CONST PUB UNTYP. CODE D4 donext REL CONST UNTYP. CODE 82A donoop REL CONST UNTYP. CODE 82A dotcold0 REL CONST UNTYP. CODE 1ED3 dotcold1 REL CONST UNTYP. CODE 1ED8 green REL CONST PUB UNTYP. CODE 1FF6 ih1 REL CONST UNTYP. CODE 1DFE infoB ABS CONST EXT [012] UNTYP. __EXTERNS Solved Extern infoC ABS CONST EXT [014] UNTYP. __EXTERNS Solved Extern infoD ABS CONST EXT [015] UNTYP. __EXTERNS Solved Extern intseg ABS CONST EXT [017] UNTYP. __EXTERNS Solved Extern intvecs ABS CONST EXT [018] UNTYP. __EXTERNS Solved Extern invalid REL CONST UNTYP. CODE 1E98 lastword REL CONST PUB UNTYP. CODE 200B link REL VAR UNTYP. CODE 200B lit REL CONST PUB UNTYP. CODE 48 ms1 REL CONST UNTYP. CODE 1FB8 nullirq ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern onems1 REL CONST UNTYP. CODE 1F9A onems2 REL CONST UNTYP. CODE 1FA2 pcrc1 REL CONST UNTYP. CODE 1B78 pcrc2 REL CONST UNTYP. CODE 1B86 pcrc3 REL CONST UNTYP. CODE 1B88 qbran REL CONST PUB UNTYP. CODE 5DE red REL CONST PUB UNTYP. CODE 1FE6 reset1 REL CONST UNTYP. CODE 1EA6 resetvec ABS CONST EXT [016] UNTYP. __EXTERNS Solved Extern stamp REL CONST UNTYP. CODE 16 stamp0 REL CONST UNTYP. CODE 17 stampend REL CONST UNTYP. CODE 2D uareasize ABS CONST UNTYP. CODE 22 uinitend REL CONST UNTYP. CODE B16 uinitstart REL CONST UNTYP. CODE AF4 valid REL CONST UNTYP. CODE 1E96 ver0 REL CONST UNTYP. CODE 3 verend REL CONST UNTYP. CODE 16 version REL CONST UNTYP. CODE 2 warm0 REL CONST UNTYP. CODE 1EC5 warm1 REL CONST UNTYP. CODE 1ECA wclr REL CONST PUB UNTYP. CODE 1CFA wipe1 REL CONST UNTYP. CODE 1F62 wipmsg0 REL CONST UNTYP. CODE 1F7D wipmsg1 REL CONST UNTYP. CODE 1F84 wset REL CONST PUB UNTYP. CODE 1CCE xdo REL CONST PUB UNTYP. CODE 5F4 xloop REL CONST PUB UNTYP. CODE 61A xplusloop REL CONST PUB UNTYP. CODE 63A ############################## # CRC:C5B4 # # Errors: 0 # # Warnings: 0 # # Bytes: 8218 # ##############################