84 lines
3.1 KiB
Plaintext
84 lines
3.1 KiB
Plaintext
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
|
||
* A floppy disk drive
|
||
|
||
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
|
||
adjust the bootloader disk description tables and build the system
|
||
manually. Hard disk drives are not supported.
|
||
|
||
Input
|
||
-----
|
||
|
||
The EttinOS 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.
|
||
|
||
Commands
|
||
--------
|
||
|
||
EttinOS commands consist of the case-insensitive 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. Tails on
|
||
commands that do not use them are ignored. All commands except for
|
||
changing the drive are stored as external programs, and you must be on
|
||
the same drive as the program file to execute one. A command for a
|
||
program does not include its filename extension.
|
||
|
||
Commands included in EttinOS by default:
|
||
* [A-D]:: Changes the drive.
|
||
* ECHO: Echoes its tail.
|
||
* HELLO: A hello world program.
|
||
* TYPE: Prints the contents of a text file until a null.
|
||
|
||
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 0x2000
|
||
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).
|
||
|