M/PC – A Concatenative OS

caminanteblanco1 pts0 comments

XXIIVV — m pc

•/PC

M/PC is a concatenative operating system for Varvara, inspired by Openfirmware, designed to manage files on system without a file browser. It uses the postfix notation, meaning that the function success their operands:

( Get the number of bytes in folder/file_name )<br>folder/ file_name cat len dec

Files can store reusable sequences of commands, the tilde prefix includes the content of the file:

( Content of ./show-slide )<br>slide_ swp cat 3cx22.icn cat 1 icn

1 ~show-slide

The interface uses a single prompt at the top of the screen to input commands:

Controls

The operating system can be used largely without a keyboard to navigate folders and launch roms:

left/right Navigate Stack

up/down Scroll Stack

A Evaluate Selected Symbol

B Directory/Back

Kiosk

To start M/PC as a BIOS rom so that when the user presses F4, Varvara returns to the BIOS instead of triggering a reboot, launch with arguments:

uxnemu m_pc.rom orca.rom run

Wallpaper

On boot, M/PC will try and draw an ICN file named wallpaperWWxHH.icn, where WW is the width of the screen divided by 8 in hexadecimal, and HH the height.

Reference

Here is the list of all primitives:

dir ( -- [f] )<br>Put the file names in the current location on the stack.<br>mov ( path -- [f] )<br>Move the current location to current/path, then do dir.

now ( -- date time )<br>Puts the date Tue, 23 Jun 2026, and time 11:48:45 on the stack.

run ( f.rom -- ok )<br>Run the rom file, return with F4.<br>icn ( f.icn blend -- ok )<br>Draw an icn file with blend.<br>txt ( f.txt line -- ok )<br>Read a text file starting at line.

len ( f -- hex )<br>Put the length of a file in hexadecimal.<br>put ( body f -- ok )<br>Create a file with the content of body.<br>get ( f -- body )<br>Put the content of a file on the stack.<br>cpy ( fsrc fdst -- ok )<br>Copy the content of fsrc into fdst.<br>era ( f -- ok )<br>Erase file.<br>ren ( fsrc fdst -- ok )<br>Rename file fsrc into fdst.

pop ( a -- )<br>Pop symbol at the top of the stack.<br>dup ( a -- a a )<br>Duplication symbol at the top of the stack.<br>ovr ( a b -- a b a )<br>Copy second symbol to the top of the stack.<br>swp ( a b -- b a )<br>Pull the second symbol to top.<br>rot ( a b c -- b c a )<br>Pull the third symbol to top.

add ( a b -- a+b )<br>Push the sum of two symbols.<br>sub ( a b -- a-b )<br>Push the difference of two symbols.<br>dec ( hex -- dec )<br>Convert hexadecimal number to decimal.<br>hex ( dec -- hex )<br>Convert decimal number to hexadecimal.<br>cat ( a b -- ab )<br>Concatenate two symbols.

cmp ( a b -- bool )<br>Compare the names of two symbols.<br>and ( a b -- bool )<br>Put true if both symbols are true.<br>ora ( a b -- bool )<br>Put true if either symbol is true.

rsz ( width height -- )<br>Resize the screen, puts true if resize is supported by Screen.<br>out ( a -- )<br>Output symbol to Console/write.<br>bye ( -- )<br>Quit.

Source, Latest

Repository

Support:<br>Manifest<br>Theme<br>Snarf

incoming: 2026

file stack symbol content symbols true

Related Articles