⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getset.h

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 H
📖 第 1 页 / 共 2 页
字号:
		    case CMemory::MAP_SA1RAM:		*(Memory.SRAM + (Address & 0xffff)) = Byte;		SA1.Executing = !SA1.Waiting;		break;		    case CMemory::MAP_C4:		S9xSetC4 (Byte, Address & 0xffff);		return;		case CMemory::MAP_SPC7110_DRAM:#ifdef SPC7110_DEBUG		printf("Writing Byte at %06X\n", Address);#endif		s7r.bank50[(Address & 0xffff)]= (uint8) Byte;		break;		case CMemory::MAP_OBC_RAM:		SetOBC1(Byte, Address &0xFFFF);		return;		case CMemory::MAP_SETA_DSP:		S9xSetSetaDSP(Byte,Address);		return;		case CMemory::MAP_SETA_RISC:		S9xSetST018(Byte,Address);		return;    default:    case CMemory::MAP_NONE:#ifdef MK_TRACE_BAD_WRITES		char address[20];		sprintf(address, TEXT("%06X"),Address);		MessageBox(GUI.hWnd, address, TEXT("SetByte"), MB_OK);#endif#ifdef DEBUGGER		printf ("W(B) %06x\n", Address);#endif		return;    }}INLINE void S9xSetWord (uint16 Word, uint32 Address){	if((Address & 0x0FFF)==0x0FFF)	{		S9xSetByte(Word&0x00FF, Address);		S9xSetByte(Word>>8, Address+1);		return;	}#if defined(CPU_SHUTDOWN)    CPU.WaitAddress = NULL;#endif    int block;    uint8 *SetAddress = Memory.WriteMap [block = ((Address >> MEMMAP_SHIFT) & MEMMAP_MASK)];	if (!CPU.InDMA)		CPU.Cycles += Memory.MemorySpeed [block] << 1;    if (SetAddress >= (uint8 *) CMemory::MAP_LAST)    {#ifdef CPU_SHUTDOWN		SetAddress += Address & 0xffff;		if (SetAddress == SA1.WaitByteAddress1 ||			SetAddress == SA1.WaitByteAddress2)		{			SA1.Executing = SA1.S9xOpcodes != NULL;			SA1.WaitCounter = 0;		}#ifdef FAST_LSB_WORD_ACCESS		*(uint16 *) SetAddress = Word;#else		*SetAddress = (uint8) Word;		*(SetAddress + 1) = Word >> 8;#endif#else#ifdef FAST_LSB_WORD_ACCESS		*(uint16 *) (SetAddress + (Address & 0xffff)) = Word;#else		*(SetAddress + (Address & 0xffff)) = (uint8) Word;		*(SetAddress + ((Address + 1) & 0xffff)) = Word >> 8;#endif#endif		return;    }	    switch ((int) SetAddress)    {    case CMemory::MAP_PPU:		S9xSetPPU ((uint8) Word, Address & 0xffff);		S9xSetPPU (Word >> 8, (Address & 0xffff) + 1);		return;		    case CMemory::MAP_CPU:		S9xSetCPU ((uint8) Word, (Address & 0xffff));		S9xSetCPU (Word >> 8, (Address & 0xffff) + 1);		return;		    case CMemory::MAP_DSP:#ifdef DSP_DUMMY_LOOPS		printf("DSP Word: %04X to %06X\n", Word, Address);#endif		S9xSetDSP ((uint8) Word, (Address & 0xffff));		S9xSetDSP (Word >> 8, (Address & 0xffff) + 1);		return;		    case CMemory::MAP_LOROM_SRAM:		if (Memory.SRAMMask)		{			/* BJ: no FAST_LSB_WORD_ACCESS here, since if Memory.SRAMMask=0x7ff			 * then the high byte doesn't follow the low byte. */			*(Memory.SRAM + ((((Address&0xFF0000)>>1)|(Address&0x7FFF))& Memory.SRAMMask)) = (uint8) Word;			*(Memory.SRAM + (((((Address+1)&0xFF0000)>>1)|((Address+1)&0x7FFF))& Memory.SRAMMask)) = Word >> 8;//			*(Memory.SRAM + (Address & Memory.SRAMMask)) = (uint8) Word;//			*(Memory.SRAM + ((Address + 1) & Memory.SRAMMask)) = Word >> 8;			CPU.SRAMModified = TRUE;		}		return;		    case CMemory::MAP_HIROM_SRAM:		if (Memory.SRAMMask)		{			/* BJ: no FAST_LSB_WORD_ACCESS here, since if Memory.SRAMMask=0x7ff			 * then the high byte doesn't follow the low byte. */			*(Memory.SRAM + 				(((Address & 0x7fff) - 0x6000 +				((Address & 0xf0000) >> 3) & Memory.SRAMMask))) = (uint8) Word;			*(Memory.SRAM + 				((((Address + 1) & 0x7fff) - 0x6000 +				(((Address + 1) & 0xf0000) >> 3) & Memory.SRAMMask))) = (uint8) (Word >> 8);			CPU.SRAMModified = TRUE;		}		return;		    case CMemory::MAP_BWRAM:#ifdef FAST_LSB_WORD_ACCESS		*(uint16 *) (Memory.BWRAM + ((Address & 0x7fff) - 0x6000)) = Word;#else		*(Memory.BWRAM + ((Address & 0x7fff) - 0x6000)) = (uint8) Word;		*(Memory.BWRAM + (((Address + 1) & 0x7fff) - 0x6000)) = (uint8) (Word >> 8);#endif		CPU.SRAMModified = TRUE;		return;		    case CMemory::MAP_DEBUG:#ifdef DEBUGGER		printf ("W(W) %06x\n", Address);#endif		case CMemory::MAP_SPC7110_DRAM:#ifdef SPC7110_DEBUG		printf("Writing Word at %06X\n", Address);#endif		s7r.bank50[(Address & 0xffff)]= (uint8) Word;		s7r.bank50[((Address + 1) & 0xffff)]= (uint8) Word;		break;    case CMemory::MAP_SA1RAM:		*(Memory.SRAM + (Address & 0xffff)) = (uint8) Word;		*(Memory.SRAM + ((Address + 1) & 0xffff)) = (uint8) (Word >> 8);		SA1.Executing = !SA1.Waiting;		break;		    case CMemory::MAP_C4:		S9xSetC4 (Word & 0xff, Address & 0xffff);		S9xSetC4 ((uint8) (Word >> 8), (Address + 1) & 0xffff);		return;	case CMemory::MAP_OBC_RAM:		SetOBC1(Word & 0xff, Address &0xFFFF);		SetOBC1 ((uint8) (Word >> 8), (Address + 1) & 0xffff);		return;		case CMemory::MAP_SETA_DSP:		S9xSetSetaDSP (Word & 0xff, Address);		S9xSetSetaDSP ((uint8) (Word >> 8),(Address + 1));		return;		case CMemory::MAP_SETA_RISC:		S9xSetST018 (Word & 0xff, Address);		S9xSetST018 ((uint8) (Word >> 8),(Address + 1));		return;    default:    case CMemory::MAP_NONE:#ifdef MK_TRACE_BAD_WRITES		char address[20];		sprintf(address, TEXT("%06X"),Address);		MessageBox(GUI.hWnd, address, TEXT("SetWord"), MB_OK);#endif#ifdef DEBUGGER		printf ("W(W) %06x\n", Address);#endif		return;    }}INLINE uint8 *GetBasePointer (uint32 Address){    uint8 *GetAddress = Memory.Map [(Address >> MEMMAP_SHIFT) & MEMMAP_MASK];    if (GetAddress >= (uint8 *) CMemory::MAP_LAST)		return (GetAddress);	if(Settings.SPC7110&&((Address&0x7FFFFF)==0x4800))	{		return s7r.bank50;	}    switch ((int) GetAddress)    {	case CMemory::MAP_SPC7110_DRAM:#ifdef SPC7110_DEBUG		printf("Getting Base pointer to DRAM\n");#endif		{			return s7r.bank50;		}	case CMemory::MAP_SPC7110_ROM:#ifdef SPC7110_DEBUG		printf("Getting Base pointer to SPC7110ROM\n");#endif		return Get7110BasePtr(Address);    case CMemory::MAP_PPU://just a guess, but it looks like this should match the CPU as a source.		return (Memory.FillRAM);//		return (Memory.FillRAM - 0x2000);    case CMemory::MAP_CPU://fixes Ogre Battle's green lines		return (Memory.FillRAM);//		return (Memory.FillRAM - 0x4000);    case CMemory::MAP_DSP:		return (Memory.FillRAM - 0x6000);    case CMemory::MAP_SA1RAM:    case CMemory::MAP_LOROM_SRAM:		return (Memory.SRAM);    case CMemory::MAP_BWRAM:		return (Memory.BWRAM - 0x6000);    case CMemory::MAP_HIROM_SRAM:		return (Memory.SRAM - 0x6000);    case CMemory::MAP_C4:		return (Memory.C4RAM - 0x6000);	case CMemory::MAP_OBC_RAM:		return GetBasePointerOBC1(Address);	case CMemory::MAP_SETA_DSP:		return Memory.SRAM;    case CMemory::MAP_DEBUG:#ifdef DEBUGGER		printf ("GBP %06x\n", Address);#endif		    default:    case CMemory::MAP_NONE:#if defined(MK_TRACE_BAD_READS) || defined(MK_TRACE_BAD_WRITES)		char fsd[12];		sprintf(fsd, TEXT("%06X"), Address);		MessageBox(GUI.hWnd, fsd, TEXT("Rogue DMA"), MB_OK);#endif#ifdef DEBUGGER		printf ("GBP %06x\n", Address);#endif		return (0);    }}INLINE uint8 *S9xGetMemPointer (uint32 Address){    uint8 *GetAddress = Memory.Map [(Address >> MEMMAP_SHIFT) & MEMMAP_MASK];    if (GetAddress >= (uint8 *) CMemory::MAP_LAST)		return (GetAddress + (Address & 0xffff));		if(Settings.SPC7110&&((Address&0x7FFFFF)==0x4800))		return s7r.bank50;    switch ((int) GetAddress)    {	case CMemory::MAP_SPC7110_DRAM:#ifdef SPC7110_DEBUG		printf("Getting Base pointer to DRAM\n");#endif		return &s7r.bank50[Address&0x0000FFFF];    case CMemory::MAP_PPU:		return (Memory.FillRAM + (Address & 0xffff));    case CMemory::MAP_CPU:		return (Memory.FillRAM + (Address & 0xffff));    case CMemory::MAP_DSP:		return (Memory.FillRAM - 0x6000 + (Address & 0xffff));    case CMemory::MAP_SA1RAM:    case CMemory::MAP_LOROM_SRAM:		return (Memory.SRAM + (Address & 0xffff));    case CMemory::MAP_BWRAM:		return (Memory.BWRAM - 0x6000 + (Address & 0xffff));    case CMemory::MAP_HIROM_SRAM:		return (Memory.SRAM - 0x6000 + (Address & 0xffff));    case CMemory::MAP_C4:		return (Memory.C4RAM - 0x6000 + (Address & 0xffff));	case CMemory::MAP_OBC_RAM:		return GetMemPointerOBC1(Address);	case CMemory::MAP_SETA_DSP:		return Memory.SRAM+ ((Address & 0xffff) & Memory.SRAMMask);    case CMemory::MAP_DEBUG:#ifdef DEBUGGER		printf ("GMP %06x\n", Address);#endif    default:    case CMemory::MAP_NONE:#if defined(MK_TRACE_BAD_READS) || defined(MK_TRACE_BAD_WRITES)		char fsd[12];		sprintf(fsd, TEXT("%06X"), Address);		MessageBox(GUI.hWnd, fsd, TEXT("Rogue DMA"), MB_OK);#endif#ifdef DEBUGGER		printf ("GMP %06x\n", Address);#endif		return (0);    }}INLINE void S9xSetPCBase (uint32 Address){    int block;    uint8 *GetAddress = Memory.Map [block = (Address >> MEMMAP_SHIFT) & MEMMAP_MASK];	CPU.MemSpeed = Memory.MemorySpeed [block];	CPU.MemSpeedx2 = CPU.MemSpeed << 1;    if (GetAddress >= (uint8 *) CMemory::MAP_LAST)    {		CPU.PCBase = GetAddress;		CPU.PC = GetAddress + (Address & 0xffff);		return;    }	    switch ((int) GetAddress)    {    case CMemory::MAP_PPU:		CPU.PCBase = Memory.FillRAM;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;		    case CMemory::MAP_CPU:		CPU.PCBase = Memory.FillRAM;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;		    case CMemory::MAP_DSP:		CPU.PCBase = Memory.FillRAM - 0x6000;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;		    case CMemory::MAP_SA1RAM:    case CMemory::MAP_LOROM_SRAM:		CPU.PCBase = Memory.SRAM;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;		    case CMemory::MAP_BWRAM:		CPU.PCBase = Memory.BWRAM - 0x6000;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;    case CMemory::MAP_HIROM_SRAM:		CPU.PCBase = Memory.SRAM - 0x6000;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;		    case CMemory::MAP_C4:		CPU.PCBase = Memory.C4RAM - 0x6000;		CPU.PC = CPU.PCBase + (Address & 0xffff);		return;		    case CMemory::MAP_DEBUG:#ifdef DEBUGGER		printf ("SBP %06x\n", Address);#endif		    default:    case CMemory::MAP_NONE:#ifdef DEBUGGER		printf ("SBP %06x\n", Address);#endif		CPU.PCBase = Memory.SRAM;		CPU.PC = Memory.SRAM + (Address & 0xffff);		return;    }}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -