Minal OS -- An operating system written with Joy.
 
 
Go to file
sts-q bed020fc73 games.minal: keybindings back to cursor-keys 2022-09-05 15:23:13 +02:00
fasm hello.minal: evals 2022-09-05 12:12:08 +02:00
further Resync with home. 2022-09-04 21:33:59 +02:00
inc games.minal: keybindings back to cursor-keys 2022-09-05 15:23:13 +02:00
iso Resync with home. 2022-09-04 21:48:05 +02:00
work initial commit 2021-05-24 06:37:06 +02:00
README.md hello.minal: evals 2022-09-05 12:12:08 +02:00
minal Resync with home. 2022-09-04 21:05:36 +02:00
mlog.txt write logfile to serial port. file-server.lisp 2021-06-06 15:06:54 +02:00

README.md

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

Goal

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

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

Why?

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

License

    ;=============================================================================
    ;   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
    ;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    ;   GNU General Public License for more details.
    ;=============================================================================

Acknowledgments

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.

Contact

Created at 2021-04-03 by sts-q

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