Using the words in max7219defs.fs and max7219cmd.fs you can control the digits, using either BCD, or controlling the segments individually. Using BCD make your programming much simpler but only gives you four letters to work with (besides the number characters).
I used individual segment control to make this simple demo which lights up each segment in sequence. Here is a video — sorry for the fuzzy image:
This will be a short post, since I’ve only been playing around with durexforth for a few minutes so far. But some things I already like about durexforth:
Is coded for the great retro Commodore 64 PC
Is licensed under a free software license (MIT License)
As you see in the above screenshot, you can use the % prefix to designate binary input, which is great.
Screenshot from the durexforth tutorial video
Here are the word listings:
Word list page 1
Word list page 2
I’m in the process of installing the texlive Guix package so I can try to build he durexforth PDF documentation and learn more about this FORTH. Some additional gratuitous screenshots of me playing around in durexforth:
My apologies to the Beethoven fans as I had to do some violence to the tune in order to make it monophonic and to fit it inside the 3 octaves provided by my code. I also had to apply some filtering to the recording to try to remove background noise in my apartment.
Here is the tune in source code:
create furelise-p1
d_16th ne o5 == d_16th nd# o5 == d_16th ne o5 == d_16th nd# o5 ==
d_16th ne o5 == d_16th nb o5 == d_16th nd o5 == d_16th nc o5 ==
d_8th na o5 == d_16th nr nr == d_16th nc o4 == d_16th ne o4 ==
d_16th na o5 == d_8th nb o5 == d_16th nr nr == d_16th ne o4 ==
d_16th ng# o4 == d_16th nb o5 == d_8th nc o5 == d_16th nr nr ==
d_16th ne o4 == d_16th ne o5 == d_16th nd# o5 == d_16th ne o5 ==
d_16th nd# o5 == d_16th ne o5 == d_16th nb o5 == d_16th nd o5 ==
d_16th nc o5 == d_8th na o5 == d_16th nr nr == d_16th nc o4 ==
d_16th ne o4 == d_16th na o5 == d_8th nb o5 == d_16th nr nr ==
d_16th ne o4 == d_16th nc o5 == d_16th nb o5 == end-score
create furelise-p2 d_quarter na o5 == end-score
create furelise-p3
d_8th na o5 == d_16th nr nr == d_16th nb o5 == d_16th nc o5 ==
d_16th nd o5 == end-score
create furelise-p4
d_dt-8th ne o5 == d_16th ng o4 == d_16th nf o5 == d_16th ne o5 ==
d_dt-8th nd o5 == d_16th nf o4 == d_16th ne o5 == d_16th nd o5 ==
d_dt-8th nc o5 == d_16th ne o4 == d_16th nd o5 == d_16th nc o5 ==
d_16th nb o5 == d_16th ne o4 == d_16th ne o5 == d_16th ne o4 ==
d_16th ne o5 == d_16th ne o4 == d_16th ne o5 == d_16th ne o4 ==
d_16th ne o5 == d_16th ne o5 == d_16th ne o6 == d_16th nf# o4 ==
d_16th ng o4 == d_16th nd# o5 == d_16th ne o5 == d_16th nf# o4 ==
d_16th ng o4 == d_16th nd# o5 == d_16th ne o5 == d_16th nd# o5 ==
d_16th ne o5 == d_16th nd# o5 == d_16th ne o5 == d_16th nb o5 ==
d_16th nd o5 == d_16th nc o5 == d_16th na o5 == d_16th ne o4 ==
d_16th na o4 == d_16th nc o4 == d_16th ne o4 == d_16th na o5 ==
d_16th nb o5 == d_16th ne o4 == d_16th ng# o4 == d_16th ne o4 ==
d_16th ng# o4 == d_16th nb o5 == d_16th nc o5 == d_16th ne o4 ==
d_16th na o4 == d_16th ne o4 == d_16th ne o5 == d_16th nd# o5 ==
d_16th ne o5 == d_16th nd# o5 == d_16th ne o5 == d_16th nb o5 ==
d_16th nd o5 == d_16th nc o5 == d_16th na o5 == d_16th ne o4 ==
d_16th na o4 == d_16th nc o4 == d_16th ne o4 == d_16th na o5 ==
d_16th nb o5 == d_16th ne o4 == d_16th ng# o4 == d_16th ne o4 ==
d_16th nc o5 == d_16th nb o5 == end-score
create furelise-p5 d_dt-quarter na o5 == end-score
That occupied 326 bytes of memory, which was the score bytes along with the bytes needed for the word headers (furelise-p1, etc.) It was divided into five parts to save memory, since some of the parts are repeated.
Free software source code and documentation are available here: