home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l4p070 < prev    next >
Text File  |  1990-07-15  |  5KB  |  109 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 4 Part 070  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.                  ┌──────────────────────────┐
  6.                  │  Useful Memory Operators │
  7.                  └──────────────────────────┘
  8.  
  9. We continue with the introduction of some new memory operators that can
  10. be useful with variables.
  11.  
  12. Useful Memory Operators
  13. Note:  cell = 2 bytes = 16 bits = 1 word
  14.  
  15.   +!     ( n adr -- )  Add n to the value found at address adr
  16.   ON     ( adr -- )    Set cell at adr to true or -1.
  17.   OFF    ( adr -- )    Set cell at addr to false or 0.
  18.  
  19. Examples:
  20. VARIABLE RAIN   RAIN ? <enter> 0  ok
  21. 5 RAIN +!  RAIN ? <enter> 5  ok
  22. 5 RAIN +!  RAIN ? <enter> 10  ok
  23. : DRIP 1 RAIN +! ; <enter> ok       \ Compare this to the previous DRIP
  24. DRIP RAIN ? <enter> 11  ok
  25. DRIP RAIN ? <enter> 12  ok
  26. RAIN OFF  RAIN ? <enter> 0  ok
  27. RAIN ON   RAIN ? <enter> -1  ok
  28. RAIN @ U. <enter> 65535  ok
  29. RAIN OFF  RAIN ? <enter> 0  ok
  30. DRIP DRIP DRIP RAIN ? <enter> 3  ok
  31.  
  32. ╓──────────────╖
  33. ║ Problem 4.10 ║
  34. ╙──────────────╜
  35. Here are high level Forth definitions of ON and OFF:
  36.  
  37. : ON  ( adr -- )  2 255 FILL ; \ Set cell at adr to value true or -1.
  38. : OFF ( adr -- )  2 ERASE    ; \ Set cell at adr to value false or 0.
  39.  
  40. a) Write high level Forth definitions of ON and OFF without using FILL
  41. and ERASE.
  42. b) Write high level Forth definitions for  +! and  ?  .
  43. c) Rewrite your words WARMER and COOLER of problem 4.3 usin +!
  44.  
  45. ╔════════════════════════════════════════════════════════════════╗
  46. ║*  next up is   CREATE   the most important Forth word so far  *║
  47. ╚════════════════════════════════════════════════════════════════╝
  48.  
  49. CREATE <name> ( -- )    Creates a dictionary entry named <name>
  50.                         When executed, <name> leaves the address
  51.  <name>       ( -- adr) of the first memory cell which follows
  52.                         the word name.  No memory is allocated.
  53.  
  54. Here are some friends of CREATE .  CREATE wouldn't be of much use
  55. if he didn't have friends.
  56.  
  57. ALLOT         ( n  -- )  Allocate n bytes of memory in the
  58.                          dictionary.
  59.   ,           ( n   -- ) Allocate 16 bits ( 2 bytes ) of memory
  60.                          initializing it to the value n.
  61.  C,           ( n   -- ) Allocate 8 bits ( 1 byte ) of memory
  62.                          initializing it to low 8 bits of n.
  63.  
  64. And now some examples are in order.  Make sure that you duplicate
  65. these on your own machine and make up variations of them to test
  66. you understanding.
  67.  
  68. HEX  <enter> ok           \ HEX mode
  69. HERE . <enter> 7038 ok    \ Your here values may be different but
  70.                           \ the changes/increments will be the same.
  71. CREATE DATA  <enter> ok   \ Create dictionary header in header segment.
  72. HERE . <enter> 703B ok    \ Three bytes of machine code generated.
  73. 10 ALLOT  <enter> ok      \ Allot 10 bytes of storage in the code seg.
  74. HERE . <enter> 704B ok    \ Verify space allotted.
  75. DATA 10 DUMP <enter>      \ Initial values are random
  76. +---------+-------------------------------------------------+
  77. | SEG:OFF |  8  9  A  B  C  D  E  F  0  1  2  3  4  5  6  7 |
  78. +---------+-------------------------------------------------+
  79. |31DE:7038| 05 41 4C 4C 4F 54 20 20 84 41 4E 45 D7 79 17 66 |
  80. +---------+-------------------------------------------------+
  81.  ok
  82. DATA 10 ERASE <enter> ok  \ Initial storage area to zeros.
  83. DATA 10 DUMP <enter>      \ Verify that storage area is zeroed.
  84. +---------+-------------------------------------------------+
  85. | SEG:OFF |  8  9  A  B  C  D  E  F  0  1  2  3  4  5  6  7 |
  86. +---------+-------------------------------------------------+
  87. |31DE:7038| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
  88. +---------+-------------------------------------------------+
  89.  ok
  90. 1234 DATA ! <enter> ok      \ Store 1234 at offset 0.
  91. 5678 DATA 2 + ! <enter> ok  \ Store 5678 at offset 2.
  92. DATA 10 DUMP <enter>        \ Verify numbers were stored
  93. +---------+-------------------------------------------------+
  94. | SEG:OFF |  8  9  A  B  C  D  E  F  0  1  2  3  4  5  6  7 |
  95. +---------+-------------------------------------------------+
  96. |31DE:7038| 34 12 78 56 00 00 00 00 00 00 00 00 00 00 00 00 |
  97. +---------+-------------------------------------------------+
  98. Note 16 bit values are stored in lo-hi or byte reversed order.
  99.  
  100. Why is the word CREATE so important when it seems only to make an
  101. empty entry in the dictionary?  It is because we can use it to
  102. build other words.  The definition of VARIABLE is just:
  103.  
  104. : VARIABLE  CREATE 2 ALLOT ;  \ Try this definition and see if it works
  105.  
  106. ┌────────────────────────────────────┐
  107. │  Please move to Lesson 4 Part 080  │
  108. └────────────────────────────────────┘
  109.