Files
ircolib/core/broadway.hpp
T
2026-05-15 09:45:26 +02:00

62 lines
1.5 KiB
C++

#pragma once
#include <ircolib/types.hpp>
#include <capstone/capstone.h>
#include <xbyak/xbyak.h>
#include <array>
namespace weee::core {
struct mem;
struct broadway {
broadway();
void set_pc(ircolib::u32);
void run(mem &);
private:
ircolib::u32 fetch(mem &);
void print_disasm(ircolib::u32);
void execute(ircolib::u32, mem &);
bool disasm_available = true;
ircolib::u32 pc = 0, lr = 0, ctr = 0, cr = 0, srr0;
union {
struct {
unsigned bytecount : 7;
unsigned : 22;
unsigned ca : 1;
unsigned ov : 1;
unsigned so : 1;
};
ircolib::u32 raw;
} xer;
std::array<ircolib::u32, 32> gpr{};
// ircolib::u32 const_gpr_lookup{};
csh capstone;
// Xbyak::CodeGenerator code;
// instructions
void decode_special(ircolib::u32, mem &);
void decode_branch(ircolib::u32, mem &);
void add(ircolib::u32);
void addis(ircolib::u32);
void addi(ircolib::u32);
void ori(ircolib::u32);
void oris(ircolib::u32);
void bx(ircolib::u32);
void bcx(ircolib::u32);
void mtspr(ircolib::u32);
void mfspr(ircolib::u32);
void stw(ircolib::u32, mem &);
void stwu(ircolib::u32, mem &);
void sth(ircolib::u32, mem &);
void lwz(ircolib::u32, mem &);
void bclrx(ircolib::u32);
void cmpi(ircolib::u32);
void rlwinm(ircolib::u32);
void lwzu(ircolib::u32, mem &);
void rfi(ircolib::u32);
};
} // namespace weee::core