1 //////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // Nestopia - NES/Famicom emulator written in C++ 4 // 5 // Copyright (C) 2003-2008 Martin Freij 6 // 7 // This file is part of Nestopia. 8 // 9 // Nestopia is free software; you can redistribute it and/or modify 10 // it under the terms of the GNU General Public License as published by 11 // the Free Software Foundation; either version 2 of the License, or 12 // (at your option) any later version. 13 // 14 // Nestopia is distributed in the hope that it will be useful, 15 // but WITHOUT ANY WARRANTY; without even the implied warranty of 16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 // GNU General Public License for more details. 18 // 19 // You should have received a copy of the GNU General Public License 20 // along with Nestopia; if not, write to the Free Software 21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 // 23 //////////////////////////////////////////////////////////////////////////////////////// 24 25 #include "NstBoard.hpp" 26 #include "../NstTimer.hpp" 27 #include "NstBoardBmcVrc4.hpp" 28 29 namespace Nes 30 { 31 namespace Core 32 { 33 namespace Boards 34 { 35 namespace Bmc 36 { 37 #ifdef NST_MSVC_OPTIMIZE 38 #pragma optimize("s", on) 39 #endif 40 SubReset(const bool hard)41 void Vrc4::SubReset(const bool hard) 42 { 43 Konami::Vrc4::SubReset( hard ); 44 45 Map( 0x8000U, 0x8FFFU, &Vrc4::Poke_8000 ); 46 Map( 0xA000U, 0xAFFFU, &Vrc4::Poke_A000 ); 47 Map( 0xB000U, 0xEFFFU, &Vrc4::Poke_B000 ); 48 } 49 50 #ifdef NST_MSVC_OPTIMIZE 51 #pragma optimize("", on) 52 #endif 53 54 NES_POKE_D(Vrc4,8000) 55 { 56 prg.SwapBank<SIZE_8K>( prgSwap << 13, (prg.GetBank<SIZE_8K,0x0000>() & 0x20) | (data & 0x1F) ); 57 } 58 NES_POKE_D(Vrc4,A000)59 NES_POKE_D(Vrc4,A000) 60 { 61 prg.SwapBank<SIZE_8K,0x2000>( (prg.GetBank<SIZE_8K,0x0000>() & 0x20) | (data & 0x1F) ); 62 } 63 NES_POKE_D(Vrc4,B000)64 NES_POKE_D(Vrc4,B000) 65 { 66 data = data << 2 & 0x20; 67 68 prg.SwapBanks<SIZE_8K,0x0000> 69 ( 70 data | (prg.GetBank<SIZE_8K,0x0000>() & 0x1F), 71 data | (prg.GetBank<SIZE_8K,0x2000>() & 0x1F), 72 data | (prg.GetBank<SIZE_8K,0x4000>() & 0x1F), 73 data | (prg.GetBank<SIZE_8K,0x6000>() & 0x1F) 74 ); 75 } 76 } 77 } 78 } 79 } 80