#pragma once #include #include #include #include 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 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