parent
29c43d81bf
commit
4ce8e47684
@ -0,0 +1,69 @@
|
||||
#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);
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include "hv_types.hpp"
|
||||
#define PORT_NUM 0x3E8
|
||||
|
||||
namespace dbg
|
||||
{
|
||||
constexpr char alphabet[] = "0123456789ABCDEF";
|
||||
auto debug_print_decimal(long long number) -> void;
|
||||
auto debug_print_hex(u64 number, const bool show_zeros) -> void;
|
||||
auto print(const char* format, ...) -> void;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include "hv_types.hpp"
|
||||
#include "debug.hpp"
|
||||
#include "invd.hpp"
|
||||
|
||||
extern "C" auto vmxexit_handler() -> void;
|
||||
|
Loading…
Reference in new issue