<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to wiki</title><link>https://sourceforge.net/p/cloudium-os/wiki/</link><description>Recent changes to wiki</description><atom:link href="https://sourceforge.net/p/cloudium-os/wiki/feed.rss" rel="self"/><language>en</language><lastBuildDate>Fri, 15 Sep 2017 14:09:32 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/cloudium-os/wiki/feed.rss" rel="self" type="application/rss+xml"/><item><title>Kernel API specification modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Kernel%2520API%2520specification/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -1,4 +1,4 @@
-Kernel API specification
+Kernel API specification (deprecated)
 ========================

 THIS DOCUMENT IS NOT UP TO DATE
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Fri, 15 Sep 2017 14:09:32 -0000</pubDate><guid>https://sourceforge.net5c0f845fcbac5382ef20a614fa8524525ae87fe0</guid></item><item><title>Pulse boot loader architecture modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Pulse%2520boot%2520loader%2520architecture/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v6
+++ v7
@@ -1,30 +1,43 @@
-Boot loader architecture
-=======================
-Pulse is a one-stage boot loader that loads only one piece of data called the "bootimage". This chunk of data is then used to initialize the GDT, IDT etc. since it contains all this information (in v2, the BCL is used for initialization). It also  contains where to copy this information to so it can change in future.
+Bootloader Architecture
+====================
+Pulse is a simple bootloader that loads only one piece of data called the "bootimage". The bootimage contains a boot catalog to load everything to the proper location, an initializer and as much data as neccesary.
+Conceptually a bootimage captures the whole state of the system, with some limitations.

-Architecture as described in 'boot_arch.txt'
-----------------------------------------------
-Bootloader tasks (v1):
- 1) Gather system information
- 2) Enable A20
- 3) Load bootimage
- 4) Use bootimage GDT, IDT etc. to initialize envoirement
- 5) Transfer control to the kernel
+Bootloader Properties
+-------------------------------
+The bootloader comes in two variants: one which is suited as an MBR (potentially part of GPT) and the other as a simple stand-alone, to be used on a single-os system or on a logical partition. It is
+preffered however to have the Pulse bootloader in the MBR, since it will proved the cleanest interface for a multiboot system. The bootloader is hardcoded to expect the bootimage at a certain LBA adress.

-Bootloader tasks (v2):
- 1) Gather system information
- * Only for booting, not OS
- 2) Enable A20
- 3) Load bootimage
- 4) Execute BCL part of the bootimage
- 5) Transfer control to bootimage
- * Assumes new OS design supporting RM, PM and LM
+Bootloader Tasks
+-------------------------
+  1. Gather system information
+  2. Enable A20
+  3. Load bootimage
+  4. Transfer control to initializer

-BCL (bootloader command list): Entry: byte 1 - 2: SOURCE
- byte 3 - 4: LENGTH
- byte 5 - 6: DESTINATION
- byte 7 - 8: TYPE
- type 0xFFFA: Continue execution of BCL
- type 0xFFFB: Stop execution of BCL
- Asm macro notation: entry(source, length, destination)
- stop()
+Boot Image
+------------------
+The bootimage has the following structure:
+```
+| Offset (decimal, bytes) | Size (bytes) | Description                                                    |
+|-------------------------|--------------|----------------------------------------------------------------|
+| 0                       | 4            | Size of the boot catalog.                                      |
+| 4                       | 4*n          | Boot catalog entries.                                          |
+| 4*(n+1)                 | ?            | Data (size implicitly determined by boot catalog's last entry. |
+```
+
+Each entry in the boot catalog has the following structure:
+```
+| Offset (decimal, bytes) | Size (bytes) | Description                  |
+|-------------------------|--------------|------------------------------|
+| 0                       | 4            | LBA Source adress (reserved) |
+| 4                       | 4            | Memory destination adress    |
+| 8                       | 4            | Chuck size                   |
+```
+
+The bootloader simply loads the whole boot catalog in memory, and then starts loading all
+chucks of data to the right location. The LBA Source adress is ignored, and all data chuncks are
+assumed to be in a continous piece of data right after the boot catalog. This is to improve locality on
+magnetic disks, when flash booting is supported this feature will be enabled. The first entry of the
+catalog must always be the initializer. After loading all chucks the initializer is executed and the
+bootloader may be safely overwritten.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Sat, 12 Nov 2016 21:24:14 -0000</pubDate><guid>https://sourceforge.net71563dec4a6661815718c9549633dbcefa2adcd0</guid></item><item><title>Pulse boot loader architecture modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Pulse%2520boot%2520loader%2520architecture/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -1,6 +1,6 @@
 Boot loader architecture
 =======================
