1
1
Fork
You've already forked minal
1
Minal OS -- An operating system written with Joy.
  • Shell 68.4%
  • Common Lisp 31.6%
Find a file
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
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 hello.minal: evals 2022年09月05日 12:12:08 +02:00

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.