"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2023-09-19 Tue 18:07 -->
+<!-- 2026-02-03 Tue 01:12 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Fifth - virtual machine, operating system, programming language</title>
<meta name="author" content="Svjatoslav Agejenko" />
<meta name="generator" content="Org Mode" />
-<style>
+<style type="text/css">
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
+<style type="text/css">
+ body {
+ max-width: 35cm !important;
+ }
+ #content {
+ max-width: 80em !important;
+ width: 90%;
+ }
+ </style>
<link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css" />
</head>
<body>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#orgdd8d5a0">1. General</a>
+<li><a href="#org4486738">1. General</a>
<ul>
-<li><a href="#org11b4b95">1.1. Source code</a></li>
+<li><a href="#org9d6f5ec">1.1. Source code</a></li>
</ul>
</li>
-<li><a href="#org0a3946b">2. !Project deprecated!</a></li>
-<li><a href="#org74c9861">3. Introduction</a>
+<li><a href="#orgdd79f1d">2. Introduction</a>
<ul>
-<li><a href="#orge8b459e">3.1. Screenshots</a></li>
+<li><a href="#org4936051">2.1. Screenshots</a></li>
</ul>
</li>
-<li><a href="#orga9dfaee">4. Installation</a></li>
-<li><a href="#orgefa2f79">5. Fifth distribution directory tree description</a></li>
-<li><a href="#org751040b">6. Requirements</a>
+<li><a href="#org5f58cdf">3. Installation</a></li>
+<li><a href="#org8b9c975">4. Fifth distribution directory tree description</a></li>
+<li><a href="#org29ce6a9">5. Requirements</a>
<ul>
-<li><a href="#org32f0917">6.1. Software</a></li>
-<li><a href="#orgd6ecfe1">6.2. Hardware</a></li>
+<li><a href="#org47eaa46">5.1. Software</a></li>
+<li><a href="#org20e4d36">5.2. Hardware</a></li>
</ul>
</li>
-<li><a href="#orgeb3cbc2">7. Numbers representation within Fifth</a></li>
-<li><a href="#orga8a8f37">8. Disk file map, and it's data structures</a>
+<li><a href="#org821d5fa">6. Numbers representation within Fifth</a></li>
+<li><a href="#org0d5f6fa">7. Disk file map, and it's data structures</a>
<ul>
-<li><a href="#org4eb67fc">8.1. Disk allocation</a></li>
-<li><a href="#org5fcae51">8.2. FAT entry format:</a></li>
-<li><a href="#org811dc5b">8.3. File entry format</a></li>
+<li><a href="#orgff8ee3e">7.1. Disk allocation</a></li>
+<li><a href="#org224e86d">7.2. FAT entry format:</a></li>
+<li><a href="#org9c30d43">7.3. File entry format</a></li>
</ul>
</li>
-<li><a href="#orga49dca9">9. Core architecture</a>
+<li><a href="#org58ab957">8. Core architecture</a>
<ul>
-<li><a href="#org75e80d5">9.1. Dictionary entry format</a></li>
-<li><a href="#org12381ef">9.2. Possible module types</a></li>
-<li><a href="#org33be039">9.3. Memory map</a></li>
+<li><a href="#org82b895c">8.1. Dictionary entry format</a></li>
+<li><a href="#org91e150c">8.2. Possible module types</a></li>
+<li><a href="#org5d75a57">8.3. Memory map</a></li>
</ul>
</li>
-<li><a href="#org81fd544">10. Dynamically loadable modules</a>
+<li><a href="#org5ba62b5">9. Dynamically loadable modules</a>
<ul>
-<li><a href="#org79d1c84">10.1. Keyboard driver</a></li>
-<li><a href="#org99b4378">10.2. Mouse driver</a></li>
-<li><a href="#org0aa9e1f">10.3. 2D graphic library</a></li>
-<li><a href="#orgff6cdef">10.4. Trigonometry functions</a>
+<li><a href="#org9d420f3">9.1. Keyboard driver</a></li>
+<li><a href="#org4587bc8">9.2. Mouse driver</a></li>
+<li><a href="#orgdde086c">9.3. 2D graphic library</a></li>
+<li><a href="#org14b7791">9.4. Trigonometry functions</a>
<ul>
-<li><a href="#org868f7c6">10.4.1. sin ( a – result )</a></li>
-<li><a href="#orgc3f161e">10.4.2. cos ( a – result )</a></li>
+<li><a href="#orgb989427">9.4.1. sin ( a – result )</a></li>
+<li><a href="#orgb14ae13">9.4.2. cos ( a – result )</a></li>
</ul>
</li>
</ul>
</ul>
</div>
</div>
-
-<div id="outline-container-orgdd8d5a0" class="outline-2">
-<h2 id="orgdd8d5a0"><span class="section-number-2">1.</span> General</h2>
+<div id="outline-container-org4486738" class="outline-2">
+<h2 id="org4486738"><span class="section-number-2">1.</span> General</h2>
<div class="outline-text-2" id="text-1">
<ul class="org-ul">
<li>This program is free software: released under Creative Commons Zero
<li><a href="https://www.svjatoslav.eu/projects/">Other software projects hosted at svjatoslav.eu</a></li>
</ul>
</div>
-
-<div id="outline-container-org11b4b95" class="outline-3">
-<h3 id="org11b4b95"><span class="section-number-3">1.1.</span> Source code</h3>
+<div id="outline-container-org9d6f5ec" class="outline-3">
+<h3 id="org9d6f5ec"><span class="section-number-3">1.1.</span> Source code</h3>
<div class="outline-text-3" id="text-1-1">
<ul class="org-ul">
<li><a href="https://www2.svjatoslav.eu/gitweb/?p=fifth.git;a=snapshot;h=HEAD;sf=tgz">Download latest snapshot in TAR GZ format</a></li>
Clone Git repository using command:
</p>
<pre class="example">
-git clone https://www2.svjatoslav.eu/git/fifth.git
+git clone https://www3.svjatoslav.eu/git/fifth.git
</pre></li>
</ul>
</div>
</div>
</div>
-
-<div id="outline-container-org0a3946b" class="outline-2">
-<h2 id="org0a3946b"><span class="section-number-2">2.</span> !Project deprecated!</h2>
+<div id="outline-container-orgdd79f1d" class="outline-2">
+<h2 id="orgdd79f1d"><span class="section-number-2">2.</span> Introduction</h2>
<div class="outline-text-2" id="text-2">
<p>
-Current implementation does not support object oriented
-programming. While working on Fifth I got lots of cool new ideas that
-require reimplementation of everything.
+Fifth is self-hosting computing environment that integrates a <a href="virtual machine.html#ID-9b251eb9-aff6-4025-94bf-25e89e26d54a">custom
+virtual machine</a>, a <a href="language.html#ID-da7fff9b-0b67-4843-828a-52a404d7f401">Forth-inspired programming language</a>, and operating
+system.
</p>
<p>
-Currently I try to implement those new ideas in the project called
-<a href="https://www3.svjatoslav.eu/projects/sixth/">Sixth</a>.
+At its core lies a stack-based virtual CPU with two stacks (data and
+return), approximately 50 instructions, and a 4GB flat address
+space. This virtual machine executes the Fifth language — a concise,
+interactive, and extensible environment where every operation is a
+command that can be defined, redefined, or extended by the user. The
+language uses a custom character encoding (FSCII) with unique
+representations for control characters (e.g., space as FF instead of
+20 in ASCII) and features an innovative hexadecimal number system
+visualized as squares split into four triangles, each representing a
+single bit—similar to Bibi-binary.
</p>
<p>
-System is built many years ago when I was still using DOS as a primary
-operating system.
+It includes a disk-based filesystem, a built-in text editor, 2D
+graphics capabilities, mouse and keyboard drivers, and tools for file
+management and memory allocation.
</p>
-</div>
-</div>
-<div id="outline-container-org74c9861" class="outline-2">
-<h2 id="org74c9861"><span class="section-number-2">3.</span> Introduction</h2>
-<div class="outline-text-2" id="text-3">
+
<p>
-Fifth is a combination of:
+Released under the CC0 public domain license, Fifth is free for anyone
+to use, study, and modify. Whether you're a retro computing
+enthusiast, a systems programming student, or a curious developer.
</p>
-<ul class="org-ul">
-<li><a href="language.html#ID-da7fff9b-0b67-4843-828a-52a404d7f401">Programming language</a> (inspired by Forth).</li>
-<li>Operating system.</li>
-<li><a href="virtual machine.html#ID-9b251eb9-aff6-4025-94bf-25e89e26d54a">Virtual machine</a> with custom instruction set.</li>
-</ul>
</div>
+<div id="outline-container-org4936051" class="outline-3">
+<h3 id="org4936051"><span class="section-number-3">2.1.</span> Screenshots</h3>
+<div class="outline-text-3" id="text-2-1">
-<div id="outline-container-orge8b459e" class="outline-3">
-<h3 id="orge8b459e"><span class="section-number-3">3.1.</span> Screenshots</h3>
-<div class="outline-text-3" id="text-3-1">
-
-<div id="org76cf04c" class="figure">
+<div id="orga0fc3b9" class="figure">
<p><img src="screenshots/start.png" alt="start.png" />
</p>
</div>
</p>
-<div id="org7579242" class="figure">
+<div id="org413f6ca" class="figure">
<p><img src="screenshots/dictionary.png" alt="dictionary.png" />
</p>
</div>
-<div id="org17f3e64" class="figure">
+<div id="org1834fc6" class="figure">
<p><img src="screenshots/text editor.png" alt="text editor.png" />
</p>
</div>
</div>
</div>
</div>
-
-<div id="outline-container-orga9dfaee" class="outline-2">
-<h2 id="orga9dfaee"><span class="section-number-2">4.</span> Installation</h2>
-<div class="outline-text-2" id="text-4">
+<div id="outline-container-org5f58cdf" class="outline-2">
+<h2 id="org5f58cdf"><span class="section-number-2">3.</span> Installation</h2>
+<div class="outline-text-2" id="text-3">
<p>
Just unpack all files, witout altering original directory structure,
somewhere in your hard disk. For example:
</dl>
<p>
-For more information, please refer to <a href="#orgefa2f79">Fifth distribution directory
+For more information, please refer to <a href="#org8b9c975">Fifth distribution directory
tree description</a>.
</p>
</div>
</div>
-
-<div id="outline-container-orgefa2f79" class="outline-2">
-<h2 id="orgefa2f79"><span class="section-number-2">5.</span> Fifth distribution directory tree description</h2>
-<div class="outline-text-2" id="text-5">
+<div id="outline-container-org8b9c975" class="outline-2">
+<h2 id="org8b9c975"><span class="section-number-2">4.</span> Fifth distribution directory tree description</h2>
+<div class="outline-text-2" id="text-4">
<p>
After downloading and unpacking the ZIP file you shoud get directory
tree similar to this:
</p>
</div>
</div>
-
-<div id="outline-container-org751040b" class="outline-2">
-<h2 id="org751040b"><span class="section-number-2">6.</span> Requirements</h2>
-<div class="outline-text-2" id="text-6">
+<div id="outline-container-org29ce6a9" class="outline-2">
+<h2 id="org29ce6a9"><span class="section-number-2">5.</span> Requirements</h2>
+<div class="outline-text-2" id="text-5">
</div>
-<div id="outline-container-org32f0917" class="outline-3">
-<h3 id="org32f0917"><span class="section-number-3">6.1.</span> Software</h3>
-<div class="outline-text-3" id="text-6-1">
+<div id="outline-container-org47eaa46" class="outline-3">
+<h3 id="org47eaa46"><span class="section-number-3">5.1.</span> Software</h3>
+<div class="outline-text-3" id="text-5-1">
<ul class="org-ul">
<li>MS-DOS 6.22 with HIMEM.SYS loaded.</li>
<li>Mouse driver (optional, if you have a mouse).</li>
</ul>
</div>
</div>
-
-<div id="outline-container-orgd6ecfe1" class="outline-3">
-<h3 id="orgd6ecfe1"><span class="section-number-3">6.2.</span> Hardware</h3>
-<div class="outline-text-3" id="text-6-2">
+<div id="outline-container-org20e4d36" class="outline-3">
+<h3 id="org20e4d36"><span class="section-number-3">5.2.</span> Hardware</h3>
+<div class="outline-text-3" id="text-5-2">
<ul class="org-ul">
<li>A minimum of a i386 CPU.</li>
<li>64 KB of free RAM below 640KB.</li>
</div>
</div>
</div>
-
-<div id="outline-container-orgeb3cbc2" class="outline-2">
-<h2 id="orgeb3cbc2"><span class="section-number-2">7.</span> Numbers representation within Fifth</h2>
-<div class="outline-text-2" id="text-7">
+<div id="outline-container-org821d5fa" class="outline-2">
+<h2 id="org821d5fa"><span class="section-number-2">6.</span> Numbers representation within Fifth</h2>
+<div class="outline-text-2" id="text-6">
<p>
Because we are in full experimentation mode here (no regard for
compatibility whatsoever), why not to try also alternative number
</p>
-<div id="org67795e4" class="figure">
+<div id="org26a21b0" class="figure">
<p><a href="numbers.png"><img src="numbers.png" alt="numbers.png" /></a>
</p>
</div>
</p>
</div>
</div>
-
-<div id="outline-container-orga8a8f37" class="outline-2">
-<h2 id="orga8a8f37"><span class="section-number-2">8.</span> Disk file map, and it's data structures</h2>
-<div class="outline-text-2" id="text-8">
+<div id="outline-container-org0d5f6fa" class="outline-2">
+<h2 id="org0d5f6fa"><span class="section-number-2">7.</span> Disk file map, and it's data structures</h2>
+<div class="outline-text-2" id="text-7">
<p>
Core and high-level boot code is stored outside of the filesystem to
allow easy access to it, at early booting time, when filesystem is not
yet initialized.
</p>
</div>
-<div id="outline-container-org4eb67fc" class="outline-3">
-<h3 id="org4eb67fc"><span class="section-number-3">8.1.</span> Disk allocation</h3>
-<div class="outline-text-3" id="text-8-1">
+<div id="outline-container-orgff8ee3e" class="outline-3">
+<h3 id="orgff8ee3e"><span class="section-number-3">7.1.</span> Disk allocation</h3>
+<div class="outline-text-3" id="text-7-1">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</table>
</div>
</div>
-<div id="outline-container-org5fcae51" class="outline-3">
-<h3 id="org5fcae51"><span class="section-number-3">8.2.</span> FAT entry format:</h3>
-<div class="outline-text-3" id="text-8-2">
+<div id="outline-container-org224e86d" class="outline-3">
+<h3 id="org224e86d"><span class="section-number-3">7.2.</span> FAT entry format:</h3>
+<div class="outline-text-3" id="text-7-2">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</table>
</div>
</div>
-<div id="outline-container-org811dc5b" class="outline-3">
-<h3 id="org811dc5b"><span class="section-number-3">8.3.</span> File entry format</h3>
-<div class="outline-text-3" id="text-8-3">
+<div id="outline-container-org9c30d43" class="outline-3">
+<h3 id="org9c30d43"><span class="section-number-3">7.3.</span> File entry format</h3>
+<div class="outline-text-3" id="text-7-3">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</div>
</div>
</div>
-<div id="outline-container-orga49dca9" class="outline-2">
-<h2 id="orga49dca9"><span class="section-number-2">9.</span> Core architecture</h2>
-<div class="outline-text-2" id="text-9">
+<div id="outline-container-org58ab957" class="outline-2">
+<h2 id="org58ab957"><span class="section-number-2">8.</span> Core architecture</h2>
+<div class="outline-text-2" id="text-8">
<p>
Fifth core is simply some amount of already compiled into machine code
and linked together modules (entries in other words). In compilation
any time. Currently dictionary can contain at most 1000 entries.
</p>
</div>
-<div id="outline-container-org75e80d5" class="outline-3">
-<h3 id="org75e80d5"><span class="section-number-3">9.1.</span> Dictionary entry format</h3>
-<div class="outline-text-3" id="text-9-1">
+<div id="outline-container-org82b895c" class="outline-3">
+<h3 id="org82b895c"><span class="section-number-3">8.1.</span> Dictionary entry format</h3>
+<div class="outline-text-3" id="text-8-1">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</p>
</div>
</div>
-<div id="outline-container-org12381ef" class="outline-3">
-<h3 id="org12381ef"><span class="section-number-3">9.2.</span> Possible module types</h3>
-<div class="outline-text-3" id="text-9-2">
+<div id="outline-container-org91e150c" class="outline-3">
+<h3 id="org91e150c"><span class="section-number-3">8.2.</span> Possible module types</h3>
+<div class="outline-text-3" id="text-8-2">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</table>
</div>
</div>
-<div id="outline-container-org33be039" class="outline-3">
-<h3 id="org33be039"><span class="section-number-3">9.3.</span> Memory map</h3>
-<div class="outline-text-3" id="text-9-3">
+<div id="outline-container-org5d75a57" class="outline-3">
+<h3 id="org5d75a57"><span class="section-number-3">8.3.</span> Memory map</h3>
+<div class="outline-text-3" id="text-8-3">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</div>
</div>
</div>
-<div id="outline-container-org81fd544" class="outline-2">
-<h2 id="org81fd544"><span class="section-number-2">10.</span> Dynamically loadable modules</h2>
-<div class="outline-text-2" id="text-10">
+<div id="outline-container-org5ba62b5" class="outline-2">
+<h2 id="org5ba62b5"><span class="section-number-2">9.</span> Dynamically loadable modules</h2>
+<div class="outline-text-2" id="text-9">
</div>
-<div id="outline-container-org79d1c84" class="outline-3">
-<h3 id="org79d1c84"><span class="section-number-3">10.1.</span> Keyboard driver</h3>
-<div class="outline-text-3" id="text-10-1">
+<div id="outline-container-org9d420f3" class="outline-3">
+<h3 id="org9d420f3"><span class="section-number-3">9.1.</span> Keyboard driver</h3>
+<div class="outline-text-3" id="text-9-1">
<p class="verse">
<br />
KBD_@ ( – code ) get scancodes for pressed keys from keyboard.<br />
</p>
</div>
</div>
-<div id="outline-container-org99b4378" class="outline-3">
-<h3 id="org99b4378"><span class="section-number-3">10.2.</span> Mouse driver</h3>
-<div class="outline-text-3" id="text-10-2">
+<div id="outline-container-org4587bc8" class="outline-3">
+<h3 id="org4587bc8"><span class="section-number-3">9.2.</span> Mouse driver</h3>
+<div class="outline-text-3" id="text-9-2">
<p class="verse">
mousex var Mouse x coordinate.<br />
mousey var Mouse y coordinate.<br />
</p>
</div>
</div>
-<div id="outline-container-org0aa9e1f" class="outline-3">
-<h3 id="org0aa9e1f"><span class="section-number-3">10.3.</span> 2D graphic library</h3>
-<div class="outline-text-3" id="text-10-3">
+<div id="outline-container-orgdde086c" class="outline-3">
+<h3 id="orgdde086c"><span class="section-number-3">9.3.</span> 2D graphic library</h3>
+<div class="outline-text-3" id="text-9-3">
<dl class="org-dl">
<dt>lineh ( color len x y imgbuf – )</dt><dd>draws horisontal line from X,Y
coordinates to right, with specified length.</dd>
bust be >= x1, y2 must be >= y1.
</p>
-<pre class="example" id="orgfea073c">
+<pre class="example" id="org8b1fce2">
x1,y1-----------+
| |
| |
</dl>
</div>
</div>
-
-<div id="outline-container-orgff6cdef" class="outline-3">
-<h3 id="orgff6cdef"><span class="section-number-3">10.4.</span> Trigonometry functions</h3>
-<div class="outline-text-3" id="text-10-4">
+<div id="outline-container-org14b7791" class="outline-3">
+<h3 id="org14b7791"><span class="section-number-3">9.4.</span> Trigonometry functions</h3>
+<div class="outline-text-3" id="text-9-4">
</div>
-<div id="outline-container-org868f7c6" class="outline-4">
-<h4 id="org868f7c6"><span class="section-number-4">10.4.1.</span> sin ( a – result )</h4>
-<div class="outline-text-4" id="text-10-4-1">
+<div id="outline-container-orgb989427" class="outline-4">
+<h4 id="orgb989427"><span class="section-number-4">9.4.1.</span> sin ( a – result )</h4>
+<div class="outline-text-4" id="text-9-4-1">
<p>
Return sinus from given angle "a", 360ø is 2000. So 1000 represents
180ø angle. Result will be in range -10'000 to 10'000, instead of ñ1.
</p>
</div>
</div>
-<div id="outline-container-orgc3f161e" class="outline-4">
-<h4 id="orgc3f161e"><span class="section-number-4">10.4.2.</span> cos ( a – result )</h4>
-<div class="outline-text-4" id="text-10-4-2">
+<div id="outline-container-orgb14ae13" class="outline-4">
+<h4 id="orgb14ae13"><span class="section-number-4">9.4.2.</span> cos ( a – result )</h4>
+<div class="outline-text-4" id="text-9-4-2">
<p>
-Return cosinus from given angle. Parameters are like in <a href="#org868f7c6">sin</a> function.
+Return cosinus from given angle. Parameters are like in <a href="#orgb989427">sin</a> function.
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Svjatoslav Agejenko</p>
-<p class="date">Created: 2023-09-19 Tue 18:07</p>
+<p class="date">Created: 2026-02-03 Tue 01:12</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>