Use new IO Port related types and further improvements of readability #1

Merged
jaby merged 18 commits from Overlay-The-Beginning_CDDrive_EndOfIO into Overlay-The-Beginning_CDDrive 2023-03-23 19:43:52 +00:00
1 changed files with 25 additions and 25 deletions
Showing only changes of commit a0cef63369 - Show all commits

View File

@ -4,42 +4,42 @@
namespace JabyEngine {
struct Interrupt {
static constexpr auto VBlank = Bit<uint32_t>(0);
static constexpr auto GPU = Bit<uint32_t>(1);
static constexpr auto CDROM = Bit<uint32_t>(2);
static constexpr auto DMA = Bit<uint32_t>(3);
static constexpr auto Timer0 = Bit<uint32_t>(4);
static constexpr auto Timer1 = Bit<uint32_t>(5);
static constexpr auto Timer2 = Bit<uint32_t>(6);
static constexpr auto Periphery = Bit<uint32_t>(7);
static constexpr auto SIO = Bit<uint32_t>(8);
static constexpr auto SPU = Bit<uint32_t>(9);
static constexpr auto Controller = Bit<uint32_t>(10);
static constexpr auto VBlank = IOBitSet(0);
static constexpr auto GPU = IOBitSet(1);
static constexpr auto CDROM = IOBitSet(2);
static constexpr auto DMA = IOBitSet(3);
static constexpr auto Timer0 = IOBitSet(4);
static constexpr auto Timer1 = IOBitSet(5);
static constexpr auto Timer2 = IOBitSet(6);
static constexpr auto Periphery = IOBitSet(7);
static constexpr auto SIO = IOBitSet(8);
static constexpr auto SPU = IOBitSet(9);
static constexpr auto Controller = IOBitSet(10);
static constexpr auto LightPen = Controller;
typedef struct Status : public ComplexBitMap<uint32_t> {
} Status_t;
__declare_io_type(Status, uint32_t,
);
typedef struct Mask : public ComplexBitMap<uint32_t> {
} Mask_t;
__declare_io_type(Mask, uint32_t,
);
__declare_io_port_member(Status_t, Status, 0x1F801070);
__declare_io_port_member(Mask_t, Mask, 0x1F801074);
__declare_new_io_port(Status, 0x1F801070);
__declare_new_io_port(Mask, 0x1F801074);
static bool is_irq(Bit<uint32_t> irq) {
return Status.read().is_bit_set(irq);
static constexpr bool is_irq(IOBitSet irq) {
return Status.is_set(irq);
}
static void ack_irq(Bit<uint32_t> irq) {
Status.write({Status.read().clear_bit(irq)});
static constexpr void ack_irq(IOBitSet irq) {
Status.clear(irq);
}
static void disable_irq(Bit<uint32_t> irq) {
Mask.write({Mask.read().clear_bit(irq)});
static constexpr void disable_irq(IOBitSet irq) {
Mask.clear(irq);
}
static void enable_irq(Bit<uint32_t> irq) {
Mask.write({Mask.read().set_bit(irq)});
static void enable_irq(IOBitSet irq) {
Mask.set(irq);
}
};
}