diff --git a/GNUmakefile b/GNUmakefile index 8ed3b9c..f108014 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -30,23 +30,23 @@ run: run-$(ARCH) run-hdd: run-hdd-$(ARCH) .PHONY: run-x86_64 -run-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso +run-x86_64: $(IMAGE_NAME).iso qemu-system-$(ARCH) \ -M q35 \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -cdrom $(IMAGE_NAME).iso \ $(QEMUFLAGS) .PHONY: run-hdd-x86_64 -run-hdd-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd +run-hdd-x86_64: $(IMAGE_NAME).hdd qemu-system-$(ARCH) \ -M q35 \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -hda $(IMAGE_NAME).hdd \ $(QEMUFLAGS) .PHONY: run-aarch64 -run-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso +run-aarch64: $(IMAGE_NAME).iso qemu-system-$(ARCH) \ -M virt \ -cpu cortex-a72 \ @@ -54,12 +54,12 @@ run-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -cdrom $(IMAGE_NAME).iso \ $(QEMUFLAGS) .PHONY: run-hdd-aarch64 -run-hdd-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd +run-hdd-aarch64: $(IMAGE_NAME).hdd qemu-system-$(ARCH) \ -M virt \ -cpu cortex-a72 \ @@ -67,12 +67,12 @@ run-hdd-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -hda $(IMAGE_NAME).hdd \ $(QEMUFLAGS) .PHONY: run-riscv64 -run-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso +run-riscv64: $(IMAGE_NAME).iso qemu-system-$(ARCH) \ -M virt \ -cpu rv64 \ @@ -80,12 +80,12 @@ run-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -cdrom $(IMAGE_NAME).iso \ $(QEMUFLAGS) .PHONY: run-hdd-riscv64 -run-hdd-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd +run-hdd-riscv64: $(IMAGE_NAME).hdd qemu-system-$(ARCH) \ -M virt \ -cpu rv64 \ @@ -93,12 +93,12 @@ run-hdd-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -hda $(IMAGE_NAME).hdd \ $(QEMUFLAGS) .PHONY: run-loongarch64 -run-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso +run-loongarch64: $(IMAGE_NAME).iso qemu-system-$(ARCH) \ -M virt \ -cpu la464 \ @@ -106,12 +106,12 @@ run-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -cdrom $(IMAGE_NAME).iso \ $(QEMUFLAGS) .PHONY: run-hdd-loongarch64 -run-hdd-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd +run-hdd-loongarch64: $(IMAGE_NAME).hdd qemu-system-$(ARCH) \ -M virt \ -cpu la464 \ @@ -119,7 +119,7 @@ run-hdd-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ - -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ + -bios /usr/share/ovmf/OVMF.fd \ -hda $(IMAGE_NAME).hdd \ $(QEMUFLAGS) @@ -139,14 +139,6 @@ run-hdd-bios: $(IMAGE_NAME).hdd -hda $(IMAGE_NAME).hdd \ $(QEMUFLAGS) -ovmf/ovmf-code-$(ARCH).fd: - mkdir -p ovmf - curl -Lo $@ https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/ovmf-code-$(ARCH).fd - case "$(ARCH)" in \ - aarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=67108864 2>/dev/null;; \ - riscv64) dd if=/dev/zero of=$@ bs=1 count=0 seek=33554432 2>/dev/null;; \ - esac - limine/limine: rm -rf limine git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1 diff --git a/kernel/src/Libraries/flanterm b/kernel/src/Libraries/flanterm index 4cacad1..ea6a6cd 160000 --- a/kernel/src/Libraries/flanterm +++ b/kernel/src/Libraries/flanterm @@ -1 +1 @@ -Subproject commit 4cacad16218ba85d7d7f7566b2b3de46574c7d60 +Subproject commit ea6a6cdecf3b830f2a8cb4ffe3e58098937224c3 diff --git a/kernel/src/Timekeeping/Time.cpp b/kernel/src/Timekeeping/Time.cpp index 0f50afe..3afea1d 100644 --- a/kernel/src/Timekeeping/Time.cpp +++ b/kernel/src/Timekeeping/Time.cpp @@ -10,6 +10,29 @@ using namespace Kt; void Timekeeping::Init(uint16_t Year, uint8_t Month, uint8_t Day, uint8_t Hour, uint8_t Minute, uint8_t Second) { + /* Hardcode CET for now */ + TimeZone CET = { + "Central European Time", + "CET", + 1, /* UTC+1 */ + 0, + false + }; + + Kt::KernelLogStream(INFO, "Timekeeping Service") << "Setting time zone to " << CET.TZLongName << " (" << CET.TZShortName << ")"; + + Minute = Minute + CET.MinuteOffset; + Hour = Hour + CET.HourOffset; + if (Minute >= 60) { + Minute -= 60; + Hour += 1; + } + if (Hour >= 24) { + Hour -= 24; + Day += 1; + /* Note: No month/day overflow handling yet */ + } + kcp::cstringstream minuteStream; if (Minute < 10) { minuteStream << "0"; @@ -33,7 +56,8 @@ void Timekeeping::Init(uint16_t Year, uint8_t Month, uint8_t Day, uint8_t Hour, << Hour << ":" << minuteStr << ":" - << secondStr; + << secondStr + << " (" << CET.TZLongName << ")"; CString dateString = panelStr.c_str(); diff --git a/kernel/src/Timekeeping/Time.hpp b/kernel/src/Timekeeping/Time.hpp index 9a6588a..3d473eb 100644 --- a/kernel/src/Timekeeping/Time.hpp +++ b/kernel/src/Timekeeping/Time.hpp @@ -7,6 +7,24 @@ #include namespace Timekeeping { + /* + Structure representing the attributes of a time zone; properties and time zone configuration will eventually + be loaded from disk/ramdisk. + */ + struct TimeZone { + /* Time zone naming scheme: + i.e. "Central European Time" / "CET" + */ + CString TZLongName; + CString TZShortName; + /* Hour offset from UTC */ + int8_t HourOffset; + /* Minute offset from UTC */ + int8_t MinuteOffset; + /* Is daylight saving time */ + bool IsDST; + }; + const CString Months[] = { nullptr, "January",