#uxntal — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #uxntal, aggregated by home.social.
-
CW: long code snippet, not screen-reader friendly
using my fork of drifblim, OOP and inheritance looks like this:
@animal ( | type enum ) >{ |0 &+ |} ( | dispatch tables ) @/[]eat &+ $10 @/ @/[]speak &+ $10 @/ @/[]move &+ $10 @/ &default-eat ( self* -- ) { "... 00 } STH2r str/print POP2 JMP2r &default-speak ( self* -- ) { "... 00 } STH2r str/print POP2 JMP2r &default-move ( self* -- ) { "... 00 } STH2r str/print POP2 JMP2r ( | init defaults ) %/Def{ { >{ |&[]eat/+ =&default-eat |&[]speak/+ =&default-speak |&[]move/+ =&default-move |&+ } ( | bump pointers ) %/Def} { |&+ $1 &+ |&[]eat/+ $2 &[]eat/+ |&[]speak/+ $2 &[]speak/+ |&[]move/+ $2 &[]move/+ |} } ( @|Cat ) /Def{ &Cat |&[]speak/+ =&Cat/speak /Def} @/Cat &speak ( self* -- ) { "meow! 00 } STH2r str/print POP2 JMP2r @/ ( @|Dog ) /Def{ &Dog |&[]speak/+ =&Dog/speak /Def} @/Dog &speak ( self* -- ) { "woof! 00 } STH2r str/print POP2 JMP2r @/ ( @|Flying ) %/Flying/Def{ { /Def{ |&[]move/+ =&Flying/move |&+ } %/Flying/Def} { /Def} } @/Flying &move ( self* -- ) { "swoosh... 00 } STH2r str/print POP2 JMP2r @/ ( @|Bird ) /Flying/Def{ &Bird |&[]speak/+ =&Bird/speak /Flying/Def} @/Bird &speak ( self* -- ) { "chirp! 00 } STH2r str/print POP2 JMP2r @/ ( @|Bat ) /Flying/Def{ &Bat |&[]speak/+ =&Bat/speak /Flying/Def} @/Bat &speak ( self* -- ) { "eep! 00 } STH2r str/print POP2 JMP2r @/
#uxn #uxntal -
Ported the uxntal.vim syntax highlighting plugin over to Lua for Neovim.
Adds :checkhealth functionality, matchpairs support (so % jumps between pairs), and vimdocs (:h uxntal).
-
I'm starting a blog today at Uxnomicon so I dont flood the #uxn #uxntal and #varvara or the irc channel lol
Sorry about that, sometimes I feel to exited and start talking to myself, but I don't want to spam anyone.
If you are a Uxner, feel free to use Uxnomicon for your dev blog (about uxn related) or for your uxn projects documentation, you don't even need to register to contribute to this uxn wiki.
-
Uxntal scripting unlocked!
https://paste.sr.ht/~ismael-vc/88d172dc4955d221be6db2136ce7406f5629dff5
Paired with uxncli11 subproccess API, I can actually run my own build chain in uxntal alone.
I'm calling it bake, first to be used in the uxntal koans:
https://git.sr.ht/~ismael-vc/uxntal-koans/tree/main/item/bakefile.tal
I am currently using a wrapper in gforth, but now that I can use shebangs for uxn I don't think I need that anymore! <3
-
yeyyy we have assert-mem with colors! 🎨
Do you think it is readable? the test source and the output?
The implementation just give me time to make it better, but I'm glad this works now.
Now I only have to fix the stack checking assertion and I think it is complete, and ready fro the uxntal koans. ✅
I'll have to provide my own copy of drifblim with coloring, because the first exercise will be to fix the syntax of a broken test suite, then to actually fix the tests!
-
-
Just finished the stream!
I implemented some debugging routines inspired by @ show macro in julia, I defined @ show/byte and @ show/short
ie:( introspection )
{ "@ foo } ;foo show/byte
{ "@ bar } ;bar show/shortBRK
( variables )
|1335 @ foo [ 42 ]
|1337 @ bar [ 1337 ]~src/zen.tal
it get printed like (with colors if enabled)
|04f8 @ foo 42 ( B )
|04f9 @ bar 1337 ( .7 ) -
Live streaming Zen development in 10 minutes this time I'll be speaking : )
-
I made some progress on the "Uxntal Koans":
https://git.sr.ht/~ismael-vc/uxntal-koans
Since this is for the #catjam, I decided to manage my own build tool in Tal with a thin wrapper in Forth, so I just call:
$ ./bake
$ ./bake cleanInstead of:
$ bin/uxncli bin/bakefile.rom clean
And the setup has to be done either way outside uxntal; make sure bin dir exists, compile uxncli with subprocess support and assemble the bakefile.tal.
Once that is done, the rest will be handled 100% by uxn!
-
Zental testing framework in 1 KiB for Uxntal, version 1.0.0!
Code:
https://git.sr.ht/~ismael-vc/zentalDocs and examples:
https://uxnomicon.miraheze.org/wiki/ZentalI still have one month before the #catjam ends in which I'll try to implement "Uxntal Koans". 📜
Inspired by the original "Ruby Koans", an introductory tutorial to the language as a series of test cases the learner has to fix in order to reach enlightenment! 🧘
I intended to make a TUI game at first but I like the idea of koans better. :P
-
I spent the night fixing my zen #uxntal testing lib, the documentation is updated:
https://uxnomicon.miraheze.org/wiki/Zental
Added:
* ValueError if expression is not reduced to 00 or 01.
* ArityError (OverLeak and UnderLeak) if wst is not in an expected state before running a test and halt immediately.
* early toggle to exit on the first failed test (default is to keep going).With this I think I can start implementing uxntal koans. :)
200 lines of code, 1042 bytes gotta shave 18 bytes at least.
almost done!
-
CW: cursed code, not screen-reader friendly
-
CW: cursed code, not screen-reader friendly
hacked modifiable labels into uxntal, for spooky action at a distance :P
|0 @type/Ptr+ ... @type %/[ { >{ ( } ) |&Ptr+ } %/] { &Ptr+ |}_ } &vtable &vtable/Ptr+ %/{ { >{ ( } ) |&vtable/Ptr+ } %/} { &vtable/Ptr+ |}_ } &dispatch ( type -- ) #0018 SFT2 ;&vtable ADD2 LDA2 JMP2 ~frob.tal ~knob.tal ~smob.tal( | frob.tal ) /[ &Frob $1 /] /{ =&frobnicate /} &frobnicate ( -- ) JMP2rmakes organizing OOP stuff a lot easier!
#uxntal #uxn #0018 #0018 -
Take a seat aboard the Lepore Express, listen to a bit of music, play games, look outside, kickback, try to meet with everyone.
This is @rek and I's humble submission to #Catjam 2026, this rom features a ton of cameos from all sorts of projects we've released over the past 10 years, how many can you recognize? It's written in #Uxntal, a concatenative assembly language.
play/download: https://hundredrabbits.itch.io/lepore-express-line
source: https://wiki.xxiivv.com/etc/flick.tal.txt -
hexdump -C needed a spa day, so I gave it a massage:
https://paste.sr.ht/~ismael-vc/a074bf4e12d557fce43da4a13cfd038baf275f09
Though I'm making my hexdump a tool that can be passed a ROM file as an argument (it was inspired by hexdump -C), it is nice to see that with a little effort is doable as well with the existing tools.
I also bought the awk pocket reference, so useful.
(If there is a better way to do this with awk, I'd love to learn!)
-
Live coding Zen an Uxntal testing library:
https://www.youtube.com/watch?v=YEp6Vhtfta0
#uxn #uxntal #varvara #TDD #virtualmachine #fantasycomputer #assemblylanguage
-
I made an article at #Uxnomicon documenting the API of Zen, my tny #Uxntal testing framework:
https://uxnomicon.miraheze.org/wiki/Zental
I hope it might be helpful for others as it has been to me!
: )
-
#Uxntal #testing #framework in 760 bytes.
https://paste.sr.ht/~ismael-vc/2f2d41f245481d121632654f86effbcdf25457ac
I have called it Zental, in the images you can see it testing itself (the failed tests are expected).
Usage: https://paste.sr.ht/~ismael-vc/82d44be228adaf7be199e2e2bca77bd1c36ad729
Just create a routine under the @ test scope, ie:
@ test/foo ( -> )
/verbose
{ "some 20 "set } /set
{ "some 20 "subset } /subset
#01 #0101 EQU /assert
/end-subset
/end-set
/summary
BRK~zen.tal
I'll put it in a repo soon. :3
-
Today I have implemented malloc in 76 bytes in #Uxntal .
https://paste.sr.ht/~ismael-vc/21de76cd6c103a469ff06f33696a95c49bf87508
After fiddling with this all afternoon, I finally have implemented a malloc other than the simple "bump pointer allocator" I was using.
I'll work on mfree, but that will be for tomorrow.
I changed the unit size to byte instead of 64 bytes because there is no MMU expecting it in 64 bytes in #Uxn as it was in the PDP, so it makes no sense in Uxn? might bite me later.
Catmon was indispensable.
-
Every byte counts!
I just learned this in a video about making a 3.5 KiB notepad exe.
#uxntal flag terminated strings:
https://paste.sr.ht/~ismael-vc/a53a443af999d68ebe7ea1c7474759f174946604
It keeps strings readable and saves bytes, without being just a compressed raw blob. It is easy to calculate the value of the terminator char, I think it is a nice thouch :D
-
@emilio conoces el lenguaje de programación Julia?
Me parece esta comparación es mejor para principiantes ya que Julia tiene GOTO:
https://paste.sr.ht/~ismael-vc/fd6ebeb97e8be75025662f546254b39cf455bc7e
También he estado pensando en usar un pseudocódigo procedural y ser consistente en los ejemplos que lo usen, algo así:
https://paste.sr.ht/~ismael-vc/04e9022ff7f7c9aca988592638a0ad9ea2f22f91
La idea es explicar la semántica del algoritmo para que sea mas fácil asimilar la sintaxis de #Uxntal (en realidad es muy poca ya que es un lenguaje minimalista, pero que da mucha libertad).
: )
-
Uxnomicon now has support for the Monotal (Monokai for Uxntal) light and dark themes!
- https://git.sr.ht/~ismael-vc/monotal
- https://uxnomicon.miraheze.org/wiki/MediaWiki:Common.css
- https://uxnomicon.miraheze.org/wiki/MediaWiki:Common.jsThe site will respond to your user preferences, if set to auto it changes theme according to your OS theme, else you can manually toggle it using the eye glasses icon (appearance).
Syntax test page: https://uxnomicon.miraheze.org/wiki/Acid.tal
-
Light and Dark Monokai Theme for #Uxntal in SourceHut.
It uses one user script and one user css style sheet.
I like the Terminus font, but you can change it for your favorite, and of course the colors, font size and line spacing as well.
https://git.sr.ht/~ismael-vc/monotal/tree/main/item/src/srht
This is running in Linux, Firefox using the Stylus and ViolentMonkey plugins. I'll make a setup guide shortly.
It will automatically update the theme as I change the OS wide theme.
Still doing some last tweaks : )
-
I found the way to get an absolute reference out of a relative one the other day in #uxn , but what happens if the byte offset is to far away?
_foo $100 @ foo
Error: foo too far!
The following 4 bytes do the trick this time
%:patch ( [JSI] -- [LIT2] ) { [ LIT2 LIT2 00 ] STR }
:patch foo ( rel* )
This in combo with the previous setup allows more room to make relocatable AOT assembled libraries that are easy to include or copy paste.
Sorry for abusing the < > overload. :P
-
I worked today in #uxn syntax files and I got a consistent style across the micro editor, sublime text and pygments!
https://git.sr.ht/~ismael-vc/monotal
There are instructions on how to use them in the readme.
Pink: Opcodes
Orange: % ~ (bold, italic)
Yellow: | $
Green: # "
Cyan: @ & (bold)
Purple: . , ; - _ =
Gray: ( ) [ ] (italic)
White/Black: { } foo /foo !foo ?foo 00
Cream/Dark Grey: background
Light Grey: highlightMonotal is just how each uxntal token is mapped to a Monokai color.
-
I have updated my #Uxntal syntax definitions for #micro and #subl Sublime Text, as well as #Python #Pygments
https://git.sr.ht/~ismael-vc/monotal
What I want is consistency in the coloring of the uxntal tokens, this is not about the color palette precisely.
I'm making a book using Pygments and #Sphinx that will use these.
Sublime Text and Pygments are using the Monokai Pro theme colors.
Micro is using it's default Monokai theme.
But you can see all tokens are consistently themed.
: )
-
If you ever need a relocatable #Uxntal routine's byte code (not the source but the ASCII hexdump), yet your code needs to embed an absolute address, ie. in system expansion commands or device vectors.
This will do the trick
%:PC ( -- pc+3* ) { [ LITr 00 JSRr ] }
|9 @ offset2>>
%<< ( -- offset* 0 ) { :PC ;offset2>> ADD2 #00 }
%>> ( offset* 0 rel -- abs* ) { ADD2 }[
@ foo ( -- )
( ... )
<< ,on-console >> .Console/vector DEO2
( ... )
JMP2r@ on-console ( -> )
( ... )
BRK
] -
Does anyone have a better way to convert a relative address to an absolute address generically for relocatable libraries?
This is how I define it, currently using 2 macros
https://git.sr.ht/~ismael-vc/software-tools-in-uxntal/tree/main/item/src/lib/log/mem.tal#L54
(relocatable in the sense the preassembled text bytecode can be relocated not the source code!)
This is how I use it:
https://git.sr.ht/~ismael-vc/software-tools-in-uxntal/tree/main/item/src/lib/log/mem.tal#L111
( save abs addr of /+dst in /dst )
<< ,/+dst >> ,/dst STR2( pass abs addr of /cmd to expansion )
<< ,/cmd >> .System/expansion DEO2 -
I have a plan to make #Uxntal tutorials for people from other programming languages.
Since I don't have much time for planning, starting now, I'll be dumping examples, exercises, etc. as they pique my interest and later I'll order them.
So I'll start with log/mem in uxntal and log_mem in python:
https://uxnomicon.miraheze.org/wiki/Uxntal_for_Python_users
They even have the exact same bug!
Can you find it? ; PI'm working on fixing it and making log/mem accept a length to dump and an extended ram bank as well.