From 8d4780b83a112579e729a6f163ccd0ff30fc829f Mon Sep 17 00:00:00 2001 From: aliaspider Date: Mon, 9 Nov 2015 20:29:32 +0100 Subject: solve 'for' loop initial declarations build errors. remove --std=c99 --- src/dma.c | 1534 ++++++++++++++++++++++++++++---------------------------- src/gfx16.c | 99 ++-- src/memmap.c | 27 +- src/rops.h | 3 +- src/sa1.c | 6 +- src/sdd1.c | 8 +- src/snapshot.c | 6 +- src/soundux.c | 21 +- src/tile16.h | 12 +- 9 files changed, 898 insertions(+), 818 deletions(-) (limited to 'src') diff --git a/src/dma.c b/src/dma.c index 7e6e941..e3c2af7 100644 --- a/src/dma.c +++ b/src/dma.c @@ -4,7 +4,7 @@ * (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) and * Jerremy Koot (jkoot@snes9x.com) * - * Super FX C emulator code + * Super FX C emulator code * (c) Copyright 1997 - 1999 Ivar (ivar@snes9x.com) and * Gary Henderson. * Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_. @@ -57,819 +57,839 @@ uint8 buffer[0x10000]; //SDD1// extern int HDMA_ModeByteCounts [8]; -extern uint8 *HDMAMemPointers [8]; -extern uint8 *HDMABasePointers [8]; +extern uint8* HDMAMemPointers [8]; +extern uint8* HDMABasePointers [8]; -static int S9xCompareSDD1IndexEntries (const void *p1, const void *p2) +static int S9xCompareSDD1IndexEntries(const void* p1, const void* p2) { - return (*(uint32 *) p1 - *(uint32 *) p2); + return (*(uint32*) p1 - * (uint32*) p2); } /**********************************************************************************************/ /* S9xDoDMA() */ /* This function preforms the general dma transfer */ /**********************************************************************************************/ -void S9xDoDMA (uint8 Channel) +void S9xDoDMA(uint8 Channel) { - uint8 Work; + uint8 Work; - if (Channel > 7 || CPU.InDMA) - return; + if (Channel > 7 || CPU.InDMA) + return; - CPU.InDMA = TRUE; - bool8 in_sa1_dma = FALSE; - uint8 *in_sdd1_dma = NULL; - SDMA *d = &DMA[Channel]; + CPU.InDMA = TRUE; + bool8 in_sa1_dma = FALSE; + uint8* in_sdd1_dma = NULL; + SDMA* d = &DMA[Channel]; - int count = d->TransferBytes; + int count = d->TransferBytes; - if (count == 0) - count = 0x10000; + if (count == 0) + count = 0x10000; - int inc = d->AAddressFixed ? 0 : (!d->AAddressDecrement ? 1 : -1); + int inc = d->AAddressFixed ? 0 : (!d->AAddressDecrement ? 1 : -1); - if((d->ABank==0x7E||d->ABank==0x7F)&&d->BAddress==0x80) - { - d->AAddress+= d->TransferBytes; - goto update_address; - } - switch (d->BAddress) - { - case 0x18: - case 0x19: - if (IPPU.RenderThisFrame) + if ((d->ABank == 0x7E || d->ABank == 0x7F) && d->BAddress == 0x80) + { + d->AAddress += d->TransferBytes; + goto update_address; + } + switch (d->BAddress) + { + case 0x18: + case 0x19: + if (IPPU.RenderThisFrame) #ifdef __DEBUG__ - printf("FLUSH_REDRAW by DMA BAddress %x", d->BAddress); + printf("FLUSH_REDRAW by DMA BAddress %x", d->BAddress); #endif - FLUSH_REDRAW (); - - break; - } - - if (Settings.SDD1) - { - if (d->AAddressFixed && Memory.FillRAM [0x4801] > 0) - { - // Hacky support for pre-decompressed S-DD1 data - inc = !d->AAddressDecrement ? 1 : -1; - uint32 address = (((d->ABank << 16) | d->AAddress) & 0xfffff) << 4; - - address |= Memory.FillRAM [0x4804 + ((d->ABank - 0xc0) >> 4)]; - if(Settings.SDD1Pack) - { - uint8* in_ptr=GetBasePointer(((d->ABank << 16) | d->AAddress)); - in_ptr+=d->AAddress; - - SDD1_decompress(buffer,in_ptr,d->TransferBytes); - in_sdd1_dma=buffer; - } - else - { - #if 1 - void *ptr = bsearch (&address, Memory.SDD1Index, - Memory.SDD1Entries, 12, S9xCompareSDD1IndexEntries); - if (ptr) - in_sdd1_dma = *(uint32 *) ((uint8 *) ptr + 4) + Memory.SDD1Data; - #else - uint8 *ptr = Memory.SDD1Index; - - for (uint32 e = 0; e < Memory.SDD1Entries; e++, ptr += 12) - { - if (address == *(uint32 *) ptr) - { - in_sdd1_dma = *(uint32 *) (ptr + 4) + Memory.SDD1Data; - break; - } - } - #endif - -/* if (!in_sdd1_dma) - { - // No matching decompressed data found. Must be some new - // graphics not encountered before. Log it if it hasn't been - // already. - uint8 *p = Memory.SDD1LoggedData; - bool8 found = FALSE; - uint8 SDD1Bank = Memory.FillRAM [0x4804 + ((d->ABank - 0xc0) >> 4)] | 0xf0; - - for (uint32 i = 0; i < Memory.SDD1LoggedDataCount; i++, p += 8) - { - if (*p == d->ABank || - *(p + 1) == (d->AAddress >> 8) && - *(p + 2) == (d->AAddress & 0xff) && - *(p + 3) == (count >> 8) && - *(p + 4) == (count & 0xff) && - *(p + 7) == SDD1Bank) - { - found = TRUE; - break; - } - } - if (!found && Memory.SDD1LoggedDataCount < MEMMAP_MAX_SDD1_LOGGED_ENTRIES) - { - *p = d->ABank; - *(p + 1) = d->AAddress >> 8; - *(p + 2) = d->AAddress & 0xff; - *(p + 3) = count >> 8; - *(p + 4) = count & 0xff; - *(p + 7) = SDD1Bank; - Memory.SDD1LoggedDataCount += 1; - } - } -*/ } - } - - Memory.FillRAM [0x4801] = 0; - } + FLUSH_REDRAW(); + + break; + } + + if (Settings.SDD1) + { + if (d->AAddressFixed && Memory.FillRAM [0x4801] > 0) + { + // Hacky support for pre-decompressed S-DD1 data + inc = !d->AAddressDecrement ? 1 : -1; + uint32 address = (((d->ABank << 16) | d->AAddress) & 0xfffff) << 4; + + address |= Memory.FillRAM [0x4804 + ((d->ABank - 0xc0) >> 4)]; + if (Settings.SDD1Pack) + { + uint8* in_ptr = GetBasePointer(((d->ABank << 16) | d->AAddress)); + in_ptr += d->AAddress; + + SDD1_decompress(buffer, in_ptr, d->TransferBytes); + in_sdd1_dma = buffer; + } + else + { +#if 1 + void* ptr = bsearch(&address, Memory.SDD1Index, + Memory.SDD1Entries, 12, S9xCompareSDD1IndexEntries); + if (ptr) + in_sdd1_dma = *(uint32*)((uint8*) ptr + 4) + Memory.SDD1Data; +#else + uint8* ptr = Memory.SDD1Index; + + for (uint32 e = 0; e < Memory.SDD1Entries; e++, ptr += 12) + { + if (address == *(uint32*) ptr) + { + in_sdd1_dma = *(uint32*)(ptr + 4) + Memory.SDD1Data; + break; + } + } +#endif + + /* if (!in_sdd1_dma) + { + // No matching decompressed data found. Must be some new + // graphics not encountered before. Log it if it hasn't been + // already. + uint8 *p = Memory.SDD1LoggedData; + bool8 found = FALSE; + uint8 SDD1Bank = Memory.FillRAM [0x4804 + ((d->ABank - 0xc0) >> 4)] | 0xf0; + + for (uint32 i = 0; i < Memory.SDD1LoggedDataCount; i++, p += 8) + { + if (*p == d->ABank || + *(p + 1) == (d->AAddress >> 8) && + *(p + 2) == (d->AAddress & 0xff) && + *(p + 3) == (count >> 8) && + *(p + 4) == (count & 0xff) && + *(p + 7) == SDD1Bank) + { + found = TRUE; + break; + } + } + if (!found && Memory.SDD1LoggedDataCount < MEMMAP_MAX_SDD1_LOGGED_ENTRIES) + { + *p = d->ABank; + *(p + 1) = d->AAddress >> 8; + *(p + 2) = d->AAddress & 0xff; + *(p + 3) = count >> 8; + *(p + 4) = count & 0xff; + *(p + 7) = SDD1Bank; + Memory.SDD1LoggedDataCount += 1; + } + } + */ + } + } + + Memory.FillRAM [0x4801] = 0; + } #ifdef USE_SA1 - if (d->BAddress == 0x18 && SA1.in_char_dma && (d->ABank & 0xf0) == 0x40) + if (d->BAddress == 0x18 && SA1.in_char_dma && (d->ABank & 0xf0) == 0x40) #else - if (d->BAddress == 0x18 && (d->ABank & 0xf0) == 0x40) + if (d->BAddress == 0x18 && (d->ABank & 0xf0) == 0x40) #endif - { - // Perform packed bitmap to PPU character format conversion on the - // data before transmitting it to V-RAM via-DMA. - int num_chars = 1 << ((Memory.FillRAM [0x2231] >> 2) & 7); - int depth = (Memory.FillRAM [0x2231] & 3) == 0 ? 8 : - (Memory.FillRAM [0x2231] & 3) == 1 ? 4 : 2; - - int bytes_per_char = 8 * depth; - int bytes_per_line = depth * num_chars; - int char_line_bytes = bytes_per_char * num_chars; - uint32 addr = (d->AAddress / char_line_bytes) * char_line_bytes; - uint8 *base = GetBasePointer ((d->ABank << 16) + addr) + addr; - uint8 *buffer = &Memory.ROM [MAX_ROM_SIZE - 0x10000]; - uint8 *p = buffer; - uint32 inc = char_line_bytes - (d->AAddress % char_line_bytes); - uint32 char_count = inc / bytes_per_char; - - in_sa1_dma = TRUE; - -//printf ("%08x,", base); fflush (stdout); -//printf ("depth = %d, count = %d, bytes_per_char = %d, bytes_per_line = %d, num_chars = %d, char_line_bytes = %d\n", -//depth, count, bytes_per_char, bytes_per_line, num_chars, char_line_bytes); - int i; - - switch (depth) - { - case 2: - for (i = 0; i < count; i += inc, base += char_line_bytes, - inc = char_line_bytes, char_count = num_chars) - { - uint8 *line = base + (num_chars - char_count) * 2; - for (uint32 j = 0; j < char_count && p - buffer < count; - j++, line += 2) - { - uint8 *q = line; - for (int l = 0; l < 8; l++, q += bytes_per_line) - { - for (int b = 0; b < 2; b++) - { - uint8 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; - } - } - } - break; - case 4: - for (i = 0; i < count; i += inc, base += char_line_bytes, - inc = char_line_bytes, char_count = num_chars) - { - uint8 *line = base + (num_chars - char_count) * 4; - for (uint32 j = 0; j < char_count && p - buffer < count; - j++, line += 4) - { - uint8 *q = line; - int l; - for (l = 0; l < 8; l++, q += bytes_per_line) - { - int b; - for (b = 0; b < 4; b++) - { - uint8 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 += 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 *line = base + (num_chars - char_count) * 8; - for (uint32 j = 0; j < char_count && p - buffer < count; - j++, line += 8) - { - uint8 *q = line; - for (int l = 0; l < 8; l++, q += bytes_per_line) - { - for (int b = 0; b < 8; b++) - { - uint8 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 += 64 - 16; - } - } - break; - } - - } - - if (!d->TransferDirection) - { + { + // Perform packed bitmap to PPU character format conversion on the + // data before transmitting it to V-RAM via-DMA. + int num_chars = 1 << ((Memory.FillRAM [0x2231] >> 2) & 7); + int depth = (Memory.FillRAM [0x2231] & 3) == 0 ? 8 : + (Memory.FillRAM [0x2231] & 3) == 1 ? 4 : 2; + + int bytes_per_char = 8 * depth; + int bytes_per_line = depth * num_chars; + int char_line_bytes = bytes_per_char * num_chars; + uint32 addr = (d->AAddress / char_line_bytes) * char_line_bytes; + uint8* base = GetBasePointer((d->ABank << 16) + addr) + addr; + uint8* buffer = &Memory.ROM [MAX_ROM_SIZE - 0x10000]; + uint8* p = buffer; + uint32 inc = char_line_bytes - (d->AAddress % char_line_bytes); + uint32 char_count = inc / bytes_per_char; + + in_sa1_dma = TRUE; + + //printf ("%08x,", base); fflush (stdout); + //printf ("depth = %d, count = %d, bytes_per_char = %d, bytes_per_line = %d, num_chars = %d, char_line_bytes = %d\n", + //depth, count, bytes_per_char, bytes_per_line, num_chars, char_line_bytes); + int i; + + switch (depth) + { + case 2: + for (i = 0; i < count; i += inc, base += char_line_bytes, + inc = char_line_bytes, char_count = num_chars) + { + uint8* line = base + (num_chars - char_count) * 2; + uint32 j; + for (j = 0; j < char_count && p - buffer < count; + j++, line += 2) + { + uint8* q; + int l; + q = line; + for (l = 0; l < 8; l++, q += bytes_per_line) + { + int b; + for (b = 0; b < 2; b++) + { + uint8 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; + } + } + } + break; + case 4: + for (i = 0; i < count; i += inc, base += char_line_bytes, + inc = char_line_bytes, char_count = num_chars) + { + uint8* line = base + (num_chars - char_count) * 4; + uint32 j; + for (j = 0; j < char_count && p - buffer < count; + j++, line += 4) + { + uint8* q = line; + int l; + for (l = 0; l < 8; l++, q += bytes_per_line) + { + int b; + for (b = 0; b < 4; b++) + { + uint8 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 += 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* line = base + (num_chars - char_count) * 8; + uint32 j; + for (j = 0; j < char_count && p - buffer < count; + j++, line += 8) + { + uint8* q; + int l; + q = line; + for (l = 0; l < 8; l++, q += bytes_per_line) + { + int b; + for (b = 0; b < 8; b++) + { + uint8 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 += 64 - 16; + } + } + break; + } + + } + + if (!d->TransferDirection) + { #ifdef VAR_CYCLES - //reflects extra cycle used by DMA - CPU.Cycles += 8 * (count+1); + //reflects extra cycle used by DMA + CPU.Cycles += 8 * (count + 1); #else - //needs fixing for the extra DMA cycle - CPU.Cycles += (1+count) + ((1+count) >> 2); + //needs fixing for the extra DMA cycle + CPU.Cycles += (1 + count) + ((1 + count) >> 2); #endif - uint8 *base = GetBasePointer ((d->ABank << 16) + d->AAddress); - uint16 p = d->AAddress; - - if (!base) - base = Memory.ROM; - - if (in_sa1_dma) - { - base = &Memory.ROM [MAX_ROM_SIZE - 0x10000]; - p = 0; - } - - if (in_sdd1_dma) - { - base = in_sdd1_dma; - p = 0; - } - - if (inc > 0) - d->AAddress += count; - else - if (inc < 0) - d->AAddress -= count; - - if (d->TransferMode == 0 || d->TransferMode == 2) - { - switch (d->BAddress) - { - case 0x04: - do - { - Work = *(base + p); - REGISTER_2104(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - break; - case 0x18: - IPPU.FirstVRAMRead = TRUE; - if (!PPU.VMA.FullGraphicCount) - { - do - { - Work = *(base + p); - REGISTER_2118_linear(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - } - else - { - do - { - Work = *(base + p); - REGISTER_2118_tile(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - } - break; - case 0x19: - IPPU.FirstVRAMRead = TRUE; - if (!PPU.VMA.FullGraphicCount) - { - do - { - Work = *(base + p); - REGISTER_2119_linear(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - } - else - { - do - { - Work = *(base + p); - REGISTER_2119_tile(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - } - break; - case 0x22: - do - { - Work = *(base + p); - REGISTER_2122(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - break; - case 0x80: - do - { - Work = *(base + p); - REGISTER_2180(Work); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - break; - default: - do - { - Work = *(base + p); - S9xSetPPU (Work, 0x2100 + d->BAddress); - p += inc; - CHECK_SOUND(); - } while (--count > 0); - break; - } - } - else - if (d->TransferMode == 1 || d->TransferMode == 5) - { - if (d->BAddress == 0x18) - { - // Write to V-RAM - IPPU.FirstVRAMRead = TRUE; - if (!PPU.VMA.FullGraphicCount) - { - while (count > 1) - { - Work = *(base + p); - REGISTER_2118_linear(Work); - p += inc; - - Work = *(base + p); - REGISTER_2119_linear(Work); - p += inc; - CHECK_SOUND(); - count -= 2; - } - if (count == 1) - { - Work = *(base + p); - REGISTER_2118_linear(Work); - p += inc; - } - } - else - { - while (count > 1) - { - Work = *(base + p); - REGISTER_2118_tile(Work); - p += inc; - - Work = *(base + p); - REGISTER_2119_tile(Work); - p += inc; - CHECK_SOUND(); - count -= 2; - } - if (count == 1) - { - Work = *(base + p); - REGISTER_2118_tile(Work); - p += inc; - } - } - } - else - { - // DMA mode 1 general case - while (count > 1) - { - Work = *(base + p); - S9xSetPPU (Work, 0x2100 + d->BAddress); - p += inc; - - Work = *(base + p); - S9xSetPPU (Work, 0x2101 + d->BAddress); - p += inc; - CHECK_SOUND(); - count -= 2; - } - if (count == 1) - { - Work = *(base + p); - S9xSetPPU (Work, 0x2100 + d->BAddress); - p += inc; - } - } - } - else - if (d->TransferMode == 3) - { - do - { - Work = *(base + p); - S9xSetPPU (Work, 0x2100 + d->BAddress); - p += inc; - if (count <= 1) - break; - - Work = *(base + p); - S9xSetPPU (Work, 0x2100 + d->BAddress); - p += inc; - if (count <= 2) - break; - - Work = *(base + p); - S9xSetPPU (Work, 0x2101 + d->BAddress); - p += inc; - if (count <= 3) - break; - - Work = *(base + p); - S9xSetPPU (Work, 0x2101 + d->BAddress); - p += inc; - CHECK_SOUND(); - count -= 4; - } while (count > 0); - } - else - if (d->TransferMode == 4) - { - do - { - Work = *(base + p); - S9xSetPPU (Work, 0x2100 + d->BAddress); - p += inc; - if (count <= 1) - break; - - Work = *(base + p); - S9xSetPPU (Work, 0x2101 + d->BAddress); - p += inc; - if (count <= 2) - break; - - Work = *(base + p); - S9xSetPPU (Work, 0x2102 + d->BAddress); - p += inc; - if (count <= 3) - break; - - Work = *(base + p); - S9xSetPPU (Work, 0x2103 + d->BAddress); - p += inc; - CHECK_SOUND(); - count -= 4; - } while (count > 0); - } - } - else - { - do - { - switch (d->TransferMode) - { - case 0: - case 2: + uint8* base = GetBasePointer((d->ABank << 16) + d->AAddress); + uint16 p = d->AAddress; + + if (!base) + base = Memory.ROM; + + if (in_sa1_dma) + { + base = &Memory.ROM [MAX_ROM_SIZE - 0x10000]; + p = 0; + } + + if (in_sdd1_dma) + { + base = in_sdd1_dma; + p = 0; + } + + if (inc > 0) + d->AAddress += count; + else if (inc < 0) + d->AAddress -= count; + + if (d->TransferMode == 0 || d->TransferMode == 2) + { + switch (d->BAddress) + { + case 0x04: + do + { + Work = *(base + p); + REGISTER_2104(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + break; + case 0x18: + IPPU.FirstVRAMRead = TRUE; + if (!PPU.VMA.FullGraphicCount) + { + do + { + Work = *(base + p); + REGISTER_2118_linear(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + } + else + { + do + { + Work = *(base + p); + REGISTER_2118_tile(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + } + break; + case 0x19: + IPPU.FirstVRAMRead = TRUE; + if (!PPU.VMA.FullGraphicCount) + { + do + { + Work = *(base + p); + REGISTER_2119_linear(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + } + else + { + do + { + Work = *(base + p); + REGISTER_2119_tile(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + } + break; + case 0x22: + do + { + Work = *(base + p); + REGISTER_2122(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + break; + case 0x80: + do + { + Work = *(base + p); + REGISTER_2180(Work); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + break; + default: + do + { + Work = *(base + p); + S9xSetPPU(Work, 0x2100 + d->BAddress); + p += inc; + CHECK_SOUND(); + } + while (--count > 0); + break; + } + } + else if (d->TransferMode == 1 || d->TransferMode == 5) + { + if (d->BAddress == 0x18) + { + // Write to V-RAM + IPPU.FirstVRAMRead = TRUE; + if (!PPU.VMA.FullGraphicCount) + { + while (count > 1) + { + Work = *(base + p); + REGISTER_2118_linear(Work); + p += inc; + + Work = *(base + p); + REGISTER_2119_linear(Work); + p += inc; + CHECK_SOUND(); + count -= 2; + } + if (count == 1) + { + Work = *(base + p); + REGISTER_2118_linear(Work); + p += inc; + } + } + else + { + while (count > 1) + { + Work = *(base + p); + REGISTER_2118_tile(Work); + p += inc; + + Work = *(base + p); + REGISTER_2119_tile(Work); + p += inc; + CHECK_SOUND(); + count -= 2; + } + if (count == 1) + { + Work = *(base + p); + REGISTER_2118_tile(Work); + p += inc; + } + } + } + else + { + // DMA mode 1 general case + while (count > 1) + { + Work = *(base + p); + S9xSetPPU(Work, 0x2100 + d->BAddress); + p += inc; + + Work = *(base + p); + S9xSetPPU(Work, 0x2101 + d->BAddress); + p += inc; + CHECK_SOUND(); + count -= 2; + } + if (count == 1) + { + Work = *(base + p); + S9xSetPPU(Work, 0x2100 + d->BAddress); + p += inc; + } + } + } + else if (d->TransferMode == 3) + { + do + { + Work = *(base + p); + S9xSetPPU(Work, 0x2100 + d->BAddress); + p += inc; + if (count <= 1) + break; + + Work = *(base + p); + S9xSetPPU(Work, 0x2100 + d->BAddress); + p += inc; + if (count <= 2) + break; + + Work = *(base + p); + S9xSetPPU(Work, 0x2101 + d->BAddress); + p += inc; + if (count <= 3) + break; + + Work = *(base + p); + S9xSetPPU(Work, 0x2101 + d->BAddress); + p += inc; + CHECK_SOUND(); + count -= 4; + } + while (count > 0); + } + else if (d->TransferMode == 4) + { + do + { + Work = *(base + p); + S9xSetPPU(Work, 0x2100 + d->BAddress); + p += inc; + if (count <= 1) + break; + + Work = *(base + p); + S9xSetPPU(Work, 0x2101 + d->BAddress); + p += inc; + if (count <= 2) + break; + + Work = *(base + p); + S9xSetPPU(Work, 0x2102 + d->BAddress); + p += inc; + if (count <= 3) + break; + + Work = *(base + p); + S9xSetPPU(Work, 0x2103 + d->BAddress); + p += inc; + CHECK_SOUND(); + count -= 4; + } + while (count > 0); + } + } + else + { + do + { + switch (d->TransferMode) + { + case 0: + case 2: #ifndef VAR_CYCLES - CPU.Cycles += 1; + CPU.Cycles += 1; #endif - 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; + --count; + break; + + case 1: + case 5: #ifndef VAR_CYCLES - CPU.Cycles += 3; + CPU.Cycles += 3; #endif - 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: + 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: #ifndef VAR_CYCLES - CPU.Cycles += 6; + CPU.Cycles += 6; #endif - 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; - - case 4: + 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; + + case 4: #ifndef VAR_CYCLES - CPU.Cycles += 6; + CPU.Cycles += 6; #endif - 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; - - default: - count = 0; - break; - } - CHECK_SOUND(); - } while (count); - } - -//#ifdef SPC700_C -#ifdef SPC700_SHUTDOWN - CPU.APU_APUExecuting = Settings.APUEnabled; + 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; + + default: + count = 0; + break; + } + CHECK_SOUND(); + } + while (count); + } + + //#ifdef SPC700_C +#ifdef SPC700_SHUTDOWN + CPU.APU_APUExecuting = Settings.APUEnabled; #endif - asm_APU_EXECUTE(1); // execute but only in normal mode -//#endif - while (CPU.Cycles > CPU.NextEvent) - S9xDoHBlankProcessing (); + asm_APU_EXECUTE(1); // execute but only in normal mode + //#endif + while (CPU.Cycles > CPU.NextEvent) + S9xDoHBlankProcessing(); update_address: - // Super Punch-Out requires that the A-BUS address be updated after the - // DMA transfer. - Memory.FillRAM[0x4302 + (Channel << 4)] = (uint8) d->AAddress; - Memory.FillRAM[0x4303 + (Channel << 4)] = d->AAddress >> 8; - - // Secret of the Mana requires that the DMA bytes transfer count be set to - // zero when DMA has completed. - Memory.FillRAM [0x4305 + (Channel << 4)] = 0; - Memory.FillRAM [0x4306 + (Channel << 4)] = 0; - - DMA[Channel].IndirectAddress = 0; - d->TransferBytes = 0; - - CPU.InDMA = FALSE; + // Super Punch-Out requires that the A-BUS address be updated after the + // DMA transfer. + Memory.FillRAM[0x4302 + (Channel << 4)] = (uint8) d->AAddress; + Memory.FillRAM[0x4303 + (Channel << 4)] = d->AAddress >> 8; + + // Secret of the Mana requires that the DMA bytes transfer count be set to + // zero when DMA has completed. + Memory.FillRAM [0x4305 + (Channel << 4)] = 0; + Memory.FillRAM [0x4306 + (Channel << 4)] = 0; + + DMA[Channel].IndirectAddress = 0; + d->TransferBytes = 0; + + CPU.InDMA = FALSE; } -void S9xStartHDMA () +void S9xStartHDMA() { - //if (Settings.DisableHDMA) - //IPPU.HDMA = 0; - //else - missing.hdma_this_frame = IPPU.HDMA = Memory.FillRAM [0x420c]; - - IPPU.HDMAStarted = TRUE; - - for (uint8 i = 0; i < 8; i++) - { - if (IPPU.HDMA & (1 << i)) - { - DMA [i].LineCount = 0; - DMA [i].FirstLine = TRUE; - DMA [i].Address = DMA [i].AAddress; - } - HDMAMemPointers [i] = NULL; - } + //if (Settings.DisableHDMA) + //IPPU.HDMA = 0; + //else + missing.hdma_this_frame = IPPU.HDMA = Memory.FillRAM [0x420c]; + + IPPU.HDMAStarted = TRUE; + + uint8 i; + for (i = 0; i < 8; i++) + { + if (IPPU.HDMA & (1 << i)) + { + DMA [i].LineCount = 0; + DMA [i].FirstLine = TRUE; + DMA [i].Address = DMA [i].AAddress; + } + HDMAMemPointers [i] = NULL; + } } -uint8 S9xDoHDMA (uint8 byte) +uint8 S9xDoHDMA(uint8 byte) { - SDMA *p = &DMA [0]; - - int d = 0; - - for (uint8 mask = 1; mask; mask <<= 1, p++, d++) - { - if (byte & mask) - { - if (!p->LineCount) - { - uint8 line = S9xGetByte ((p->ABank << 16) + p->Address); - if (line == 0x80) - { - p->Repeat = TRUE; - p->LineCount = 128; - } - else - { - p->Repeat = !(line & 0x80); - p->LineCount = line & 0x7f; - } - - // Disable H-DMA'ing into V-RAM (register 2118) for Hook - if (!p->LineCount || p->BAddress == 0x18) - { - byte &= ~mask; - p->IndirectAddress += HDMAMemPointers [d] - HDMABasePointers [d]; - Memory.FillRAM [0x4305 + (d << 4)] = (uint8) p->IndirectAddress; - Memory.FillRAM [0x4306 + (d << 4)] = p->IndirectAddress >> 8; - continue; - } - - p->Address++; - p->FirstLine = 1; - if (p->HDMAIndirectAddressing) - { - p->IndirectBank = Memory.FillRAM [0x4307 + (d << 4)]; - p->IndirectAddress = S9xGetWord ((p->ABank << 16) + p->Address); - p->Address += 2; - } - else - { - p->IndirectBank = p->ABank; - p->IndirectAddress = p->Address; - } - HDMABasePointers [d] = HDMAMemPointers [d] = - S9xGetMemPointer ((p->IndirectBank << 16) + p->IndirectAddress); - } - else - { - - if (!HDMAMemPointers [d]) - { - if (!p->HDMAIndirectAddressing) - { - p->IndirectBank = p->ABank; - p->IndirectAddress = p->Address; - } - - if (!(HDMABasePointers [d] = HDMAMemPointers [d] = - S9xGetMemPointer ((p->IndirectBank << 16) + p->IndirectAddress))) - { - byte &= ~mask; - continue; - } - // Uncommenting the following line breaks Punchout - it starts - // H-DMA during the frame. - //p->FirstLine = TRUE; - } - } - if (p->Repeat && !p->FirstLine) - { - p->LineCount--; - continue; - } - switch (p->TransferMode) - { - case 0: + SDMA* p = &DMA [0]; + + int d = 0; + + uint8 mask; + for (mask = 1; mask; mask <<= 1, p++, d++) + { + if (byte & mask) + { + if (!p->LineCount) + { + uint8 line; + line = S9xGetByte((p->ABank << 16) + p->Address); + if (line == 0x80) + { + p->Repeat = TRUE; + p->LineCount = 128; + } + else + { + p->Repeat = !(line & 0x80); + p->LineCount = line & 0x7f; + } + + // Disable H-DMA'ing into V-RAM (register 2118) for Hook + if (!p->LineCount || p->BAddress == 0x18) + { + byte &= ~mask; + p->IndirectAddress += HDMAMemPointers [d] - HDMABasePointers [d]; + Memory.FillRAM [0x4305 + (d << 4)] = (uint8) p->IndirectAddress; + Memory.FillRAM [0x4306 + (d << 4)] = p->IndirectAddress >> 8; + continue; + } + + p->Address++; + p->FirstLine = 1; + if (p->HDMAIndirectAddressing) + { + p->IndirectBank = Memory.FillRAM [0x4307 + (d << 4)]; + p->IndirectAddress = S9xGetWord((p->ABank << 16) + p->Address); + p->Address += 2; + } + else + { + p->IndirectBank = p->ABank; + p->IndirectAddress = p->Address; + } + HDMABasePointers [d] = HDMAMemPointers [d] = + S9xGetMemPointer((p->IndirectBank << 16) + p->IndirectAddress); + } + else + { + + if (!HDMAMemPointers [d]) + { + if (!p->HDMAIndirectAddressing) + { + p->IndirectBank = p->ABank; + p->IndirectAddress = p->Address; + } + + if (!(HDMABasePointers [d] = HDMAMemPointers [d] = + S9xGetMemPointer((p->IndirectBank << 16) + p->IndirectAddress))) + { + byte &= ~mask; + continue; + } + // Uncommenting the following line breaks Punchout - it starts + // H-DMA during the frame. + //p->FirstLine = TRUE; + } + } + if (p->Repeat && !p->FirstLine) + { + p->LineCount--; + continue; + } + switch (p->TransferMode) + { + case 0: #ifndef VAR_CYCLES - CPU.Cycles += 1; + CPU.Cycles += 1; #else - CPU.Cycles += 8; + CPU.Cycles += 8; #endif - S9xSetPPU (*HDMAMemPointers [d]++, 0x2100 + p->BAddress); - break; - case 1: - case 5: + S9xSetPPU(*HDMAMemPointers [d]++, 0x2100 + p->BAddress); + break; + case 1: + case 5: #ifndef VAR_CYCLES - CPU.Cycles += 3; + CPU.Cycles += 3; #else - CPU.Cycles += 16; + CPU.Cycles += 16; #endif - S9xSetPPU (*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress); - S9xSetPPU (*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress); - HDMAMemPointers [d] += 2; - break; - case 2: - case 6: + S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress); + S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2101 + p->BAddress); + HDMAMemPointers [d] += 2; + break; + case 2: + case 6: #ifndef VAR_CYCLES - CPU.Cycles += 3; + CPU.Cycles += 3; #else - CPU.Cycles += 16; + CPU.Cycles += 16; #endif - S9xSetPPU (*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress); - S9xSetPPU (*(HDMAMemPointers [d] + 1), 0x2100 + p->BAddress); - HDMAMemPointers [d] += 2; - break; - case 3: - case 7: + S9xSetPPU(*(HDMAMemPointers [d] + 0), 0x2100 + p->BAddress); + S9xSetPPU(*(HDMAMemPointers [d] + 1), 0x2100 + p->BAddress); + HDMAMemPointers [d] += 2; + break; + case 3: + case 7: #ifndef VAR_CYCLES - CPU.Cycles += 6; + CPU.Cycles += 6; #else - CPU.Cycles += 32; + CPU.Cycles += 32; #endif - 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: + 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: #ifndef VAR_CYCLES - CPU.Cycles += 6; + CPU.Cycles += 6; #else - CPU.Cycles += 32; + CPU.Cycles += 32; #endif - 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]; - p->FirstLine = FALSE; - p->LineCount--; - } - } - return (byte); + 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]; + p->FirstLine = FALSE; + p->LineCount--; + } + } + return (byte); } -void S9xResetDMA () +void S9xResetDMA() { - int d; - for (d = 0; d < 8; d++) - { - DMA [d].TransferDirection = FALSE; - DMA [d].HDMAIndirectAddressing = FALSE; - DMA [d].AAddressFixed = TRUE; - DMA [d].AAddressDecrement = FALSE; - DMA [d].TransferMode = 0xff; - DMA [d].ABank = 0xff; - DMA [d].AAddress = 0xffff; - DMA [d].Address = 0xffff; - DMA [d].BAddress = 0xff; - DMA [d].TransferBytes = 0xffff; - } - for (int c = 0x4300; c < 0x4380; c += 0x10) - { - for (d = c; d < c + 12; d++) - Memory.FillRAM [d] = 0xff; - - Memory.FillRAM [c + 0xf] = 0xff; - } + int c, d; + for (d = 0; d < 8; d++) + { + DMA [d].TransferDirection = FALSE; + DMA [d].HDMAIndirectAddressing = FALSE; + DMA [d].AAddressFixed = TRUE; + DMA [d].AAddressDecrement = FALSE; + DMA [d].TransferMode = 0xff; + DMA [d].ABank = 0xff; + DMA [d].AAddress = 0xffff; + DMA [d].Address = 0xffff; + DMA [d].BAddress = 0xff; + DMA [d].TransferBytes = 0xffff; + } + for (c = 0x4300; c < 0x4380; c += 0x10) + { + for (d = c; d < c + 12; d++) + Memory.FillRAM [d] = 0xff; + + Memory.FillRAM [c + 0xf] = 0xff; + } } diff --git a/src/gfx16.c b/src/gfx16.c index 0012b78..4277740 100644 --- a/src/gfx16.c +++ b/src/gfx16.c @@ -255,9 +255,11 @@ bool8_32 S9xGraphicsInit () S9xSetRenderPixelFormat (RGB565); #endif - for (uint8 bitshift = 0; bitshift < 4; bitshift++) + uint8 bitshift; + for (bitshift = 0; bitshift < 4; bitshift++) { - for (register int i = 0; i < 16; i++) + register int i; + for (i = 0; i < 16; i++) { register uint32 h = 0; register uint32 l = 0; @@ -534,9 +536,11 @@ void S9xGraphicsDeinit (void) void S9xBuildDirectColourMaps () { - for (uint32 p = 0; p < 8; p++) + uint32 p; + for (p = 0; p < 8; p++) { - for (uint32 c = 0; c < 256; c++) + uint32 c; + for (c = 0; c < 256; c++) { // XXX: Brightness /* @@ -873,7 +877,8 @@ void DrawOBJS (bool8_32 OnMain, uint8 D) DBG("Draw Objects.\n"); int I = 0; - for (int S = GFX.OBJList [I++]; S >= 0; S = GFX.OBJList [I++]) + int S; + for (S = GFX.OBJList [I++]; S >= 0; S = GFX.OBJList [I++]) { int VPos = GFX.VPositions [S]; int Size = GFX.Sizes[S]; @@ -908,7 +913,8 @@ void DrawOBJS (bool8_32 OnMain, uint8 D) GFX.Z2 = (PPU.OBJ[S].Priority + 1) * 4 + D; - for (int clip = 0; clip < clipcount; clip++) + int clip; + for (clip = 0; clip < clipcount; clip++) { int Left; int Right; @@ -927,7 +933,8 @@ void DrawOBJS (bool8_32 OnMain, uint8 D) PPU.OBJ[S].HPos >= Right) continue; - for (int Y = 0; Y < Size; Y += 8) + int Y; + for (Y = 0; Y < Size; Y += 8) { if (VPos + Y + 7 >= (int) GFX.StartY && VPos + Y <= (int) GFX.EndY) { @@ -994,7 +1001,8 @@ void DrawOBJS (bool8_32 OnMain, uint8 D) else Offset = 0; - for (int X = 0; X < Middle; X++, O += 8 * GFX_PIXSIZE, + int X; + for (X = 0; X < Middle; X++, O += 8 * GFX_PIXSIZE, Tile += TileInc) { //if (Tile & 0x100) BG.TileAddress = bg_ta_ns; @@ -1075,7 +1083,8 @@ void DrawBackgroundMosaic (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) OffsetShift = 3; } - for (uint32 Y = GFX.StartY; Y <= GFX.EndY; Y += Lines) + uint32 Y; + for (Y = GFX.StartY; Y <= GFX.EndY; Y += Lines) { uint32 VOffset = LineData [Y].BG[bg].VOffset; uint32 HOffset = LineData [Y].BG[bg].HOffset; @@ -1116,7 +1125,8 @@ void DrawBackgroundMosaic (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) if (!ClipCount) ClipCount = 1; - for (uint32 clip = 0; clip < ClipCount; clip++) + uint32 clip; + for (clip = 0; clip < ClipCount; clip++) { if (GFX.pCurrentClip->Count [bg]) { @@ -1127,7 +1137,8 @@ void DrawBackgroundMosaic (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) PixWidth = PPU.Mosaic - r; } uint32 s = Y * GFX_PPL + Left * GFX_PIXSIZE; - for (uint32 x = Left; x < Right; x += PixWidth, + uint32 x; + for (x = Left; x < Right; x += PixWidth, s += PixWidth * GFX_PIXSIZE, HPos += PixWidth, PixWidth = PPU.Mosaic) { @@ -1324,7 +1335,8 @@ void DrawBackgroundOffset (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) } TileBlank = 0xFFFFFFFF; - for (uint32 Y = GFX.StartY; Y <= GFX.EndY; Y++) + uint32 Y; + for (Y = GFX.StartY; Y <= GFX.EndY; Y++) { uint32 VOff = LineData [Y].BG[2].VOffset - 1; uint32 HOff = LineData [Y].BG[2].HOffset; @@ -1362,7 +1374,8 @@ void DrawBackgroundOffset (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) if (!clipcount) clipcount = 1; - for (int clip = 0; clip < clipcount; clip++) + int clip; + for (clip = 0; clip < clipcount; clip++) { uint32 Left; uint32 Right; @@ -1586,7 +1599,8 @@ void DrawBackgroundMode5 (uint32 BGMODE, uint32 bg, uint8 Z1, uint8 Z2) } int endy = GFX.EndY; - for (int Y = GFX.StartY; Y <= endy; Y += Lines) + int Y; + for (Y = GFX.StartY; Y <= endy; Y += Lines) { //int y = Y; uint32 VOffset = LineData [Y].BG[bg].VOffset; @@ -1629,7 +1643,8 @@ void DrawBackgroundMode5 (uint32 BGMODE, uint32 bg, uint8 Z1, uint8 Z2) int clipcount = GFX.pCurrentClip->Count [bg]; if (!clipcount) clipcount = 1; - for (int clip = 0; clip < clipcount; clip++) + int clip; + for (clip = 0; clip < clipcount; clip++) { int Left; int Right; @@ -1732,7 +1747,8 @@ void DrawBackgroundMode5 (uint32 BGMODE, uint32 bg, uint8 Z1, uint8 Z2) Count = Width - Count; int Middle = Count >> 3; Count &= 7; - for (int C = Middle; C > 0; s += 4, Quot++, C--) + int C; + for (C = Middle; C > 0; s += 4, Quot++, C--) { Tile = READ_2BYTES(t); GFX.Z1 = GFX.Z2 = depths [(Tile & 0x2000) >> 13]; @@ -1885,7 +1901,8 @@ void DrawBackground_8(uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) HOffset = LineData [GFX.StartY].BG[bg].HOffset; } TileBlank = 0xFFFFFFFF; - for (uint32 Y = GFX.StartY; Y <= GFX.EndY; Y += Lines){ + uint32 Y; + for (Y = GFX.StartY; Y <= GFX.EndY; Y += Lines){ int y_ppl = Y * GFX_PPL; if (oc) { VOffset = LineData [Y].BG[bg].VOffset; @@ -1974,7 +1991,8 @@ void DrawBackground_8(uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) // Middle, unclipped tiles Count = Width - Count; - for (int C = Count >> 3; C > 0; s += 8, Quot++, C--){ + int C ; + for (C = Count >> 3; C > 0; s += 8, Quot++, C--){ //uint32 Tile = READ_2BYTES(t); register uint32 Tile = *(t++); if (Tile != TileBlank){ @@ -2042,7 +2060,8 @@ void DrawBackground_16 (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) TileBlank = 0xFFFFFFFF; unsigned int tb1 = 0xffffffff; unsigned int tb2 = 0xffffffff; - for (uint32 Y = GFX.StartY; Y <= GFX.EndY; Y += Lines){ + uint32 Y ; + for (Y = GFX.StartY; Y <= GFX.EndY; Y += Lines){ int y_ppl = Y * GFX_PPL; if (oc) { VOffset = LineData [Y].BG[bg].VOffset; @@ -2149,7 +2168,8 @@ void DrawBackground_16 (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) // Middle, unclipped tiles Count = Width - Count; - for (int C = Count >> 3; C > 0; s += 8, Quot++, C--){ + int C ; + for (C = Count >> 3; C > 0; s += 8, Quot++, C--){ if (!(Quot & 1)) { Tile = *(t++); Tile += tx_table[tx_index + ((Tile & (H_FLIP | V_FLIP)) >> 13)]; @@ -2567,7 +2587,8 @@ static void S9xUpdateScreenTransparency () // ~30-50ms! (called from FLUSH_REDRA // Colour window enabled. // loop around all of the lines being updated - for (uint32 y = starty; y <= endy; y++) + uint32 y ; + for (y = starty; y <= endy; y++) { // Clear the subZbuffer memset32 ((uint32_t*)(GFX.SubZBuffer + y * GFX_ZPITCH),0, (256>>2)); @@ -2579,7 +2600,8 @@ static void S9xUpdateScreenTransparency () // ~30-50ms! (called from FLUSH_REDRA } // loop through all window clippings - for (uint32 c = 0; c < pClip->Count [5]; c++) + uint32 c ; + for (c = 0; c < pClip->Count [5]; c++) { int width = pClip->Right [c][5] - pClip->Left [c][5]; if (width > 0) { @@ -2638,7 +2660,8 @@ static void S9xUpdateScreenTransparency () // ~30-50ms! (called from FLUSH_REDRA // No windows are clipping the main screen // this simplifies the screen clearing process // loop through all of the lines to be updated - for (uint32 y = starty; y <= endy; y++) { + uint32 y ; + for (y = starty; y <= endy; y++) { // Clear the Zbuffer memset32 ((uint32_t*)(GFX.ZBuffer + y * GFX_ZPITCH),0, (256>>2)); // clear the sub Zbuffer to 1 @@ -2738,10 +2761,12 @@ static void S9xUpdateScreenTransparency () // ~30-50ms! (called from FLUSH_REDRA } if (!(Count = pClip->Count [5])) Count = 1; - for (uint32 y = starty; y <= endy; y++) + uint32 y ; + for (y = starty; y <= endy; y++) { - for (uint32 b = 0; b < Count; b++) + uint32 b ; + for (b = 0; b < Count; b++) { if (pClip->Count [5]) { @@ -2891,9 +2916,11 @@ _ROP_##rop##half \ DBG("Copying subscreen with clipping...\n"); - for (uint32 y = starty; y <= endy; y++) + uint32 y ; + for (y = starty; y <= endy; y++) { - for (uint32 b = 0; b < pClip->Count [5]; b++) + uint32 b ; + for (b = 0; b < pClip->Count [5]; b++) { uint32 Left = pClip->Left [b][5]; uint32 Right = pClip->Right [b][5]; @@ -3018,14 +3045,16 @@ _ROP_##rop##half \ DBG("Clearing background with clipping...\n"); // loop through all of the lines that are going to be updated as part of this screen update - for (uint32 y = starty; y <= endy; y++) + uint32 y ; + for (y = starty; y <= endy; y++) { memset32 ((uint32_t*)(GFX.Screen + y * GFX_PITCH), black, IPPU.RenderedScreenWidth>>1); if (black!=back) { - for (uint32 c = 0; c < IPPU.Clip [0].Count [5]; c++) + uint32 c ; + for (c = 0; c < IPPU.Clip [0].Count [5]; c++) { //if (IPPU.Clip [0].Right [c][5] > IPPU.Clip [0].Left [c][5]) //{ @@ -3070,7 +3099,8 @@ _ROP_##rop##half \ DBG("Clearing background with no clipping...\n"); // there is no clipping to worry about so just fill with the back colour - for (uint32 y = starty; y <= endy; y++) { + uint32 y ; + for (y = starty; y <= endy; y++) { memset32 ((uint32_t*)(GFX.Screen + y * GFX_PITCH), back, (256>>1)); } @@ -3081,7 +3111,8 @@ _ROP_##rop##half \ { DBG("Forced Blanking not in use. Clearing ZBuffer ... !!\n"); // Clear the Zbuffer for each of the lines which are going to be updated - for (uint32 y = starty; y <= endy; y++) { + uint32 y ; + for (y = starty; y <= endy; y++) { memset32 ((uint32_t*)(GFX.ZBuffer + y * GFX_ZPITCH), 0, (256>>2)); } DBG("Rendering screen !!\n"); @@ -3125,7 +3156,8 @@ static void S9xUpdateScreenNoTransparency () // ~30-50ms! (called from FLUSH_RED } // now clear all graphics lines which are being updated using the back colour - for (register uint32 y = starty; y <= endy; y++) + register uint32 y; + for (y = starty; y <= endy; y++) { memset32 ((uint32_t*)(GFX.Screen + y * GFX_PITCH), back, IPPU.RenderedScreenWidth>>1); @@ -3135,7 +3167,8 @@ static void S9xUpdateScreenNoTransparency () // ~30-50ms! (called from FLUSH_RED { // Loop through all lines being updated and clear the // zbuffer for each of the lines - for (uint32 y = starty; y <= endy; y++) + uint32 y ; + for (y = starty; y <= endy; y++) { memset32 ((uint32_t*)(GFX.ZBuffer + y * GFX_ZPITCH), 0, IPPU.RenderedScreenWidth>>2); diff --git a/src/memmap.c b/src/memmap.c index df5dec1..eecb7bb 100644 --- a/src/memmap.c +++ b/src/memmap.c @@ -74,7 +74,8 @@ extern bool8 LoadZip(const char* , int32 *, int32 *); bool8_32 AllASCII (uint8 *b, int size) { - for (int i = 0; i < size; i++) + int i; + for (i = 0; i < size; i++) { if (b[i] < 32 || b[i] > 126) return (FALSE); @@ -149,7 +150,8 @@ char *Safe (const char *s) safe = (char *) malloc (safe_len = len + 1); } - for (int i = 0; i < len; i++) + int i; + for (i = 0; i < len; i++) { if (s [i] >= 32 && s [i] < 127) safe [i] = s[i]; @@ -596,7 +598,8 @@ again: { for (i = 0; i < nblocks * 2; i++) { - for (int j = i; j < nblocks * 2; j++) + int j; + for (j = i; j < nblocks * 2; j++) { if (blocks [j] == i) { @@ -672,7 +675,8 @@ void S9xDeinterleaveMode2 () { for (i = 0; i < nblocks * 2; i++) { - for (int j = i; j < nblocks * 2; j++) + int j; + for (j = i; j < nblocks * 2; j++) { if (blocks [j] == i) { @@ -1049,7 +1053,8 @@ void FixROMSpeed () void WriteProtectROM () { memmove ((void *) Memory.WriteMap, (void *) Memory.Map, sizeof (Memory.Map)); - for (int c = 0; c < 0x1000; c++) + int c; + for (c = 0; c < 0x1000; c++) { if (Memory.BlockIsROM [c]) Memory.WriteMap [c] = (uint8 *) MAP_NONE; @@ -2434,7 +2439,8 @@ void ApplyROMFixes () strcmp (Memory.ROMName, "HOME ALONE") == 0) { // Banks 00->3f and 80->bf - for (int c = 0; c < 0x400; c += 16) + int c; + for (c = 0; c < 0x400; c += 16) { Memory.Map [c + 6] = Memory.Map [c + 0x806] = Memory.SRAM; Memory.Map [c + 7] = Memory.Map [c + 0x807] = Memory.SRAM; @@ -2475,7 +2481,8 @@ void ApplyROMFixes () // CAPCOM's protect // Banks 0x808000, 0x408000 are mirroring. - for (int c = 0; c < 8; c++) + int c; + for (c = 0; c < 8; c++) Memory.Map [0x408 + c] = Memory.ROM - 0x8000; } @@ -2507,7 +2514,8 @@ void ApplyROMFixes () if (strcmp (Memory.ROMName, "DRAGON KNIGHT 4") == 0) { // Banks 70->7e, S-RAM - for (int c = 0; c < 0xe0; c++) + int c; + for (c = 0; c < 0xe0; c++) { Memory.Map [c + 0x700] = (uint8 *) MAP_LOROM_SRAM; Memory.BlockIsRAM [c + 0x700] = TRUE; @@ -2751,7 +2759,8 @@ const uint32 crc32Table[256] = { //CRC32 for char arrays uint32 caCRC32(uint8 *array, uint32 size) { register uint32 crc32 = 0xFFFFFFFF; - for (register uint32 i = 0; i < size; i++) { + register uint32 i; + for (i = 0; i < size; i++) { crc32 = ((crc32 >> 8) & 0x00FFFFFF) ^ crc32Table[(crc32 ^ array[i]) & 0xFF]; } return ~crc32; diff --git a/src/rops.h b/src/rops.h index e5d3c78..0acec45 100644 --- a/src/rops.h +++ b/src/rops.h @@ -160,7 +160,8 @@ extern unsigned int ROpCount; #define ADD_ROP(drop, dval) {rops[ROpCount].line = IPPU.CurrentLine; rops[ROpCount].rop = drop; rops[ROpCount].value = dval; ROpCount++;} #define RESET_ROPS(from) \ { \ - for (unsigned int c = from; c < ROpCount; c++) doRaster(&rops[c]);\ + unsigned int c;\ + for (c = from; c < ROpCount; c++) doRaster(&rops[c]);\ ROpCount = 0;\ } diff --git a/src/sa1.c b/src/sa1.c index 54fd9b2..4271a78 100644 --- a/src/sa1.c +++ b/src/sa1.c @@ -660,9 +660,11 @@ static void S9xSA1CharConv2 () if (depth == 8) { - for (int l = 0; l < 8; l++, q += 8) + int l; + for (l = 0; l < 8; l++, q += 8) { - for (int b = 0; b < 8; b++) + int b; + for (b = 0; b < 8; b++) { uint8 r = *(q + b); *(p + 0) = (*(p + 0) << 1) | ((r >> 0) & 1); diff --git a/src/sdd1.c b/src/sdd1.c index 878bf4c..355a197 100644 --- a/src/sdd1.c +++ b/src/sdd1.c @@ -68,7 +68,8 @@ void S9xSetSDD1MemoryMap (uint32 bank, uint32 value) void S9xResetSDD1 () { memset (&Memory.FillRAM [0x4800], 0, 4); - for (int i = 0; i < 4; i++) + int i; + for (i = 0; i < 4; i++) { Memory.FillRAM [0x4804 + i] = i; S9xSetSDD1MemoryMap (i, i); @@ -77,10 +78,11 @@ void S9xResetSDD1 () void S9xSDD1PostLoadState () { - for (int i = 0; i < 4; i++) + int i; + for (i = 0; i < 4; i++) S9xSetSDD1MemoryMap (i, Memory.FillRAM [0x4804 + i]); } - + static int S9xCompareSDD1LoggedDataEntries (const void *p1, const void *p2) { uint8 *b1 = (uint8 *) p1; diff --git a/src/snapshot.c b/src/snapshot.c index c44610c..72ed12d 100644 --- a/src/snapshot.c +++ b/src/snapshot.c @@ -594,7 +594,8 @@ static int Unfreeze() IPPU.OBJChanged = TRUE; CPU.InDMA = FALSE; // Restore colors from PPU - for (unsigned int i = 0; i < 256; i++) { + unsigned int i; + for (i = 0; i < 256; i++) { IPPU.Red[i] = PPU.CGDATA[i] & 0x1f; IPPU.Green[i] = (PPU.CGDATA[i] >> 5) & 0x1f; IPPU.Blue[i] = (PPU.CGDATA[i] >> 10) & 0x1f; @@ -648,7 +649,8 @@ static int Unfreeze() return (result); // notaz: just to be sure - for(int u=0; u<8; u++) { + int u; + for(u=0; u<8; u++) { SoundData.channels[u].env_ind_attack &= 0xf; SoundData.channels[u].env_ind_decay &= 0x7; SoundData.channels[u].env_ind_sustain&= 0x1f; diff --git a/src/soundux.c b/src/soundux.c index 50b737b..aed71f3 100644 --- a/src/soundux.c +++ b/src/soundux.c @@ -178,7 +178,8 @@ void S9xFixSoundAfterSnapshotLoad () S9xSetFilterCoefficient (6, (signed char) APU.DSP [APU_C6]); S9xSetFilterCoefficient (7, (signed char) APU.DSP [APU_C7]); - for (int i = 0; i < 8; i++) + int i; + for (i = 0; i < 8; i++) { SoundData.channels[i].needs_decode = TRUE; S9xSetSoundFrequency (i, SoundData.channels[i].hertz); @@ -353,7 +354,8 @@ static void MixStereo (int sample_count) { int pitch_mod = SoundData.pitch_mod & (0xFFFFFFFF^APU.DSP[APU_NON]);//~APU.DSP[APU_NON]; - for (uint32 J = 0; J < NUM_CHANNELS; J++) + uint32 J; + for (J = 0; J < NUM_CHANNELS; J++) { int32 VL, VR; Channel *ch = &SoundData.channels[J]; @@ -382,7 +384,8 @@ static void MixStereo (int sample_count) VL = (ch->sample * ch-> left_vol_level) / 128; VR = (ch->sample * ch->right_vol_level) / 128; - for (uint32 I = 0; I < (uint32) sample_count; I += 2) + uint32 I; + for (I = 0; I < (uint32) sample_count; I += 2) { unsigned long freq = freq0; @@ -614,7 +617,8 @@ static void MixMono (int sample_count) { int pitch_mod = SoundData.pitch_mod & (0xFFFFFFFF^APU.DSP[APU_NON]); - for (uint32 J = 0; J < NUM_CHANNELS; J++) + uint32 J; + for (J = 0; J < NUM_CHANNELS; J++) { Channel *ch = &SoundData.channels[J]; unsigned long freq0 = ch->frequency; @@ -641,7 +645,8 @@ static void MixMono (int sample_count) } int32 V = (ch->sample * ch->left_vol_level) / 128; - for (uint32 I = 0; I < (uint32) sample_count; I++) + uint32 I; + for (I = 0; I < (uint32) sample_count; I++) { unsigned long freq = freq0; @@ -1058,7 +1063,8 @@ END_OF_FUNCTION(S9xMixSamplesO); void S9xResetSound (bool8 full) { - for (int i = 0; i < 8; i++) + int i; + for (i = 0; i < 8; i++) { SoundData.channels[i].state = SOUND_SILENT; SoundData.channels[i].mode = MODE_NONE; @@ -1179,7 +1185,8 @@ void S9xSetPlaybackRate (uint32 playback_rate) } S9xSetEchoDelay (APU.DSP [APU_EDL] & 0xf); - for (int i = 0; i < 8; i++) + int i; + for (i = 0; i < 8; i++) S9xSetSoundFrequency (i, SoundData.channels [i].hertz); } diff --git a/src/tile16.h b/src/tile16.h index f856b8e..e0560f0 100644 --- a/src/tile16.h +++ b/src/tile16.h @@ -161,7 +161,8 @@ extern uint32 TileBlank; pixel = PIXEL; \ for (l = LineCount; l != 0; l--, sp += GFX_PPL, Depth += GFX_PPL) \ { \ - for (int z = Pixels - 1; z >= 0; z--) \ + int z ;\ + for (z = Pixels - 1; z >= 0; z--) \ if (GFX.Z1 > Depth [z]) \ { \ sp [z] = FUNCTION(sp + z, pixel); \ @@ -179,7 +180,8 @@ extern uint32 TileBlank; pixel = PIXEL; \ for (l = LineCount; l != 0; l--, sp += GFX_PPL, Depth += GFX_PPL) \ { \ - for (int z = Pixels - 1; z >= 0; z--) \ + int z ;\ + for (z = Pixels - 1; z >= 0; z--) \ if (GFX.Z1 > Depth [z]) \ { \ sp [z] = FUNCTION(sp + z, pixel); \ @@ -197,7 +199,8 @@ extern uint32 TileBlank; pixel = PIXEL; \ for (l = LineCount; l != 0; l--, sp += GFX_PPL, Depth += GFX_PPL) \ { \ - for (int z = Pixels - 1; z >= 0; z--) \ + int z ;\ + for (z = Pixels - 1; z >= 0; z--) \ if (GFX.Z1 > Depth [z]) \ { \ sp [z] = FUNCTION(sp + z, pixel); \ @@ -213,7 +216,8 @@ extern uint32 TileBlank; pixel = PIXEL; \ for (l = LineCount; l != 0; l--, sp += GFX_PPL, Depth += GFX_PPL) \ { \ - for (int z = Pixels - 1; z >= 0; z--) \ + int z ;\ + for (z = Pixels - 1; z >= 0; z--) \ if (GFX.Z1 > Depth [z]) \ { \ sp [z] = FUNCTION(sp + z, pixel); \ -- cgit v1.2.3