void R3000DebugInterface::write32(u32 address, u32 value) { if (!isValidAddress(address)) return; iopMemWrite32(address,value); }
void psxDma1(u32 adr, u32 bcr, u32 chcr) { int blk[DCTSIZE2*6]; unsigned short *image; MDEC_LOG("DMA1 %lx %lx %lx (cmd = %lx)", adr, bcr, chcr, mdec.command); if (chcr != 0x01000200) return; // bcr LSBs are the blocksize in words // bcr MSBs are the number of block int size = (bcr >> 16)*(bcr & 0xffff); int size2 = (bcr >> 16)*(bcr & 0xffff); if (size < 0) { // Need to investigate what happen if the transfer is huge Console.Error("psxDma1 DMA transfer overflow !"); return; } image = (u16*)mdecArr2;//(u16*)PSXM(0); //image = (u16*)PSXM(adr); if (mdec.command&0x08000000) { for (;size>0;size-=(16*16)/2,image+=(16*16)) { mdec.rl = rl2blk(blk,mdec.rl); yuv2rgb15(blk,image); } } else { for (;size>0;size-=(24*16)/2,image+=(24*16)) { mdec.rl = rl2blk(blk,mdec.rl); yuv2rgb24(blk,(u8 *)image); } } for (int i = 0; i<(size2); i++) { iopMemWrite32(((adr & 0x00FFFFFF) + (i * 4) + 0), mdecArr2[i]); if (i <20) MDEC_LOG(" data %08X %08X ", iopMemRead32((adr & 0x00FFFFFF) + (i * 4)), mdecArr2[i]); } HW_DMA1_CHCR &= ~0x01000000; psxDmaInterrupt(1); }
void _ApplyPatch(IniPatch *p) { if (p->enabled == 0) return; switch (p->cpu) { case CPU_EE: switch (p->type) { case BYTE_T: if (memRead8(p->addr) != (u8)p->data) memWrite8(p->addr, (u8)p->data); break; case SHORT_T: if (memRead16(p->addr) != (u16)p->data) memWrite16(p->addr, (u16)p->data); break; case WORD_T: if (memRead32(p->addr) != (u32)p->data) memWrite32(p->addr, (u32)p->data); break; case DOUBLE_T: u64 mem; memRead64(p->addr, &mem); if (mem != p->data) memWrite64(p->addr, &p->data); break; case EXTENDED_T: handle_extended_t(p); break; default: break; } break; case CPU_IOP: switch (p->type) { case BYTE_T: if (iopMemRead8(p->addr) != (u8)p->data) iopMemWrite8(p->addr, (u8)p->data); break; case SHORT_T: if (iopMemRead16(p->addr) != (u16)p->data) iopMemWrite16(p->addr, (u16)p->data); break; case WORD_T: if (iopMemRead32(p->addr) != (u32)p->data) iopMemWrite32(p->addr, (u32)p->data); break; default: break; } break; default: break; } }