#pragma once #include #include #include #include #include #include #include #include #include #include #include #include namespace weee::core { template struct read_handler { std::function func; ircolib::u32 start, end; }; template struct write_handler { std::function func; ircolib::u32 start, end; }; struct mem { mem(); void register_read8_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { read8_handlers.push_back({std::move(func), start, end}); } void register_read16_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { read16_handlers.push_back({std::move(func), start, end}); } void register_read32_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { read32_handlers.push_back({std::move(func), start, end}); } void register_read64_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { read64_handlers.push_back({std::move(func), start, end}); } void register_write8_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { write8_handlers.push_back({std::move(func), start, end}); } void register_write16_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { write16_handlers.push_back({std::move(func), start, end}); } void register_write32_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { write32_handlers.push_back({std::move(func), start, end}); } void register_write64_handler(ircolib::u32 start, ircolib::u32 end, const std::function &func) { write64_handlers.push_back({std::move(func), start, end}); } std::expected read8(ircolib::u32); std::expected read16(ircolib::u32); std::expected read32(ircolib::u32); std::expected read64(ircolib::u32); std::expected write8(ircolib::u32, ircolib::u8); std::expected write16(ircolib::u32, ircolib::u16); std::expected write32(ircolib::u32, ircolib::u32); std::expected write64(ircolib::u32, ircolib::u64); void copy(std::vector &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); std::vector mem1; std::vector ipl{}; private: std::vector> read8_handlers{}; std::vector> read16_handlers{}; std::vector> read32_handlers{}; std::vector> read64_handlers{}; std::vector> write8_handlers{}; std::vector> write16_handlers{}; std::vector> write32_handlers{}; std::vector> write64_handlers{}; public: video_interface vi; processor_interface pi; memory_interface mi; dsp dsp; exi exi; audio_interface ai; serial_interface si; }; } // namespace weee::core