i need to start caring about carry >.<
This commit is contained in:
+61
-6
@@ -45,7 +45,10 @@ void broadway::decode_special3(ircolib::u32 instr, mem &mem) {
|
||||
mtfsf(instr);
|
||||
break;
|
||||
default:
|
||||
ircolib::panic("broadway unknown special3 {} (0x{:04X}) (pc 0x{:08X})", secondary, secondary, pc - 4);
|
||||
std::println("broadway unknown special3 {} (0x{:04X}) (pc 0x{:08X})", secondary, secondary, pc - 4);
|
||||
std::println("disassembly:");
|
||||
print_disasm(instr);
|
||||
ircolib::panic("LR: 0x{:08X}", lr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +58,15 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
|
||||
case 0x000:
|
||||
cmp(instr);
|
||||
break;
|
||||
case 0x013:
|
||||
mfcr(instr);
|
||||
break;
|
||||
case 0x017:
|
||||
lwzx(instr, mem);
|
||||
break;
|
||||
case 0x01C:
|
||||
and(instr);
|
||||
break;
|
||||
case 0x020:
|
||||
cmpl(instr);
|
||||
break;
|
||||
@@ -64,9 +76,21 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
|
||||
case 0x053:
|
||||
mfmsr(instr);
|
||||
break;
|
||||
case 0x090:
|
||||
mtcrf(instr);
|
||||
break;
|
||||
case 0x092:
|
||||
mtmsr(instr);
|
||||
break;
|
||||
case 0x097:
|
||||
stwx(instr, mem);
|
||||
break;
|
||||
case 0x0D2:
|
||||
ircolib::warn("broadway TODO mtsr (pc 0x{:08X})", pc - 4);
|
||||
break;
|
||||
case 0x0EB:
|
||||
mullw(instr);
|
||||
break;
|
||||
case 0x1BC:
|
||||
or (instr);
|
||||
break;
|
||||
@@ -80,10 +104,16 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
|
||||
case 0x10A:
|
||||
add(instr);
|
||||
break;
|
||||
case 0x1CB:
|
||||
divwu(instr);
|
||||
break;
|
||||
case 0x256: // sync
|
||||
break;
|
||||
default:
|
||||
ircolib::panic("broadway unknown special2 {} (0x{:04X}) (pc 0x{:08X})", secondary, secondary, pc - 4);
|
||||
std::println("broadway unknown special2 {} (0x{:04X}) (pc 0x{:08X})", secondary, secondary, pc - 4);
|
||||
std::println("disassembly:");
|
||||
print_disasm(instr);
|
||||
ircolib::panic("LR: 0x{:08X}", lr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,19 +128,32 @@ void broadway::decode_special1(ircolib::u32 instr, mem &mem) {
|
||||
case 0x96: // isync
|
||||
break;
|
||||
default:
|
||||
ircolib::panic("broadway unknown special1 {} (0x{:04X}) (pc 0x{:08X})", utils::secondary(instr),
|
||||
utils::secondary(instr), pc - 4);
|
||||
std::println("broadway unknown special1 {} (0x{:04X}) (pc 0x{:08X})", utils::secondary(instr),
|
||||
utils::secondary(instr), pc - 4);
|
||||
std::println("disassembly:");
|
||||
print_disasm(instr);
|
||||
ircolib::panic("LR: 0x{:08X}", lr);
|
||||
}
|
||||
}
|
||||
|
||||
void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
switch (utils::primary(instr)) {
|
||||
const auto primary = utils::primary(instr);
|
||||
switch (primary) {
|
||||
case 7:
|
||||
mulli(instr);
|
||||
break;
|
||||
case 10:
|
||||
cmpli(instr);
|
||||
break;
|
||||
case 11:
|
||||
cmpi(instr);
|
||||
break;
|
||||
case 12:
|
||||
addic(instr);
|
||||
break;
|
||||
case 13:
|
||||
addicr(instr);
|
||||
break;
|
||||
case 14:
|
||||
addi(instr);
|
||||
break;
|
||||
@@ -126,6 +169,9 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
case 19:
|
||||
decode_special1(instr, mem);
|
||||
break;
|
||||
case 20:
|
||||
rlwimi(instr);
|
||||
break;
|
||||
case 21:
|
||||
rlwinm(instr);
|
||||
break;
|
||||
@@ -138,6 +184,9 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
case 28:
|
||||
andi(instr);
|
||||
break;
|
||||
case 29:
|
||||
andis(instr);
|
||||
break;
|
||||
case 31:
|
||||
decode_special2(instr, mem);
|
||||
break;
|
||||
@@ -156,9 +205,15 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
case 37:
|
||||
stwu(instr, mem);
|
||||
break;
|
||||
case 38:
|
||||
stb(instr, mem);
|
||||
break;
|
||||
case 39:
|
||||
stbu(instr, mem);
|
||||
break;
|
||||
case 40:
|
||||
lhz(instr, mem);
|
||||
break;
|
||||
case 44:
|
||||
sth(instr, mem);
|
||||
break;
|
||||
@@ -169,7 +224,7 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
|
||||
decode_special3(instr, mem);
|
||||
break;
|
||||
default:
|
||||
std::println("broadway::execute unimplemented instruction 0x{:08X} / 0b{:032b}", instr, instr);
|
||||
std::println("broadway::execute unimplemented instruction 0x{:08X} / 0b{:032b} ({})", instr, instr, primary);
|
||||
std::println("disassembly:");
|
||||
print_disasm(instr);
|
||||
ircolib::panic("LR: 0x{:08X}", lr);
|
||||
|
||||
Reference in New Issue
Block a user