51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
#include "debug.hpp"
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <cstring>
|
|
|
|
#include <tonc.h>
|
|
|
|
#include <mtl/string.hpp>
|
|
#include <mtl/string_view.hpp>
|
|
|
|
namespace debug {
|
|
/**
|
|
* \brief MGBA debug registers and constants
|
|
*/
|
|
namespace reg {
|
|
/**
|
|
* \brief MGBA debug enable register.
|
|
*
|
|
* When 0xC0DE is written to the register, debug output is enabled.
|
|
* When 0 is written to the register, debug output is disabled.
|
|
* Will be set to 0x1DEA when successfully enabled.
|
|
*/
|
|
static volatile uint16_t& enable = *reinterpret_cast<uint16_t*>(0x4FFF780);
|
|
/**
|
|
* \brief MGBA debug flags register.
|
|
*/
|
|
static volatile uint16_t& flags = *reinterpret_cast<uint16_t*>(0x4FFF700);
|
|
/**
|
|
* \brief MGBA debug string register.
|
|
*
|
|
* Max length of 0x100 (256) including null terminator.
|
|
*/
|
|
static mtl::string_ext string(reinterpret_cast<char*>(0x4FFF600), 256);
|
|
}; // namespace reg
|
|
|
|
void puts(const mtl::string_view& msg, level lvl) {
|
|
reg::string = msg;
|
|
reg::flags = lvl | 0x100;
|
|
}
|
|
|
|
bool open() {
|
|
reg::enable = 0xC0DE;
|
|
return reg::enable == 0x1DEA;
|
|
}
|
|
|
|
void close() {
|
|
reg::enable = 0;
|
|
}
|
|
}; // namespace debug
|