CSPspEmu.Core.Memory.NormalPspMemory.PspAddressToPointerUnsafe C# (CSharp) Method

PspAddressToPointerUnsafe() public method

public PspAddressToPointerUnsafe ( uint _Address ) : void*
_Address uint
return void*
		public override void* PspAddressToPointerUnsafe(uint _Address)
		{
			if (_Address == 0) return null;
			//if (IsAddressValid(_Address))
			{
				// Ignore last 3 bits (cache / kernel)
				uint Address = _Address & PspMemory.MemoryMask;
				switch (Address >> 24)
				{
					/////// hp
					case 0x00: //case 0b_00000:
						{
							if (Address < ScratchPadOffset)
							{
								break;
							}
							uint Offset = Address - ScratchPadOffset;
#if ADDITIONAL_CHECKS
							if (Offset >= ScratchPadSize) throw (new Exception(String.Format("Outside! 0x{0:X}", Address)));
#endif
							return &ScratchPadPtr[Address - ScratchPadOffset];
						}
					/////// hp
					case 0x04: //case 0b_00100:
						{
							uint Offset = Address - FrameBufferOffset;
#if ADDITIONAL_CHECKS
							if (Offset >= FrameBufferSize) throw (new Exception(String.Format("Outside! 0x{0:X}", Address)));
#endif

							return &FrameBufferPtr[Offset];
						}
					/////// hp
					case 0x08: //case 0b_01000:
					case 0x09: //case 0b_01001:
					case 0x0A: //case 0b_01010: // SLIM ONLY
					case 0x0B: //case 0b_01011: // SLIM ONLY
						{
							uint Offset = Address - MainOffset;
#if ADDITIONAL_CHECKS
							if (Offset >= MainSize) throw (new Exception(String.Format("Outside! 0x{0:X}", Address)));
#endif

							return &MainPtr[Offset];
							//return &Main[Offset];
						}
					/////// hp
					case 0x1F: //case 0b_011111
					case 0x37: //case 0b_111111: // HO IO2
						{
							//return &Vectors[Address - 0x1fc00000];
							//return HardwareVectors
							uint Offset = Address - VectorsOffset;
#if ADDITIONAL_CHECKS
							if (Offset >= VectorsSize) throw (new Exception(String.Format("Outside! 0x{0:X}", Address)));
#endif
							return &VectorsPtr[Offset];
						}
					case 0x1C: //case 0b_11100: // HW IO1
						break;
					default:
						break;
				}
				Console.Error.WriteLine("0x{0:X2}", (Address >> 24));
			}
			throw (new InvalidAddressException(_Address));
		}