You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
69 lines
1.8 KiB
#include "debug.hpp"
|
|
|
|
auto dbg::debug_print_decimal(long long number) -> void
|
|
{
|
|
if (number < 0)
|
|
{
|
|
__outbyte(PORT_NUM, '-');
|
|
number = -number;
|
|
}
|
|
|
|
for (auto d = 1000000000000000000; d != 0; d /= 10)
|
|
if ((number / d) != 0)
|
|
__outbyte(PORT_NUM, alphabet[(number / d) % 10]);
|
|
}
|
|
|
|
auto dbg::debug_print_hex(u64 number, const bool show_zeros) -> void
|
|
{
|
|
for (auto d = 0x1000000000000000; d != 0; d /= 0x10)
|
|
if (show_zeros || (number / d) != 0)
|
|
__outbyte(PORT_NUM, alphabet[(number / d) % 0x10]);
|
|
}
|
|
|
|
auto dbg::print(const char* format, ...) -> void
|
|
{
|
|
va_list args;
|
|
va_start(args, format);
|
|
|
|
while (format[0])
|
|
{
|
|
if (format[0] == '%')
|
|
{
|
|
switch (format[1])
|
|
{
|
|
case 'd':
|
|
debug_print_decimal(va_arg(args, int));
|
|
format += 2;
|
|
continue;
|
|
case 'x':
|
|
debug_print_hex(va_arg(args, u32), false);
|
|
format += 2;
|
|
continue;
|
|
case 'l':
|
|
if (format[2] == 'l')
|
|
{
|
|
switch (format[3])
|
|
{
|
|
case 'd':
|
|
debug_print_decimal(va_arg(args, u64));
|
|
format += 4;
|
|
continue;
|
|
case 'x':
|
|
debug_print_hex(va_arg(args, u64), false);
|
|
format += 4;
|
|
continue;
|
|
}
|
|
}
|
|
break;
|
|
case 'p':
|
|
debug_print_hex(va_arg(args, u64), true);
|
|
format += 2;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
__outbyte(PORT_NUM, format[0]);
|
|
++format;
|
|
}
|
|
va_end(args);
|
|
} |