getting closer and closer to the xfb copy loop in panda
This commit is contained in:
+65
-5
@@ -1,21 +1,81 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <ircolib/types.hpp>
|
||||
#include "broadway/mmio/vi.hpp"
|
||||
#include <broadway/mmio/vi.hpp>
|
||||
#include <functional>
|
||||
|
||||
namespace weee::core {
|
||||
template <typename T>
|
||||
struct read_handler {
|
||||
std::function<T(ircolib::u32)> func;
|
||||
ircolib::u32 start, end;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct write_handler {
|
||||
std::function<void(ircolib::u32, T)> func;
|
||||
ircolib::u32 start, end;
|
||||
};
|
||||
|
||||
struct mem {
|
||||
mem();
|
||||
|
||||
template <typename T>
|
||||
T read(ircolib::u32);
|
||||
void write(ircolib::u32, ircolib::u32);
|
||||
void write(ircolib::u32, ircolib::u16);
|
||||
void register_read8_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<ircolib::u8(ircolib::u32)> &func) {
|
||||
read8_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_read16_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<ircolib::u16(ircolib::u32)> &func) {
|
||||
read16_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_read32_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<ircolib::u32(ircolib::u32)> &func) {
|
||||
read32_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_read64_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<ircolib::u64(ircolib::u32)> &func) {
|
||||
read64_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_write8_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<void(ircolib::u32, ircolib::u8)> &func) {
|
||||
write8_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_write16_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<void(ircolib::u32, ircolib::u16)> &func) {
|
||||
write16_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_write32_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<void(ircolib::u32, ircolib::u32)> &func) {
|
||||
write32_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
void register_write64_handler(ircolib::u32 start, ircolib::u32 end,
|
||||
const std::function<void(ircolib::u32, ircolib::u64)> &func) {
|
||||
write64_handlers.push_back({std::move(func), start, end});
|
||||
}
|
||||
|
||||
ircolib::u8 read8(ircolib::u32);
|
||||
ircolib::u16 read16(ircolib::u32);
|
||||
ircolib::u32 read32(ircolib::u32);
|
||||
ircolib::u64 read64(ircolib::u32);
|
||||
void write8(ircolib::u32, ircolib::u8);
|
||||
void write16(ircolib::u32, ircolib::u16);
|
||||
void write32(ircolib::u32, ircolib::u32);
|
||||
void write64(ircolib::u32, ircolib::u64);
|
||||
|
||||
void copy(std::vector<ircolib::u8> &src, const ircolib::u32 offset);
|
||||
void copy(ircolib::u8 *src, const ircolib::u32 size, const ircolib::u32 offset);
|
||||
void set(const ircolib::u8 val, const ircolib::u32 size, const ircolib::u32 offset);
|
||||
|
||||
private:
|
||||
std::vector<read_handler<ircolib::u8>> read8_handlers{};
|
||||
std::vector<read_handler<ircolib::u16>> read16_handlers{};
|
||||
std::vector<read_handler<ircolib::u32>> read32_handlers{};
|
||||
std::vector<read_handler<ircolib::u64>> read64_handlers{};
|
||||
std::vector<write_handler<ircolib::u8>> write8_handlers{};
|
||||
std::vector<write_handler<ircolib::u16>> write16_handlers{};
|
||||
std::vector<write_handler<ircolib::u32>> write32_handlers{};
|
||||
std::vector<write_handler<ircolib::u64>> write64_handlers{};
|
||||
|
||||
std::vector<ircolib::u8> mem1;
|
||||
video_interface vi;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user