summaryrefslogtreecommitdiff
path: root/libpcsxcore/psxhw.c
diff options
context:
space:
mode:
authorSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-02-13 12:36:00 +0000
committerSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-02-13 12:36:00 +0000
commit6fd2ccec503041427dbd03388e67da70a4d5502e (patch)
tree2cb5b5d3da714bbfd8ca16a3909fca961509c962 /libpcsxcore/psxhw.c
parentde0b6f626f0fac7f4c35d92736b176f04300b933 (diff)
Fix Vampire Hunter D title screen by handling special DMA CHCR 0x0401 (not start/busy).
http://nocash.emubase.de/psx-spx.htm#dmachannels DmaExec looks fugly now. :/ git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@82841 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/psxhw.c')
-rwxr-xr-xlibpcsxcore/psxhw.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libpcsxcore/psxhw.c b/libpcsxcore/psxhw.c
index 6fc705b0..2e7241d0 100755
--- a/libpcsxcore/psxhw.c
+++ b/libpcsxcore/psxhw.c
@@ -503,7 +503,9 @@ void psxHwWrite16(u32 add, u16 value) {
#define DmaExec(n) { \
HW_DMA##n##_CHCR = SWAPu32(value); \
\
- if (SWAPu32(HW_DMA##n##_CHCR) & 0x01000000 && SWAPu32(HW_DMA_PCR) & (8 << (n * 4))) { \
+ if ((SWAPu32(HW_DMA##n##_CHCR) & 0x01000000 || \
+ (n == 2 && SWAPu32(HW_DMA##n##_CHCR) == 0x0401)) /* Vampire Hunter D */ && \
+ SWAPu32(HW_DMA_PCR) & (8 << (n * 4))) { \
psxDma##n(SWAPu32(HW_DMA##n##_MADR), SWAPu32(HW_DMA##n##_BCR), SWAPu32(HW_DMA##n##_CHCR)); \
} \
}