Arrays¶
This page is a exploration of creating and fetching data from arrays using different data types. Hopefully it clearly shows the methods and results.
Arrays in Forth are just indexes to a named base memory location in the Flash memory space. Arrays can only be created in Flash meaning the data must be initialized.
See also
BUFFERS are used for UNINITIALISED data (Ram).
Data Types¶
Name |
Bits |
Description |
|---|---|---|
Word |
32 |
Native Mecrisp-Stellaris data length |
Cell |
32 |
Same as Word above |
Half Word |
16 |
Half length |
Character |
8 |
One Byte |
Bit |
1 |
Smallest |
Note
In Forth $ = 0x or hexadecimal
Emulate c,¶
Many MCU’s don’t have a native “c,”. Emulate it as below.
\ Emulate c, which is not available in hardware on some chips.
0 variable c,collection
: c, ( c -- )
c,collection @ ?dup if $FF and swap 8 lshift or h,
0 c,collection !
else $100 or c,collection !
then ;
: calign ( -- )
c,collection @ if 0 c, then ;
Create Array of Characters¶
Four 8 bit or “character” items, $3f, $06, $5b and $66
create array $3f c, $06 c, $5b c, $66 c,
Fetch the array data using different data types¶
Fetch Cells¶
32 bits
: =cells 4 * array + dup hex. @ hex. ;
Fetch Half Words¶
2 bytes or 16 bits
: =halfwords 2 * array + dup hex. h@ hex. ;
Fetch Characters¶
one byte or 8 bits
: =characters array + dup hex. c@ hex. ;
Fetch using different data types¶
Note the address fetch increments.
Cells¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=cells |
200003A4 |
665B063F |
All the 8 bit data is packed into a CELL, very efficient. |
1 |
=cells |
200003A8 |
2000038C |
reading data in memory, not associated with the array |
2 |
=cells |
200003AC |
3D060000 |
reading data in memory, not associated with the array |
3 |
=cells |
200003B0 |
6C6C6563 |
reading data in memory, not associated with the array |
Halfwords¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=halfwords |
200003A4 |
0000063F |
|
1 |
=halfwords |
200003A6 |
0000665B |
|
2 |
=halfwords |
200003A8 |
0000038C |
reading data in memory, not associated with the array |
3 |
=halfwords |
200003AA |
00002000 |
reading data in memory, not associated with the array |
Characters¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=characters |
200003A4 |
0000003F |
|
1 |
=characters |
200003A5 |
00000006 |
|
2 |
=characters |
200003A6 |
0000005B |
|
3 |
=characters |
200003A7 |
00000066 |
Create Array of Halfwords¶
create array $3f4f h, $0607 h, $5b55 h, $6666 h,
Fetch the array data using different data types¶
Fetch Cells¶
32 bits
: =cells 4 * array + dup hex. @ hex. ;
Fetch Half Words¶
2 bytes or 16 bits
: =halfwords 2 * array + dup hex. h@ hex. ;
Fetch Characters¶
one byte or 8 bits
: =characters array + dup hex. c@ hex. ;
Fetch using different data types¶
Note the address fetch increments.
Cells¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=cells |
200003A4 |
06073F4F |
|
1 |
=cells |
200003A8 |
66665B55 |
|
2 |
=cells |
200003AC |
2000038C |
|
3 |
=cells |
200003B0 |
3D060000 |
Halfwords¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=halfwords |
200003A4 |
00003F4F |
|
1 |
=halfwords |
200003A6 |
00000607 |
|
2 |
=halfwords |
200003A8 |
00005B55 |
|
3 |
=halfwords |
200003AA |
00006666 |
Characters¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=characters |
200003A4 |
0000004F |
|
1 |
=characters |
200003A5 |
0000003F |
|
2 |
=characters |
200003A6 |
00000007 |
|
3 |
=characters |
200003A7 |
00000006 |
Create Array of Cells¶
create array $3f4f1234 , $06075678 , $5b558765 , $66664321 ,
Fetch the array data using different data types¶
Fetch Cells¶
32 bits
: =cells 4 * array + dup hex. @ hex. ;
Fetch Half Words¶
2 bytes or 16 bits
: =halfwords 2 * array + dup hex. h@ hex. ;
Fetch Characters¶
one byte or 8 bits
: =characters array + dup hex. c@ hex. ;
Fetch using different data types¶
Note the address fetch increments.
Cells¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=cells |
200003A4 |
3F4F1234 |
|
1 |
=cells |
200003A8 |
06075678 |
|
2 |
=cells |
200003AC |
5B558765 |
|
3 |
=cells |
200003B0 |
66664321 |
Halfwords¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=halfwords |
200003A4 |
00001234 |
|
1 |
=halfwords |
200003A6 |
00003F4F |
|
2 |
=halfwords |
200003A8 |
00005678 |
|
3 |
=halfwords |
200003AA |
00000607 |
Characters¶
Parameter |
Word |
Address |
Data |
Comments |
|---|---|---|---|---|
0 |
=characters |
200003A4 |
00000034 |
|
1 |
=characters |
200003A5 |
00000012 |
|
2 |
=characters |
200003A6 |
0000004F |
|
3 |
=characters |
200003A7 |
0000003F |