EttinOS/README.MD

88 lines
3.4 KiB
Plaintext
Raw Normal View History

EttinOS
=======
EttinOS is a minimalist 16-bit DOS-like hobbyist operating system for
the IBM Personal Computer and compatible machines. Its git repository
can be found at https://ahti.space/git/crazyettin/EttinOS.
System requirements
-------------------
* An Intel 8086 or compatible CPU
* BIOS, or UEFI in legacy mode
* 64 KiB of RAM
* 1-4 floppy disk drives
Building
--------
Build dependencies:
* A Unix-like operating system
* coreutils
* dosfstools
* mtools
* nasm
* rw (optional)
Running make.sh will build EttinOS and create a bootable 360 KiB 5.25"
floppy disk image named EttinOS.img and a source image of the same
format named EttinOS-src.img. To get 1.44 MB 3.5" images instead use the
argument -1440. If you want to use another format you will have to build
the system manually. Hard disk drives are not supported.
Usage
-----
The input system is inspired by typewriters. Typing a character
overwrites the cursor location and the erase (=tab) key erases it. The
space and backspace keys move the cursor.
EttinOS uses the FAT12 file system, and as a result file names (and thus
also commands) are case-insensitive and follow the DOS-like 8.3 format.
EBPB and file attributes (and thus also labels and subdirectories) are
not supported and are ignored if present. A file specification is of the
format ([A-D]:)FILENAME.EXT, where the drive letter is optional in case
of the current drive. Text files use DOS-like newlines (CR+LF) and end
in a null.
Commands consist of the command itself followed by a tail separated with
a space. Extra spaces, be they leading, trailing, or between a command
and its tail, are ignored. What the tail contains and how it should be
formatted depends on the command. All commands except for changing the
drive are stored as external programs: a command for a program is its
file specification without the extension.
Commands included in EttinOS:
* [A-D]:: Change the drive.
* ECHO: Echo the tail.
* HELLO: Print "Hello world!".
* LIST: List the files on the drive specified in the tail.
* TYPE: Print the contents of a text file specified in the tail.
Programming
-----------
EttinOS has a flat address space of 64 KiB. The data, stack, and
extra segments are set at the beginning of the RAM and the system stack
at the end of the address space. Programs are loaded at address 0x3000,
the drive number is loaded in DL, and SI is pointed at the command tail
(a string ending in a null) when the program is executed. The stack is
reset back to the end of the address space after a program has finished
running.
System calls:
* Interrupt 0x20: Return to the shell.
* Interrupt 0x21: Input and output:
* AH = 0x0: Print a string ending in a null from SI.
* AH = 0x1: Read a string ending in a null of at most AL
characters to DI until a return.
* AH = 0x2: Print a string ending in a null from SI followed by a
CRLF.
* AH = 0x3: Read a string ending in a null of at most AL
characters to DI until a return and print a CRLF.
* Interrupt 0x22: Disk operations:
* AH = 0x0: Load a file named in SI as a string ending in a null
to the offset BX and set AL to 0x0 if the load was
succesfull and 0x1 if there was an error.
* AH = 0x1: Save a file (under construction).