aboutsummaryrefslogtreecommitdiff
path: root/source/dma.c
diff options
context:
space:
mode:
authortwinaphex2017-08-16 06:18:24 +0200
committertwinaphex2017-08-16 06:18:24 +0200
commit7a8802b9311099e5034054a69a309dcb17661dfa (patch)
treeb78d6a0877c63dbc99148c52329dab2e0fc3d7c6 /source/dma.c
parente2cffaea148cfb79cc3546642acb61245b96069e (diff)
downloadsnesemu-7a8802b9311099e5034054a69a309dcb17661dfa.tar.gz
snesemu-7a8802b9311099e5034054a69a309dcb17661dfa.tar.bz2
snesemu-7a8802b9311099e5034054a69a309dcb17661dfa.zip
Some C89 buildfixes
Diffstat (limited to 'source/dma.c')
-rw-r--r--source/dma.c486
1 files changed, 244 insertions, 242 deletions
diff --git a/source/dma.c b/source/dma.c
index 58aa2f1..7effb25 100644
--- a/source/dma.c
+++ b/source/dma.c
@@ -56,11 +56,11 @@ void S9xDoDMA(uint8_t Channel)
}
switch (d->BAddress)
{
- case 0x18:
- case 0x19:
- if (IPPU.RenderThisFrame)
- FLUSH_REDRAW();
- break;
+ case 0x18:
+ case 0x19:
+ if (IPPU.RenderThisFrame)
+ FLUSH_REDRAW();
+ break;
}
if (Settings.SDD1)
{
@@ -74,8 +74,8 @@ void S9xDoDMA(uint8_t Channel)
in_ptr = GetBasePointer(((d->ABank << 16) | d->AAddress));
if (in_ptr)
{
- in_ptr += d->AAddress;
- SDD1_decompress(sdd1_decode_buffer, in_ptr, d->TransferBytes);
+ in_ptr += d->AAddress;
+ SDD1_decompress(sdd1_decode_buffer, in_ptr, d->TransferBytes);
}
in_sdd1_dma = sdd1_decode_buffer;
}
@@ -84,14 +84,16 @@ void S9xDoDMA(uint8_t Channel)
}
if (Settings.SPC7110 && (d->AAddress == 0x4800 || d->ABank == 0x50))
{
- int32_t c;
+ int32_t c, icount;
spc7110_dma = &s7r.bank50[0];
+
for(c = 0; c < count; c++)
s7r.bank50[c] = spc7110dec_read();
- int32_t icount = (s7r.reg4809 | (s7r.reg480A << 8)) - count;
- s7r.reg4809 = 0x00ff & icount;
- s7r.reg480A = (0xff00 & icount) >> 8;
- inc = 1;
+
+ icount = (s7r.reg4809 | (s7r.reg480A << 8)) - count;
+ s7r.reg4809 = 0x00ff & icount;
+ s7r.reg480A = (0xff00 & icount) >> 8;
+ inc = 1;
d->AAddress -= count;
}
if (d->BAddress == 0x18 && SA1.in_char_dma && (d->ABank & 0xf0) == 0x40)
@@ -114,92 +116,92 @@ void S9xDoDMA(uint8_t Channel)
switch (depth)
{
- case 2:
- for (i = 0 ; i < count ; i += inc, base += char_line_bytes, inc = char_line_bytes, char_count = num_chars)
- {
- uint32_t j;
- uint8_t* line = base + (num_chars - char_count) * 2;
- for (j = 0 ; j < char_count && p - buffer < count ; j++, line += 2)
+ case 2:
+ for (i = 0 ; i < count ; i += inc, base += char_line_bytes, inc = char_line_bytes, char_count = num_chars)
{
- int32_t b, l;
- uint8_t* q = line;
- for (l = 0; l < 8; l++, q += bytes_per_line)
+ uint32_t j;
+ uint8_t* line = base + (num_chars - char_count) * 2;
+ for (j = 0 ; j < char_count && p - buffer < count ; j++, line += 2)
{
- for (b = 0; b < 2; b++)
+ int32_t b, l;
+ uint8_t* q = line;
+ for (l = 0; l < 8; l++, q += bytes_per_line)
{
- uint8_t r = *(q + b);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 1) & 1);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 2) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 3) & 1);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 4) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 5) & 1);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 6) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 7) & 1);
+ for (b = 0; b < 2; b++)
+ {
+ uint8_t r = *(q + b);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 1) & 1);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 2) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 3) & 1);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 4) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 5) & 1);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 6) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 7) & 1);
+ }
+ p += 2;
}
- p += 2;
}
}
- }
- break;
- case 4:
- for (i = 0 ; i < count ; i += inc, base += char_line_bytes, inc = char_line_bytes, char_count = num_chars)
- {
- uint32_t j;
- uint8_t* line = base + (num_chars - char_count) * 4;
- for (j = 0 ; j < char_count && p - buffer < count ; j++, line += 4)
+ break;
+ case 4:
+ for (i = 0 ; i < count ; i += inc, base += char_line_bytes, inc = char_line_bytes, char_count = num_chars)
{
- uint8_t* q = line;
- int32_t b, l;
- for (l = 0; l < 8; l++, q += bytes_per_line)
+ uint32_t j;
+ uint8_t* line = base + (num_chars - char_count) * 4;
+ for (j = 0 ; j < char_count && p - buffer < count ; j++, line += 4)
{
- for (b = 0; b < 4; b++)
+ uint8_t* q = line;
+ int32_t b, l;
+ for (l = 0; l < 8; l++, q += bytes_per_line)
{
- uint8_t r = *(q + b);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 1) & 1);
- *(p + 16) = (*(p + 16) << 1) | ((r >> 2) & 1);
- *(p + 17) = (*(p + 17) << 1) | ((r >> 3) & 1);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 4) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 5) & 1);
- *(p + 16) = (*(p + 16) << 1) | ((r >> 6) & 1);
- *(p + 17) = (*(p + 17) << 1) | ((r >> 7) & 1);
+ for (b = 0; b < 4; b++)
+ {
+ uint8_t r = *(q + b);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 1) & 1);
+ *(p + 16) = (*(p + 16) << 1) | ((r >> 2) & 1);
+ *(p + 17) = (*(p + 17) << 1) | ((r >> 3) & 1);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 4) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 5) & 1);
+ *(p + 16) = (*(p + 16) << 1) | ((r >> 6) & 1);
+ *(p + 17) = (*(p + 17) << 1) | ((r >> 7) & 1);
+ }
+ p += 2;
}
- p += 2;
+ p += 32 - 16;
}
- p += 32 - 16;
}
- }
- break;
- case 8:
- for(i = 0 ; i < count ; i += inc, base += char_line_bytes, inc = char_line_bytes, char_count = num_chars)
- {
- uint8_t* line = base + (num_chars - char_count) * 8;
- uint32_t j;
- for(j = 0 ; j < char_count && p - buffer < count ; j++, line += 8)
+ break;
+ case 8:
+ for(i = 0 ; i < count ; i += inc, base += char_line_bytes, inc = char_line_bytes, char_count = num_chars)
{
- uint8_t* q = line;
- int32_t b, l;
- for (l = 0; l < 8; l++, q += bytes_per_line)
+ uint8_t* line = base + (num_chars - char_count) * 8;
+ uint32_t j;
+ for(j = 0 ; j < char_count && p - buffer < count ; j++, line += 8)
{
- for (b = 0; b < 8; b++)
+ uint8_t* q = line;
+ int32_t b, l;
+ for (l = 0; l < 8; l++, q += bytes_per_line)
{
- uint8_t r = *(q + b);
- *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1);
- *(p + 1) = (*(p + 1) << 1) | ((r >> 1) & 1);
- *(p + 16) = (*(p + 16) << 1) | ((r >> 2) & 1);
- *(p + 17) = (*(p + 17) << 1) | ((r >> 3) & 1);
- *(p + 32) = (*(p + 32) << 1) | ((r >> 4) & 1);
- *(p + 33) = (*(p + 33) << 1) | ((r >> 5) & 1);
- *(p + 48) = (*(p + 48) << 1) | ((r >> 6) & 1);
- *(p + 49) = (*(p + 49) << 1) | ((r >> 7) & 1);
+ for (b = 0; b < 8; b++)
+ {
+ uint8_t r = *(q + b);
+ *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1);
+ *(p + 1) = (*(p + 1) << 1) | ((r >> 1) & 1);
+ *(p + 16) = (*(p + 16) << 1) | ((r >> 2) & 1);
+ *(p + 17) = (*(p + 17) << 1) | ((r >> 3) & 1);
+ *(p + 32) = (*(p + 32) << 1) | ((r >> 4) & 1);
+ *(p + 33) = (*(p + 33) << 1) | ((r >> 5) & 1);
+ *(p + 48) = (*(p + 48) << 1) | ((r >> 6) & 1);
+ *(p + 49) = (*(p + 49) << 1) | ((r >> 7) & 1);
+ }
+ p += 2;
}
- p += 2;
+ p += 64 - 16;
}
- p += 64 - 16;
}
- }
- break;
+ break;
}
}
@@ -252,80 +254,80 @@ void S9xDoDMA(uint8_t Channel)
{
switch (d->BAddress)
{
- case 0x04:
- do
- {
- Work = *(base + p);
- REGISTER_2104(Work);
- p += inc;
- } while (--count > 0);
- break;
- case 0x18:
- IPPU.FirstVRAMRead = true;
- if (!PPU.VMA.FullGraphicCount)
- {
+ case 0x04:
do
{
Work = *(base + p);
- REGISTER_2118_linear(Work);
+ REGISTER_2104(Work);
p += inc;
} while (--count > 0);
- }
- else
- {
+ break;
+ case 0x18:
+ IPPU.FirstVRAMRead = true;
+ if (!PPU.VMA.FullGraphicCount)
+ {
+ do
+ {
+ Work = *(base + p);
+ REGISTER_2118_linear(Work);
+ p += inc;
+ } while (--count > 0);
+ }
+ else
+ {
+ do
+ {
+ Work = *(base + p);
+ REGISTER_2118_tile(Work);
+ p += inc;
+ } while (--count > 0);
+ }
+ break;
+ case 0x19:
+ IPPU.FirstVRAMRead = true;
+ if (!PPU.VMA.FullGraphicCount)
+ {
+ do
+ {
+ Work = *(base + p);
+ REGISTER_2119_linear(Work);
+ p += inc;
+ } while (--count > 0);
+ }
+ else
+ {
+ do
+ {
+ Work = *(base + p);
+ REGISTER_2119_tile(Work);
+ p += inc;
+ } while (--count > 0);
+ }
+ break;
+ case 0x22:
do
{
Work = *(base + p);
- REGISTER_2118_tile(Work);
+ REGISTER_2122(Work);
p += inc;
} while (--count > 0);
- }
- break;
- case 0x19:
- IPPU.FirstVRAMRead = true;
- if (!PPU.VMA.FullGraphicCount)
- {
+ break;
+ case 0x80:
do
{
Work = *(base + p);
- REGISTER_2119_linear(Work);
+ REGISTER_2180(Work);
p += inc;
} while (--count > 0);
- }
- else
- {
+ break;
+ default:
do
{
Work = *(base + p);
- REGISTER_2119_tile(Work);
+ S9xSetPPU(Work, 0x2100 + d->BAddress);
p += inc;
} while (--count > 0);
- }
- break;
- case 0x22:
- do
- {
- Work = *(base + p);
- REGISTER_2122(Work);
- p += inc;
- } while (--count > 0);
- break;
- case 0x80:
- do
- {
- Work = *(base + p);
- REGISTER_2180(Work);
- p += inc;
- } while (--count > 0);
- break;
- default:
- do
- {
- Work = *(base + p);
- S9xSetPPU(Work, 0x2100 + d->BAddress);
- p += inc;
- } while (--count > 0);
- break;
+ break;
}
}
else if (d->TransferMode == 1 || d->TransferMode == 5)
@@ -462,79 +464,79 @@ void S9xDoDMA(uint8_t Channel)
{
switch (d->TransferMode)
{
- case 0:
- case 2:
- case 6:
- Work = S9xGetPPU(0x2100 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- --count;
- break;
- case 1:
- case 5:
- Work = S9xGetPPU(0x2100 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
- break;
-
- Work = S9xGetPPU(0x2101 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- count--;
- break;
- case 3:
- case 7:
- Work = S9xGetPPU(0x2100 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
+ case 0:
+ case 2:
+ case 6:
+ Work = S9xGetPPU(0x2100 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ --count;
break;
-
- Work = S9xGetPPU(0x2100 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
+ case 1:
+ case 5:
+ Work = S9xGetPPU(0x2100 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2101 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ count--;
break;
-
- Work = S9xGetPPU(0x2101 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
+ case 3:
+ case 7:
+ Work = S9xGetPPU(0x2100 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2100 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2101 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2101 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ count--;
break;
-
- Work = S9xGetPPU(0x2101 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- count--;
- break;
- case 4:
- Work = S9xGetPPU(0x2100 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
+ case 4:
+ Work = S9xGetPPU(0x2100 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2101 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2102 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ if (!--count)
+ break;
+
+ Work = S9xGetPPU(0x2103 + d->BAddress);
+ S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
+ d->AAddress += inc;
+ count--;
break;
-
- Work = S9xGetPPU(0x2101 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
+ default:
+ count = 0;
break;
-
- Work = S9xGetPPU(0x2102 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- if (!--count)
- break;
-
- Work = S9xGetPPU(0x2103 + d->BAddress);
- S9xSetByte(Work, (d->ABank << 16) + d->AAddress);
- d->AAddress += inc;
- count--;
- break;
- default:
- count = 0;
- break;
}
} while (count);
}
@@ -681,46 +683,46 @@ uint8_t S9xDoHDMA(uint8_t byte)
switch (p->TransferMode)
{
- case 0:
- CPU.Cycles += SLOW_ONE_CYCLE;
- S9xSetPPU(*HDMAMemPointers [d]++, 0x2100 + p->BAddress);
- break;
- case 5:
- CPU.Cycles += 2 * SLOW_ONE_CYCLE;
- S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress);
- HDMAMemPointers [d] += 2;
- /* fall through */
- case 1:
- CPU.Cycles += 2 * SLOW_ONE_CYCLE;
- S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress);
- HDMAMemPointers [d] += 2;
- break;
- case 2:
- case 6:
- CPU.Cycles += 2 * SLOW_ONE_CYCLE;
- S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2100 + p->BAddress);
- HDMAMemPointers [d] += 2;
- break;
- case 3:
- case 7:
- CPU.Cycles += 4 * SLOW_ONE_CYCLE;
- S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2100 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 2), 0x2101 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 3), 0x2101 + p->BAddress);
- HDMAMemPointers [d] += 4;
- break;
- case 4:
- CPU.Cycles += 4 * SLOW_ONE_CYCLE;
- S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 2), 0x2102 + p->BAddress);
- S9xSetPPU(*(HDMAMemPointers [d] + 3), 0x2103 + p->BAddress);
- HDMAMemPointers [d] += 4;
- break;
+ case 0:
+ CPU.Cycles += SLOW_ONE_CYCLE;
+ S9xSetPPU(*HDMAMemPointers [d]++, 0x2100 + p->BAddress);
+ break;
+ case 5:
+ CPU.Cycles += 2 * SLOW_ONE_CYCLE;
+ S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress);
+ HDMAMemPointers [d] += 2;
+ /* fall through */
+ case 1:
+ CPU.Cycles += 2 * SLOW_ONE_CYCLE;
+ S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress);
+ HDMAMemPointers [d] += 2;
+ break;
+ case 2:
+ case 6:
+ CPU.Cycles += 2 * SLOW_ONE_CYCLE;
+ S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2100 + p->BAddress);
+ HDMAMemPointers [d] += 2;
+ break;
+ case 3:
+ case 7:
+ CPU.Cycles += 4 * SLOW_ONE_CYCLE;
+ S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2100 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 2), 0x2101 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 3), 0x2101 + p->BAddress);
+ HDMAMemPointers [d] += 4;
+ break;
+ case 4:
+ CPU.Cycles += 4 * SLOW_ONE_CYCLE;
+ S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 2), 0x2102 + p->BAddress);
+ S9xSetPPU(*(HDMAMemPointers [d] + 3), 0x2103 + p->BAddress);
+ HDMAMemPointers [d] += 4;
+ break;
}
if (!p->HDMAIndirectAddressing)
p->Address += HDMA_ModeByteCounts [p->TransferMode];