--- /dev/null
+#+TITLE: Fifth - virtual machine, operating system, programming language
+
+-----
+- [[http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz][download latest snapshot]]
+
+- This program is free software; you can redistribute it and/or modify it under
+ the terms of version 3 of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public License]] or later as
+ published by the Free Software Foundation.
+
+- Program author:
+ - Svjatoslav Agejenko
+ - Homepage: http://svjatoslav.eu
+ - Email: mailto://svjatoslav@svjatoslav.eu
+
+- [[http://svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
+
+* (document settings) :noexport:
+** use dark style for TWBS-HTML exporter
+#+HTML_HEAD: <link href="https://bootswatch.com/darkly/bootstrap.min.css" rel="stylesheet">
+#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
+#+HTML_HEAD: <style type="text/css">
+#+HTML_HEAD: footer {background-color: #111 !important;}
+#+HTML_HEAD: pre {background-color: #111; color: #ccc;}
+#+HTML_HEAD: </style>
+* !Project deprecated!
+Current implementation does not support object oriented
+programming. While working on Fifth I got lots of cool new ideas that
+require reimplementation of everything.
+
+Currently I try to implement those new ideas in the project called
+[[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html][Sixth]]
+
+System is built many years ago when I was still using DOS as a primary
+operating system.
+* Introduction
+Fifth is programming lanquage & operating system, running on [[emulator.html][virtual
+CPU]], with custom instruction set. It is much like Charles Chunk
+Moore's Forth, it also uses stack architecture, and many commands are
+similar. Basically I got familiar with concepts of Forth, and being
+inspired created my own system.
+
+
+
+[[shots/index.html][Screenshots]]
+
+Read more about:
+- [[file:emulator.html][Virtual CPU]]
+- [[file:commands/index.html][Built-in commands]]
+- [[file:modules/index.html][Additional commands, realized as loadable modules]]
+- [[file:5TH_ET.txt][Example Fifth source file - text editor]]
+* Installation
+Just unpack all files, witout altering original directory structure,
+somewhere in your hard disk. For example: C:\MISC\FIFTH\.... To run
+fifth you need minimally just 2 files. emulator itself ( EMULATOR.EXE
+or EMULATOR.COM ), and virtual disk file ( DISK.RAW ).
+
+Read more about [[files.txt][distribution directory layout]]
+* Software/Hardware/Human requirements
+** Software:
+- MS-DOS 6.22, with HIMEM.SYS loaded.
+- Mouse driver if you have a mouse.
+- Does work only when CPU is in real mode.
+- To recompile ASM sources I used FASM (Flat Assembler).
+- I ran QBasic utilities on QB 4.5 .
+- VESA support by BIOS, or external driver (UNIVBE).
+** Hardware:
+- Minimum CPU 386.
+- 64 KB free RAM below 640KB,
+- 2 MB of free XMS.
+- VESA compatible video card.
+** Human:
+- Beginner level Forth knowledge is recommended.
+- Lots of enthusiasm.
+* Numbers representation
+
+[[file:numbers.png][file:numbers.png]]
+
+Because I can define everything, starting from CPU, why not try also
+alternative and unique number representation ?
+
+Fifth uses its hexdecimal number representation as primary. Numbers
+shape is formed by dividing a square into four parts. And manipulating
+their color (black or white).
+* Disk file map, and it's data structures
+
+
+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.
+** disk allocation
+| offset | length | description |
+|--------+--------+----------------------|
+| 0 | ~4 Kb | Fifth core |
+| 4 Kb | ~32Kb | high-level boot code |
+| 37 Kb | ~65Kb | FAT |
+| 101Kb | ~16MB | filesystem data area |
+** FAT entry format:
+| code | meaning |
+|------+--------------------------|
+| -2 | last sector |
+| -1 | empty sector |
+| 0 -- | .. pointer to next block |
+** file entry format
+| offset | length | description |
+|--------+--------+------------------------|
+| 0 | 4 | extension |
+| 4 | 16 | name |
+| 20 | 4 | entry point |
+| 24 | 4 | size |
+| 28 | 4 | last modification time |
+* Core architecture
+Fifth core is simply some amount of already compiled into machine code
+and linked together modules (entries in other words). In compilation
+process modules is compiled one by one and simply stored on top of
+already existing and growing core. Separately from core is kept
+dictionary, this is special list that contain names of compiled
+modules, variables etc. and they locations in core. Constants use
+dictionary space only. Random word can be removed from dictionary at
+any time. Currently dictionary can contain at most 1000 entries.
+** dictionary entry format
+| offset | length | description |
+|--------+--------+-----------------------|
+| 0 | 4 | 0 < previous entry |
+| | | 0 = last |
+| | | -1 = empty |
+|--------+--------+-----------------------|
+| 4 | 15 | module name string |
+|--------+--------+-----------------------|
+| 19 | 1 | entry type |
+|--------+--------+-----------------------|
+| 20 | 4 | entry data |
+
+Core headers as linked list of module names make up something like
+dictionary. When some entry address is needed compiler can quickly
+run through headers backwards and find needed entry.
+** Possible module types
+| type | description | "execute" action |
+|------+----------------+----------------------------|
+| 0 | data | compile "num" instruction |
+| | | with address to module |
+|------+----------------+----------------------------|
+| 1 | submodule | compile "call" instruction |
+| | | with address to module |
+|------+----------------+----------------------------|
+| 2 | imm. submodule | immediately call to module |
+** Memory map: (average)
+| <loc> | <size> | <desc> |
+|---------+--------+-----------------------------|
+| 0 | ~4096 | core |
+| 1500000 | ~32000 | highlevel Fifth boot code |
+| 200000h | | core startup messages area |
+| 5200000 | | end of dynamic memory space |
+* Fifth source format
+Fifth uses a different character table and codes than ASCII (still
+almost similar). I call it FSCII (Fifth Standard Code for Information
+Interchange) for example space character is not 32 but 255 instead. I
+plan to use mainly HEX numbers, and create new characters to represent
+numeric values. So typical nemric characters "0123..." is treated
+like ordinary letters.
+** FSCII:
+
+| DEC | HEX | function |
+|--------+-------+----------------------------------------|
+| 0 - 15 | 0 - F | HEX numbers |
+| 252 | FC | backspace |
+| 253 | FD | tabulator (TAB) |
+| 254 | FE | carriage return (CR) |
+| 255 | FF | space |
+| else | | ordinary characters, same as in ASCII. |