115 lines
No EOL
4.4 KiB
Markdown
115 lines
No EOL
4.4 KiB
Markdown
# DasOS Virtual Device
|
||
|
||
DasOS emulates a virtual device that is shared between
|
||
all platform implementations. This device provides a
|
||
uniform environment with fixed specifications of hardware
|
||
and software as well as syscalls.
|
||
|
||
## Hardware
|
||
|
||
This section describes the virtual hardware components.
|
||
|
||
### CPU
|
||
The virtual device uses an *SPU Mark I* as the main processor.
|
||
|
||
### RAM
|
||
The *CPU* has a 32 MB *RAM* connected. In this RAM, both
|
||
data and code resides and the RAM has no memory protection.
|
||
|
||
### Screen
|
||
The screen connected to the *vGPU* has a resolution of
|
||
640x480 pixels and a color depth of 24 bits.
|
||
|
||
### vGPU
|
||
The *vGPU* provides access to the *Screen* and allows the
|
||
manipulation of its contents.
|
||
|
||
The gpu uses a double buffering system with a front and a
|
||
back buffer where as the front buffer is displayed on the
|
||
screen and the back buffer is modified by the CPU.
|
||
|
||
The gpu provides functions for printing text to the screen
|
||
as well as drawing visual primitives and clearing or swapping
|
||
the back buffer.
|
||
|
||
In addition to the features mentioned above, the back buffer is
|
||
accessible by a memory mapped area in the *RAM*.
|
||
|
||
### Persistent Storage
|
||
Two persistent storage devices are connected to the virtual device.
|
||
Both storage devices behave like IDE block devices where as the first
|
||
device is a fixed device and the second device is hot-pluggable.
|
||
|
||
The size and file format of the storage device is not specified.
|
||
|
||
## Software
|
||
This section describes the basic software components and interfaces
|
||
of the virtual device.
|
||
|
||
### BIOS
|
||
Each device implementation provides a *BIOS* that initialized
|
||
the device and provides host-dependant configuration.
|
||
|
||
### Boot Sequence
|
||
The boot sequence is initiated by the *BIOS* of the device
|
||
and can only be changed with a BIOS configuration.
|
||
|
||
- Determine existence of persistant storage devices
|
||
- Fixed device
|
||
- Swappable device
|
||
- Bootloading
|
||
- Searching for a fitting partition
|
||
- FAT32 formatted partition
|
||
- `/system.exp` must exist
|
||
- *Exploading* `/system.exp` into RAM
|
||
- Clearing *vGPU* text screen.
|
||
- Jump to *Entry Point*
|
||
|
||
### Memory Areas
|
||
|
||
#### Memory Mapped IO
|
||
The memory between `0x200000` and `0x400000` is reserved for
|
||
hardware use.
|
||
|
||
#### Entry Point
|
||
After successfully initialization, the virtual device jumps
|
||
to the address `0x400000` which is equal to the instruction
|
||
index `0x100000`.
|
||
|
||
### vGPU Interface
|
||
|
||
#### Back Buffer
|
||
The back buffer of the vGPU is organized in n RGB24 format
|
||
where pixels are stored in a 24 bpp format with R as the first
|
||
byte, G as the second and B as the last.
|
||
It is 900 kB large and maps the full screen area of 640x480 pixels
|
||
as a linear frame buffer from `0x200000` to `0x2E1000`.
|
||
|
||
#### MMIO Registers
|
||
The *vGPU* also uses some registers accessible via memory mapped io.
|
||
|
||
| Register | Address | Type | Description |
|
||
|----------|----------|------|-----------------------------------------|
|
||
| COLOR | 0x2E1000 | u32 | The color used for any draw commands. |
|
||
| CURSORX | 0x2E1004 | u16 | The x position of the draw cursor |
|
||
| CURSORY | 0x2E1006 | u16 | The y position of the draw cursor |
|
||
| SPRITE | 0x2E1008 | ptr | The address of the sprite to copy |
|
||
| WIDTH | 0x2E100C | u16 | The width of the sprite. |
|
||
| HEIGHT | 0x2E101E | u16 | The height of the sprite. |
|
||
| PITCH | 0x2E1010 | u32 | The pitch (memory width) of the sprite. |
|
||
|
||
#### HWIO Interface
|
||
The vGPU is controllable via the HWIO command of the SPU
|
||
with the command info >= `0x10000`.
|
||
|
||
| Command | CmdInfo | Input0 | Input1 | Description |
|
||
|---------|---------|--------|--------|-----------------------------------------------------------|
|
||
| Clear | 0x10000 | y | x | Clears the screen and moves the cursor to (x,y) |
|
||
| Line | 0x10001 | y | x | Draws a line from the cursor to (x,y). |
|
||
| Rect | 0x10002 | y | x | Draws a rectangle between the cursor and (x,y). |
|
||
| Fill | 0x10003 | y | x | Fills a rectangle between the cursor and (x,y). |
|
||
| Copy | 0x10004 | y | x | Renders the current sprite at (x,y) and moves the cursor. |
|
||
| Pixel | 0x10005 | y | x | Sets the pixel at (x,y). |
|
||
| Move | 0x10006 | y | x | Moves the cursor to (x,y). |
|
||
|
||
# TODO: Text Commands |