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
4 years ago
|
#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);
|
||
|
}
|