uxn
------------------------------------------------------------------
I just discovered uxn, a programmable virtual computer with its own
assembly language. I spent a few hours learning it over the last
couple days and it's extremely fun. I did do a little bit of
assembly when I was in engineering school around 10 years ago, but
it's nothing like "uxntal" (or simply tal), the assembly
programming language that comes with uxn. It comes with great ideas
that makes writing assembly a little like a game.

So hold and behold my first rom, it's called "bg-change" and it
changes the background color over time. Pretty slick, isn't it?
Code below, if you're interested.

You can actually run this rom by heading to:
=> https://metasyn.github.io/learn-uxn/

From there you can copy/paste the code and assemble it. You'll
probably be disappointed though!

However if you do want to learn how to program the uxn machine,
have a look at the following tutorial:

=> https://compudanzas.net/uxn_tutorial.html

And now the code:

```
( bg-change.tal )
( Change bg color over time)

( devices )
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2
&addr $2 &pixel $1 &sprite $1 ]

( macros )
%ADD-VAL { #0800 } ( -- val )

( zero page )
|0000
@loop [ &r $1 &g $1 ]

( init )
|0100
( set system colors )
#9728 .System/r DEO2
#3928 .System/g DEO2
#1af3 .System/b DEO2

( attach the address of on-frame to the screen vector )
;on-frame .Screen/vector DEO2
BRK

@on-frame ( -> )
loop/r LDZ #00 EQU
,&red JCN
loop/g LDZ #00 EQU
,&green JCN
,&blue JMP
BRK

&red
System/r DEI2 ADD-VAL ADD2 .System/r DEO2
#01 .loop/r STZ
BRK
&green
System/g DEI2 ADD-VAL ADD2 .System/g DEO2
System/g DEI2 #ffff EQU ,&reset-red JCN
#01 .loop/g STZ
BRK
&reset-red #00 .loop/r STZ
BRK
&blue
System/b DEI2 ADD-VAL ADD2 .System/b DEO2
System/b DEI2 #ffff EQU ,&reset-green JCN
BRK
&reset-green #00 .loop/g STZ
BRK
BRK
```