Refine new IO port concept

This commit is contained in:
Jaby 2023-03-14 22:53:32 +01:00
parent 37192b537b
commit a361f8e4a0
3 changed files with 27 additions and 33 deletions

View File

@ -6,17 +6,28 @@ namespace JabyEngine {
template<typename T> template<typename T>
struct NormalValue { struct NormalValue {
typedef T Value; typedef T Value;
typedef T NakedValue;
}; };
template<typename T> template<typename T>
struct VolatileValue { struct VolatileValue {
typedef volatile T Value; typedef volatile T Value;
typedef T NakedValue;
}; };
#define __declare_new_io_port(name, adr) \
typedef name##_io_base<VolatileValue> name##_v; \
typedef name##_io_base<NormalValue> name##_t; \
static auto& name = *reinterpret_cast<name##_v*>(adr)
#define __declare_io_type(name, type, ...) \
template<template<typename> typename T> \
struct name##_io_base { \
T<type>::Value value; \
\
__VA_ARGS__ \
}
template<typename T> template<typename T>
struct VolatilePOD { struct __attribute__((deprecated)) VolatilePOD {
volatile T raw; volatile T raw;
constexpr T read() const { constexpr T read() const {
@ -30,7 +41,7 @@ namespace JabyEngine {
// For use with ComplexBitMaps or what else satisfies this API // For use with ComplexBitMaps or what else satisfies this API
template<typename T> template<typename T>
struct VolatileBitMapPOD { struct __attribute__((deprecated)) VolatileBitMapPOD {
typedef typename T::UnderlyingType Raw; typedef typename T::UnderlyingType Raw;
VolatilePOD<Raw> pod; VolatilePOD<Raw> pod;

View File

@ -4,27 +4,20 @@
namespace JabyEngine { namespace JabyEngine {
namespace Memory_IO { namespace Memory_IO {
template<template<typename> typename T> __declare_io_type(COM_DELAY, uint32_t,
struct COM_DELAY_base {
T<uint32_t>::Value value;
void setup() { void setup() {
this->value = 0x1325; this->value = 0x1325;
} }
}; );
typedef COM_DELAY_base<VolatileValue> COM_DELAY_v;
typedef COM_DELAY_base<NormalValue> COM_DELAY_t;
struct CD_DELAY { __declare_io_type(CD_DELAY, uint32_t,
typedef uint32_t Type; void setup() {
this->value = 0x20943;
}
);
static constexpr uint32_t SetupValue = 0x20943; __declare_new_io_port(COM_DELAY, 0x1F801020);
}; __declare_new_io_port(CD_DELAY, 0x1F801018);
static auto& COM_DELAY = *reinterpret_cast<COM_DELAY_v*>(0x1F801020);
//__declare_io_port_global_simple(COM_DELAY::Type, COM_DELAY, 0x1F801020);
__declare_io_port_global_simple(CD_DELAY::Type, CD_DELAY, 0x1F801018);
} }
} }

View File

@ -17,17 +17,7 @@ namespace JabyEngine {
void setup() { void setup() {
__syscall_EnterCriticalSection(); __syscall_EnterCriticalSection();
Memory_IO::COM_DELAY.setup(); Memory_IO::COM_DELAY.setup();
Memory_IO::COM_DELAY.setup(); Memory_IO::CD_DELAY.setup();
Memory_IO::COM_DELAY.setup();
Memory_IO::COM_DELAY_t b{Memory_IO::COM_DELAY.value};
b.setup();
b.setup();
b.setup();
//Memory_IO::COM_DELAY.write(Memory_IO::COM_DELAY::SetupValue);
Memory_IO::CD_DELAY.write(Memory_IO::CD_DELAY::SetupValue);
__syscall_SysEnqIntRP(CdromIoIrq, &::JabyEngine::CD::internal::callback); __syscall_SysEnqIntRP(CdromIoIrq, &::JabyEngine::CD::internal::callback);