115 lines
4.4 KiB
Markdown
115 lines
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
|