summaryrefslogtreecommitdiff
path: root/src/kernel/main.c
diff options
context:
space:
mode:
authorBenji Dial <benji6283@gmail.com>2021-02-18 11:56:08 -0500
committerBenji Dial <benji6283@gmail.com>2021-02-18 11:56:08 -0500
commit00cc8736f10098dedf6b856b9ad8bd0094211263 (patch)
tree4cd252a614b26cb3dcf4a20c142feeffbb4c3c2a /src/kernel/main.c
parent9d8ce7688f051fc5cd9e917faf3b1e49a3e620ab (diff)
downloadportland-os-00cc8736f10098dedf6b856b9ad8bd0094211263.tar.gz
vbe support, truecolor window manager pixbufs
Diffstat (limited to 'src/kernel/main.c')
-rw-r--r--src/kernel/main.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/kernel/main.c b/src/kernel/main.c
index 92315ce..43778d4 100644
--- a/src/kernel/main.c
+++ b/src/kernel/main.c
@@ -15,6 +15,7 @@
#include "kbd.h"
#include "log.h"
#include "pci.h"
+#include "vbe.h"
void _start_user_mode() __attribute__ ((noreturn));
@@ -46,12 +47,16 @@ void main() {
logf(LOG_INFO, "Available kernel memory: %dk", kernel_pages_left * 4);
logf(LOG_INFO, "Available user memory: %dk", user_pages_left * 4);
+ logf(LOG_INFO, "");
+
logf(LOG_INFO, "PCI devices:");
for (uint16_t i = 0; i < n_pci_devices; ++i) {
const struct pci_device *dev = nth_pci_device(i);
logf(LOG_INFO, " %hw:%hw (%hb:%hb)", dev->id_vendor, dev->id_device, dev->class, dev->subclass);
}
+ logf(LOG_INFO, "");
+
logf(LOG_INFO, "Drives:");
for (uint8_t i = 0; i < n_drives; ++i) {
const struct drive *d = &drives[i];
@@ -59,6 +64,29 @@ void main() {
logf(LOG_INFO, " %s: %d%sk, %s (%d%sk free)", d->drive_type, d->n_sectors / 2, d->n_sectors % 2 ? ".5" : "", d->fs_type, free / 2, free % 2 ? ".5" : "");
}
+ logf(LOG_INFO, "");
+
+ logf(LOG_INFO, "VBE info:");
+ logf(LOG_INFO, " Implemention: %s", RM_PTR(char, VBE_INFO->oem_name));
+ logf(LOG_INFO, " Video memory: %dk", VBE_INFO->total_memory * 64);
+ logf(LOG_INFO, " Standard: %d.%d.%d", VBE_INFO->major_version, VBE_INFO->minor_version, VBE_INFO->version_rev);
+ logf(LOG_INFO, " Vendor: %s", RM_PTR(char, VBE_INFO->vendor_name));
+ logf(LOG_INFO, " Product: %s", RM_PTR(char, VBE_INFO->product_name));
+ logf(LOG_INFO, " Version: %s", RM_PTR(char, VBE_INFO->product_rev_name));
+
+ logf(LOG_INFO, "");
+
+ #define MASK(offset, length) ((~((1 << offset) - 1)) - (offset + length == 32 ? 0 : (~((1 << (offset + length)) - 1))))
+ logf(LOG_INFO, "Active video mode:");
+ logf(LOG_INFO, " Resolution: %dx%dx%d", VBE_MODE_INFO->width, VBE_MODE_INFO->height, VBE_MODE_INFO->bpp);
+ logf(LOG_INFO, " Red mask: 0x%h", MASK(VBE_MODE_INFO->red_off, VBE_MODE_INFO->red_len));
+ logf(LOG_INFO, " Green mask: 0x%h", MASK(VBE_MODE_INFO->green_off, VBE_MODE_INFO->green_len));
+ logf(LOG_INFO, " Blue mask: 0x%h", MASK(VBE_MODE_INFO->blue_off, VBE_MODE_INFO->blue_len));
+ logf(LOG_INFO, " Alpha mask: 0x%h", MASK(VBE_MODE_INFO->alpha_off, VBE_MODE_INFO->alpha_len));
+ logf(LOG_INFO, " Framebuffer address: 0x%h", VBE_MODE_INFO->frame_buf);
+
+ logf(LOG_INFO, "");
+
logf(LOG_INFO, "Loading init program.");
if (!try_elf_run(drives, "bin/init", "", 0))