m15o

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

EOF

Written with Smol Pub

From Dusk's End, Nightfall City

m15o@posteo.net