summaryrefslogtreecommitdiff
path: root/README.md
blob: 7131c48f59baefec445ec57dce28c943c1efdb51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Welcome to FoolOS
=================

Disclaimer
----------

THIS IS A WORK IN PROGRESS.

This is a simple and useless "operating system", with very basic 
features, sorry. It is the fruit of my fundamental explorations of 
the x86 architectures,  32-bit protected mode, interrupt handling, 
memory management, schedulung the floppy disk controller, networking 
as well as VESA and a couple of other things.

![Screenshot of FoolOS](/screenshots/foolos.png?raw=true "FoolOs Kernel")

Copyright M.Idziorek 2014 <m.i@gmx.at> unless stated otherwise!

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Supported Platforms
-------------------

FoolOS is tested/developed on the following emlators/machines

* bochs 2.6.6 (compiled with: ./configure --enable-clgd54xx --enable-a20-pin --enable-debugger --enable-disasm --enable-e1000 --with-x --with-x11 --enable-smp)
* qemu 1.1.2
* virtual box 4.1.18
* Acer Aspire 1810TZ (Notebook)
* Q6600 on Asus p5n32-e sli plus (Desktop PC)

Features
--------

All features are only very rudiemntary and buggy.

* PIT support / Timing
* PIC support & Interrupt handling framework
* PCI bus scanning
* Physical memory management
* Virtual memory managment (Paging)
* Multitasking
* Multiple processors
* Floppy disk driver
* VESA 
* ACPI / MP (to get processor info)

Todos
-----

Some things I would like to add someday:

* shell

* drivers to read/write usb sticks 
* Filesystem (probably ext2)
* kernel should run in high memory (~3gb) virutal mem. why? except v86 tasks?

* e1000 driver

* port c lib and gcc
* networking stack / webserver
* user space / ring3 / ELF binaries support 

* alternatively grub as bootloader
* 64-bit support
* ARM
* JVM
* distributed OS

* mouse support
* simple window manager

Issues
------

* stack heap sizes??
* multitasking crashes sometimes/ page faults? interrupts !?
* the first ~4mb of physical mem are reserved by mem manager (hardcoded)
* size of bitmap to track free blocks of physical memory is hardcoded to max.
* Assumed suport for VESA mode 0x114 with linear addressing!


REFERENCES
==========

* LINUX KERNEL
* GNU HURD
* MINIX
* FreeBSD
* xv6
* e1000 linux driver

* http://www.brokenthorn.com/Resources/OSDev17.html
* http://www.jamesmolloy.co.uk/tutorial_html/9.-Multitasking.html
* http://pdos.csail.mit.edu/6.828/2011/labs/lab6/
* http://wiki.osdev.org/Virtual_8086_Mode
* http://pdos.csail.mit.edu/6.828/2011/xv6.html
* http://www.nongnu.org/ext2-doc/
* http://www.osdever.net/tutorials/view/multiprocessing-support-for-hobby-oses-explained
* http://wiki.xomb.org/index.php?title=ACPI_Tables
* Intel 386 Programmes Ref.
* http://forum.osdev.org/viewtopic.php?f=1&t=10944
* man syscalls (posix syscalls?)
* and many more ...