📄 getset.h
字号:
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 + -