<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.forth-ev.de/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.forth-ev.de/feed.php">
        <title>Forth-eV Wiki - en:pfw</title>
        <description></description>
        <link>https://wiki.forth-ev.de/</link>
        <image rdf:resource="https://wiki.forth-ev.de/lib/exe/fetch.php/wiki:logo.png" />
       <dc:date>2026-05-08T13:43:51+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:2log?rev=1693843788"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:array?rev=1693844564"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_armv8_20assembler?rev=1693843846"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_msp430-assembler?rev=1693888435"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_pio-assembler?rev=1774967656"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_rp2040-assembler?rev=1696259045"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:base-ffbase?rev=1729459875"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:bit-array?rev=1693843891"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:buffer?rev=1693843900"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:clavis?rev=1750600602"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:condicompi?rev=1693843907"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc-for-nrf24l01?rev=1693843917"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc-math?rev=1693843923"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc16?rev=1693843930"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc32c?rev=1693843936"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc32_ieee?rev=1693843943"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc32_ieee_tablebased?rev=1693843949"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc32_koop?rev=1693843956"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:crc_generation?rev=1693843963"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:day-of-the-week?rev=1693843971"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dht22-msp430g2553-noforth?rev=1751018247"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dht22-rp2040-nofortht?rev=1751196306"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dht22?rev=1751018707"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dht22tmpformat?rev=1745753955"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:disassemblers_rp2040-assembler?rev=1696258901"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:disassembler_msp430-disassemblers?rev=1693888435"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dlshift_drshift?rev=1712666496"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:do_plusloop_curiosity?rev=1693844053"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dump-genericforth.f?rev=1693844060"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dump-minimal_forth.fs?rev=1693844067"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:dump?rev=1693888439"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:file_systems?rev=1754569214"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:flyer?rev=1693844090"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c?rev=1766177799"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_device-drivers?rev=1693844105"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf?rev=1694001997"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_mecrisp?rev=1693844118"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth?rev=1694002283"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_advanced_i2c-ee.f?rev=1693844129"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_gd32vf103_bb-i2c.f?rev=1693844135"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_gd32vf103_hw-i2c.f?rev=1693844140"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_i2c-test.f?rev=1693844146"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_simple_i2c-ee.f?rev=1693844153"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_msp430?rev=1694002084"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_noforth?rev=1693844166"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:kangoeroe?rev=1693844197"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:library?rev=1743515769"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:linear-conversion?rev=1739360208"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:map?rev=1718116120"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:marsaglias_xorshift_random_routine_for_gd32vf?rev=1693844203"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:marsaglia_s_xorshift_for_arm?rev=1728421402"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:measuring-distance?rev=1693844215"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:multiline-comments?rev=1740230154"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:multi_tasker?rev=1741955413"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:muti_tasker?rev=1693848622"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:piliplop-noforth?rev=1693998058"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:piliplop?rev=1693844234"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:piliplop_ws2812-piliplop-01.f?rev=1693844239"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:population_20count?rev=1693844246"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:prefixes?rev=1693844257"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:primitive-circular-buffer?rev=1693844264"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:print-hex?rev=1693844271"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:pseudocode?rev=1693844278"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:random_20generator_20completeness_20test?rev=1693844284"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:random_generators_xorshift?rev=1728481670"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:reflection-sensors?rev=1693844296"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:sensors?rev=1693844304"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:sha-256?rev=1729163371"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:simulation-forest_fire?rev=1693844309"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:simulations-cozy?rev=1693844315"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi?rev=1722685664"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf?rev=1693978232"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus?rev=1721638910"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus_bme280?rev=1693844400"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus_sd-card-bitbang_sdcard.fs?rev=1693844406"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth?rev=1694003571"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_bbspi_v100.f?rev=1693844418"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_flash_driver_gd32.f?rev=1693844424"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi-loopback.f?rev=1693844430"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi0_v100.f?rev=1693844436"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi_oled_display_gd32.f?rev=1693844444"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430?rev=1693997495"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_flash_driver_msp430.f?rev=1693844458"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth?rev=1694004547"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-f149_v100.f?rev=1693844470"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-fr_v100.f?rev=1693844476"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-g_v100.f?rev=1693844481"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_eusci-a1_spi_msp_v100.f?rev=1693844487"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_usart1_spi_msp-f149_v100.f?rev=1693844494"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_uscib_spi_msp_v100.f?rev=1693844501"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_spi-loopback_msp430.f?rev=1693844508"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_spi_oled_display.f?rev=1693844515"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_ws2812_simple_fr5949.f?rev=1693844523"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_ws2812_simple_g2553.f?rev=1693844529"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:stackchecking?rev=1693844535"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:string_handling?rev=1766841179"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:struct?rev=1767377947"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:substitution-phrases?rev=1754039854"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:switchledwithbutton?rev=1754300061"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:tasto?rev=1754299705"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:twomoredumps.f?rev=1693844602"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:unit?rev=1764704686"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:usb_cdc_driver_for_rp2040?rev=1768324617"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:welcome?rev=1767375010"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:whatisapioblock?rev=1751017916"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless?rev=1693888435"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_communication_mesh-network?rev=1763388182"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_communication_nrf24l01?rev=1763482575"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_basic_24l01dn_g2553-01a.f?rev=1693844636"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_gd32vf?rev=1693846191"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_gd32vf_noforth?rev=1693844650"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430?rev=1693846191"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430_noforth-fr59xx?rev=1693844663"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430_noforth-g2553_20f149?rev=1693844669"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_rangechecker_g2553_usci.f?rev=1693844675"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_receive_test.f?rev=1693844680"/>
                <rdf:li rdf:resource="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_transmit_test.f?rev=1693844688"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.forth-ev.de/lib/exe/fetch.php/wiki:logo.png">
        <title>Forth-eV Wiki</title>
        <link>https://wiki.forth-ev.de/</link>
        <url>https://wiki.forth-ev.de/lib/exe/fetch.php/wiki:logo.png</url>
    </image>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:2log?rev=1693843788">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:09:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>2LOG, calculate binary logarithm</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:2log?rev=1693843788</link>
        <description>2LOG, calculate binary logarithm

The 2LOG routine was the result of the need for converting a linear input into something with a more logarithmic character. There was no need for high accuracy, but rather a short reliable routine. The routine uses a very simple principle, but the result is surprisingly useable. A prime example where focussing on the essentials results in an excellent solution.&lt;img src=&quot;https://user-images.githubusercontent.com/4964288/167205050-76579ac1-2707-4037-9d6d-2a5452b60…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:array?rev=1693844564">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:22:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Array, one dimensional array data structure</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:array?rev=1693844564</link>
        <description>Array, one dimensional array data structure

uh 2022-01-10

Idea

Like a Buffer an array stores a sequence of entries (aka elements or items).

A buffer is characterized by its buffer-base-address and its size only and you can manage the buffer content as you like. One popular way to manage a buffer is to number the items from 0 to the capacity-1 (where capacity is the number of items that can be stored in the buffer) and use the address calculation&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_armv8_20assembler?rev=1693843846">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:10:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Assembler for ARMv8 Aarch32</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_armv8_20assembler?rev=1693843846</link>
        <description>Assembler for ARMv8 Aarch32

This is a basic ARMv8 Aarch32 assembler. See the PDF document for an overview and examples of it&#039;s use.

Basic assembler for ARM32 from ARMv8

(C) J.J. Hoekstra - 2021

Subset of wabiForth Assembler ARMv8_v21

 File name</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_msp430-assembler?rev=1693888435">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-05T04:33:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Assembler for MSP430</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_msp430-assembler?rev=1693888435</link>
        <description>Assembler for MSP430

The idea:

A compact universal MSP430 assembler

Implementation

The example asumes a 16-bit machine and compile actions. Also a Flash environment is assumed, for RAM only systems ROM! can be replaced by ! and CHERE by HERE. Examples of macros are in the source file. An implementation example for &lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_pio-assembler?rev=1774967656">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-31T14:34:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>PIO (dis)assembler v2 for RP2040</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_pio-assembler?rev=1774967656</link>
        <description>PIO (dis)assembler v2 for RP2040

The idea:

PIO stand for Programmable Input Output. These are programmable state machines
with a small shared program memory. Programs are built with only eight instructions.  The
behavior of those instructions can be modified with registers.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_rp2040-assembler?rev=1696259045">
        <dc:format>text/html</dc:format>
        <dc:date>2023-10-02T15:04:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Assembler for RP2040</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:assemblers_rp2040-assembler?rev=1696259045</link>
        <description>Assembler for RP2040

The idea

A compact Forth-style macro assembler with an efficient literal pool mechanism for the RP2040.

A Forth-style assembler uses all the capabilities of the Forth interpreter and assembles opcodes in between.

An example:&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:base-ffbase?rev=1729459875">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-20T21:31:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>BASE change temporarily -- FFBASE</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:base-ffbase?rev=1729459875</link>
        <description>BASE change temporarily -- FFBASE

