Thread with 42 posts

jump to expanded post

there are a number of important limitations, but it's already usable enough to write small games and demos. with some effort, it's even possible to port some existing software! i've managed to get a certain classic app working in it. i'm hoping to announce it soon :3

Open thread at this post

the fact it's a stack machine makes it really fun to write (or generate!) assembly for. you never have to remember register numbers, all the inputs and outputs are implicit. the magic of concatenative programming~

Open thread at this post

one of the challenges was that uxn doesn't have signed integer operations, but they're essential for c code, so i had to write some little helper routines that emulate signed operations. for example, this does sign extension (char->int conversion):

#80 ANDk EQU #ff MUL SWP
Open thread at this post

btw, uxn/varvara is a really impressive vm. what amazes me is how small it manages to keep its api surface while still providing everything you could want: graphics, sound, mouse input, keyboard input, gamepad input, file i/o, a real-time clock, stdin, stdout and stderr!

Open thread at this post

it does all of that while having far fewer api entrypoints than posix or wasi or the browser or any api you can think of, and they're all defined in such simple and constrained ways that there's very little room for incorrect implementations (though still some: i have found bugs)

Open thread at this post

so i think uxn apps will have fantastic portability. better even than famicom roms, and yet they can do more!

it'll never replace wasm: apps can only use 16-bit integers, a 64KiB address space and 2-bit color. but that's still a whole universe of creative potential. i love it.

Open thread at this post

i am pleased to announce oneko-uxn: a port of oneko-sakura to #uxn. this is a version of the classic software ”Neko”! 🐈🖱

https://github.com/hikari-no-yume/oneko-uxn

日本語版も有ります。

this all was made possible with chibicc-uxn, the c compiler for uxn that @lynn and i have worked on together.

have fun!

Open thread at this post

i painstakingly preserved the structure, comments, and feature set to the greatest extent possible… parts of this codebase are several years older than i am, and i wanted to respect the history. it's the most faithful port of this program that is possible, i think!

Open thread at this post

i found a bug in oneko-uxn: the 16-bit Euclidean distance calculation can overflow even for 8-bit inputs :(

but @lynn found a great alternative: the average of the L1 norm and L∞ norms is within ~6% of the Euclidean distance, and way easier to compute!

https://github.com/hikari-no-yume/oneko-uxn/commit/060bc664e647e3ea6d1362fa5d882c1d1b95a87c

Open thread at this post

@lynn @neauoire (cc)

this will probably be the final version, fwiw. i wasn't intending to have more than one version, but i wanted to fix that movement vector bug, and that made it clear the premise i had for not allowing window size customisation was wrong, so i added that too

Open thread at this post

oops, i forgot to recompile when i bumped the version number. i fixed that now, but this means someone out there might have a copy of the rom that reports a lower version number, but has the new features and fixes 👻

Open thread at this post

@cr1901 @lynn

0 ≤ x ≤ 2π

cx = cos(x)
sx = sin(x)

i plot a point at (cx, sx)

interpreting (cx, sx) as a vector from (0, 0), the euclidean distance is always going to be 1, right

i then calculate the same distance with our approximation, and plot a point at (cx * distance, sx * distance)

so the red line shows how far it strays from euclidean distance at various angles

Open thread at this post

@cr1901 @lynn you can see that at 0°, 90°, 180° and 270°, there's no difference, which should be intuitive considering that these are exactly the directions for which euclidean distance, L1/manhattan distance and L∞/chebyshev distance are identical, so an average of these last two should be the same as the first of these

Open thread at this post

@neauoire @lynn wow, that's some coincidence! but to be honest i was slightly surprised when i couldn't find an existing port to uxn. it felt obvious, hehe. I'm glad you like it!

my first exposure to Neko was playing a PalmOS port of it as a kid, around two decades ago, so i've had a lifelong fondness for it at this point.

Open thread at this post
lhp , @lhp@mastodon.social
(open profile)

@hikari @lynn Coincidentally I also recently used the old neko bitmaps for a personal project! If anyone wants code snippets for displaying them on Wayland using pixman, let me know. It is straight-forward, but pixman enforces a minimum stride and a minimum buffer size, which means you can't use the original sizes of the bitmap sprites. I ended up stitching them together into a texture atlas.

Open remote post (opens in a new window)

@cr1901 @lynn i can't really speak for lynn but i think the feeling is that we'd rather not have something requiring such heavy runtime support. it's not something most applications need, you should only use it sparingly, and you can just call it via asm, or maybe via improved extern support in the future

Open thread at this post

@neauoire thank you! i'm glad it's been so interesting. re: how C works, one reason i've enjoyed this project is that i've been able to practically apply a lot of my more obscure knowledge about C… for example, the rules about what type (signed)a + (unsigned char)b should use

Open thread at this post

@neauoire a lot of this stuff i've just gradually accumulated in my head over time so i don't know how i first learned most of these things, but i do have references i use to check my knowledge:

  • the C standard isn't available for free, sadly, but you can usually find a copy of the last draft before a particular published version

  • https://en.cppreference.com/w/c is the best online C documentation I know about

Open thread at this post

@neauoire my power is really in knowing what info exists, and what it is called, so i know what to look up. i know some magic keywords, like “usual arithmetic conversion” and “integer promotions”

Open thread at this post

@cr1901 @neauoire C is one of those complex things that people on the internet are often wrong about, so my one piece of advice is to look for answers that tell you what part of the standard to check, and then check that part of the standard, rather than trusting the answer itself

Open thread at this post