~~META: language = en ~~ {{pfw:full-banner.png?500 }} ====== 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've seen one Forth, you've seen one Forth**. With this project we want to acknowledge our differences and start sharing despite the many different Forths dialects. The core idea of ​​this project is to use a simple, generic version of Forth to spread ideas, algorithms, protocols, applications and hardware drivers. This generic version of Forth guarantees that it can be understood and used by (almost) everyone in the Forth community. [[https://Project-Forth-Works.github.io/index-orig.html|Click here for an introduction to Project Forth Works]]\\ [[https://project-forth-works.github.io/well-known-words.txt|Well known words implementation examples in Generic Forth]] ===== Contribute ===== Contributing to the Project Forth Works is as easy as 1,2,3. All pages are written in [[wiki:syntax|Wiki Syntax]] format and editable once you register with the web site. You can use the [[playground:playground|playground]] to make your Wiki experiments. You can contribute in different ways, your choice: * Leave your comment in the discussion box below. * Append another implementation to the existing one: * You can easily edit the page using the Edit button at the bottom of the page or the pencil icon to the right of the document. * Then just add your implementation between the '''' and '''' tags. * Save the page. * Add a new idea: * Give it a name here in this document (e.g. in the category section below). Save this document. * Follow the red link to your new idea. * Create it using the pencil icon to the right of the new document. * Customize the pre-filled template to help you structure it. * Preview and edit, repeating until you are satisfied. You can save intermediate versions and continue editing later. * Save your new idea document. That's it. ===== Browse Project Forth Works ===== To see what ideas have already been described, please see the [[https://wiki.forth-ev.de/doku.php/en:pfw:2log?do=index|wiki site map]] ===== A selection of ideas ordered by category ... ===== ====Algorithms==== * [[en:pfw:random_generators_xorshift|XORshift Random-generator]], different random number implementations * [[en:pfw:piliplop|PiliPlop]], an algorithm to move multiple processes, to reach its targets together * [[en:pfw:string_handling|String handling]], primitive string handling in variations * [[en:pfw:base-ffbase|Changing the number base]], instead of modifying the interpreter, this just loads on top * [[en:pfw:crc_generation|CRC-generation]], check whether a set of data, like a string, is unchanged and intact. * [[en:pfw:DLSHIFT DRSHIFT]] * [[en:pfw:SHA-256]], generate a SHA-256 hash ====Communication Protocols==== * [[en:pfw:spi]], Serial Peripheral Interface\\ * [[en:pfw:i2c]], Inter Integrated Circuit bus * [[en:pfw:wireless|Wireless communication]], Transceivers using different frequencies & protocols ====Data Structures==== * [[en:pfw:buffer|Buffer]], a simple memory buffer * [[en:pfw:array|Array]], a simple one dimensional array with implicit indexing * [[en:pfw:primitive-circular-buffer|Primitive Circular Buffer]], a buffer with a single read/write pointer * [[en:pfw:bit-array|Bit array]], an array with addressing of individual bits * [[en:pfw:map|Map]], a map from strings to values aka dictionary ====System Software==== * [[en:pfw:assemblers_armv8_20assembler|Assember for ARM processors]] * [[en:pfw:assemblers_msp430-assembler|Assembler for MSP430]] * [[en:pfw:disassembler_msp430-disassemblers|Disassembler for MSP430]] * [[en:pfw:assemblers_rp2040-assembler|Assembler for RP2040]] * [[en:pfw:disassemblers_rp2040-assembler|Disassembler for RP2040]] * [[en:pfw:assemblers_pio-assembler|PIO (dis)assembler for RP2040]] * [[en:pfw:file_systems|NOF file system]] * [[en:pfw:multi_tasker|Cooperative Multitasker]] * [[en:pfw:library|Library mechanism]] ====Programming Tools==== * [[en:pfw:multiline-comments|multiline comments]]: comment regions of text, nest-able * [[en:pfw:dump|DUMP]] a tool to display memory content * [[en:pfw:substitution-phrases|Substitution Phrases]]: phrases that replace well known but undefined words * [[en:pfw:stackchecking|Stack Checking]]: Runtime stack checking of colon definitions ====Programming Pearls==== * [[en:pfw:day-of-the-week|Day of the week]]: work with string sequences, map from number to string * [[en:pfw:print-hex|Print Hex]]: print hex numbers with variable number of digits, w/o <# # #> * [[en:pfw:condicompi|Conditional Compilation]]: process part of the program text depending on conditions and variants, ICE concept * [[en:pfw:population_20count|Population Count]]: counting the number of set bits in a byte or word * [[en:pfw:2log]]: The 2LOG routine converts a linear input into something with a more logarithmic character. ====Implementation Ideas==== * [[en:pfw:kangoeroe]]: Using does> outside colon definitions: words with data. * [[en:pfw:flyer]]: Define compiling words by just specifiying their compilation semantics. * [[en:pfw:prefixes|Prefix]]: Defining prefix operators in a portable way ====User Application==== * [[en:pfw:simulation-forest_fire|Forest fire]]: Siulation of computer generated fire * [[en:pfw:simulations-cozy|Cozy]]: Simulation of agents which, if given the chance, move to a place where they feel more at home. ====Curiosities==== * [[en:pfw:do_plusloop_curiosity|do_plusloop_curiosity]]: A high level implementation of DO +LOOP with two limits ====Sensors==== * [[en:pfw:measuring-distance|HC-SR04]], Measures distance using Ultrasonic sound * [[https://github.com/project-forth-works/project-forth-works/blob/main/Communication-Protocols/I2C/Device-drivers/LM75.f|LM75(A)]], Measures temperature with .5° Celsius resolution * [[https://github.com/project-forth-works/project-forth-works/blob/main/Communication-Protocols/I2C/Device-drivers/TMP75.f|TMP75]], Measures temperature with 0.0625° Celsius resolution * [[https://github.com/project-forth-works/project-forth-works/blob/main/Communication-Protocols/I2C/Device-drivers/APDS9300.f|APDS9300]], Infrared and visual light sensor * [[https://home.hccnet.nl/willem.ouwerkerk/egel-for-msp430/egel%20for%20launchpad.html#e018|PIR]], Passive infrared motion detector * [[https://home.hccnet.nl/willem.ouwerkerk/egel-for-msp430/egel%20for%20launchpad.html#e019|Touch]], Capacitive touch sensors & slider * [[https://home.hccnet.nl/willem.ouwerkerk/egel-for-msp430/egel%20for%20launchpad.html#e018|Mechanical switch]], Touch switch on simple robotic sensor unit * [[https://github.com/project-forth-works/project-forth-works/blob/main/Communication-Protocols/SPI/GD32VF/mecrisp-quintus/BME280/BMP280.fs|BME280]], Measure pressure, temperature and humidity * [[en:pfw:reflection-sensors|TCND5000]], Reflection sensor, detection of nearby subjects, other examples are [[https://www.sigmaelectronica.net/manuals/IS471F.pdf|IS471F]] or [[https://www.vishay.com/docs/83751/cny70.pdf|CNY70]], see [[https://home.hccnet.nl/willem.ouwerkerk/download/ushiboek.pdf|Ushi book]]| [[https://github.com/project-forth-works/project-forth-works/tree/main/Communication-Protocols/I2C/Device-drivers|On the P.F.W. I2C drivers]] overview page you may find some more documentation ====Miscellaneous==== * [[pfw:yournewidea]] ===== Help us improve Project Forth Works ===== === Please add your suggestions below. === ~~DISCUSSION~~