summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-08-07 18:59:49 +0200
committerMichal Idziorek <m.i@gmx.at>2014-08-07 18:59:49 +0200
commit3330d41a73f84b1c3457699547708bea3746cc77 (patch)
tree9ca2ae478a7b112cf2ab4f0678b334eabe215d62 /README.md
parentac36ae2896876f642300c44bfb23bb8f748cc909 (diff)
Update and rename README to README.md
Diffstat (limited to 'README.md')
-rw-r--r--README.md125
1 files changed, 125 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3a6ceb0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,125 @@
+* vi: ft=markdown
+
+Welcome to FoolOS
+=================
+
+Copyright M.Idziorek 2014 <m.i@gmx.at>
+
+Disclaimer
+----------
+
+This is a simple and useless "operating system", with very basic
+features, sorry. It is the fruit of my fundamental explorations of
+the 32-bit protected mode, interrupt handling, memory management and
+some other things.
+
+[![Screenshot of FoolOS](/screenshots/foolos.png?raw=true "FoolOs Kernel")]
+
+
+NOTES
+=====
+
+cli; disable interrupts
+lgdt
+lidt
+sti; enable interrupts
+
+Linux Startup x86
+=================
+
+1. arch/x86/boot/header.S
+
+Contains the header and linux 16 bit code.
+
+This code should be entered with a bootloader at the address specified
+within the header (as _start) which will put us at 'start_of_setup'
+
+Direct loading will put us at 'start2' at the very start which will
+show an error message
+
+If everyhing goes right we will enter the 16-bit real mode C module
+with:
+
+call main ; should not return
+
+2. arch/x86/boot/main.c
+
+void main(void) will do some checks and detections (cpu,mem,..) and
+invoke: go_to_protected_mode();
+
+3. arch/x86/boot/pm.c
+
+go_to_protected_mode() - will disable interrupts and set up the initial
+idt and gdt descriptor tables before calling: protected_mode_jump() and
+passing the address of code32_start.
+
+4. arch/x86/boot/pmjump.S
+
+back in assembly-world the actual transition is made inside
+'protected_mode_jump' and we move on to 'in_pm32' where the data segment
+is set up and we jmpl to the 32-bit entry point of the kernel.
+
+5. arch/x86/kernel/head32.c (assumption!?)
+
+void i386_start_kernel(void)
+
+6. init/main.c
+
+start_kernel(void)
+
+setup_arch()!!
+
+Interrupts
+==========
+
+arch/x86/include/asm/irq_vectors.h each entry is 8 bytes
+
+ISA interrupts:
+
+0x30 0x0000 0x0000 0x0000 0x0000
+0x31
+0x32
+..
+0x3f
+
+
+TODOS
+=====
+ * study LINUX KERNEL
+ * GNU HURD
+ * MINIX
+ * FreeBSD etc.
+
+NETWORK
+=======
+
+ look at following linux drivers:
+ * e1000
+
+notes
+=====
+
+* posix - minimal set of function calls!
+* distributed os
+* caches L1,L2,L3
+* controller -> ide inteface of device
+* probe memory!
+* a20~ wrap
+
+* ssd card reader
+* cobol fortran algol? compilers?
+
+* quotation: ontogeny nrecapitulates phylogeny
+
+* own simple sell
+
+check:
+apertium?
+clang
+freebsd
+user-mode-linux
+
+REFERENCES
+==========
+
+http://www.brokenthorn.com/Resources/OSDev17.html