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
|
#pragma once
|
||||||
#include "hv_types.hpp"
|
#include "hv_types.hpp"
|
||||||
|
#include "debug.hpp"
|
||||||
#include "invd.hpp"
|
#include "invd.hpp"
|
||||||
|
|
||||||
extern "C" auto vmxexit_handler() -> void;
|
extern "C" auto vmxexit_handler() -> void;
|
||||||
|
Loading…
Reference in new issue