PCem
changeset 55:fe47832dfbe4
Fixed stupid bug in DMA length handling - should fix sound clicking on some games.
| author | TomW |
|---|---|
| date | Thu Dec 19 18:17:37 2013 +0000 |
| parents | 5b9067076693 |
| children | 772d686a2253 |
| files | src/dma.c |
| diffstat | 1 files changed, 31 insertions(+), 32 deletions(-) [+] |
line diff
1.1 --- a/src/dma.c Wed Dec 18 21:40:58 2013 +0000 1.2 +++ b/src/dma.c Thu Dec 19 18:17:37 2013 +0000 1.3 @@ -267,15 +267,15 @@ 1.4 if (dma.mode[channel] & 0x20) dma.ac[channel]--; 1.5 else dma.ac[channel]++; 1.6 dma.cc[channel]--; 1.7 - if (!dma.cc[channel] && (dma.mode[channel] & 0x10)) 1.8 + if (dma.cc[channel] < 0) 1.9 { 1.10 - dma.cc[channel] = dma.cb[channel] + 1; 1.11 - dma.ac[channel] = dma.ab[channel]; 1.12 - dma.stat |= (1 << channel); 1.13 - } 1.14 - else if (dma.cc[channel]<=-1) 1.15 - { 1.16 - dma.m |= (1 << channel); 1.17 + if (dma.mode[channel] & 0x10) /*Auto-init*/ 1.18 + { 1.19 + dma.cc[channel] = dma.cb[channel]; 1.20 + dma.ac[channel] = dma.ab[channel]; 1.21 + } 1.22 + else 1.23 + dma.m |= (1 << channel); 1.24 dma.stat |= (1 << channel); 1.25 } 1.26 1.27 @@ -297,15 +297,15 @@ 1.28 if (dma16.mode[channel] & 0x20) dma16.ac[channel]--; 1.29 else dma16.ac[channel]++; 1.30 dma16.cc[channel]--; 1.31 - if (!dma16.cc[channel] && (dma16.mode[channel] & 0x10)) 1.32 + if (dma16.cc[channel] < 0) 1.33 { 1.34 - dma16.cc[channel] = dma16.cb[channel] + 1; 1.35 - dma16.ac[channel] = dma16.ab[channel]; 1.36 - dma16.stat |= (1 << channel); 1.37 - } 1.38 - else if (dma16.cc[channel] <= -1) 1.39 - { 1.40 - dma16.m |= (1 << channel); 1.41 + if (dma16.mode[channel] & 0x10) /*Auto-init*/ 1.42 + { 1.43 + dma16.cc[channel] = dma16.cb[channel]; 1.44 + dma16.ac[channel] = dma16.ab[channel]; 1.45 + } 1.46 + else 1.47 + dma16.m |= (1 << channel); 1.48 dma16.stat |= (1 << channel); 1.49 } 1.50 1.51 @@ -332,15 +332,15 @@ 1.52 if (dma.mode[channel]&0x20) dma.ac[channel]--; 1.53 else dma.ac[channel]++; 1.54 dma.cc[channel]--; 1.55 - if (!dma.cc[channel] && (dma.mode[channel] & 0x10)) 1.56 + if (dma.cc[channel] < 0) 1.57 { 1.58 - dma.cc[channel] = dma.cb[channel] + 1; 1.59 - dma.ac[channel] = dma.ab[channel]; 1.60 - dma.stat |= (1 << channel); 1.61 - } 1.62 - else if (dma.cc[channel]<=-1) 1.63 - { 1.64 - dma.m |= (1 << channel); 1.65 + if (dma.mode[channel] & 0x10) /*Auto-init*/ 1.66 + { 1.67 + dma.cc[channel] = dma.cb[channel]; 1.68 + dma.ac[channel] = dma.ab[channel]; 1.69 + } 1.70 + else 1.71 + dma.m |= (1 << channel); 1.72 dma.stat |= (1 << channel); 1.73 } 1.74 1.75 @@ -361,15 +361,14 @@ 1.76 if (dma16.mode[channel]&0x20) dma16.ac[channel]--; 1.77 else dma16.ac[channel]++; 1.78 dma16.cc[channel]--; 1.79 - if (!dma16.cc[channel] && (dma16.mode[channel] & 0x10)) 1.80 + if (dma16.cc[channel] < 0) 1.81 { 1.82 - dma16.cc[channel] = dma16.cb[channel] + 1; 1.83 - dma16.ac[channel] = dma16.ab[channel]; 1.84 - dma16.stat |= (1 << channel); 1.85 - } 1.86 - else if (dma16.cc[channel] <= -1) 1.87 - { 1.88 - dma16.m |= (1 << channel); 1.89 + if (dma16.mode[channel] & 0x10) /*Auto-init*/ 1.90 + { 1.91 + dma16.cc[channel] = dma16.cb[channel] + 1; 1.92 + dma16.ac[channel] = dma16.ab[channel]; 1.93 + } 1.94 + dma16.m |= (1 << channel); 1.95 dma16.stat |= (1 << channel); 1.96 } 1.97
