2015-08-14 10:02:41 +00:00
# trainOS
2015-08-15 12:22:38 +00:00
## Description
2015-08-16 22:01:48 +00:00
An operating system built around the language "trainscript"
which is used to execute all user code in a virtual machine.
2015-08-15 12:22:38 +00:00
## Current status:
2015-08-16 22:01:48 +00:00
The vm can execute some code and is able to call native code.
Also it leaks memory. A lot of memory.
2015-08-15 12:22:38 +00:00
2015-08-22 13:36:24 +00:00
## Screenshots
![Screenshot of current version]
(http://s.mq32.de/?x6a3)
2015-08-15 12:22:38 +00:00
## Todo List
2015-08-22 10:57:10 +00:00
- Fix memory leaks
2015-08-22 13:54:31 +00:00
- Validation code leaks memory
- ???
2015-08-22 10:57:10 +00:00
- Improve virtual machine / trainScript
2015-08-22 13:54:31 +00:00
- Add support for feature restriction
- Add variable modifier `SHARED` : C/C++ `static` counterpart
- Add JIT compiler with thunkers
2015-08-22 10:57:10 +00:00
- Improve kernel
2015-08-22 13:54:31 +00:00
- Add support for "delegates" (callback + state): `void callback(void *state)
2015-08-14 10:02:41 +00:00
2015-08-17 13:38:19 +00:00
## Guidlines
- Calls to `die` or `die_extra` should follow the following scheme: `ContextName.ErrorName`
2015-08-18 16:01:16 +00:00
## Kernel Architecture
The kernel is a simple kernel that does not utilize paging. It has simple interrupt management where an
interrupt handler can be registerd for each interrupt.
### Bootstrapping
1. Setup 16 kB stack space
2. Clear screen and print boot message
3. Initialize physical memory management (page allocator)
4. Initialize interrupts
5. Enable hardware interrupts
6. Initialize timer
7. Initialize C++ support
8. Register status bar timer callback
9. Start virtual machine (and run OS)
10. Disable hardware interrupts
11. Print stop message
### Memory Allocation
The kernel features a simple malloc structure that allocates memor between 0x400000 and 0x800000 (4 MB heap space).
The allocator can be configured to "secure" its allocation list with a magic number by defining `USE_MAGIC_SECURED_MALLOC` in `config.h` .
It also features a surveillance mode that logs all allocations / frees. It can be enabled by defining `USE_VERBOSE_MALLOC` and `USE_VERBOSE_FREE` in `config.h` .
### Interrupt Mapping
|Number | Interrupt |
|-----------|-------------------|
|0x00 - 0x1F|System Interrupts |
|0x20 - 0x27| IRQ0 - IRQ7 |
|0x28 - 0x2F| IRQ8 - IRQ15 |