xfb loop copy finished
This commit is contained in:
+32
-4
@@ -28,8 +28,27 @@ ircolib::u32 broadway::fetch(mem &mem) {
|
||||
return val;
|
||||
}
|
||||
|
||||
void broadway::decode_special(ircolib::u32 instr, mem &mem) {
|
||||
switch (utils::secondary(instr)) {
|
||||
case 0x153:
|
||||
mfspr(instr);
|
||||
break;
|
||||
case 0x1D3:
|
||||
mtspr(instr);
|
||||
break;
|
||||
case 0x10A:
|
||||
add(instr);
|
||||
break;
|
||||
default:
|
||||
ircolib::panic("broadway unknown special 0x{:04X}", utils::secondary(instr));
|
||||
}
|
||||
}
|
||||
|
||||
void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
switch (utils::primary(instr)) {
|
||||
case 11: // cmpi crfD, L, rA, simm
|
||||
cmpi(instr);
|
||||
break;
|
||||
case 14: // addi rd, ra, simm
|
||||
addi(instr);
|
||||
break;
|
||||
@@ -42,15 +61,24 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
case 18: // bx target
|
||||
bx(instr);
|
||||
break;
|
||||
case 19:
|
||||
bclrx(instr);
|
||||
break;
|
||||
case 21:
|
||||
rlwinm(instr);
|
||||
break;
|
||||
case 24: // ori ra, rs, uimm
|
||||
ori(instr);
|
||||
break;
|
||||
case 31: // mfspr rd, spr
|
||||
move_spr(instr);
|
||||
case 31:
|
||||
decode_special(instr, mem);
|
||||
break;
|
||||
case 32: // mfspr rd, spr
|
||||
case 32: // lwz rd, d(ra)
|
||||
lwz(instr, mem);
|
||||
break;
|
||||
case 33: // lwz rd, d(ra)
|
||||
lwzu(instr, mem);
|
||||
break;
|
||||
case 36: // stw rs, d(ra)
|
||||
stw(instr, mem);
|
||||
break;
|
||||
@@ -80,7 +108,7 @@ void broadway::print_disasm(ircolib::u32 instr) {
|
||||
|
||||
size_t j;
|
||||
for (j = 0; j < count; j++) {
|
||||
printf("0x%" PRIx64 ":\t%s\t\t%s\n", insn[j].address, insn[j].mnemonic, insn[j].op_str);
|
||||
std::println("\t0x{:x}:\t{}\t\t{}", insn[j].address, insn[j].mnemonic, insn[j].op_str);
|
||||
}
|
||||
|
||||
cs_free(insn, count);
|
||||
|
||||
Reference in New Issue
Block a user