spu: fix typo
[pcsx_rearmed.git] / plugins / dfsound / dma.c
CommitLineData
ef79bbde
P
1/***************************************************************************\r
2 dma.c - description\r
3 -------------------\r
4 begin : Wed May 15 2002\r
5 copyright : (C) 2002 by Pete Bernert\r
6 email : BlackDove@addcom.de\r
7 ***************************************************************************/\r
8/***************************************************************************\r
9 * *\r
10 * This program is free software; you can redistribute it and/or modify *\r
11 * it under the terms of the GNU General Public License as published by *\r
12 * the Free Software Foundation; either version 2 of the License, or *\r
13 * (at your option) any later version. See also the license.txt file for *\r
14 * additional informations. *\r
15 * *\r
16 ***************************************************************************/\r
17\r
18#include "stdafx.h"\r
19\r
20#define _IN_DMA\r
21\r
22#include "externals.h"\r
a5ff8be2 23#include "registers.h"\r
ef79bbde
P
24\r
25////////////////////////////////////////////////////////////////////////\r
26// READ DMA (one value)\r
27////////////////////////////////////////////////////////////////////////\r
28\r
29unsigned short CALLBACK SPUreadDMA(void)\r
30{\r
5514a050 31 unsigned short s = *(unsigned short *)(spu.spuMemC + spu.spuAddr);\r
a5ff8be2 32 check_irq_io(spu.spuAddr);\r
5514a050 33 spu.spuAddr += 2;\r
34 spu.spuAddr &= 0x7fffe;\r
ef79bbde 35\r
ef79bbde
P
36 return s;\r
37}\r
38\r
39////////////////////////////////////////////////////////////////////////\r
40// READ DMA (many values)\r
41////////////////////////////////////////////////////////////////////////\r
42\r
650adfd2 43void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize,\r
44 unsigned int cycles)\r
ef79bbde 45{\r
a5ff8be2 46 unsigned int addr = spu.spuAddr, irq_addr = regAreaGet(H_SPUirqAddr) << 3;\r
47 int i, irq;\r
ef79bbde 48\r
63a4f6b6 49 do_samples_if_needed(cycles, 1);\r
a5ff8be2 50 irq = addr <= irq_addr && irq_addr < addr + iSize*2;\r
51\r
52 for(i = 0; i < iSize; i++)\r
53 {\r
54 *pusPSXMem++ = *(unsigned short *)(spu.spuMemC + addr);\r
55 addr += 2;\r
56 addr &= 0x7fffe;\r
57 }\r
58 if (irq && (spu.spuCtrl & CTRL_IRQ))\r
88b0dc1d 59 log_unhandled("rdma spu irq: %x/%x+%x\n", irq_addr, spu.spuAddr, iSize * 2);\r
a5ff8be2 60 spu.spuAddr = addr;\r
ef79bbde
P
61}\r
62\r
63////////////////////////////////////////////////////////////////////////\r
64////////////////////////////////////////////////////////////////////////\r
65////////////////////////////////////////////////////////////////////////\r
66\r
ef79bbde
P
67////////////////////////////////////////////////////////////////////////\r
68// WRITE DMA (one value)\r
69////////////////////////////////////////////////////////////////////////\r
70 \r
71void CALLBACK SPUwriteDMA(unsigned short val)\r
72{\r
5514a050 73 *(unsigned short *)(spu.spuMemC + spu.spuAddr) = val;\r
ef79bbde 74\r
a5ff8be2 75 check_irq_io(spu.spuAddr);\r
5514a050 76 spu.spuAddr += 2;\r
77 spu.spuAddr &= 0x7fffe;\r
0c1151fe 78 spu.bMemDirty = 1;\r
ef79bbde
P
79}\r
80\r
81////////////////////////////////////////////////////////////////////////\r
82// WRITE DMA (many values)\r
83////////////////////////////////////////////////////////////////////////\r
84\r
650adfd2 85void CALLBACK SPUwriteDMAMem(unsigned short *pusPSXMem, int iSize,\r
86 unsigned int cycles)\r
ef79bbde 87{\r
a5ff8be2 88 unsigned int addr = spu.spuAddr, irq_addr = regAreaGet(H_SPUirqAddr) << 3;\r
89 int i, irq;\r
fb552464 90 \r
63a4f6b6 91 do_samples_if_needed(cycles, 1);\r
0c1151fe 92 spu.bMemDirty = 1;\r
a5ff8be2 93 irq = addr <= irq_addr && irq_addr < addr + iSize*2;\r
94\r
95 if (addr + iSize*2 < 0x80000)\r
96 {\r
97 memcpy(spu.spuMemC + addr, pusPSXMem, iSize*2);\r
98 addr += iSize*2;\r
99 }\r
100 else\r
101 {\r
102 irq |= irq_addr < ((addr + iSize*2) & 0x7ffff);\r
103 for (i = 0; i < iSize; i++)\r
ef79bbde 104 {\r
a5ff8be2 105 *(unsigned short *)(spu.spuMemC + addr) = *pusPSXMem++;\r
106 addr += 2;\r
107 addr &= 0x7fffe;\r
ef79bbde 108 }\r
a5ff8be2 109 }\r
110 if (irq && (spu.spuCtrl & CTRL_IRQ)) // unhandled because need to implement delay\r
111 log_unhandled("wdma spu irq: %x/%x+%x\n", irq_addr, spu.spuAddr, iSize * 2);\r
112 spu.spuAddr = addr;\r
ef79bbde
P
113}\r
114\r
115////////////////////////////////////////////////////////////////////////\r