Minal OS -- An operating system written with Joy.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sts-q bed020fc73
games.minal: keybindings back to cursor-keys
5 months ago
fasm hello.minal: evals 5 months ago
further Resync with home. 5 months ago
inc games.minal: keybindings back to cursor-keys 5 months ago
iso Resync with home. 5 months ago
work initial commit 2 years ago
README.md hello.minal: evals 5 months ago
minal Resync with home. 5 months ago
mlog.txt write logfile to serial port. file-server.lisp 2 years ago


Minal-OS -- An operating system written with Joy.


A minimal operating system with a pretty small core written in Assembler, from there on written in Joy, booting with qemu or VirtualBox on x86_64. Small and simple enough, that even i can understand what's going on.

Minal-OS is heavily inspired by the fun i had working with froggeys Mezzano-OS. The main difference is Mezzano is written by a really really skillfull pro, while Minal is not! Mezzano is >100 kloc, Minal is <10 kloc.

An other difference is a recompile and boot cycle for Mezzano takes less than an hour while for Minal a recompile and boot takes about 5 seconds.


Joy is a programming language developed by Manfred von Thun. Original Joy is concatenative, stackbased and pure functional.

See the Joy mirror of Kevin Albrecht.

The main difference of the dialect used here to original Joy is that it emphasizes functional programming, but is not pure.

The simplest and probably best way to describe Joy may be to see it as a crossover of Forth and Lisp.

What it can already do.

  • Boot on VirtualBox or Qemu with minimal 2 MB, maximal 1024 MB, standard 64 MB.

  • Print to VGA 80x25 screen with 16 colours.

  • Load and run Joy source code.

  • Garbage collection on lists.

  • Interrupt handling for RTC, PIT and Keyboard.

  • Translate keyboard scancodes to ascii characters.

  • Translate keyboard scancodes to symbols like Shift-Up, Ctrl-Meta-Pagedown etc.

  • Evaluate expressions read at REPL.

  • Write to serial port COM1 / RS-232, with VirtualBox write to logfile at host.

  • Calculations with floating point values via x87 FPU.

What really needs to be done.

  • A lot of fine tuning about the exact definition of some words.

  • A lot of testing and bug correction.

  • Try on real hardware.

Out of scope.

  • Multiprocessing

  • Multicore

  • tcp/ip


Because it is an awful lot of fun.

System Requirements

Development happens on Linux on an intel i3-550, mainly with VirtualBox. Assembling with fasm-1.73.25

  • Bash instead of make.

  • fasm Flat assembler 1.73 for Linux.

  • ld linker.

  • grub2-mkrescue or grub-mkrescue.

  • Xorriso

  • VirtualBox or Qemu.

Minal OS Keyboard Layout

    +----  94 characters on 2.5 rows  ---------------------------------------+
    |                                     [9]                                |
    |           [q]  ^   ~   @           {   [   ]   }             SHIFT     |
    |             !   ?   &  -$-  %      -(-  )   <   >   *                  |
    |               \   |   /           #   =   ;   :   _             26     |
    |           [q]  s   u   g   q   v   p   c   d   w            NORMAL     |
    |             a   o   i  -L-  f   b  -T-  e   n   r   +                  |
    |               y   x   z   h   j   k   m   ,   .   -     26+26+6=58     |
    |                                    7   8   9                  META     |
    |                                    -4-  5   6                          |
    | 94=126-32                             1   2   3   0             10 94  |
    [9] : toggle char case
    [q] : quotation marks (toggle with [9])

        enter : execute command line        F1|Meta-F1 : show help screen
    backspace : del previous character        Meta-F12 : print-keyboard-layout
    crtl-backspace: clear line              Menu|Print : DDBrowser.start


    ;   Minal-OS          An Operating System written with Joy.
    ;   GNU GENERAL PUBLIC LICENSE, Version 3.0, http://www.gnu.org/licenses/
    ;   https://codeberg.org/sts-q/minal
    ;   Copyright (C) 2021 sts-q
    ;   https://sts-q.codeberg.page
    ;   This program is distributed in the hope that it will be useful,
    ;   but WITHOUT ANY WARRANTY; without even the implied warranty of
    ;   GNU General Public License for more details.


osdev.org without which Minal-OS would not have happend.

narke for his OSDevAsm at Github.

froggey for creating his Lisp Machine Mezzano OS.

Summary and Conclusion

Rolling your own OS is fun!

Rolling your own OS means trading trouble for trouble.


Created at 2021-04-03 by sts-q

First commit at 2021-05-24 by sts-q.