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 "NstBoardFujiya.hpp" 27 28 namespace Nes 29 { 30 namespace Core 31 { 32 namespace Boards 33 { 34 namespace Fujiya 35 { 36 #ifdef NST_MSVC_OPTIMIZE 37 #pragma optimize("s", on) 38 #endif 39 SubReset(bool)40 void Standard::SubReset(bool) 41 { 42 reg = 0x00; 43 44 Map( 0x6502U, &Standard::Poke_7000 ); 45 Map( 0x7000U, &Standard::Poke_7000 ); 46 Map( 0x7001U, &Standard::Peek_7001 ); 47 Map( 0x7777U, &Standard::Peek_7001 ); 48 } 49 SubLoad(State::Loader & state,const dword baseChunk)50 void Standard::SubLoad(State::Loader& state,const dword baseChunk) 51 { 52 NST_VERIFY( baseChunk == (AsciiId<'F','U','A'>::V) ); 53 54 if (baseChunk == AsciiId<'F','U','A'>::V) 55 { 56 while (const dword chunk = state.Begin()) 57 { 58 if (chunk == AsciiId<'R','E','G'>::V) 59 reg = state.Read8() & 0x80; 60 61 state.End(); 62 } 63 } 64 } 65 SubSave(State::Saver & state) const66 void Standard::SubSave(State::Saver& state) const 67 { 68 state.Begin( AsciiId<'F','U','A'>::V ).Begin( AsciiId<'R','E','G'>::V ).Write8( reg ).End().End(); 69 } 70 71 #ifdef NST_MSVC_OPTIMIZE 72 #pragma optimize("", on) 73 #endif 74 75 NES_POKE_D(Standard,7000) 76 { 77 reg = data << 1 & 0x80; 78 } 79 80 NES_PEEK_A(Standard,7001) 81 { 82 return reg | (address >> 8 & 0x7F); 83 } 84 } 85 } 86 } 87 } 88