CREATE DOES>
CREATE
The word CREATE
can be used alone:
CREATE DATAS ( --- addr) 25 c, 32 c, 44 c, 17 c,
The word after CREATE
is created in the dictionary, here DATAS
. The execution
of the word thus created deposits on the data stack the memory address of the parameter zone. In this example,
we have compiled 4 8-bit values. To recover them, it will be necessary to increment the address stacked with the value
shifting the data to be recovered. In the example of DATAS
, to get the value 44, we write:
DATAS 2 + C@ \ empile 44
Specific Flash Forth
With FlashForth, write explicitly to EEPROM when
we usecreate
:
: defPIN: ( PORTx mask --- <word> | <word> --- mask port) create , , \ compile PORT and min mask does> dup @ \ push pin mask swap 2+ @ \ push PORT ; \ définition LED.xx flash PORTB $80 defPIN: LED.red PORTB $40 defPIN: LED.yellow PORTB $20 defPIN: LED.green ram
We execute the word flash
before using the word defPIN:
DOES>
The word CREATE
can be used in a new word creation word...
Associated with DOES>
, we can define words that say how a word is created
then executed.
Example, on ARDUINO board, a "pin" is defined by the address of the port to which it is attached and
the position of the bit in this register. We can thus define a word defPin
as follows:
\ PORTB 37 constant PORTB \ Port B Data Register 36 constant DDRB \ Port B Data Direction Register 35 constant PINB \ Port B Input Pins : defPin: ( PORTx mask --- <word> | <word> --- mask port) create c, c, \ compile PORT et masque du pin à définir does> dup c@ \ empile masque du pin swap 1+ c@ \ empile PORT du pin ; eeprom \ specific FLASH FORTH PORTB %00000001 defPin: pin19 PORTB %00000010 defPin: pin20 PORTB %00000100 defPin: pin21 PORTB %00001000 defPin: pin22 PORTB %00010000 defPin: pin23 PORTB %00100000 defPin: pin24 PORTB %01000000 defPin: pin25 PORTB %10000000 defPin: pin26
Avec le mot defPin
on a créé les huits mots pin19
à
pin26
. Chacun de ces mots va ensuite empiler l'adresse du registre
PORTB du port B et le masque binaire qui détermine la position du pin dans ce registre.