i should implement DSP DMA...

This commit is contained in:
2026-05-20 17:55:07 +02:00
parent f9ab690ccd
commit 35f20a16b8
15 changed files with 500 additions and 25 deletions
+37 -3
View File
@@ -16,9 +16,10 @@ broadway::broadway() {
void broadway::set_pc(ircolib::u32 value) { pc = value; }
void broadway::run(mem &mem) {
for (int i = 0; i < 12150000; i++) {
// std::println("pc: 0x{:08X}", pc);
execute(fetch(mem), mem);
std::println("pc: 0x{:08X}", pc);
for (int i = 0; i < 1000000; i++) {
ircolib::u32 instr = fetch(mem);
execute(instr, mem);
}
}
@@ -58,6 +59,12 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
case 0x000:
cmp(instr);
break;
case 0x008:
subfc(instr);
break;
case 0x00A:
addc(instr);
break;
case 0x013:
mfcr(instr);
break;
@@ -76,6 +83,12 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
case 0x053:
mfmsr(instr);
break;
case 0x088:
subfe(instr);
break;
case 0x08A:
adde(instr);
break;
case 0x090:
mtcrf(instr);
break;
@@ -85,12 +98,21 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
case 0x097:
stwx(instr, mem);
break;
case 0x0CA:
addze(instr);
break;
case 0x0D2:
ircolib::warn("broadway TODO mtsr (pc 0x{:08X})", pc - 4);
break;
case 0x0EB:
mullw(instr);
break;
case 0x117:
lhzx(instr, mem);
break;
case 0x173:
mftb(instr);
break;
case 0x1BC:
or (instr);
break;
@@ -109,6 +131,9 @@ void broadway::decode_special2(ircolib::u32 instr, mem &mem) {
break;
case 0x256: // sync
break;
case 0x318:
sraw(instr);
break;
default:
std::println("broadway unknown special2 {} (0x{:04X}) (pc 0x{:08X})", secondary, secondary, pc - 4);
std::println("disassembly:");
@@ -142,6 +167,9 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
case 7:
mulli(instr);
break;
case 8:
subfic(instr);
break;
case 10:
cmpli(instr);
break;
@@ -181,6 +209,9 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
case 25:
oris(instr);
break;
case 26:
xori(instr);
break;
case 28:
andi(instr);
break;
@@ -217,6 +248,9 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
case 44:
sth(instr, mem);
break;
case 45:
sthu(instr, mem);
break;
case 50:
lfd(instr, mem);
break;