The idea

Quite often a programmer needs to switch the numerical base for just a word or a number. In the worst case this involves saving the old BASE, setting BASE to the wanted value and then restoring the old BASE. A lot of code for just one word/definition.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:bit-array?rev=1693843891">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:11:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Bit array data structure</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:bit-array?rev=1693843891</link>
        <description>Bit array data structure

Bit array idea

To store many on/off events or a present/not present note, we could use an array of bit flags to save space.

Implementation

The implementation assumes a byte addressed machine. The number of bits is rounded up to the number of cells needed to store the flags. The cell size in bytes is used and multiplied by 8 to calculate the number of bits in a cell.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:buffer?rev=1693843900">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:11:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Buffer data structure</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:buffer?rev=1693843900</link>
        <description>Buffer data structure

uh 2021-12-11

Idea

For storing data, applications use memory. Applications need to manage that memory:

	* reserve (allocate) it for use,
	* identifying the appropriate parts of data and the locations in memory where to store that parts.&lt;div&gt;&lt;ul&gt;&lt;/div&gt;&lt;div&gt;&lt;li&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/li&gt;&lt;/div&gt;&lt;div&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementati…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:clavis?rev=1750600602">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-22T13:56:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CLAVIS?</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:clavis?rev=1750600602</link>
        <description>CLAVIS?

A key (Italian tasto, Latin clavis) or a button is a control element that is operated by pressing and automatically returns to its original position when released.

Forth has KEY? and KEY to query the computer&#039;s keyboard. I therefore call the query of a different individual key something else. Figure below shows such a key.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:condicompi?rev=1693843907">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:11:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Conditional Compilation</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:condicompi?rev=1693843907</link>
        <description>Conditional Compilation

Conditional compilation lets you selectively process program text depending on certain conditions. We look at different flavours.

The ICE concept

One of Forth strengths is its ICE (interpret, compile, execute) concept: You can&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc-for-nrf24l01?rev=1693843917">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:11:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC generation for the nRF24L01+</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc-for-nrf24l01?rev=1693843917</link>
        <description>CRC generation for the nRF24L01+

Idea

To build a data logger for the nRF24L01+ we need to check the incoming data records manually. This code example runs on noForth R for the RISC-V micro processor. It uses a trick to pick up all network data. It does so by checking only the first three of the five address bytes. When the received records do not overflow the 32 bytes data buffer we can inspect all the received data! Note: The third received byte (Named PCF) contains a field with the received …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc-math?rev=1693843923">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC - The Mathematics of Cyclic Redundance Checks</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc-math?rev=1693843923</link>
        <description>CRC - The Mathematics of Cyclic Redundance Checks

The idea of validating messages using cyclic redundancy checks (CRCs) goes back to an invention of W. Wesley Petersen in 1961.

It is based on cyclic codes which themselves are based on polynomial ring arithmetic. Let&#039;s see what this is all about.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;sup&gt;&lt;/sup&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sub&gt;&lt;/sub&gt;&lt;s…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc16?rev=1693843930">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC generation - 16bit</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc16?rev=1693843930</link>
        <description>CRC generation - 16bit

Here some examples of 16 bit CRC-code generators.

The start-value is important: start with 0xFFFF and you have the CCITT version of CRC-16, start with 0x0000 and you have the CRC-16 as used in the XMODEM data-transfer protocol.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc32c?rev=1693843936">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC-32C</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc32c?rev=1693843936</link>
        <description>CRC-32C

Since the first implementation of a CRC to detect errors it has been discussed which polynomial has the highest chance of detecting multi-bit errors. Every polynomial can detect a 1 bit error. But the ability of detecting errors in more than 1 bit depends strongly on the polynomial. Castagnoli proposed an alternative polynomial ( 0x1EDC6F41 ) which has a better capability than the IEEE polynomial to detect multi-bit errors. The discussion on which polynomial is the best was only answere…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc32_ieee?rev=1693843943">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC, 32bit IEEE CRC</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc32_ieee?rev=1693843943</link>
        <description>CRC, 32bit IEEE CRC

The IEEE 32bit CRC standard was introduced for the ethernet protocol. The essential difference with previous CRC-implementations was that the start-number is 0xFFFFFFFF instead of 0x0. The reason is that a network can easily start with a couple of spurious 0x0&#039;s. A CRC with a 0x0 as start-number cannot detect such a network-specific error. By having 0xFFFFFFFF as start number, the first 4 characters received are effectively inverted. And that enables the detection of spuriou…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc32_ieee_tablebased?rev=1693843949">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC, fast 32bit IEEE CRC generation using a table</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc32_ieee_tablebased?rev=1693843949</link>
        <description>CRC, fast 32bit IEEE CRC generation using a table

Generating a CRC is a pretty slow process. One way of speeding up this process is by using a table. This table contains pre-calculated values of the 8 shifts and XOR steps done for each byte added to a CRC. This saves time, as a major part of the work is be done only once, during initialisation.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc32_koop?rev=1693843956">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC-32 KOOPMAN</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc32_koop?rev=1693843956</link>
        <description>CRC-32 KOOPMAN

Since CRC&#039;s are used to detect errors, developers have been searching for the optimal polynomial. More specifically: which polynomial detects most bit-errors. The discussion on the optimal polynomial was definitely answered by Koopman in 2002. He tested ALL 32-bit polynomials for their bit-error-detecting capabilities for datastrings of 12112 bits (the size of an Ethernet MTU message). The tests where run using optimised software specifically written for the tests, and ran for 3 …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:crc_generation?rev=1693843963">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>CRC generation</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:crc_generation?rev=1693843963</link>
        <description>CRC generation

The idea

CRC-codes are used to check whether a set of data, like a string, is unchanged and intact. It can, for instance, be used to see whether a send message has been received correctly.

An example explains the idea: a set of data is used to generate a number, the CRC-code. On the receiving end the same method is used to also generate a CRC-code on the received data. If the two CRC-codes match, there is a high likelihood that the data was correctly received.&lt;div&gt;
&lt;!-- If you …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:day-of-the-week?rev=1693843971">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:12:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Day of The Week</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:day-of-the-week?rev=1693843971</link>
        <description>Day of The Week

In this programming pearl Albert Nijhof shows how to extract strings form a sequence of strings.

The idea here is to represent the sequence of strings as a single string.


     1  \ Day of the week -- an-10jan2022
     2  \ From number to name, not using the case statement
     3  
     4  \   0   1   2   3   4   5   6
     5  \   sun mon tue wed thu fri sat
     6  
     7  \ ===== For constant string length =====
     8  : .DAY ( n -- )    \ n in [0,6]
     9      7 umin
   …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dht22-msp430g2553-noforth?rev=1751018247">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-27T09:57:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Read DHT22 data using noForth on TI&#039;s Launchpad.  (bit bang)</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dht22-msp430g2553-noforth?rev=1751018247</link>
        <description>Read DHT22 data using noForth on TI&#039;s Launchpad.  (bit bang)

go back

Pseudocode


Function: Pio    ( -- )  \ set port I/O function. SDA --&gt; P1.0 
Function: wakeup ( -- )  \ notify sensor to prepare the data
Function: @data  ( -- sun moon hum tmp chk chksum )  \ get sensor data
  get response time of sensor, store in register &#039;sun&#039; (just for testing)
  get startpulse duration, store in register &#039;moon&#039;
  40 loop 
     read bit using &#039;moon&#039; based delay 
     lshift bit into array xx yy zz
  08 lo…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dht22-rp2040-nofortht?rev=1751196306">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-29T11:25:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dht22-rp2040-nofortht?rev=1751196306</link>
        <description>go back


(* DHT22 sensor, using PIO: 424 bytes
   Willem Ouwerkerk, 20250629

    40-bits pulse stream 32-bits data &amp; 8-bits checksum

*)

chere
need arshift    \ Load ARSHIFT from library
need pio\       \ Load PIO (dis)assembler