-Pulse is a one-stage boot loader that loads only one piece of data called the "bootimage". This chunk of data is then used to initialize the GDT, IDT et cetera since it contains all this information (in v2, the BCL is used for initialization). It also  contains where to copy this information to so it can change in future.
+Pulse is a one-stage boot loader that loads only one piece of data called the "bootimage". This chunk of data is then used to initialize the GDT, IDT etc. since it contains all this information (in v2, the BCL is used for initialization). It also  contains where to copy this information to so it can change in future.

 Architecture as described in 'boot_arch.txt'
 ----------------------------------------------
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Tue, 14 Jun 2016 18:26:53 -0000</pubDate><guid>https://sourceforge.neta9566bd375918fa57ef00f8a7a52ac7f000fbc03</guid></item><item><title>Exode modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Exode/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -6,12 +6,14 @@
 * Functional
 * Object oriented
 * Declarative (constraint, logic)
+
 Type system
 -
 * Strong
 * Static
 * Effect system
 * Hindley–Milner type system
+
 Special features
 -
 * Query collections or the file system from inside the language
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Wed, 02 Sep 2015 19:52:21 -0000</pubDate><guid>https://sourceforge.net5f14081f8dd9762fc1edf6dfd312f2401e51de9d</guid></item><item><title>Exode modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Exode/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -22,6 +22,7 @@
 Examples
 -
 Simplified implementation of PersistentObject:
+
 ~~~~
 class PersistenObject : Object {
     on System.shutdown {
@@ -29,7 +30,9 @@
     }
 }
 ~~~~
+
 Example of inline ASM:
+
 ~~~~
 operator Int + Int {
     mov ax, #1
@@ -37,7 +40,10 @@
     add ax, bx
     return ax
 }
+~~~~
+
 You can mix high-level and low-level code:
+
 ~~~~
 use System.CPU

@@ -57,7 +63,9 @@
  * ...
  */
  ~~~~
+ 
 Queries:
+
 ~~~~
 numbers = [2, 3, 10, -1, 0, 5, -3]
 for x in numbers where x &amp;lt;= 0 {
@@ -65,7 +73,9 @@
 }
 // -1, 0, -3
 ~~~~
+
 Not convinced?
+
 ~~~~
 // No need for for-in: Exode is an array language
 display (Image in User.fotoAlbum[selectedAlbum] where width &amp;gt; 800 px &amp;amp; height &amp;gt; 600 px)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Wed, 02 Sep 2015 19:51:48 -0000</pubDate><guid>https://sourceforge.net07116198480f898743925badb2b2aa9a4a03ff4d</guid></item><item><title>Exode modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Exode/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Exode is our new programming languages in development. During development of Cloudium OS we saw the need for another language than only pure ASM. Because we didn't want to lose the fine-grained acces ASM provided us, we decided not to go with an existing language like C or C++, but to make our own. This also gives us the opportunity to create a languages specifically tailored to Cloudium OS, to incorporate new ideas and have a much more modern language at the core of the OS, which still allows the low level control of plain old ASM.&lt;/p&gt;
&lt;h2 id="paradigm"&gt;Paradigm&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Imperative&lt;/li&gt;
&lt;li&gt;Functional&lt;/li&gt;
&lt;li&gt;Object oriented&lt;/li&gt;
&lt;li&gt;Declarative (constraint, logic)&lt;br/&gt;
Type system&lt;br/&gt;
-&lt;/li&gt;
&lt;li&gt;Strong&lt;/li&gt;
&lt;li&gt;Static&lt;/li&gt;
&lt;li&gt;Effect system&lt;/li&gt;
&lt;li&gt;Hindley–Milner type system&lt;br/&gt;
Special features&lt;br/&gt;
-&lt;/li&gt;
&lt;li&gt;Query collections or the file system from inside the language&lt;/li&gt;
&lt;li&gt;Built-in support for concurrency (even over the network)&lt;/li&gt;
&lt;li&gt;Special support for event handlers&lt;/li&gt;
&lt;li&gt;Support for units&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples"&gt;Examples&lt;/h2&gt;
&lt;p&gt;Simplified implementation of PersistentObject:&lt;br/&gt;
    class PersistenObject : Object {&lt;br/&gt;
        on System.shutdown {&lt;br/&gt;
            self.serialize.save(id:self.hash)&lt;br/&gt;
        }&lt;br/&gt;
    }&lt;br/&gt;
