First you need to understand how color works in TPT, that color consists of a mix of 30 predefined wavelengths that can either be on or off. Each of the 30 wavelengths has its own unique number (a power of 2), and a color value is the sum of the wavelength numbers that are present in the color. This is explained on the Wiki's wavelengths page.
Note that light (like PHOT or BRAY) in TPT has to have at least one wavelength set (it has to have a color) and if a BRAY or PHOT loses its last wavelength by some process it gets annihilated, a PHOT particle gets removed and a BRAY stops at the point of annihilation. This is important later because we use annihilation to extract information from light.
Because color consists of 30 wavelengths that can either be on or off, we can use color to encode 30 signals that can either be on or off (in other words encode 30 bits of information) with the caveat that at least 1 of the 30 signals/bits must be on or else light that transports the information will get annihilated. To make things easier and make sure light will only get annihilated if we want it to, we'll always have one wavelength on (the wavelength with the highest number is most practical for this), in other words we'll use 1 of the 30 wavelengths as a carrier and the other 29 wavelengths to store or transport information.
Second you need to learn how FILT works, how you can use it to change the wavelengths of incoming light. When you shine a light through a FILT the FILT combines its wavelengths with the wavelengths of the incoming light according to its filter mode. We can use FILT's SET mode to set the color of the outgoing light, OR mode to add wavelengths to the outgoing light, and AND mode to filter out wavelengths. "No effect" mode is surprisingly useful too because you can use it to set a value in absence of an BRAY.
The third an final part of information you need is that LDTC or DTEC can be used to read wavelengths and store them in a FILT.
Once you've got that covered (and I know it's a lot) you should be able to understand howto encode and decode signals with FILT:
Thanks, feel free to ask questions if things are unclear. Also there is more to learn about FILT (how to build memory for example) so let me know if you're ready for that.
A practical tip: use the "Subframe Chipmaker Script" to easily read FILT and BRAY values (in the HUD when you hover over the FILT/BRAY), and a visual way to configure LDTC properties (after pressing the C key to enter Configure mode and clicking on the LDTC) instead of messing with tmp and life values. You can use it to easily layer/stack particles too.
Because we need to address our memory (we need to tell it from which memory location to read) and a memory address is just a number, it's useful to have a basic understanding of binary numbers.
The save below demonstrates how to built the simplest form of FILT ROM. Once you've got that down we'll construct a serialization based ROM, and then graduate to RAM.
(You get nice link to your save if you precede its ID number with a ~ )
Cool, so we use binary to adress a specific pixel of FILT we want to read, also I think this is very similar to this thingy I made
This save demonstrates how to construct two versions of serialization based FILT ROM, one realtively easy to understand and one that uses every trick in the book (except for subframing) to make it as fast as it gets (1 frame delay).