clean-pio  decimal      \ Empty code space, start at zero
0 0 {pio                \ Use state machine-0 on PIO-0
    160000 =freq        \ On 4 * 40 kHz frequency (6.25 µs ticks)
    05 1 =out-pins      \ GPIO 5 for OUT &amp; SET
    05 1 =set-pins
    05 =in-pin        …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dht22?rev=1751018707">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-27T10:05:07+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>DHT22</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dht22?rev=1751018707</link>
        <description>DHT22

The DHT22 module is a low-cost digital temperature and humidity sensor. It utilizes a capacitive humidity sensor and a thermistor to measure the surrounding air and outputs a digital signal via a single data pin. It&#039;s known for its wider measurement range and higher accuracy compared to its predecessor, the DHT11.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dht22tmpformat?rev=1745753955">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-27T11:39:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>The DHT22 Document</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dht22tmpformat?rev=1745753955</link>
        <description>The DHT22 Document

am2302-en-aosong.pdf Although this information is factually correct, I found some of it difficult to understand due to the cumbersome translation into English. Page 5 provides an example of how to handle the data.
Example 1 first shows the interpretation of temperatures above 0 °C and then, as a</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:disassemblers_rp2040-assembler?rev=1696258901">
        <dc:format>text/html</dc:format>
        <dc:date>2023-10-02T15:01:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Disassemblers</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:disassemblers_rp2040-assembler?rev=1696258901</link>
        <description>Disassemblers

	* RP2040 disassembler, compact universal RP2040 disassembler.

Note that the check on CFA&#039;s in skip-cfa is only correct for ITC code.

For other systems this word need adaptation.


	* noForth, resident noForth disassembler.

An example of its use, disassemble DUP, ?DUP &amp; DROP in noForth:&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:disassembler_msp430-disassemblers?rev=1693888435">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-05T04:33:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Disassemblers</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:disassembler_msp430-disassemblers?rev=1693888435</link>
        <description>Disassemblers

	* MSP430 disassembler, compact universal MSP430 disassembler (the 27 basic opcodes).

Note that the check on CFA&#039;s dasa @ @+ = is only correct for ITC code.

For other systems these lines need adaptation.

Not in Generic Forth: WITHIN  CELL-  1-  @+  &lt;&gt;&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dlshift_drshift?rev=1712666496">
        <dc:format>text/html</dc:format>
        <dc:date>2024-04-09T12:41:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Shifting doubles: DLSHIFT and DRSHIFT</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dlshift_drshift?rev=1712666496</link>
        <description>Shifting doubles: DLSHIFT and DRSHIFT

an.02apr2024

The code is for 32bit cells, to keep it readable.
For other cell widths adjust the number 32 everywhere.

Coded with LSHIFT and RSHIFT


decimal 
: DLSHIFT ( lo hi n -- lo&#039; hi&#039; )    \ n in [0,32*2]
    tuck lshift &gt;r          \ hi&#039;
    2dup 32 - 
    2dup   lshift &gt;r        \ lower lo to upper hi
    negate rshift &gt;r        \ upper lo to lower hi
    lshift                  \ lo&#039;
    2r&gt; r&gt; or or   ;        \ compose hi&#039;
    
: DRSHIFT ( lo hi…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:do_plusloop_curiosity?rev=1693844053">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:14:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>DO +LOOP</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:do_plusloop_curiosity?rev=1693844053</link>
        <description>DO +LOOP

This is a bit of a curiosity. It is a high-level DO...+LOOP but with 2 limits, rather than 1. I have no clue what problem is solves, but it is a great solution!

A standard +LOOP uses the first number from the stack as the limit. For instance 0 10 DO &lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dump-genericforth.f?rev=1693844060">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:14:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dump-genericforth.f?rev=1693844060</link>
        <description>\ Dump utility in Generic Forth (WO 2021-09-16)
\ This source code provides a simple HEX dump utility.
\
\ Memory is accessed by C@ output is perfomed by EMIT.
\ So this dump utility can be used also on quite limited systems.
\ For a definition of BOUNDS see the list with well known words.
\
\ Usage:
\   &lt;addr&gt; &lt;len&gt; DUMP
\
\ 4400 40 dump
\ 4400: 36 45 16 B3 01 20 30 46 36 90 00 90 07 34 07 93 |6E    0F6    4  |
\ 4410: 37 44 03 20 36 80 01 88 05 56 00 4F 36 90 00 70 |7D  6    V O6  p|
\ 4420: 0…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dump-minimal_forth.fs?rev=1693844067">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:14:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dump-minimal_forth.fs?rev=1693844067</link>
        <description>\ Dump utility in Minimal Forth         uh 2021-08-11

\ This source code provides a simle hex dump utility.
\
\ It does not require number output conversion U. U.R . .R &lt;# # #S #&gt; SIGN or HOLD
\
\ Memory is accessed by C@ output is perfomed by EMIT.
\ So this dump utility can be used also on quite limited systems.
\
\ Usage:
\
\   &lt;addr&gt; &lt;len&gt; DUMP
\
\ or
\
\   &lt;addr&gt; &lt;len&gt; ADJUSTED DUMP   \ to start the dump at an even b/line boundary


\ definitions missing from Minimal Forth

: min ( n1 n2 -…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:dump?rev=1693888439">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-05T04:33:59+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>DUMP memory algorithm: display content of main memory</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:dump?rev=1693888439</link>
        <description>DUMP memory algorithm: display content of main memory

DUMP idea

A DUMP utility is a software tool that allows to inspect main memory and display it in a user readable form.
Typically output is composed of several lines that have the structure:

Display bytes starting in memory at a given address in hex (or other radix). Behind them is the &lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:file_systems?rev=1754569214">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-07T12:20:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>NOF file system, for small Flash chips</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:file_systems?rev=1754569214</link>
        <description>NOF file system, for small Flash chips

NOF idea

Read and store data from/to source files on some sort of background medium. 
For these purposes a file system could be used. 
There are lots of variants present: FAT16, FAT32, NTFS, Ext2, Etc.

This design is about a compact file system for small controllers and Flash memory chips. 
It uses</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:flyer?rev=1693844090">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:14:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Flyer</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:flyer?rev=1693844090</link>
        <description>Flyer

Ow! Now we are entering the taboo area of state-smartness... In noForth we have the word FLYER . It handles state-smartness in a uniform way. FLYER uses DIVE and both are implementation dependent FLYER is a NOOP during compile time. This is what FLYER does when STATE=0 :&lt;div&gt;&lt;ul&gt;&lt;/div&gt;&lt;div&gt;&lt;li&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/li&gt;&lt;/div&gt;&lt;div&gt;&lt;li&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/li&gt;&lt;/div&gt;&lt;div&gt;&lt;/ul&gt;&lt;/div&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c?rev=1766177799">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-19T20:56:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C, The I2C protocol</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c?rev=1766177799</link>
        <description>I2C, The I2C protocol

The PFW universal I2C drivers The I2C protocol is a must-have for any microcontroller. It opens up access to IO-expanders, real-time clocks, more memory and much much more. But starting with I2C in Forth might seem a daunting task. To help you use, and understand, the I2C protocol, PFW has developed a universal set of drivers for 3 different hardware platforms (MSP430, Risc-V, Raspberry/ARM). At the top level the drivers are the same for each platform. For instance, a devi…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_device-drivers?rev=1693844105">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C device drivers</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_device-drivers?rev=1693844105</link>
        <description>I2C device drivers

The idea for I2C device drivers

There are lots of chips available using the I2C-protocol. These examples use the I2C implementation as described here. All of them need a specific device driver. To name some: sensors, memory, clocks, I/O, etc. Here you can add any driver you like to share. Preferably written in &lt;div&gt;
&lt;p align=&quot;center&quot;&gt;
&lt;img src=&quot;https://home.hccnet.nl/willem.ouwerkerk/egel-for-msp430/p33%20-%20pcf8591%20adc%20&amp;%20dac.jpg&quot; width=&quot;320&quot; height=&quot;240&quot; /&gt;
      &lt;b&gt;…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf?rev=1694001997">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T12:06:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C for the GD32VF103</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf?rev=1694001997</link>
        <description>I2C for the GD32VF103

	* I2C for Mecrisp (not ready).
	* I2C implementation &amp; examples for noForth.

[bitbang I2C on GD32VF sm] Bitbang I2C on the GD32VF103 SEED board

The SEED board contains some nice extra hardware:

	*  32.768kHz crystal 
	*  24C02 I2C EEPROM 
	*  W25C64 SPI Flash memory 
	*  Three leds 
	*  Two switches 
	*</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_mecrisp?rev=1693844118">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C protocol for Mecrisp on the GD32VF</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_mecrisp?rev=1693844118</link>
        <description>I2C protocol for Mecrisp on the GD32VF</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth?rev=1694002283">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T12:11:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C for noForth on the GD32VF103</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth?rev=1694002283</link>
        <description>I2C for noForth on the GD32VF103
   File name                                       Commands       Purpose                                        README.md                                                     this file</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_advanced_i2c-ee.f?rev=1693844129">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_advanced_i2c-ee.f?rev=1693844129</link>
        <description>(* Advanced I2C 24C02 EEPROM demo

PB6 = SCL
PB7 = SDA
 
    Reading and writing to EEPROM type 24C02
    A0 = EEPROM I2C bus address
    Load &#039;GD32VF103 bb-I2C.f&#039; before this file

*)

hex
i2c-on
: {EEADDR   ( ea +n -- )    \ Address EEPROM
    50 device!  {i2c-write  bus! ;                      \ 24C02 EE-addr.

\ Byte wide fetch and store in EEPROM
: NEC@      ( -- b )        1 {i2c-read  bus@ i2c} ;    \ EE Read next byte
: EC@       ( ea -- b )     1 {eeaddr i2c}  nec@ ;      \ EE Read byte…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_gd32vf103_bb-i2c.f?rev=1693844135">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_gd32vf103_bb-i2c.f?rev=1693844135</link>
        <description>(* GD32VF103 bitbang I2C driver

Values for CRL/CRH-Registers:
 0:  Analog Input
 1:  Output Push/Pull, 10 MHz
 2:  Output Push/Pull,  2 MHz
 3:  Output Push/Pull, 50 MHz
 4:  Floating Input (Reset state)
 5:  Open-Drain Output, 10 MHz
 6:  Open-Drain Output,  2 MHz
 7:  Open-Drain Output, 50 MHz
 8:  Input with pull-up / pull-down
 9:  Alternate Function, Push/Pull, 10 MHz
 A:  Alternate Function, Push/Pull,  2 MHz
 B:  Alternate Function, Push/Pull, 50 MHz
 C:  Reserved
 D:  Alternate Function…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_gd32vf103_hw-i2c.f?rev=1693844140">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_gd32vf103_hw-i2c.f?rev=1693844140</link>
        <description>(* GD32VF103 hardware I2C driver

Values for CRL/CRH-Registers:
 0:  Analog Input
 1:  Output Push/Pull, 10 MHz
 2:  Output Push/Pull,  2 MHz
 3:  Output Push/Pull, 50 MHz
 4:  Floating Input (Reset state)
 5:  Open-Drain Output, 10 MHz
 6:  Open-Drain Output,  2 MHz
 7:  Open-Drain Output, 50 MHz
 8:  Input with pull-up / pull-down
 9:  Alternate Function, Push/Pull, 10 MHz
 A:  Alternate Function, Push/Pull,  2 MHz
 B:  Alternate Function, Push/Pull, 50 MHz
 C:  Reserved
 D:  Alternate Functio…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_i2c-test.f?rev=1693844146">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_i2c-test.f?rev=1693844146</link>
        <description>\ Show if a device with address &#039;dev&#039; is present on the I2C-bus
: I2C?          ( dev -- )
    i2c-on  device!  {device-ok?}
    0= if  .&quot; Not &quot;  then  .&quot; Present &quot; ;

\ End ;;;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_simple_i2c-ee.f?rev=1693844153">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:15:53+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_gd32vf_noforth_simple_i2c-ee.f?rev=1693844153</link>
        <description>(* Short I2C 24C02 EEPROM demo

PB6 = SCL
PB7 = SDA
 
    Reading and writing to EEPROM type 24C02
    A0 = EEPROM I2C bus address
    Load &#039;GD32VF103 bb-I2C.f&#039; before this file

*)

hex
\ Read data &#039;x&#039; from EEPROM address &#039;a&#039;.
: EC@       ( ia -- x )
    50 device!  1 {i2c-write  bus! i2c} 
    1 {i2c-read  bus@ i2c} ;

\ Write &#039;x&#039; to EEPROM address &#039;a&#039;
: EC!       ( x ia -- )
    50 device!  2 {i2c-write  bus! bus! i2c} ;

\ Show stored string from EEPROM
: SHOW      ( -- )
    i2c-on
    begi…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_msp430?rev=1694002084">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T12:08:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C for the MSP430</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_msp430?rev=1694002084</link>
        <description>I2C for the MSP430

	* I2C implementation for various MSP430 versions with EEPROM example for noForth



Lecture timer with I2C OLED driver at work

I2C for the MSP430 is there in three variants

	* Bitbang
	* USCI
	* eUSCI

[ i2c-smaller]</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:i2c_noforth?rev=1693844166">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:16:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>I2C for noForth on the MSP430</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:i2c_noforth?rev=1693844166</link>
        <description>I2C for noForth on the MSP430

[p30(u) - i2c bitbang usci input and output to pcf8574]

I2C on the MSP430G2553

All driver files are from the Egel Project, from chapter 30ff. This code example works with all added driver versions of the noForth I2C implementation:


\ Example with clock &amp; 24C32 EEPROM
: {EEADDR   ( a +n -- )                     \ Address EEprom
    50 device!  {i2c-write  b-b bus! bus! ;

\ Read data b from 24C32 EEPROM byte-address addr. 
: EC@       ( addr -- b )
    2 {eeaddr…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:kangoeroe?rev=1693844197">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:16:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Kangaroo method</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:kangoeroe?rev=1693844197</link>
        <description>Kangaroo method

The „lone“ DOES&gt; is used for the creation of only one word rather than for the creation of a category of words.
simple example in noForth


create .DAY ( n -- )  s&quot; SunMonTueWedThuFriSat ? &quot; m, align
    does&gt; swap 7 umin 3 * + 3 type ;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:library?rev=1743515769">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-01T13:56:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>A library for (no)Forth</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:library?rev=1743515769</link>
        <description>A library for (no)Forth

W.O. 2025

The idea

Add a mechanism to Forth that allows code sections/chapters to be loaded from a large &#039;file&#039; with a simple command. How the file is stored and what it contains is implementation-dependent. What matters is the interface. The sections or chapters are accessible through one or more keywords.&lt;h2 style=&quot;background-color:yellow&quot;&gt;Implementations&lt;/h2&gt;&lt;h2 style=&quot;background-color:yellow&quot;&gt;Other implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:linear-conversion?rev=1739360208">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-12T11:36:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Simple linear conversion</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:linear-conversion?rev=1739360208</link>
        <description>Simple linear conversion

A very simple method (no floating point, no algebraic formulas) for
 linear conversion of sensor output data to human-understandable units.

Example 1, temperature

 Two points are given: Sensor output 400 and 1200 correspond
 to 10 and 36.3 degrees Celsius respectively.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:map?rev=1718116120">
        <dc:format>text/html</dc:format>
        <dc:date>2024-06-11T14:28:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Idea: Forth Key Value Data Structure map</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:map?rev=1718116120</link>
        <description>Idea: Forth Key Value Data Structure map

forth-map

This forth-map data structure can be used to map strings to arbitrary data. 
Other programming languages have similar data structures and call them dictionaries, hashes or hashmaps.

Forth-map is an example of an abstract data type. You operate the data structure via its interface words</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:marsaglias_xorshift_random_routine_for_gd32vf?rev=1693844203">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:16:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Marsaglia&#039;s XORshift routine on the GD32VF103 RISC-V</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:marsaglias_xorshift_random_routine_for_gd32vf?rev=1693844203</link>
        <description>Marsaglia&#039;s XORshift routine on the GD32VF103 RISC-V

	* Mecrisp-quintus, Marsaglia for Mecrisp-quintus</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:marsaglia_s_xorshift_for_arm?rev=1728421402">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-08T21:03:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Marsaglia&#039;s XORshift routine on the ARM processor</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:marsaglia_s_xorshift_for_arm?rev=1728421402</link>
        <description>Marsaglia&#039;s XORshift routine on the ARM processor

Raspberry Pi 3b+ with wabiForth

The Forth version of the randomisation routines is the same on any processor as only standard Forth words are used. But the ARM-processor can do do a neat
trick: it can do 1 cycle (dup, shift and xor) in 1 opcode!! And as
most Forths include an assembler it is an interesting exercise to see how
much faster the routine is when coded in assembly.
This example is coded using wabiForth on a Raspberry 3b+, but the pri…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:measuring-distance?rev=1693844215">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:16:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Measuring distances</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:measuring-distance?rev=1693844215</link>
        <description>Measuring distances

The idea is to measuring distance using ultrasonic and other sensors.

Ultrasonic sensors

The most well known ultrasonic sensor is the HC-SR04 but there are a lot of different types available. Most use the same protocol. Some of them are different. Some sensors have a larger range at a higher voltage.&lt;div&gt;
&lt;p align=&quot;left&quot;&gt;
&lt;img src=&quot;https://home.hccnet.nl/willem.ouwerkerk/egel-for-msp430/p13%20-%20three%20different%20us-sensors.jpg&quot;
 width=&quot;500&quot; height=&quot;240&quot; /&gt;
      &lt;b&gt;Som…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:multiline-comments?rev=1740230154">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-22T13:15:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Multiline comment using (* *)</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:multiline-comments?rev=1740230154</link>
        <description>Multiline comment using (* *)

uho 2022-01-20


Usage:
   (* Start a comment.
      Spans multiple lines. 
      ends at *)


Idea

Standard Forth provides words to add comments to programs:

	* ( to skip text until the next closing parenthesis )

In principle these comments can span multiple lines (the &lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:multi_tasker?rev=1741955413">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:30:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Cooperative multitasker</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:multi_tasker?rev=1741955413</link>
        <description>Cooperative multitasker

The idea

A simple cooperative multitasker for use in Forth systems.

For the purpose of defining multiple independently running background program(s).


Characteristics of such a cooperative multitasker:

	*  Simple
	*  Compact
&lt;!--
|  **BASE**  |  10  |  0A  |  02  |
|  **RP0**  |  adr1  |  adr2  |  adr3  |  
|  **SP0**  |  adr-1  |  adr-2  |  adr-3  |
--&gt;
&lt;h2 style=&quot;background-color:yellow&quot;&gt;Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:muti_tasker?rev=1693848622">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T17:30:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>noForth multitasker glossary</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:muti_tasker?rev=1693848622</link>
        <description>This idea will explain how a typical cooperative Forth multi tasker works.

For now here is a glossary of the noForth multi tasker (in development):

noForth multitasker glossary

2023-09-04

Multi Tasker Words

	* activate ( xt task -- )
Given a task</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:piliplop-noforth?rev=1693998058">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T11:00:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>PiliPlop, noForth versions</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:piliplop-noforth?rev=1693998058</link>
        <description>PiliPlop, noForth versions

This file must be loaded above WS2812 simple G2553.f
or WS2812 simple FR5949.f

It makes the colours flow over from one to the other!
 File name  Commands  Purpose  on Github (external link)  piliplop_ws2812-piliplop-01.f  DEMO2  Fast colour change with hold  ws2812-piliplop-01.f                            DEMO3</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:piliplop?rev=1693844234">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>PiliPlop algorithm</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:piliplop?rev=1693844234</link>
        <description>PiliPlop algorithm

The idea

When a number of different processes are to start at the same time and also be terminated at the same time, you need something like PiliPlop. It uses a Bresenham like algorithm. Original idea Albert Nijhof. Examples are:

	* A plotter</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:piliplop_ws2812-piliplop-01.f?rev=1693844239">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:piliplop_ws2812-piliplop-01.f?rev=1693844239</link>
        <description>\ PiliPlop used on WS2812 to flow smooth from one color to another

hex
\ Generic Forth needs these additional words: UMIN  ABS  +!  1+  */  MS
\ Note that MS is a software timed loop and the value 190 should
\ be adjusted for each individual Forth system! This value is
\ about correct for an 8 MHz compact noForth system.

3 constant #COLORS
: VARIABLES    create here ,  cells allot  does&gt; @ swap cells + ; \ Array of cells
: RANGE         ( u1 s1 -- u2 s2 ) 2 umin &gt;r  FF umin  r&gt; ; \ WS2812 limi…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:population_20count?rev=1693844246">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:26+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Population Count</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:population_20count?rev=1693844246</link>
        <description>Population Count

Population count, or popcount, is counting the number of set bits in a byte or word (or whatever your computer uses). It is also known as Hamming Weigth (see below for a link). There is a surprisingly large range of algorithms where a popcount is usefull. For instance it is handy when handling interrupts, or when indexing used file blocks on a storage medium, or in cryptology. And chess-programs seem to use it in the valuation of a board. Anyhow, the common factor in most of th…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:prefixes?rev=1693844257">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Prefix TO</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:prefixes?rev=1693844257</link>
        <description>Prefix TO

A simple forth implementation of TO for values,

extendable with other prefixes,

extendable for other word types.

(an 20dec2022)

VARIABLE &amp; VALUE, pros &amp; cons

Style
VARIABLE with @ ! and +!    = nice pure forth style
VALUE with TO and +TO       = typical non forth style&lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:primitive-circular-buffer?rev=1693844264">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Primitive Circular Buffer</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:primitive-circular-buffer?rev=1693844264</link>
        <description>Primitive Circular Buffer

uh 2021-12-11

Idea

In a typical embedded application sensor readouts need to be stored in memory for processing. Because of memory limitations it might be reasonable to just store the latest data and remove old sensor readings. This can be done with a &lt;div&gt;&lt;ul&gt;&lt;/div&gt;&lt;div&gt;&lt;li&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/li&gt;&lt;/div&gt;&lt;div&gt;&lt;li&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/li&gt;&lt;/div&gt;&lt;div&gt;&lt;li&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/li&gt;&lt;…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:print-hex?rev=1693844271">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Print Hex</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:print-hex?rev=1693844271</link>
        <description>Print Hex

In this programming pearl Albert Nijhof shows how to print hexadecimal numbers with a given number of digits even if your Forth system does not provide pictured numeric output by means of &lt;# # #&gt; etc.


 1  \ Tools -- Formatted unsigned single hex number output, not using BASE
 2  \ an-17jan2022
 3  
 4  decimal
 5  : .1HX ( x -- )     \ Print last digit of x in hex
 6      15 and                  \ lowest nibble
 7      9 over &lt; 7 and +        \ for A..F
 8      [char] 0 +   emit ;
 …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:pseudocode?rev=1693844278">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:17:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Pseudo Code</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:pseudocode?rev=1693844278</link>
        <description>Pseudo Code

Pseudo Code descirbes an algorithm using some invented syntax that does not need to be a concrete syntaxx of an existing system. All that matters is to explain the algorthmic idea.

We tend to use pseudocode like this:

Use pseudo code following this style:</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:random_20generator_20completeness_20test?rev=1693844284">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:18:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Random Generator Completeness Test</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:random_20generator_20completeness_20test?rev=1693844284</link>
        <description>Random Generator Completeness Test

There are many different tests to assess the quality of a random-number generator. The Diehard suite of tests from Prof. G. Marsaglia was the first in wide-spread use, and a lot more tests have been developed since. Presented here is a test for completeness. Linear Pseudorandom Number Generators have an exact amount of numbers they generate before the return to their starting point (wrap around). A good generator generates all possible numbers exactly once bef…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:random_generators_xorshift?rev=1728481670">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-09T13:47:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Random generator using XORshift</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:random_generators_xorshift?rev=1728481670</link>
        <description>Random generator using XORshift

Introduction

Prof. G. Marsaglia in 1995 published the well-known DIEHARD set of statistical tests for measuring the quality of random generators. In 2003 he published a novel way of generating random numbers, called the XORshift generator. It is fast and has good quality. It is also easy to implement and can be adapted to the needs of the user. The method works with any number of seeds and can be adapted to 16, 32 or 64 bits (or larger&lt;hr style=&quot;height:3px;borde…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:reflection-sensors?rev=1693844296">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:18:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Reflection sensors</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:reflection-sensors?rev=1693844296</link>
        <description>Reflection sensors

Idea

A reflection sensor is most of the time a sensor that uses (infrared) light to detect the precence of an object.

TCND5000 the demonstrated sensor
[TCND5000]                                [Sketch schematics]           [Cosey floor sensors on the front side sm][Reflection sensor schematics]
Upper left: The TNCD5000 is a sensitive photo diode and an infrared led in one case.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:sensors?rev=1693844304">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:18:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Sensors, an overview</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:sensors?rev=1693844304</link>
        <description>Sensors, an overview

The idea is to give examples for a variety of available sensors.

To measure time, temperature, pressure, magnetism, distance, light level, etc.

	* Measuring distances, using ultrasonic and other sensors.


	* Reflection sensors, a sensor that uses (infrared) light to detect the presence of an object.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:sha-256?rev=1729163371">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-17T11:09:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SHA-256 HASH-generator</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:sha-256?rev=1729163371</link>
        <description>SHA-256 HASH-generator

The SHA-256 hash is widely used as the basis for computer security. Generating a SHA-256 hash is not totally trivial though. This version closely follows the original description, by using and naming all the variables and functions as put down in the documentation. This helps in understanding the actual SHA-hash algorithm. More efficient implementation are easily possible, but tend to be more or less system specific.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:simulation-forest_fire?rev=1693844309">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:18:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Simulation, Forest fire</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:simulation-forest_fire?rev=1693844309</link>
        <description>Simulation, Forest fire

This program simulates the way a forest fire develops after a lightning-strike, and it shows how the fires influence the structure of a forest. The idea is based on a publication by B. Drossel and F. Schwabl, Self-Organised critical forest-fire model, Physical Review Letters, Vol. 69, No. 11, September 1992.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:simulations-cozy?rev=1693844315">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:18:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Simulation, COZY</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:simulations-cozy?rev=1693844315</link>
        <description>Simulation, COZY

This program is a simulation of agents which, if given the chance, move to a place where they feel more at home In other words, to a place with a more cozy atmosphere. It is a very simple simulation but it has a suprising end-result: the end result looks like 4 bubbles. And if 2 or 3 of these bubbles touch, they still look like bubbles would.&lt;a href=&quot;http://www.youtube.com/watch?feature=player_embedded&amp;v=7b2-aXWt0z0
&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img.youtube.com/vi/7b2-aXWt…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi?rev=1722685664">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-03T11:47:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI protocol, general introduction</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi?rev=1722685664</link>
        <description>SPI protocol, general introduction

The Idea of SPI

SPI is a synchronous serial protocol with three to four lines, it

is used for (LCD) displays, (Flash) memory chips, SD-cards, etc.


1. MOSI     Master Out Slave In
2. MISO     Master In  Slave Out
3. CLK      Clock
4. CE       Chip Enable (also called SS)

&lt;div&gt;
&lt;!-- **Missing words**
 ```
*BIS ( bitmask addr -- )      Set the bits from bitmask at half cell address  
*BIC ( bitmask addr -- )      Clear the bits from bitmask at half cell addr…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf?rev=1693978232">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T05:30:32+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI protocol, GD32VF103 versions</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf?rev=1693978232</link>
        <description>SPI protocol, GD32VF103 versions

For these systems there is SPI in bitbang and/or hardware version:

	* noforth, SPI for noForth including examples, OLED, Flash memory, etc.
	* mecrisp-quintus, SPI for mecrisp including a BME280 &amp; SD-card example

----------

[Inlezen een karakter in noForth] Read a character using SPI from a W25Q64 external Flash memory</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus?rev=1721638910">
        <dc:format>text/html</dc:format>
        <dc:date>2024-07-22T09:01:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI examples</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus?rev=1721638910</link>
        <description>SPI examples

Here you will find examples for SPI usage with mecrisp-quintus running on the Longan Nano board by Sipeed and maybe other boards too. This board has the GD32VF103xxx MCU 48-Pinout. If you want to use it on other flavors (36, 64, or 100 pins) you&#039;re on your own.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus_bme280?rev=1693844400">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI implementation for gd32vf RISCV on mecrisp-quintus for accessing the BME280 humidity sensor</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus_bme280?rev=1693844400</link>
        <description>SPI implementation for gd32vf RISCV on mecrisp-quintus for accessing the BME280 humidity sensor



I use this little breakout board. Be aware that it comes with seven pads. There are others with 5 or 6 pads. The sensor itself is the tiny silver square with a very tiny hole in the middle of the upper half of the board.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus_sd-card-bitbang_sdcard.fs?rev=1693844406">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_mecrisp-quintus_sd-card-bitbang_sdcard.fs?rev=1693844406</link>
        <description>\   Filename: sdcard.fs
\    Purpose: access sdcard via spi1 bit banging
\        MCU: GD32VF103
\      Board: * , tested with Logan Nano
\       Core: Mecrisp-Quintus 0.27 by Matthias Koch.
\   Required: Mecrisp-Quintus &gt;= 0.27
\     Author: Matthias Koch
\      Date : Jun 2020
\   Requiers: registernames.fs
\ Literature: https://www.convict.lu/pdf/ProdManualSDCardv1.9.pdf
\    Licence: GPLv3
\  Changelog:
\ 2020-07-31:  MaBi002 added &quot;noanswer?&quot;
\ 2020-08-01:  MaBi003 added sd-error?
\ 2020-08…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth?rev=1694003571">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T12:32:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI protocol for the GD32VF103</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth?rev=1694003571</link>
        <description>SPI protocol for the GD32VF103

	* Bitbang on port-A
    Note that the highlevel generates a 300 kHz clock, the low level variant a 1 MHz clock. The bitbang SPI setup has no restrictions at all. More on I/O-ports from page 101ff of the user manual mentioned below.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_bbspi_v100.f?rev=1693844418">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_bbspi_v100.f?rev=1693844418</link>
        <description>(*  This version Willem Ouwerkerk - April 2021 - bitbang SPI driver 
    With use of some of the data from Mecrisp, but much more
    the GD32VF103 user manual V1.2  
    Please note that 27 MHz is the maximum SPI clock frequency!
        40010800 =  PORTA
        40010C00 =  PORTB
        40011000 =  PORTC
        40011400 =  PORTD
        40011800 =  PORTE
        40021000 =  RCU_CTL
        40021018 =  RCU_APB2EN
        40013000 =  SPI0_CTL0
        40013008 =  SPI0_STAT
        4001300C =  …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_flash_driver_gd32.f?rev=1693844424">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_flash_driver_gd32.f?rev=1693844424</link>
        <description>(* Barebone SPI Flash memory driver for GD32VF103

Primitive functions:

{FL       ( c -- )          = Open SPI to flash &amp; send command c
{FREAD    ( a c -- b )      = Send read command c &amp; address, read byte b from address
{FREAD+   ( a +n -- a+n b ) = Read +n bytes from address a and increase a with that 
                              amount leaving the first databyte b
READY?    ( -- f )          = Leave true when an erase or write action is ready
WRITE-ON  ( -- )            = Activate write …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi-loopback.f?rev=1693844430">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi-loopback.f?rev=1693844430</link>
        <description>(* SPI loopback test

Connect PA6 (MISO) and PA7 (MOSI) on the GD32VF103 board
The output is printed and increased by one until a key is pressed

*)

: COUNTER       ( -- )
    spi-on  0
    begin
        spi-i/o  dup .  1+  80 ms
    key? until  drop ;

\ End ;;;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi0_v100.f?rev=1693844436">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi0_v100.f?rev=1693844436</link>
        <description>(*  This version Willem Ouwerkerk - March 2021 - SPI0 driver 
    With use of the data from Mecrisp. 
    Please note that 27 MHz is the maximum SPI clock frequency!
        40010800 =  PORTA
        40010C00 =  PORTB
        40011000 =  PORTC
        40011400 =  PORTD
        40011800 =  PORTE
        40021000 =  RCU_CTL
        40021018 =  RCU_APB2EN
        40013000 =  SPI0_CTL0
        40013008 =  SPI0_STAT
        4001300C =  SPI0_DATA
RCU_APB2EN = Clock enable register
  |5432|1098|7654|32…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi_oled_display_gd32.f?rev=1693844444">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_gd32vf_noforth_spi_oled_display_gd32.f?rev=1693844444</link>
        <description>(* Primitive SPI OLED text driver
\ SPI0, connected to flash memory on SEEED dev. board
PA5     = SCK     - B       40010800
PA6     = MISO    - B
PA7     = MOSI    - B
PC1     = CS      - 3       40011000
SPI0 = OLED
    (MISO=PA6, MOSI=PA7, CLK=PA5, CS=PC1, DC=PC2, RST=PC3) 
*)

\ Redefine {SPI SPI}
code {SPI        ( -- )
    sun 4001100C li     \ PORTC_ODR  Port-C output address
    w sun ) .mov        \ Read Port-C
    w -3 .andi          \ Clear bit-1
    sun ) w .mov        \ Write Port-C…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430?rev=1693997495">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T10:51:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI protocol MSP430 versions</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430?rev=1693997495</link>
        <description>SPI protocol MSP430 versions

Bitbang, USCI and eUSCI versions

For those systems:

	* noForth, With examples, WS2812 driver, OLED, Flash memory, etc.

----------

[Micro Launchpad als node-1 sm]

Micro Launchpad with MSP430G2553 talks to a 24L01P via SPI

----------



eUSCI SPI OLED &amp; Flash driver (implementing the NOF file system)</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_flash_driver_msp430.f?rev=1693844458">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:20:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_flash_driver_msp430.f?rev=1693844458</link>
        <description>(* Barebone SPI Flash memory driver for MSP430FR5949

Primitive functions:

{FL       ( c -- )            = Open SPI to flash &amp; send command c
{FREAD    ( da c -- b )       = Send read command c &amp; address, read byte b from address
{FREAD+   ( da +n -- da+n b ) = Read +n bytes from address a and increase a with 
                                that amount leaving the first databyte b
READY?    ( -- f )            = Leave true when an erase or write action is ready
WRITE-ON  ( -- )              = …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth?rev=1694004547">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-06T12:49:07+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>SPI protocol noForth versions</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth?rev=1694004547</link>
        <description>SPI protocol noForth versions

	* MSP430G2xxx, bitbang SPI version for the MSP430G2553


	* MSP430FR59xx, bitbang SPI version for the MSP430FR5949


	* MSP430F14x, bitbang SPI version for the MSP430F149


	* MSP430G2xxx, USCI B0 SPI version for the MSP430G2553


	* MSP430FR59xx, eUSCI A1 SPI version for the MSP430FR5949</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-f149_v100.f?rev=1693844470">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-f149_v100.f?rev=1693844470</link>
        <description>(* Bitbang SPI interface on P3 or P5 of MSP430F149
Function        P1    P2    P3    P4    P5    P6  Lable name
-------------------------------------------------------------
Input           20    28    18    1C    30    34    PxIN
Output          21    29    19    1D    31    35    PxOUT
Direction       22    2A    1A    1E    32    36    PxDIR
Intrpt flag     23    2B    1B    1F    33    37    PxIFG
Intrpt edge     24    2C    --    --    --    --    PxIES
Intrpt on/off   25    2D    --    -- …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-fr_v100.f?rev=1693844476">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-fr_v100.f?rev=1693844476</link>
        <description>(* Bitbang SPI interface on P2 
        IN   OUT  DIR  REN  SEL0 SEL1
P1      200  202  204  206  20A  20C
P2      201  203  205  207  20B  20D
P3      220  222  224  226  22A  22C
P4      221  223  225  227  22B  22D
PJ      320  322  324  326  32A  32C
P2 is used for interfacing the SPI with eUSCI-A1
P2.3  - CS                      \ SPI enable low      x1=Select
P2.4  - CLOCKPULSE              \ Clock               x1=Clock
P2.5  - MOSI                    \ Data bitstream out  x1=Mosi
P2.6  -…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-g_v100.f?rev=1693844481">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_bbspi_msp-g_v100.f?rev=1693844481</link>
        <description>(* Bitbang SPI interface on P1 &amp; P2 

P1.4  - CLK             10      \ Clock               x1=Clock
P2.0  - CS              01      \ SPI enable low      x1=Chip select
P2.1  - MISO            02      \ Data bitstream out  x0=Master in
P2.2  - MOSI            04      \ Data bitstream in   x1=Master out

  More SPI info on page 444ff of SLAU144J.PDF  
  Configuration of the pins on page 49ff of SLAS735J.PDF


*)

hex
v: fresh
: SPI-ON        ( -- )
    03 2A *bis      \ P2DIR  P2.0 &amp; P2.1 for SP…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_eusci-a1_spi_msp_v100.f?rev=1693844487">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_eusci-a1_spi_msp_v100.f?rev=1693844487</link>
        <description>(* USCI-A SPI on P2 of MSP430FR59x9
        IN   OUT  DIR  REN  SEL0 SEL1
P1      200  202  204  206  20A  20C
P2      201  203  205  207  20B  20D
P3      220  222  224  226  22A  22C
P4      221  223  225  227  22B  22D
PJ      320  322  324  326  32A  32C
      UCxyCTLW  UCxyBRW  UCx0ySTAT UCxyIFG  UCxyTXBUF  UCxyRXBUF
UCA0    5C0       5C6      5C8      5DC      5CE        5CC
UCA1    5E0       5E6      5E8      5FC      5EE        5EC
UCB0    640       646      648      66C      64E        …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_usart1_spi_msp-f149_v100.f?rev=1693844494">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_usart1_spi_msp-f149_v100.f?rev=1693844494</link>
        <description>(* USART-0/1 SPI on P3 or P5 of MSP430F149
Function        P1    P2    P3    P4    P5    P6  Lable name
-------------------------------------------------------------
Input           20    28    18    1C    30    34    PxIN
Output          21    29    19    1D    31    35    PxOUT
Direction       22    2A    1A    1E    32    36    PxDIR
Intrpt flag     23    2B    1B    1F    --    --    PxIFG
Intrpt edge     24    2C    --    --    --    --    PxIES
Intrpt on/off   25    2D    --    --    --   …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_uscib_spi_msp_v100.f?rev=1693844501">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_noforth_uscib_spi_msp_v100.f?rev=1693844501</link>
        <description>(* USCI-B SPI on P1 of MSP430G2553
020 = P1IN      - Input register
021 = P1OUT     - Output register
022 = P1DIR     - Direction register
026 = P1SEL     - Configuration register 1
027 = P1REN     - Resistance on/off
041 = P1SEL2    - Configuration register 2
P1 is used for interfacing the SPI
P1.4  - CS                      \ SPI enable low      x1=Select
P1.5  - CLOCKPULSE              \ Clock               x1=Clock
P1.6  - MISO                    \ Data bitstream in   x0=Miso
P1.7  - MOSI   …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_spi-loopback_msp430.f?rev=1693844508">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_spi-loopback_msp430.f?rev=1693844508</link>
        <description>(* SPI loopback test 

For: MSP430G2553
Connect P1.6 (MISO) and P1.7 (MOSI) on any MSP430G2553 board
The output is printed and increased by one until a key is pressed

For: MSP430FR59x9
Connect P2.6 (MISO) and P2.5 (MOSI) on any MSP430FR59x9 board
The output is printed and increased by one until a key is pressed

For: MSP430F149
Connect P5.2 (MISO) and P5.1 (MOSI) on any MSP430F14x board
The output is printed and increased by one until a key is pressed

*)

: COUNTER       ( -- )
    spi-on  0
 …</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_spi_oled_display.f?rev=1693844515">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:21:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_spi_oled_display.f?rev=1693844515</link>
        <description>(* Primitive SPI OLED text driver

UCA1 = OLED
    (RST=P2.7, SIMO=P2.5, CLK=P2.4, CS=P2.3, DC=P2.2,)

*)

\ OLED primitives
: COMM      ( -- )          4 203 *bic ;            \ OLED command
: DATA      ( -- )          4 203 *bis ;            \ OLED screen data
: {CMD      ( b -- )        comm  {spi  spi-out ;   \ Start OLED command stream
: {DATA     ( b -- )        data  {spi  spi-out ;   \ Start OLED data stream
: OL}       ( b -- )        spi-out spi} ;          \ End an OLED stream
: &gt;BRIG…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_ws2812_simple_fr5949.f?rev=1693844523">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:22:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_ws2812_simple_fr5949.f?rev=1693844523</link>
        <description>(* WS2812 ledstrip using SPI on MSP430FR5949

P2.5  - DATA-OUT                \ Data bitstream out  x1=Mosi

You configure this code to connect 1 to 1000 leds, note that at full
power each led consumes ~60 mA so 1000 * 60 = 60.000 mA = 60 Amp!!!

The word DEMO shows some colors on the connected LEDs

*)

dm 40  constant #LEDS           \ Note here the number of WS2812 leds connected
create &#039;RGB  3 allot  align     \ Color buffer

: &gt;RGB          ( r g b -- )    \ Write down colour scheme in buff…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_ws2812_simple_g2553.f?rev=1693844529">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:22:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:spi_msp430_ws2812_simple_g2553.f?rev=1693844529</link>
        <description>(* WS2812 ledstrip using SPI on MSP430G2553

Note that this code needs a 16 MHz DCO clock frequency
Because the strict timing for WS2812 and alike LEDs the basic
driver has to be coded in assembly. At least on the MSP430!
These are the words ONEBYTE and RENEW

P1.7  - DATA-OUT                \ Data bitstream out  x1=Mosi

You configure this code to connect 1 to 1000 leds, note that at full
power each led consumes ~60 mA so 1000 * 60 = 60.000 mA = 60 Amp!!!

The word DEMO shows some colors on the…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:stackchecking?rev=1693844535">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:22:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Stack Checking Utility: Debugging through Run-Time Stack Checks</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:stackchecking?rev=1693844535</link>
        <description>Stack Checking Utility: Debugging through Run-Time Stack Checks

Stack Checking idea

The Stack Checking utility is a debugging tool for Forth, used to validate stack comments and the actual stack behaviour of a word. It&#039;s a run-time check that ensures the number of items in the stack before and after the execution of a word, matches the comment description. &lt;h2 style=&quot;background-color:yellow&quot;&gt;Alternative Implementations&lt;/h2&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:string_handling?rev=1766841179">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-27T13:12:59+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>String handling</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:string_handling?rev=1766841179</link>
        <description>String handling

The idea

Character strings are mostly associated with dynamic memory and garbage collection. 
That is an overkill with the string handling that is used in most Forth programs.
In particular we can get by with buffers that are statically allocated using CREATE.
It is still useful to lift manipulating single characters to manipulating strings as a whole.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:struct?rev=1767377947">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-02T18:19:07+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Struct</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:struct?rev=1767377947</link>
        <description>Struct

Structs (kurz für „structures“ oder auf Deutsch „Strukturen“) sind ein grundlegendes Konzept in vielen Programmiersprachen, insbesondere in C, wo sie ursprünglich eingeführt wurden. Sie dienen dazu, zusammengehörige Daten unterschiedlicher Typen zu einem neuen, benutzerdefinierten Datentyp zu bündeln</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:substitution-phrases?rev=1754039854">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-01T09:17:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Substitution phrases</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:substitution-phrases?rev=1754039854</link>
        <description>Substitution phrases

uh 2022-02-21

The idea of substitution phrases

Sometimes you face a Forth system, that does not support a specific feature that you might want to use. For example you might want to compare two numbers (first and second) to find out whether or not the first number is less or equal than the second number. You would like to write</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:switchledwithbutton?rev=1754300061">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-04T09:34:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Switch LED with button</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:switchledwithbutton?rev=1754300061</link>
        <description>Switch LED with button

Idea

The LED in a button is to be switched on and off safely. 

Implementation

The challenge is to give the user a sure feeling when switching. Nothing should flicker and there must be no doubt about the state of the switch.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:tasto?rev=1754299705">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-04T09:28:25+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>TASTO?</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:tasto?rev=1754299705</link>
        <description>TASTO?

A key (Italian tasto, Latin clavis) or a button is a control element that is operated by pressing and automatically returns to its original position when released.

Forth has KEY? and KEY to query the computer&#039;s keyboard. I therefore call the query of a different individual key something else. Figure below shows such a key.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:twomoredumps.f?rev=1693844602">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:23:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:twomoredumps.f?rev=1693844602</link>
        <description>\ Two more DUMPs for a forth that has no .R and U.R
\ an 20oct2021

\ - 1 -

hex : DUMP ( a n -- )
    0 max 1000 min           \ safety for n
    over + &gt;r                                               \ limit
    begin dup r@ u&lt;
    while cr dup u. .&quot; : &quot;                                  \ .addr
        dup 8 0 do count dup 10 &lt; if space then . loop drop \ .bytes
        .&quot; |&quot;
        8 0 do count dup 7F &lt; and bl max emit loop          \ .chars
        .&quot; |&quot;
    repeat r&gt; 2drop cr ;

\ The for…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:unit?rev=1764704686">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-02T19:44:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>UNIT</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:unit?rev=1764704686</link>
        <description>UNIT</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:usb_cdc_driver_for_rp2040?rev=1768324617">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-13T17:16:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>USB CDC driver for RP2040</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:usb_cdc_driver_for_rp2040?rev=1768324617</link>
        <description>USB CDC driver for RP2040

The idea

This is a compact and universal MSP430 USB CDC driver.
Every effort has been made to make it portable.

What we need to do in short

	* Initialising the USB hardware on the RP2040.
	* Receiving and responding to setup packets from the host (PC). This determines which driver the</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:welcome?rev=1767375010">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-02T17:30:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Welcome to Project Forth Works</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:welcome?rev=1767375010</link>
        <description>Welcome to Project Forth Works

What this project is all about ...

Forth would benefit greatly from an active community sharing sources and solutions.
But our problem lies in the saying: If you&#039;ve seen one Forth, you&#039;ve seen one Forth.
With this project we want to acknowledge our differences and start sharing despite the many different Forths dialects.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:whatisapioblock?rev=1751017916">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-27T09:51:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>What is RP2040 PIO ?</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:whatisapioblock?rev=1751017916</link>
        <description>What is RP2040 PIO ?

The RP2040 PIO (Programmable Input Output) is a feature of the RP2040 microcontroller that allows users to create custom interfaces or implement specific protocols that may not be natively supported by the microcontroller.

 It consists of two PIO blocks, each containing four state machines that can execute small programs independently of the CPU (Cortex-M0+). These state machines can manage inputs and outputs in a deterministic way, ensuring precise timing regardless of th…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless?rev=1693888435">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-05T04:33:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Wireless Communication</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless?rev=1693888435</link>
        <description>Wireless Communication

The idea is to let computers talk to each other without wires. These days there are a lots of wireless protocols and frequencies available. Well known protocols are Wifi &amp; Bluetooth, but there are a lot more.

HC08 Bluetooth transceiver on Cosey robot</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_communication_mesh-network?rev=1763388182">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-17T14:03:02+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mesh network</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_communication_mesh-network?rev=1763388182</link>
        <description>Mesh network

[mesh in action]

Three Egel-kits communicating

The idea

Using standard wireless transceivers to form a self constructing mesh network. Basically each node has the same structure, the only difference is the node address.

The transceiver used here is the nRF24L01 or the Chinese clone named</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_communication_nrf24l01?rev=1763482575">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-18T16:16:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>nRF24L01+ 2.4GHz transceiver</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_communication_nrf24l01?rev=1763482575</link>
        <description>nRF24L01+ 2.4GHz transceiver

The nRF24L01+ is a cheap 2.4GHz transceiver module with a low level part of the communication layer already in hardware available. Features of the nRF24L01+ are, adjustable auto retransmit, RF ACK handshake, a 1 to 32 byte payload with variable length (Dynamic Payload), Fifo of 3 deep, 125 selectable frequencies, adjustable output power, CRC, etc.&lt;a name=&quot;bidirectional-demo&quot;&gt;&lt;/a&gt;&lt;a name=&quot;range&amp;disturbance-test&quot;&gt;&lt;/a&gt;&lt;a name=&quot;range&amp;disturbance-test&quot;&gt;&lt;/a&gt;</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_basic_24l01dn_g2553-01a.f?rev=1693844636">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:23:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_basic_24l01dn_g2553-01a.f?rev=1693844636</link>
        <description>\ This version 01, for USCI_B0 runs on noForth C2553 version 200202 &amp; later.
\
\ USCI hardware SPI on MSP430G2553 using port-1 &amp; port-2.
\ SPI i/o interfacing the nRF24L01 with two or more Launchpad boards
\ Micro Launchpads and/or Egel kits.
\
\ Connect the SPI lines of USCIB P1.5=CLOCKPULSE, P1.6=DATA-IN, P1.7=DATA-OUT
\ P1.4=CSN,  P2.3=CE of the nRF24L01. On the Egel kit it&#039;s just putting the
\ module in the connector marked nRF24L01!!
\
\ Note that decoupling is very important right near the…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_gd32vf?rev=1693846191">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:49:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>GD32VF103 implementation for nRF24L01+</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_gd32vf?rev=1693846191</link>
        <description>GD32VF103 implementation for nRF24L01+

The nRF24L01+ is a cheap 2.4GHz transceiver module with a low level part of the communication layer already in hardware available. Features of the nRF24L01+ are, adjustable auto retransmit, RF ACK handshake, a 1 to 32 byte payload with variable length (Dynamic Payload), Fifo of 3 deep, 120 selectable frequencies, adjustable output power, CRC, etc.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_gd32vf_noforth?rev=1693844650">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:24:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>noForth nRF24L01+ driver</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_gd32vf_noforth?rev=1693844650</link>
        <description>noForth nRF24L01+ driver

This page on Github</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430?rev=1693846191">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:49:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>MSP430 implementation for nRF24L01+</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430?rev=1693846191</link>
        <description>MSP430 implementation for nRF24L01+

The nRF24L01+ is a cheap 2.4GHz transceiver module with a low level part of the communication layer already in hardware available. Features of the nRF24L01+ are, adjustable auto retransmit, RF ACK handshake, a 1 to 32 byte payload with variable length (Dynamic Payload), Fifo of 3 deep, 120 selectable frequencies, adjustable output power, CRC, etc.</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430_noforth-fr59xx?rev=1693844663">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:24:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>noForth nRF24L01+ driver for MSP430G2553 &amp; MSP430F149</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430_noforth-fr59xx?rev=1693844663</link>
        <description>noForth nRF24L01+ driver for MSP430G2553 &amp; MSP430F149

This page on Github</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430_noforth-g2553_20f149?rev=1693844669">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:24:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>noForth nRF24L01+ driver for MSP430FR59xx</title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_msp430_noforth-g2553_20f149?rev=1693844669</link>
        <description>noForth nRF24L01+ driver for MSP430FR59xx

This page on Github</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_rangechecker_g2553_usci.f?rev=1693844675">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:24:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_rangechecker_g2553_usci.f?rev=1693844675</link>
        <description>\ Code to test for busy channels and nRF24 range checks
\
\   CHECK   = Test all avialable 2.4GHz channels
\   CARRIER = Test only given channel
\   WAVE    = Send carrier on channel with a given power
\   PULSE   = Idem but also a 50/100 pulse length in millisec. 
\
\ Extra words: MS

                            ( nRF24L01 RF test )

: ?LED      ( f -- )    if  led-on  else  led-off  then ;

: CARRIER?      ( -- 0|1 )  \ Check for carrier
    flush-rx  read-mode     \ Free receiver, receive mod…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_receive_test.f?rev=1693844680">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:24:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_receive_test.f?rev=1693844680</link>
        <description>\ Basic nRF24 bidirectional RECEIVE routine
\
\ Recieve T, increase counter &amp; transmit : and counter back
\
\ Extra words: MS
\ *BIS    ( mask addr -- )    Set the bits represented by mask at address
\ *BIC    ( mask addr -- )    Clear the bits represented by mask at address
\ *BIX    ( mask addr -- )    XOR the bits represented by mask with the bits at address
\ B-B     ( 16-bit -- bl bh ) Split 16-bit to a low byte &amp; high byte
\

: KICK-NRF24    ( -- )
    1 to #me  55 to #ch  1 to rf
    spi-…</description>
    </item>
    <item rdf:about="https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_transmit_test.f?rev=1693844688">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-04T16:24:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>https://wiki.forth-ev.de/doku.php/en:pfw:wireless_nrf24l01_transmit_test.f?rev=1693844688</link>
        <description>\ Basic nRF24 bidirectional TRANSMIT routine
\
\ Transmit T &amp; receive : and a count as answer
\
\ Extra words: MS
\ *BIS    ( mask addr -- )    Set the bits represented by mask at address
\ *BIC    ( mask addr -- )    Clear the bits represented by mask at address
\ *BIX    ( mask addr -- )    XOR the bits represented by mask with the bits at address
\ B+B     ( bl bh -- 16-bit ) Combine two bytes to a 16-bit word
\

0 value WAIT      \ Hold on/off period time
: KICK-NRF24    ( -- )
    0 to #me …</description>
    </item>
</rdf:RDF>