Example of inline ASM:&lt;br/&gt;
    operator Int + Int {&lt;br/&gt;
        mov ax, #1&lt;br/&gt;
        mov bx, #2&lt;br/&gt;
        add ax, bx&lt;br/&gt;
        return ax&lt;br/&gt;
    }&lt;br/&gt;
    You can mix high-level and low-level code:&lt;br/&gt;
use System.CPU&lt;/p&gt;
&lt;p&gt;fn main() {&lt;br/&gt;
    ax, bx, cx = 1, 2, 3&lt;br/&gt;
    for register: value in  registers {&lt;br/&gt;
        println "(register): (value)"&lt;br/&gt;
    }&lt;br/&gt;
}&lt;br/&gt;
/&lt;em&gt;&lt;br/&gt;
 * AX: 0x0001&lt;br/&gt;
 * BX: 0x0002&lt;br/&gt;
 * CX: 0x0003&lt;br/&gt;
 * DX: 0xFD31&lt;br/&gt;
 * CS: 0x7D23&lt;br/&gt;
 * FS: 0x81D3&lt;br/&gt;
 * ...&lt;br/&gt;
&lt;/em&gt;/&lt;br/&gt;
    Queries:&lt;br/&gt;
numbers = &lt;span&gt;[2, 3, 10, -1, 0, 5, -3]&lt;/span&gt;&lt;br/&gt;
for x in numbers where x &amp;lt;= 0 {&lt;br/&gt;
    print x .. ", "&lt;br/&gt;
}&lt;br/&gt;
// -1, 0, -3&lt;br/&gt;
    Not convinced?&lt;br/&gt;
// No need for for-in: Exode is an array language&lt;br/&gt;
display (Image in User.fotoAlbum&lt;span&gt;[selectedAlbum]&lt;/span&gt; where width &amp;gt; 800 px &amp;amp; height &amp;gt; 600 px)&lt;br/&gt;
// Equivalent SQL: "select image from userPictures where album = (selectedAlbum) and width &amp;gt; 800 and height &amp;gt; 600"&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Wed, 02 Sep 2015 19:50:03 -0000</pubDate><guid>https://sourceforge.netf588014332e8ac08791516aa6d99939425313c7e</guid></item><item><title>Pulse boot loader architecture modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Pulse%2520boot%2520loader%2520architecture/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -2,7 +2,7 @@
 =======================
 Pulse is a one-stage boot loader that loads only one piece of data called the "bootimage". This chunk of data is then used to initialize the GDT, IDT et cetera since it contains all this information (in v2, the BCL is used for initialization). It also  contains where to copy this information to so it can change in future.

-Architecture like described in 'boot_arch.txt'
+Architecture as described in 'boot_arch.txt'
 ----------------------------------------------
 Bootloader tasks (v1):
  1) Gather system information
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Sat, 24 May 2014 18:08:10 -0000</pubDate><guid>https://sourceforge.net9c3858cffa1394daca4050a7f5cd2e50b9228905</guid></item><item><title>Plan modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Plan/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,4 +1,7 @@
 = Plan =
+
+THIS DOCUMENT IS NOT UP TO DATE
+THIS DOCUMENT IS IN CONSIDERATION OF DELETION

 == Bootloader ==
  # Complete current (release last alpha version)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Sat, 24 May 2014 18:07:49 -0000</pubDate><guid>https://sourceforge.netbc968084f864d4d74584353c604b6b7a4afad456</guid></item><item><title>Kernel API specification modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Kernel%2520API%2520specification/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -5,7 +5,7 @@

 This document describes the kernel API

-Like in the API_v1.0_spec.txt file
+As in the API_v1.0_spec.txt file
 ----------------------------------
 KERNEL API V1.0 SPECIFICATION
 Written by Jarno Van Schoor
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Sat, 24 May 2014 18:06:58 -0000</pubDate><guid>https://sourceforge.net7c5632f9bccb2ed6be8f56c4577dbe9f6e7846ac</guid></item><item><title>Nucleo kernel architecture modified by 0xJarno</title><link>https://sourceforge.net/p/cloudium-os/wiki/Nucleo%2520kernel%2520architecture/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -4,7 +4,7 @@

 This document describes the internal architecture of the Nucleo kernel

-Like in the kernel.txt file
+As in the kernel.txt file
 ---------------------------
  message pasing ("http://wiki.osdev.org/Message_Passing")
        type: reliable on top of unreliable
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">0xJarno</dc:creator><pubDate>Sat, 24 May 2014 18:06:23 -0000</pubDate><guid>https://sourceforge.net5120cda3ef4b5c1e53e4b597afac10887753f0c9</guid></item></channel></rss>