forked from crazyettin/EttinOS
88 lines
3.4 KiB
Text
88 lines
3.4 KiB
Text
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 0x2000,
|
||
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).
|
||
|