Varvara Multiplexer, written in Tal/ANSI C(SDL2)
Go to file
Devine Lu Linvega 69c85c3d45 Updated uxnasm 2024-06-01 09:42:24 -07:00
src Updated uxnasm 2024-06-01 09:42:24 -07:00
.clang-format let us begin 2023-11-23 19:33:22 -08:00
.gitignore Moved roms c files in src 2023-12-15 12:43:07 -08:00
LICENSE let us begin 2023-11-23 19:33:22 -08:00 Starting docs 2023-12-17 10:22:53 -08:00
makefile Fix macOS builds 2024-01-01 19:57:05 -08:00


Porporo is an experimental operating system specification for Varvara, written in Uxntal and ANSI C. For more details, see the devlog.


To build the emulator, you must install SDL2 for your distro. If you are using a package manager:

sudo pacman -Sy sdl2             # Arch
sudo apt install libsdl2-dev     # Ubuntu
sudo xbps-install SDL2-devel     # Void Linux
brew install sdl2                # OS X

To build Porporo and the required roms:

make run

Since parts of Porporo are built with itself, we need to have a partial implementation of the varvara ecosystem(src/uxncli), and an assembler(src/uxnasm). Compiling porporo begins by building these two tools, then assembling the roms required by porporo(menu.rom, wallpaper.rom, potato.rom). These 3 roms then needs to be converted to C style arrays with format-c.rom rom. When this is done we can finally compile porporo.

Global Controls

  • F1, lock varvara.
  • F2, center varvara.
  • F4, exit varvara.
  • F5, soft-reboot varvara.

Action Controls

  • esc, set normal mode.
  • m, set move mode.
  • d, set draw mode.



  • tab, see all files.
  • esc, exit.
  • mouse1, or enter, run file.
  • mouse2m or shift+enter, send filename.


The rom expects a file named .wallpaper in the chr format that is large enough to fill the screen. The way I do it is by, first getting the screen size(let's say 1328x640), creating a wallpaper.tga image at that size, converting it with tgachr, generating a file named wallpapera6x50.chr, and finally renaming it to .wallpaper. Voila!

uxncli ~/roms/tgachr.rom wallpaper.tga
mv wallpapera6x50.chr .wallpaper


Potato is the menubar rom that holds some of the state of porporo in its zero-page:

  • 0x00* action vector
  • 0x02 action value


Porporo listens special console messages types:

  • 0xff run command
  • 0xfe set action type

Need a hand?

The following resources are a good place to start:

You can also find us in #uxn on


Submit patches using git send-email to the ~rabbits/public-inbox mailing list.