diff --git a/examples/PoolBox/application/src/Overlay/BIOSInfo/bios_info.cpp b/examples/PoolBox/application/src/Overlay/BIOSInfo/bios_info.cpp index 9d5c58ab..c6c28b98 100644 --- a/examples/PoolBox/application/src/Overlay/BIOSInfo/bios_info.cpp +++ b/examples/PoolBox/application/src/Overlay/BIOSInfo/bios_info.cpp @@ -59,7 +59,7 @@ namespace BIOSInfo { font_sliders[0] = FontSlider::create_for(FontWriter::BIOSFont::Info, result.kernel_maker); font_sliders[1] = FontSlider::create_for(FontWriter::BIOSFont::Info, result.gui_version); border_tiles[0].concat(border_tiles[1]); - return SysCall::get_bios_version(); + return result; } static bool update_or_exit(const SysCall::BIOSVersion& bios_version) { @@ -78,7 +78,7 @@ namespace BIOSInfo { } auto cursor = FontWriter::update(TextOffset); - FontWriter::bios_font_writer.write(cursor, "BIOS INFORMATION\n----------------\nDate:\n%X\nKernel-Maker:\n", bios_version.date_bcd); + FontWriter::bios_font_writer.write(cursor, "BIOS INFORMATION\n----------------\nDate (day/month/year):\n%i/%i/%i\nKernel-Maker:\n", bios_version.date.day, bios_version.date.month, bios_version.date.year); const auto old_pos_x = cursor.pos.x; FontWriter::bios_font_writer.write(move_cursor(cursor, font_sliders[0].count, old_pos_x), "%s\n", bios_version.kernel_maker); diff --git a/include/PSX/Auxiliary/math_helper.hpp b/include/PSX/Auxiliary/math_helper.hpp index 1393fda4..68d10098 100644 --- a/include/PSX/Auxiliary/math_helper.hpp +++ b/include/PSX/Auxiliary/math_helper.hpp @@ -1,7 +1,18 @@ #pragma once #include "types.hpp" +#include namespace JabyEngine { + template + static constexpr T pow(T base, T power) { + T result = base; + while(power > 1) { + result = result*base; + power--; + } + return result; + } + template static constexpr pair div_and_mod(T value, T div) { const auto result = value/div; @@ -12,4 +23,15 @@ namespace JabyEngine { const auto [tenth, rest] = div_and_mod(value, static_cast(10)); return (tenth << 4 | rest); } + + template + static constexpr T from_bcd(T value) { + T result = 0; + + for(size_t n = 1; n < pow(10u, sizeof(T)*2); n *= 10) { + result += (value & 0b1111)*n; + value = value >> 4; + } + return result; + } } \ No newline at end of file diff --git a/include/PSX/System/syscalls.hpp b/include/PSX/System/syscalls.hpp index ff4951fe..f26de9e1 100644 --- a/include/PSX/System/syscalls.hpp +++ b/include/PSX/System/syscalls.hpp @@ -56,7 +56,11 @@ namespace JabyEngine { #pragma pack(pop) struct BIOSVersion { - uint32_t date_bcd; + struct { + uint8_t day; + uint8_t month; + uint16_t year; + } date; const char* kernel_maker; const char* gui_version; }; diff --git a/src/Library/src/System/syscall.cpp b/src/Library/src/System/syscall.cpp index 917a2174..f0be18ec 100644 --- a/src/Library/src/System/syscall.cpp +++ b/src/Library/src/System/syscall.cpp @@ -1,3 +1,4 @@ +#include #include namespace JabyEngine { @@ -5,7 +6,11 @@ namespace JabyEngine { BIOSVersion get_bios_version() { BIOSVersion version; - version.date_bcd = *reinterpret_cast(0xBFC00100); + const auto date_bcd = *reinterpret_cast(0xBFC00100); + + version.date.day = from_bcd(static_cast(date_bcd & 0xFF)); + version.date.month = from_bcd(static_cast((date_bcd >> 8) & 0xFF)); + version.date.year = from_bcd(static_cast(date_bcd >> 16)); version.kernel_maker = reinterpret_cast(0xBFC00108); version.gui_version = reinterpret_cast(0xBFC7FF32); return version;