diff options
author | Benji Dial <benji3.141@gmail.com> | 2019-12-14 18:31:34 -0500 |
---|---|---|
committer | Benji Dial <benji3.141@gmail.com> | 2019-12-14 18:31:34 -0500 |
commit | cdc7b2ae532fd3a93e13784812f7501f2fd5c07a (patch) | |
tree | 9ea27c32a7f3dc0acc62b421b139d3e8a1dd1cb6 /src/kernel | |
parent | aeff38fe153addba50b40600166acd42e7885e99 (diff) | |
download | portland-os-cdc7b2ae532fd3a93e13784812f7501f2fd5c07a.tar.gz |
more of bootloader, tiny kernel stub
Diffstat (limited to 'src/kernel')
-rw-r--r-- | src/kernel/main.c | 26 | ||||
-rw-r--r-- | src/kernel/vga.c | 71 | ||||
-rw-r--r-- | src/kernel/vga.h | 31 |
3 files changed, 128 insertions, 0 deletions
diff --git a/src/kernel/main.c b/src/kernel/main.c new file mode 100644 index 0000000..079779c --- /dev/null +++ b/src/kernel/main.c @@ -0,0 +1,26 @@ +/* +Copyright 2019 Benji Dial + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby +granted, provided that the above copyright notice and this +permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. +*/ + +#include "vga.h" + +void main(void) { + put_sz("Welcome to Portland version 0.0.8!\n"); + while (1) + put_sz("|\b/\b-\b\\\b"); +} diff --git a/src/kernel/vga.c b/src/kernel/vga.c new file mode 100644 index 0000000..046dda7 --- /dev/null +++ b/src/kernel/vga.c @@ -0,0 +1,71 @@ +/* +Copyright 2019 Benji Dial + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby +granted, provided that the above copyright notice and this +permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. +*/ + +#include "vga.h" + +uint16_t cursor_pos = 0; +uint8_t color = 0xf0; +#define cols 80 +#define rows 25 + +void scroll(void) { + cursor_pos -= cols * 2; + uint32_t *limit = (uint32_t *)(VGA_BUFFER + cols * (rows - 1)); + for (uint32_t *i = (uint32_t *)VGA_BUFFER; i < limit; ++i) + *i = *(i + cols / 2); + limit += cols / 2; + uint32_t fill = (color * 0x0100 + (uint8_t)' ') * 0x00010001; + for (uint32_t *i = limit - cols / 2; i < limit; ++i) + *i = fill; +} + +void put_char(uint8_t ch) { + switch (ch) { + case '\b': + if (cursor_pos) + VGA_BUFFER[cursor_pos -= 2] = (uint8_t)' '; + break; + case '\t': + while ((cursor_pos % (cols * 2)) % 20) + put_char(' '); + break; + case '\n': + if ((cursor_pos = (cursor_pos / (cols * 2) + 1) * (cols * 2)) >= cols * rows * 2) + scroll(); + break; + default: + VGA_BUFFER[cursor_pos++] = ch; + VGA_BUFFER[cursor_pos++] = color; + if (cursor_pos == (cols * rows * 2)) + scroll(); + } +} + +void put_sz(uint8_t *sz) { + while (*sz) + put_char(*(sz++)); +} + +void move_cursor(uint8_t col, uint8_t row) { + cursor_pos = (col + row * cols) * 2; +} + +void set_color(uint8_t c) { + color = c; +} diff --git a/src/kernel/vga.h b/src/kernel/vga.h new file mode 100644 index 0000000..74a5d04 --- /dev/null +++ b/src/kernel/vga.h @@ -0,0 +1,31 @@ +/* +Copyright 2019 Benji Dial + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby +granted, provided that the above copyright notice and this +permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. +*/ + +#include <stdint.h> + +#ifndef VGA_H +#define VGA_H + +#define VGA_BUFFER ((uint8_t *)0x000b8000) +void put_char(uint8_t ch); +void put_sz(uint8_t *s); +void move_cursor(uint8_t col, uint8_t row); +void set_color(uint8_t c); + +#endif
\ No newline at end of file |