2019-05-19 11:19:41 -04:00
|
|
|
# Kernel
|
2019-04-25 16:03:45 -04:00
|
|
|
|
2019-05-19 11:19:41 -04:00
|
|
|
Bits and pieces of code that you can assemble to build a kernel for your
|
|
|
|
machine.
|
2019-04-25 16:03:45 -04:00
|
|
|
|
2019-05-19 11:19:41 -04:00
|
|
|
These parts are made to be glued together in a single `glue.asm` file you write
|
2019-04-25 16:03:45 -04:00
|
|
|
yourself.
|
|
|
|
|
2019-06-19 13:34:06 -04:00
|
|
|
This code is designed to be assembled by Collapse OS' own [zasm][zasm].
|
2019-04-25 16:03:45 -04:00
|
|
|
|
|
|
|
## Defines
|
|
|
|
|
|
|
|
Each part can have its own constants, but some constant are made to be defined
|
|
|
|
externally. We already have some of those external definitions in platform
|
|
|
|
includes, but we can have more defines than this.
|
|
|
|
|
|
|
|
Each part has a "DEFINES" section listing the constant it expects to be defined.
|
|
|
|
Make sure that you have these constants defined before you include the file.
|
|
|
|
|
|
|
|
## Variable management
|
|
|
|
|
|
|
|
Each part can define variables. These variables are defined as addresses in
|
|
|
|
RAM. We know where RAM start from the `RAMSTART` constant in platform includes,
|
|
|
|
but because those parts are made to be glued together in no pre-defined order,
|
|
|
|
we need a system to align variables from different modules in RAM.
|
|
|
|
|
|
|
|
This is why each part that has variable expect a `<PARTNAME>_RAMSTART`
|
|
|
|
constant to be defined and, in turn, defines a `<PARTNAME>_RAMEND` constant to
|
|
|
|
carry to the following part.
|
|
|
|
|
2019-06-19 13:34:06 -04:00
|
|
|
Thus, code that glue parts together could look like:
|
2019-04-25 16:03:45 -04:00
|
|
|
|
|
|
|
MOD1_RAMSTART .equ RAMSTART
|
|
|
|
#include "mod1.asm"
|
|
|
|
MOD2_RAMSTART .equ MOD1_RAMEND
|
|
|
|
#include "mod2.asm"
|
|
|
|
|
2019-06-19 13:34:06 -04:00
|
|
|
[zasm]: ../apps/zasm/README.md
|