29#include <EASTL/functional.h>
32#include <source_location>
59static constexpr bool debugMode =
false;
61static constexpr bool debugMode =
true;
65static inline uint32_t getCop0Status() {
68 asm(
"mfc0 %0, $12 ; nop" :
"=r"(
r));
75static inline void setCop0Status(
uint32_t r) {
77 asm(
"mtc0 %0, $12 ; nop" : :
"r"(
r));
81[[noreturn]]
void abort(
const char* msg, std::source_location location = std::source_location::current());
82[[noreturn]]
void abort();
92static inline void fastEnterCriticalSection() {
94 asm volatile(
"mtc0 %0, $12 ; nop ; nop" : :
"r"(0x40000000));
103static inline void fastLeaveCriticalSection() {
105 asm volatile(
"mtc0 %0, $12" : :
"r"(0x40000401));
118static void waitForStatus(T mask, T expected,
const volatile T*
value) {
119 while ((*
value & mask) != expected);
122enum class DMA :
unsigned {
133enum class IRQ :
unsigned {
151[[noreturn]]
static inline void abort(
const char* msg,
152 std::source_location location = std::source_location::current()) {
153 if constexpr (debugMode) {
155 }
else if constexpr (!debugMode) {
349void addOnFrame(eastl::function<
void()>&& lambda);
357inline void assert(
bool condition,
const char* message,
358 std::source_location location = std::source_location::current()) {
359 if constexpr (debugMode) {
364 }
else if constexpr (!debugMode) {
The application class.
Definition application.hh:49
uint32_t r
Definition cpu.c:222
DmaCallback
Definition kernel.hh:38
@ FROM_MAIN_LOOP
Definition kernel.hh:40
@ FROM_ISR
Definition kernel.hh:39
void pumpCallbacks()
Definition kernel.cpp:407
void prepare(Application &)
Definition kernel.cpp:319
void crashHandler(uint32_t exceptionCode, uint32_t *kernelRegisters)
Definition crash-handler.cpp:145
void addOnFrame(eastl::function< void()> &&lambda)
Definition kernel.cpp:427
void beginFrame()
Definition kernel.cpp:431
void addInitializer(eastl::function< void(Application &)> &&lambda)
Definition kernel.cpp:285
void abort()
Definition kernel.cpp:202
uint32_t openEvent(uint32_t classId, uint32_t spec, uint32_t mode, eastl::function< void()> &&lambda)
A C++ wrapper around the openEvent syscall.
Definition kernel.cpp:209
void queueCallbackFromISR(eastl::function< void()> &&lambda)
Queues a callback to be called from the main thead.
Definition kernel.cpp:401
void assert(bool condition, const char *message, std::source_location location=std::source_location::current())
A simple assert macro.
Definition kernel.hh:357
unsigned registerDmaEvent(DMA channel, eastl::function< void()> &&lambda)
Sets an ISR callback for a given DMA channel.
Definition kernel.cpp:218
DMA
Definition kernel.hh:122
void queuePsyqoBreakHandler(eastl::function< bool(uint32_t)> &&handler)
Queues a break handler for psyqo's reserved category.
Definition kernel.cpp:111
void disableDma(DMA channel)
Disables the given DMA channel.
Definition kernel.cpp:254
void installCrashHandler()
Installs a crash handler for the application.
Definition kernel.cpp:173
void setBreakHandler(unsigned category, eastl::function< bool(uint32_t)> &&handler)
Sets a break handler for a given category.
Definition kernel.cpp:105
void flushCache()
Flushes the i-cache.
IRQ
Definition kernel.hh:133
void queueCallback(eastl::function< void()> &&lambda)
Queues a callback to be called from the main thead.
Definition kernel.cpp:394
void unregisterDmaEvent(unsigned slot)
Frees the given DMA callback slot.
Definition kernel.cpp:267
bool isKernelTakenOver()
Returns whether the kernel has been taken over.
Definition kernel.cpp:115
void enableDma(DMA channel, unsigned priority=7)
Enables the given DMA channel.
Definition kernel.cpp:236
void queueIRQHandler(IRQ irq, eastl::function< void()> &&lambda)
Queues an IRQ handler to be called from the exception handler.
Definition kernel.cpp:185
void takeOverKernel()
Takes over the kernel. Can only be called once inside the main function.
Definition kernel.cpp:140
static int value
Definition syscalls.h:535
static uint32_t spec
Definition syscalls.h:364
static uint32_t uint32_t void(* handler)())
Definition syscalls.h:371
static void uint32_t mode
Definition syscalls.h:231
void uint32_t(classId, spec)