diff options
Diffstat (limited to 'source/obc1.c')
-rw-r--r-- | source/obc1.c | 204 |
1 files changed, 103 insertions, 101 deletions
diff --git a/source/obc1.c b/source/obc1.c index 2761f77..1bc8db8 100644 --- a/source/obc1.c +++ b/source/obc1.c @@ -1,6 +1,6 @@ /**************************************************** Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. - + (c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and Jerremy Koot (jkoot@snes9x.com) @@ -43,46 +43,46 @@ S-DD1 C emulator code (c) Copyright 2003 Brad Jorsch with research by Andreas Naive and John Weidman - + S-RTC C emulator code (c) Copyright 2001 John Weidman - + ST010 C++ emulator code (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora - Super FX x86 assembler emulator code - (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault + Super FX x86 assembler emulator code + (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault - Super FX C emulator code + Super FX C emulator code (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman SH assembler code partly based on x86 assembler code - (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se) + (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se) + - Specific ports contains the works of other authors. See headers in individual files. - + Snes9x homepage: http://www.snes9x.com - + Permission to use, copy, modify and distribute Snes9x in both binary and source form, for non-commercial purposes, is hereby granted without fee, providing that this license information and copyright notice appear with all copies and any derived work. - + This software is provided 'as-is', without any express or implied warranty. In no event shall the authors be held liable for any damages arising from the use of this software. - + Snes9x is freeware for PERSONAL USE only. Commercial users should seek permission of the copyright holders first. Commercial use includes charging money for Snes9x or software derived from Snes9x. - + The copyright holders request that bug fixes and improvements to the code should be forwarded to them so everyone can benefit from the modifications in future versions. - + Super NES and Super Nintendo Entertainment System are trademarks of Nintendo Co., Limited and its subsidiary companies. *******************************************************************************/ @@ -90,111 +90,113 @@ #include "memmap.h" #include "obc1.h" -static uint8 *OBC1_RAM = NULL; +static uint8* OBC1_RAM = NULL; int OBC1_Address; int OBC1_BasePtr; int OBC1_Shift; -uint8 GetOBC1 (uint16 Address) +uint8 GetOBC1(uint16 Address) { - switch(Address) { - case 0x7ff0: - return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2)]; - - case 0x7ff1: - return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 1]; - - case 0x7ff2: - return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 2]; - - case 0x7ff3: - return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 3]; - - case 0x7ff4: - return OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200]; - } - - return OBC1_RAM[Address & 0x1fff]; + switch (Address) + { + case 0x7ff0: + return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2)]; + + case 0x7ff1: + return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 1]; + + case 0x7ff2: + return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 2]; + + case 0x7ff3: + return OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 3]; + + case 0x7ff4: + return OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200]; + } + + return OBC1_RAM[Address & 0x1fff]; } -void SetOBC1 (uint8 Byte, uint16 Address) +void SetOBC1(uint8 Byte, uint16 Address) { - switch(Address) { - case 0x7ff0: - { - OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2)] = Byte; - break; - } - - case 0x7ff1: - { - OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 1] = Byte; - break; - } - - case 0x7ff2: - { - OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 2] = Byte; - break; - } - - case 0x7ff3: - { - OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 3] = Byte; - break; - } - - case 0x7ff4: - { - unsigned char Temp; - - Temp = OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200]; - Temp = (Temp & ~(3 << OBC1_Shift)) | ((Byte & 3) << OBC1_Shift); - OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200] = Temp; - break; - } - - case 0x7ff5: - { - if (Byte & 1) - OBC1_BasePtr = 0x1800; - else - OBC1_BasePtr = 0x1c00; - - OBC1_RAM[0x1ff5] = Byte; - break; - } - - case 0x7ff6: - { - OBC1_Address = Byte & 0x7f; - OBC1_Shift = (Byte & 3) << 1; - break; - } - - default: - OBC1_RAM[Address & 0x1fff] = Byte; - break; - } + switch (Address) + { + case 0x7ff0: + { + OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2)] = Byte; + break; + } + + case 0x7ff1: + { + OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 1] = Byte; + break; + } + + case 0x7ff2: + { + OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 2] = Byte; + break; + } + + case 0x7ff3: + { + OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 3] = Byte; + break; + } + + case 0x7ff4: + { + unsigned char Temp; + + Temp = OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200]; + Temp = (Temp & ~(3 << OBC1_Shift)) | ((Byte & 3) << OBC1_Shift); + OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200] = Temp; + break; + } + + case 0x7ff5: + { + if (Byte & 1) + OBC1_BasePtr = 0x1800; + else + OBC1_BasePtr = 0x1c00; + + OBC1_RAM[0x1ff5] = Byte; + break; + } + + case 0x7ff6: + { + OBC1_Address = Byte & 0x7f; + OBC1_Shift = (Byte & 3) << 1; + break; + } + + default: + OBC1_RAM[Address & 0x1fff] = Byte; + break; + } } -uint8 *GetBasePointerOBC1(uint32 Address) +uint8* GetBasePointerOBC1(uint32 Address) { - return Memory.FillRAM; + return Memory.FillRAM; } -uint8 *GetMemPointerOBC1(uint32 Address) +uint8* GetMemPointerOBC1(uint32 Address) { - return (Memory.FillRAM + (Address & 0xffff)); + return (Memory.FillRAM + (Address & 0xffff)); } void ResetOBC1() { - OBC1_Address = 0; - OBC1_BasePtr = 0x1c00; - OBC1_Shift = 0; - OBC1_RAM = &Memory.FillRAM[0x6000]; + OBC1_Address = 0; + OBC1_BasePtr = 0x1c00; + OBC1_Shift = 0; + OBC1_RAM = &Memory.FillRAM[0x6000]; - memset(OBC1_RAM, 0x00, 0x2000); + memset(OBC1_RAM, 0x00, 0x2000); } |