├── InfoNES.cpp ├── InfoNES.h ├── InfoNES.o ├── InfoNES_Mapper.cpp ├── InfoNES_Mapper.h ├── InfoNES_Mapper.o ├── InfoNES_System.h ├── InfoNES_Types.h ├── InfoNES_pAPU.cpp ├── InfoNES_pAPU.cpp.bak ├── InfoNES_pAPU.h ├── InfoNES_pAPU.o ├── K6502.cpp ├── K6502.h ├── K6502.o ├── K6502_rw.h ├── README.md ├── alsa ├── alisp.h ├── asoundef.h ├── asoundlib.h ├── conf.h ├── control.h ├── control_external.h ├── error.h ├── global.h ├── hwdep.h ├── iatomic.h ├── input.h ├── mixer.h ├── mixer_abst.h ├── output.h ├── pcm.h ├── pcm_external.h ├── pcm_extplug.h ├── pcm_ioplug.h ├── pcm_old.h ├── pcm_plugin.h ├── pcm_rate.h ├── rawmidi.h ├── seq.h ├── seq_event.h ├── seq_midi_event.h ├── seqmid.h ├── sound │ ├── asound_fm.h │ ├── emu10k1.h │ ├── hdsp.h │ ├── hdspm.h │ ├── sb16_csp.h │ ├── sscape_ioctl.h │ └── type_compat.h ├── timer.h ├── use-case.h └── version.h ├── doc ├── GPL2 ├── GPL2J └── readme.html ├── joypad ├── .joypad.ko.cmd ├── .joypad.mod.o.cmd ├── .joypad.o.cmd ├── .tmp_versions │ └── joypad.mod ├── Makefile ├── Module.symvers ├── gpio.h ├── joypad.c ├── joypad.c.bak ├── joypad.ko ├── joypad.mod.c ├── joypad.mod.o ├── joypad.o ├── modules.order ├── read.txt ├── testpad └── testpad.c ├── libs └── libasound.so ├── linux ├── InfoNES ├── InfoNES_System_Linux.cpp ├── InfoNES_System_Linux.cpp.bak ├── InfoNES_System_Linux.o ├── Makefile ├── Makefile.bak ├── joypad_input.cpp ├── joypad_input.cpp.bak ├── joypad_input.o └── libasound.so ├── mapper ├── InfoNES_Mapper_000.cpp ├── InfoNES_Mapper_001.cpp ├── InfoNES_Mapper_002.cpp ├── InfoNES_Mapper_003.cpp ├── InfoNES_Mapper_004.cpp ├── InfoNES_Mapper_005.cpp ├── InfoNES_Mapper_006.cpp ├── InfoNES_Mapper_007.cpp ├── InfoNES_Mapper_008.cpp ├── InfoNES_Mapper_009.cpp ├── InfoNES_Mapper_010.cpp ├── InfoNES_Mapper_011.cpp ├── InfoNES_Mapper_013.cpp ├── InfoNES_Mapper_015.cpp ├── InfoNES_Mapper_016.cpp ├── InfoNES_Mapper_017.cpp ├── InfoNES_Mapper_018.cpp ├── InfoNES_Mapper_019.cpp ├── InfoNES_Mapper_021.cpp ├── InfoNES_Mapper_022.cpp ├── InfoNES_Mapper_023.cpp ├── InfoNES_Mapper_024.cpp ├── InfoNES_Mapper_025.cpp ├── InfoNES_Mapper_026.cpp ├── InfoNES_Mapper_032.cpp ├── InfoNES_Mapper_033.cpp ├── InfoNES_Mapper_034.cpp ├── InfoNES_Mapper_040.cpp ├── InfoNES_Mapper_041.cpp ├── InfoNES_Mapper_042.cpp ├── InfoNES_Mapper_043.cpp ├── InfoNES_Mapper_044.cpp ├── InfoNES_Mapper_045.cpp ├── InfoNES_Mapper_046.cpp ├── InfoNES_Mapper_047.cpp ├── InfoNES_Mapper_048.cpp ├── InfoNES_Mapper_049.cpp ├── InfoNES_Mapper_050.cpp ├── InfoNES_Mapper_051.cpp ├── InfoNES_Mapper_057.cpp ├── InfoNES_Mapper_058.cpp ├── InfoNES_Mapper_060.cpp ├── InfoNES_Mapper_061.cpp ├── InfoNES_Mapper_062.cpp ├── InfoNES_Mapper_064.cpp ├── InfoNES_Mapper_065.cpp ├── InfoNES_Mapper_066.cpp ├── InfoNES_Mapper_067.cpp ├── InfoNES_Mapper_068.cpp ├── InfoNES_Mapper_069.cpp ├── InfoNES_Mapper_070.cpp ├── InfoNES_Mapper_071.cpp ├── InfoNES_Mapper_072.cpp ├── InfoNES_Mapper_073.cpp ├── InfoNES_Mapper_074.cpp ├── InfoNES_Mapper_075.cpp ├── InfoNES_Mapper_076.cpp ├── InfoNES_Mapper_077.cpp ├── InfoNES_Mapper_078.cpp ├── InfoNES_Mapper_079.cpp ├── InfoNES_Mapper_080.cpp ├── InfoNES_Mapper_082.cpp ├── InfoNES_Mapper_083.cpp ├── InfoNES_Mapper_085.cpp ├── InfoNES_Mapper_086.cpp ├── InfoNES_Mapper_087.cpp ├── InfoNES_Mapper_088.cpp ├── InfoNES_Mapper_089.cpp ├── InfoNES_Mapper_090.cpp ├── InfoNES_Mapper_091.cpp ├── InfoNES_Mapper_092.cpp ├── InfoNES_Mapper_093.cpp ├── InfoNES_Mapper_094.cpp ├── InfoNES_Mapper_095.cpp ├── InfoNES_Mapper_096.cpp ├── InfoNES_Mapper_097.cpp ├── InfoNES_Mapper_100.cpp ├── InfoNES_Mapper_101.cpp ├── InfoNES_Mapper_105.cpp ├── InfoNES_Mapper_107.cpp ├── InfoNES_Mapper_108.cpp ├── InfoNES_Mapper_109.cpp ├── InfoNES_Mapper_110.cpp ├── InfoNES_Mapper_112.cpp ├── InfoNES_Mapper_113.cpp ├── InfoNES_Mapper_114.cpp ├── InfoNES_Mapper_115.cpp ├── InfoNES_Mapper_116.cpp ├── InfoNES_Mapper_117.cpp ├── InfoNES_Mapper_118.cpp ├── InfoNES_Mapper_119.cpp ├── InfoNES_Mapper_122.cpp ├── InfoNES_Mapper_133.cpp ├── InfoNES_Mapper_134.cpp ├── InfoNES_Mapper_135.cpp ├── InfoNES_Mapper_140.cpp ├── InfoNES_Mapper_151.cpp ├── InfoNES_Mapper_160.cpp ├── InfoNES_Mapper_180.cpp ├── InfoNES_Mapper_181.cpp ├── InfoNES_Mapper_182.cpp ├── InfoNES_Mapper_183.cpp ├── InfoNES_Mapper_185.cpp ├── InfoNES_Mapper_187.cpp ├── InfoNES_Mapper_188.cpp ├── InfoNES_Mapper_189.cpp ├── InfoNES_Mapper_191.cpp ├── InfoNES_Mapper_193.cpp ├── InfoNES_Mapper_194.cpp ├── InfoNES_Mapper_200.cpp ├── InfoNES_Mapper_201.cpp ├── InfoNES_Mapper_202.cpp ├── InfoNES_Mapper_222.cpp ├── InfoNES_Mapper_225.cpp ├── InfoNES_Mapper_226.cpp ├── InfoNES_Mapper_227.cpp ├── InfoNES_Mapper_228.cpp ├── InfoNES_Mapper_229.cpp ├── InfoNES_Mapper_230.cpp ├── InfoNES_Mapper_231.cpp ├── InfoNES_Mapper_232.cpp ├── InfoNES_Mapper_233.cpp ├── InfoNES_Mapper_234.cpp ├── InfoNES_Mapper_235.cpp ├── InfoNES_Mapper_236.cpp ├── InfoNES_Mapper_240.cpp ├── InfoNES_Mapper_241.cpp ├── InfoNES_Mapper_242.cpp ├── InfoNES_Mapper_243.cpp ├── InfoNES_Mapper_244.cpp ├── InfoNES_Mapper_245.cpp ├── InfoNES_Mapper_246.cpp ├── InfoNES_Mapper_248.cpp ├── InfoNES_Mapper_249.cpp ├── InfoNES_Mapper_251.cpp ├── InfoNES_Mapper_252.cpp └── InfoNES_Mapper_255.cpp ├── ppc2002 ├── InfoNES2002.rc ├── InfoNES2002.vcp ├── InfoNES2002.vcw ├── InfoNES_System_ppc2002.cpp ├── InfoNES_System_ppc2002.cpp.bak ├── newres.h ├── res │ └── InfoNES2002.ICO └── resource.h ├── ppc2003 ├── InfoNES2003.rc ├── InfoNES2003.vcp ├── InfoNES2003.vcw ├── InfoNES_System_ppc2003.cpp ├── newres.h ├── res │ └── InfoNES2003.ICO └── resource.h ├── test.nes ├── test1.nes ├── test3.nes └── test4.nes /InfoNES.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/InfoNES.o -------------------------------------------------------------------------------- /InfoNES_Mapper.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/InfoNES_Mapper.o -------------------------------------------------------------------------------- /InfoNES_System.h: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* InfoNES_System.h : The function which depends on a system */ 4 | /* */ 5 | /* 2000/05/29 InfoNES Project ( based on pNesX ) */ 6 | /* */ 7 | /*===================================================================*/ 8 | 9 | #ifndef InfoNES_SYSTEM_H_INCLUDED 10 | #define InfoNES_SYSTEM_H_INCLUDED 11 | 12 | /*-------------------------------------------------------------------*/ 13 | /* Include files */ 14 | /*-------------------------------------------------------------------*/ 15 | 16 | #include "InfoNES_Types.h" 17 | 18 | /*-------------------------------------------------------------------*/ 19 | /* Palette data */ 20 | /*-------------------------------------------------------------------*/ 21 | extern WORD NesPalette[]; 22 | 23 | /*-------------------------------------------------------------------*/ 24 | /* Function prototypes */ 25 | /*-------------------------------------------------------------------*/ 26 | 27 | /* Menu screen */ 28 | int InfoNES_Menu(); 29 | 30 | /* Read ROM image file */ 31 | int InfoNES_ReadRom( const char *pszFileName ); 32 | 33 | /* Release a memory for ROM */ 34 | void InfoNES_ReleaseRom(); 35 | 36 | /* Transfer the contents of work frame on the screen */ 37 | void InfoNES_LoadFrame(); 38 | 39 | /* Get a joypad state */ 40 | void InfoNES_PadState( DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem ); 41 | 42 | /* memcpy */ 43 | void *InfoNES_MemoryCopy( void *dest, const void *src, int count ); 44 | 45 | /* memset */ 46 | void *InfoNES_MemorySet( void *dest, int c, int count ); 47 | 48 | /* Print debug message */ 49 | void InfoNES_DebugPrint( char *pszMsg ); 50 | 51 | /* Wait */ 52 | void InfoNES_Wait(); 53 | 54 | /* Sound Initialize */ 55 | void InfoNES_SoundInit( void ); 56 | 57 | /* Sound Open */ 58 | int InfoNES_SoundOpen( int samples_per_sync, int sample_rate ); 59 | 60 | /* Sound Close */ 61 | void InfoNES_SoundClose( void ); 62 | 63 | /* Sound Output 5 Waves - 2 Pulse, 1 Triangle, 1 Noise, 1 DPCM */ 64 | void InfoNES_SoundOutput(int samples, BYTE *wave1, BYTE *wave2, BYTE *wave3, BYTE *wave4, BYTE *wave5); 65 | 66 | /* Print system message */ 67 | void InfoNES_MessageBox( char *pszMsg, ... ); 68 | 69 | #endif /* !InfoNES_SYSTEM_H_INCLUDED */ 70 | -------------------------------------------------------------------------------- /InfoNES_Types.h: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* InfoNES_Types.h : Type definitions for InfoNES */ 4 | /* */ 5 | /* 2000/5/4 InfoNES Project ( based on pNesX ) */ 6 | /* */ 7 | /*===================================================================*/ 8 | 9 | #ifndef InfoNES_TYPES_H_INCLUDED 10 | #define InfoNES_TYPES_H_INCLUDED 11 | 12 | /*-------------------------------------------------------------------*/ 13 | /* Type definition */ 14 | /*-------------------------------------------------------------------*/ 15 | #ifndef DWORD 16 | typedef unsigned long DWORD; 17 | #endif /* !DWORD */ 18 | 19 | #ifndef WORD 20 | typedef unsigned short WORD; 21 | #endif /* !WORD */ 22 | 23 | #ifndef BYTE 24 | typedef unsigned char BYTE; 25 | #endif /* !BYTE */ 26 | 27 | /*-------------------------------------------------------------------*/ 28 | /* NULL definition */ 29 | /*-------------------------------------------------------------------*/ 30 | #ifndef NULL 31 | #define NULL 0 32 | #endif /* !NULL */ 33 | 34 | #endif /* !InfoNES_TYPES_H_INCLUDED */ 35 | -------------------------------------------------------------------------------- /InfoNES_pAPU.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/InfoNES_pAPU.o -------------------------------------------------------------------------------- /K6502.h: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* K6502.h : Header file for K6502 */ 4 | /* */ 5 | /* 2000/05/29 InfoNES Project ( based on pNesX ) */ 6 | /* */ 7 | /*===================================================================*/ 8 | 9 | #ifndef K6502_H_INCLUDED 10 | #define K6502_H_INCLUDED 11 | 12 | // Type definition 13 | #ifndef DWORD 14 | typedef unsigned long DWORD; 15 | #endif 16 | 17 | #ifndef WORD 18 | typedef unsigned short WORD; 19 | #endif 20 | 21 | #ifndef BYTE 22 | typedef unsigned char BYTE; 23 | #endif 24 | 25 | #ifndef NULL 26 | #define NULL 0 27 | #endif 28 | 29 | /* 6502 Flags */ 30 | #define FLAG_C 0x01 31 | #define FLAG_Z 0x02 32 | #define FLAG_I 0x04 33 | #define FLAG_D 0x08 34 | #define FLAG_B 0x10 35 | #define FLAG_R 0x20 36 | #define FLAG_V 0x40 37 | #define FLAG_N 0x80 38 | 39 | /* Stack Address */ 40 | #define BASE_STACK 0x100 41 | 42 | /* Interrupt Vectors */ 43 | #define VECTOR_NMI 0xfffa 44 | #define VECTOR_RESET 0xfffc 45 | #define VECTOR_IRQ 0xfffe 46 | 47 | // NMI Request 48 | #define NMI_REQ NMI_State = 0; 49 | 50 | // IRQ Request 51 | #define IRQ_REQ IRQ_State = 0; 52 | 53 | // Emulator Operation 54 | void K6502_Init(); 55 | void K6502_Reset(); 56 | void K6502_Set_Int_Wiring( BYTE byNMI_Wiring, BYTE byIRQ_Wiring ); 57 | void K6502_Step( register WORD wClocks ); 58 | 59 | // I/O Operation (User definition) 60 | static inline BYTE K6502_Read( WORD wAddr); 61 | static inline WORD K6502_ReadW( WORD wAddr ); 62 | static inline WORD K6502_ReadW2( WORD wAddr ); 63 | static inline BYTE K6502_ReadZp( BYTE byAddr ); 64 | static inline WORD K6502_ReadZpW( BYTE byAddr ); 65 | static inline BYTE K6502_ReadAbsX(); 66 | static inline BYTE K6502_ReadAbsY(); 67 | static inline BYTE K6502_ReadIY(); 68 | 69 | static inline void K6502_Write( WORD wAddr, BYTE byData ); 70 | static inline void K6502_WriteW( WORD wAddr, WORD wData ); 71 | 72 | // The state of the IRQ pin 73 | extern BYTE IRQ_State; 74 | 75 | // The state of the NMI pin 76 | extern BYTE NMI_State; 77 | 78 | // The number of the clocks that it passed 79 | extern WORD g_wPassedClocks; 80 | 81 | #endif /* !K6502_H_INCLUDED */ 82 | -------------------------------------------------------------------------------- /K6502.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/K6502.o -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # infoNES 2 | infoNES for Embedded linux,based on ZLG easyARM imax283 board. 3 | -------------------------------------------------------------------------------- /alsa/alisp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ALSA lisp implementation 3 | * Copyright (c) 2003 by Jaroslav Kysela 4 | * 5 | * 6 | * This library is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU Lesser General Public License as 8 | * published by the Free Software Foundation; either version 2.1 of 9 | * the License, or (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Lesser General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public 17 | * License along with this library; if not, write to the Free Software 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 | * 20 | */ 21 | 22 | struct alisp_cfg { 23 | int verbose: 1, 24 | warning: 1, 25 | debug: 1; 26 | snd_input_t *in; /* program code */ 27 | snd_output_t *out; /* program output */ 28 | snd_output_t *eout; /* error output */ 29 | snd_output_t *vout; /* verbose output */ 30 | snd_output_t *wout; /* warning output */ 31 | snd_output_t *dout; /* debug output */ 32 | }; 33 | 34 | struct alisp_instance; 35 | struct alisp_object; 36 | struct alisp_seq_iterator; 37 | 38 | struct alisp_cfg *alsa_lisp_default_cfg(snd_input_t *input); 39 | void alsa_lisp_default_cfg_free(struct alisp_cfg *cfg); 40 | int alsa_lisp(struct alisp_cfg *cfg, struct alisp_instance **instance); 41 | void alsa_lisp_free(struct alisp_instance *instance); 42 | int alsa_lisp_function(struct alisp_instance *instance, struct alisp_seq_iterator **result, 43 | const char *id, const char *args, ...) 44 | #ifndef DOC_HIDDEN 45 | __attribute__ ((format (printf, 4, 5))) 46 | #endif 47 | ; 48 | void alsa_lisp_result_free(struct alisp_instance *instance, 49 | struct alisp_seq_iterator *result); 50 | int alsa_lisp_seq_first(struct alisp_instance *instance, const char *id, 51 | struct alisp_seq_iterator **seq); 52 | int alsa_lisp_seq_next(struct alisp_seq_iterator **seq); 53 | int alsa_lisp_seq_count(struct alisp_seq_iterator *seq); 54 | int alsa_lisp_seq_integer(struct alisp_seq_iterator *seq, long *val); 55 | int alsa_lisp_seq_pointer(struct alisp_seq_iterator *seq, const char *ptr_id, void **ptr); 56 | -------------------------------------------------------------------------------- /alsa/asoundlib.h: -------------------------------------------------------------------------------- 1 | /** 2 | * \file include/asoundlib.h 3 | * \brief Application interface library for the ALSA driver 4 | * \author Jaroslav Kysela 5 | * \author Abramo Bagnara 6 | * \author Takashi Iwai 7 | * \date 1998-2001 8 | * 9 | * Application interface library for the ALSA driver 10 | */ 11 | /* 12 | * This library is free software; you can redistribute it and/or modify 13 | * it under the terms of the GNU Lesser General Public License as 14 | * published by the Free Software Foundation; either version 2.1 of 15 | * the License, or (at your option) any later version. 16 | * 17 | * This program is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | * GNU Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with this library; if not, write to the Free Software 24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 | * 26 | */ 27 | 28 | #ifndef __ASOUNDLIB_H 29 | #define __ASOUNDLIB_H 30 | 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | #include 39 | #include 40 | #include 41 | #include 42 | 43 | #ifndef __GNUC__ 44 | #define __inline__ inline 45 | #endif 46 | 47 | #include "asoundef.h" 48 | #include "version.h" 49 | #include "global.h" 50 | #include "input.h" 51 | #include "output.h" 52 | #include "error.h" 53 | #include "conf.h" 54 | #include "pcm.h" 55 | #include "rawmidi.h" 56 | #include "timer.h" 57 | #include "hwdep.h" 58 | #include "control.h" 59 | #include "mixer.h" 60 | #include "seq_event.h" 61 | #include "seq.h" 62 | #include "seqmid.h" 63 | #include "seq_midi_event.h" 64 | 65 | #endif /* __ASOUNDLIB_H */ 66 | -------------------------------------------------------------------------------- /alsa/error.h: -------------------------------------------------------------------------------- 1 | /** 2 | * \file include/error.h 3 | * \brief Application interface library for the ALSA driver 4 | * \author Jaroslav Kysela 5 | * \author Abramo Bagnara 6 | * \author Takashi Iwai 7 | * \date 1998-2001 8 | * 9 | * Application interface library for the ALSA driver 10 | */ 11 | /* 12 | * This library is free software; you can redistribute it and/or modify 13 | * it under the terms of the GNU Lesser General Public License as 14 | * published by the Free Software Foundation; either version 2.1 of 15 | * the License, or (at your option) any later version. 16 | * 17 | * This program is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | * GNU Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with this library; if not, write to the Free Software 24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 | * 26 | */ 27 | 28 | #ifndef __ALSA_ERROR_H 29 | #define __ALSA_ERROR_H 30 | 31 | #ifdef __cplusplus 32 | extern "C" { 33 | #endif 34 | 35 | /** 36 | * \defgroup Error Error handling 37 | * Error handling macros and functions. 38 | * \{ 39 | */ 40 | 41 | #define SND_ERROR_BEGIN 500000 /**< Lower boundary of sound error codes. */ 42 | #define SND_ERROR_INCOMPATIBLE_VERSION (SND_ERROR_BEGIN+0) /**< Kernel/library protocols are not compatible. */ 43 | #define SND_ERROR_ALISP_NIL (SND_ERROR_BEGIN+1) /**< Lisp encountered an error during acall. */ 44 | 45 | const char *snd_strerror(int errnum); 46 | 47 | /** 48 | * \brief Error handler callback. 49 | * \param file Source file name. 50 | * \param line Line number. 51 | * \param function Function name. 52 | * \param err Value of \c errno, or 0 if not relevant. 53 | * \param fmt \c printf(3) format. 54 | * \param ... \c printf(3) arguments. 55 | * 56 | * A function of this type is called by the ALSA library when an error occurs. 57 | * This function usually shows the message on the screen, and/or logs it. 58 | */ 59 | typedef void (*snd_lib_error_handler_t)(const char *file, int line, const char *function, int err, const char *fmt, ...) /* __attribute__ ((format (printf, 5, 6))) */; 60 | extern snd_lib_error_handler_t snd_lib_error; 61 | extern int snd_lib_error_set_handler(snd_lib_error_handler_t handler); 62 | 63 | #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 95) 64 | #define SNDERR(...) snd_lib_error(__FILE__, __LINE__, __FUNCTION__, 0, __VA_ARGS__) /**< Shows a sound error message. */ 65 | #define SYSERR(...) snd_lib_error(__FILE__, __LINE__, __FUNCTION__, errno, __VA_ARGS__) /**< Shows a system error message (related to \c errno). */ 66 | #else 67 | #define SNDERR(args...) snd_lib_error(__FILE__, __LINE__, __FUNCTION__, 0, ##args) /**< Shows a sound error message. */ 68 | #define SYSERR(args...) snd_lib_error(__FILE__, __LINE__, __FUNCTION__, errno, ##args) /**< Shows a system error message (related to \c errno). */ 69 | #endif 70 | 71 | /** \} */ 72 | 73 | #ifdef __cplusplus 74 | } 75 | #endif 76 | 77 | /** Local error handler function type */ 78 | typedef void (*snd_local_error_handler_t)(const char *file, int line, 79 | const char *func, int err, 80 | const char *fmt, va_list arg); 81 | 82 | snd_local_error_handler_t snd_lib_error_set_local(snd_local_error_handler_t func); 83 | 84 | #endif /* __ALSA_ERROR_H */ 85 | 86 | -------------------------------------------------------------------------------- /alsa/input.h: -------------------------------------------------------------------------------- 1 | /** 2 | * \file include/input.h 3 | * \brief Application interface library for the ALSA driver 4 | * \author Jaroslav Kysela 5 | * \author Abramo Bagnara 6 | * \author Takashi Iwai 7 | * \date 1998-2001 8 | * 9 | * Application interface library for the ALSA driver 10 | */ 11 | /* 12 | * This library is free software; you can redistribute it and/or modify 13 | * it under the terms of the GNU Lesser General Public License as 14 | * published by the Free Software Foundation; either version 2.1 of 15 | * the License, or (at your option) any later version. 16 | * 17 | * This program is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | * GNU Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with this library; if not, write to the Free Software 24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 | * 26 | */ 27 | 28 | #ifndef __ALSA_INPUT_H 29 | #define __ALSA_INPUT_H 30 | 31 | #ifdef __cplusplus 32 | extern "C" { 33 | #endif 34 | 35 | /** 36 | * \defgroup Input Input Interface 37 | * 38 | * The input functions present an interface similar to the stdio functions 39 | * on top of different underlying input sources. 40 | * 41 | * The #snd_config_load function uses such an input handle to be able to 42 | * load configurations not only from standard files but also from other 43 | * sources, e.g. from memory buffers. 44 | * 45 | * \{ 46 | */ 47 | 48 | /** 49 | * \brief Internal structure for an input object. 50 | * 51 | * The ALSA library uses a pointer to this structure as a handle to an 52 | * input object. Applications don't access its contents directly. 53 | */ 54 | typedef struct _snd_input snd_input_t; 55 | 56 | /** Input type. */ 57 | typedef enum _snd_input_type { 58 | /** Input from a stdio stream. */ 59 | SND_INPUT_STDIO, 60 | /** Input from a memory buffer. */ 61 | SND_INPUT_BUFFER 62 | } snd_input_type_t; 63 | 64 | int snd_input_stdio_open(snd_input_t **inputp, const char *file, const char *mode); 65 | int snd_input_stdio_attach(snd_input_t **inputp, FILE *fp, int _close); 66 | int snd_input_buffer_open(snd_input_t **inputp, const char *buffer, ssize_t size); 67 | int snd_input_close(snd_input_t *input); 68 | int snd_input_scanf(snd_input_t *input, const char *format, ...) 69 | #ifndef DOC_HIDDEN 70 | __attribute__ ((format (scanf, 2, 3))) 71 | #endif 72 | ; 73 | char *snd_input_gets(snd_input_t *input, char *str, size_t size); 74 | int snd_input_getc(snd_input_t *input); 75 | int snd_input_ungetc(snd_input_t *input, int c); 76 | 77 | /** \} */ 78 | 79 | #ifdef __cplusplus 80 | } 81 | #endif 82 | 83 | #endif /* __ALSA_INPUT_H */ 84 | -------------------------------------------------------------------------------- /alsa/output.h: -------------------------------------------------------------------------------- 1 | /** 2 | * \file include/output.h 3 | * \brief Application interface library for the ALSA driver 4 | * \author Jaroslav Kysela 5 | * \author Abramo Bagnara 6 | * \author Takashi Iwai 7 | * \date 1998-2001 8 | * 9 | * Application interface library for the ALSA driver 10 | */ 11 | /* 12 | * This library is free software; you can redistribute it and/or modify 13 | * it under the terms of the GNU Lesser General Public License as 14 | * published by the Free Software Foundation; either version 2.1 of 15 | * the License, or (at your option) any later version. 16 | * 17 | * This program is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | * GNU Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with this library; if not, write to the Free Software 24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 | * 26 | */ 27 | 28 | #ifndef __ALSA_OUTPUT_H 29 | #define __ALSA_OUTPUT_H 30 | 31 | #ifdef __cplusplus 32 | extern "C" { 33 | #endif 34 | 35 | /** 36 | * \defgroup Output Output Interface 37 | * 38 | * The output functions present an interface similar to the stdio functions 39 | * on top of different underlying output destinations. 40 | * 41 | * Many PCM debugging functions (\c snd_pcm_xxx_dump_xxx) use such an output 42 | * handle to be able to write not only to the screen but also to other 43 | * destinations, e.g. to files or to memory buffers. 44 | * 45 | * \{ 46 | */ 47 | 48 | /** 49 | * \brief Internal structure for an output object. 50 | * 51 | * The ALSA library uses a pointer to this structure as a handle to an 52 | * output object. Applications don't access its contents directly. 53 | */ 54 | typedef struct _snd_output snd_output_t; 55 | 56 | /** Output type. */ 57 | typedef enum _snd_output_type { 58 | /** Output to a stdio stream. */ 59 | SND_OUTPUT_STDIO, 60 | /** Output to a memory buffer. */ 61 | SND_OUTPUT_BUFFER 62 | } snd_output_type_t; 63 | 64 | int snd_output_stdio_open(snd_output_t **outputp, const char *file, const char *mode); 65 | int snd_output_stdio_attach(snd_output_t **outputp, FILE *fp, int _close); 66 | int snd_output_buffer_open(snd_output_t **outputp); 67 | size_t snd_output_buffer_string(snd_output_t *output, char **buf); 68 | int snd_output_close(snd_output_t *output); 69 | int snd_output_printf(snd_output_t *output, const char *format, ...) 70 | #ifndef DOC_HIDDEN 71 | __attribute__ ((format (printf, 2, 3))) 72 | #endif 73 | ; 74 | int snd_output_vprintf(snd_output_t *output, const char *format, va_list args); 75 | int snd_output_puts(snd_output_t *output, const char *str); 76 | int snd_output_putc(snd_output_t *output, int c); 77 | int snd_output_flush(snd_output_t *output); 78 | 79 | /** \} */ 80 | 81 | #ifdef __cplusplus 82 | } 83 | #endif 84 | 85 | #endif /* __ALSA_OUTPUT_H */ 86 | 87 | -------------------------------------------------------------------------------- /alsa/pcm_external.h: -------------------------------------------------------------------------------- 1 | /** 2 | * \file include/pcm_external.h 3 | * \brief External PCM plugin SDK 4 | * \author Takashi Iwai 5 | * \date 2005 6 | * 7 | * Extern PCM plugin SDK. 8 | */ 9 | 10 | /* 11 | * This library is free software; you can redistribute it and/or modify 12 | * it under the terms of the GNU Lesser General Public License as 13 | * published by the Free Software Foundation; either version 2.1 of 14 | * the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with this library; if not, write to the Free Software 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 | * 25 | */ 26 | #ifndef __ALSA_PCM_EXTERNAL_H 27 | #define __ALSA_PCM_EXTERNAL_H 28 | 29 | #include "pcm.h" 30 | 31 | #ifdef __cplusplus 32 | extern "C" { 33 | #endif 34 | 35 | /** 36 | * \defgroup Plugin_SDK External PCM plugin SDK 37 | * \{ 38 | */ 39 | 40 | /** 41 | * Define the object entry for external PCM plugins 42 | */ 43 | #define SND_PCM_PLUGIN_ENTRY(name) _snd_pcm_##name##_open 44 | 45 | /** 46 | * Define the symbols of the given plugin with versions 47 | */ 48 | #define SND_PCM_PLUGIN_SYMBOL(name) SND_DLSYM_BUILD_VERSION(SND_PCM_PLUGIN_ENTRY(name), SND_PCM_DLSYM_VERSION); 49 | 50 | /** 51 | * Define the plugin 52 | */ 53 | #define SND_PCM_PLUGIN_DEFINE_FUNC(plugin) \ 54 | int SND_PCM_PLUGIN_ENTRY(plugin) (snd_pcm_t **pcmp, const char *name,\ 55 | snd_config_t *root, snd_config_t *conf, \ 56 | snd_pcm_stream_t stream, int mode) 57 | 58 | #include "pcm_ioplug.h" 59 | #include "pcm_extplug.h" 60 | 61 | int snd_pcm_parse_control_id(snd_config_t *conf, snd_ctl_elem_id_t *ctl_id, int *cardp, 62 | int *cchannelsp, int *hwctlp); 63 | 64 | /** \} */ 65 | 66 | #ifdef __cplusplus 67 | } 68 | #endif 69 | 70 | #endif /* __ALSA_PCM_EXTERNAL_H */ 71 | -------------------------------------------------------------------------------- /alsa/seq_midi_event.h: -------------------------------------------------------------------------------- 1 | /** 2 | * \file include/seq_midi_event.h 3 | * \brief Application interface library for the ALSA driver 4 | * \author Jaroslav Kysela 5 | * \author Abramo Bagnara 6 | * \author Takashi Iwai 7 | * \date 1998-2001 8 | * 9 | * Application interface library for the ALSA driver 10 | */ 11 | /* 12 | * This library is free software; you can redistribute it and/or modify 13 | * it under the terms of the GNU Lesser General Public License as 14 | * published by the Free Software Foundation; either version 2.1 of 15 | * the License, or (at your option) any later version. 16 | * 17 | * This program is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | * GNU Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with this library; if not, write to the Free Software 24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 | * 26 | */ 27 | 28 | #ifndef __ALSA_SEQ_MIDI_EVENT_H 29 | #define __ALSA_SEQ_MIDI_EVENT_H 30 | 31 | #ifdef __cplusplus 32 | extern "C" { 33 | #endif 34 | 35 | /** 36 | * \defgroup MIDI_Event Sequencer event <-> MIDI byte stream coder 37 | * \ingroup Sequencer 38 | * Sequencer event <-> MIDI byte stream coder 39 | * \{ 40 | */ 41 | 42 | /** container for sequencer midi event parsers */ 43 | typedef struct snd_midi_event snd_midi_event_t; 44 | 45 | int snd_midi_event_new(size_t bufsize, snd_midi_event_t **rdev); 46 | int snd_midi_event_resize_buffer(snd_midi_event_t *dev, size_t bufsize); 47 | void snd_midi_event_free(snd_midi_event_t *dev); 48 | void snd_midi_event_init(snd_midi_event_t *dev); 49 | void snd_midi_event_reset_encode(snd_midi_event_t *dev); 50 | void snd_midi_event_reset_decode(snd_midi_event_t *dev); 51 | void snd_midi_event_no_status(snd_midi_event_t *dev, int on); 52 | /* encode from byte stream - return number of written bytes if success */ 53 | long snd_midi_event_encode(snd_midi_event_t *dev, const unsigned char *buf, long count, snd_seq_event_t *ev); 54 | int snd_midi_event_encode_byte(snd_midi_event_t *dev, int c, snd_seq_event_t *ev); 55 | /* decode from event to bytes - return number of written bytes if success */ 56 | long snd_midi_event_decode(snd_midi_event_t *dev, unsigned char *buf, long count, const snd_seq_event_t *ev); 57 | 58 | /** \} */ 59 | 60 | #ifdef __cplusplus 61 | } 62 | #endif 63 | 64 | #endif /* __ALSA_SEQ_MIDI_EVENT_H */ 65 | 66 | -------------------------------------------------------------------------------- /alsa/sound/hdsp.h: -------------------------------------------------------------------------------- 1 | #ifndef __SOUND_HDSP_H 2 | #define __SOUND_HDSP_H 3 | 4 | /* 5 | * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 | */ 21 | 22 | #include 23 | 24 | #define HDSP_MATRIX_MIXER_SIZE 2048 25 | 26 | typedef enum { 27 | Digiface, 28 | Multiface, 29 | H9652, 30 | H9632, 31 | RPM, 32 | Undefined, 33 | } HDSP_IO_Type; 34 | 35 | typedef struct _snd_hdsp_peak_rms hdsp_peak_rms_t; 36 | 37 | struct _snd_hdsp_peak_rms { 38 | uint32_t input_peaks[26]; 39 | uint32_t playback_peaks[26]; 40 | uint32_t output_peaks[28]; 41 | uint64_t input_rms[26]; 42 | uint64_t playback_rms[26]; 43 | /* These are only used for H96xx cards */ 44 | uint64_t output_rms[26]; 45 | }; 46 | 47 | #define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, hdsp_peak_rms_t) 48 | 49 | typedef struct _snd_hdsp_config_info hdsp_config_info_t; 50 | 51 | struct _snd_hdsp_config_info { 52 | unsigned char pref_sync_ref; 53 | unsigned char wordclock_sync_check; 54 | unsigned char spdif_sync_check; 55 | unsigned char adatsync_sync_check; 56 | unsigned char adat_sync_check[3]; 57 | unsigned char spdif_in; 58 | unsigned char spdif_out; 59 | unsigned char spdif_professional; 60 | unsigned char spdif_emphasis; 61 | unsigned char spdif_nonaudio; 62 | unsigned int spdif_sample_rate; 63 | unsigned int system_sample_rate; 64 | unsigned int autosync_sample_rate; 65 | unsigned char system_clock_mode; 66 | unsigned char clock_source; 67 | unsigned char autosync_ref; 68 | unsigned char line_out; 69 | unsigned char passthru; 70 | unsigned char da_gain; 71 | unsigned char ad_gain; 72 | unsigned char phone_gain; 73 | unsigned char xlr_breakout_cable; 74 | unsigned char analog_extension_board; 75 | }; 76 | 77 | #define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, hdsp_config_info_t) 78 | 79 | typedef struct _snd_hdsp_firmware hdsp_firmware_t; 80 | 81 | struct _snd_hdsp_firmware { 82 | void *firmware_data; /* 24413 x 4 bytes */ 83 | }; 84 | 85 | #define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, hdsp_firmware_t) 86 | 87 | typedef struct _snd_hdsp_version hdsp_version_t; 88 | 89 | struct _snd_hdsp_version { 90 | HDSP_IO_Type io_type; 91 | unsigned short firmware_rev; 92 | }; 93 | 94 | #define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, hdsp_version_t) 95 | 96 | typedef struct _snd_hdsp_mixer hdsp_mixer_t; 97 | 98 | struct _snd_hdsp_mixer { 99 | unsigned short matrix[HDSP_MATRIX_MIXER_SIZE]; 100 | }; 101 | 102 | #define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, hdsp_mixer_t) 103 | 104 | typedef struct _snd_hdsp_9632_aeb hdsp_9632_aeb_t; 105 | 106 | struct _snd_hdsp_9632_aeb { 107 | int aebi; 108 | int aebo; 109 | }; 110 | 111 | #define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, hdsp_9632_aeb_t) 112 | 113 | #endif /* __SOUND_HDSP_H */ 114 | -------------------------------------------------------------------------------- /alsa/sound/sscape_ioctl.h: -------------------------------------------------------------------------------- 1 | #ifndef SSCAPE_IOCTL_H 2 | #define SSCAPE_IOCTL_H 3 | 4 | 5 | struct sscape_bootblock 6 | { 7 | unsigned char code[256]; 8 | unsigned version; 9 | }; 10 | 11 | #define SSCAPE_MICROCODE_SIZE 65536 12 | 13 | struct sscape_microcode 14 | { 15 | unsigned char *code; 16 | }; 17 | 18 | #define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock) 19 | #define SND_SSCAPE_LOAD_MCODE _IOW ('P', 101, struct sscape_microcode) 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /alsa/sound/type_compat.h: -------------------------------------------------------------------------------- 1 | #ifndef __TYPE_COMPAT_H 2 | #define __TYPE_COMPAT_H 3 | 4 | #ifndef DOC_HIDDEN 5 | #include 6 | typedef uint8_t __u8; 7 | typedef uint16_t __u16; 8 | typedef uint32_t __u32; 9 | typedef int8_t __s8; 10 | typedef int16_t __s16; 11 | typedef int32_t __s32; 12 | 13 | #include 14 | #include 15 | #if __BYTE_ORDER == __LITTLE_ENDIAN 16 | #define __cpu_to_le32(x) (x) 17 | #define __cpu_to_be32(x) bswap_32(x) 18 | #define __cpu_to_le16(x) (x) 19 | #define __cpu_to_be16(x) bswap_16(x) 20 | #else 21 | #define __cpu_to_le32(x) bswap_32(x) 22 | #define __cpu_to_be32(x) (x) 23 | #define __cpu_to_le16(x) bswap_16(x) 24 | #define __cpu_to_be16(x) (x) 25 | #endif 26 | 27 | #define __le32_to_cpu __cpu_to_le32 28 | #define __be32_to_cpu __cpu_to_be32 29 | #define __le16_to_cpu __cpu_to_le16 30 | #define __be16_to_cpu __cpu_to_be16 31 | 32 | #define __le64 __u64 33 | #define __le32 __u32 34 | #define __le16 __u16 35 | #define __be64 __u64 36 | #define __be32 __u32 37 | #define __be16 __u16 38 | #endif /* DOC_HIDDEN */ 39 | 40 | #endif /* __TYPE_COMPAT_H */ 41 | -------------------------------------------------------------------------------- /alsa/version.h: -------------------------------------------------------------------------------- 1 | /* 2 | * version.h 3 | */ 4 | 5 | #define SND_LIB_MAJOR 1 /**< major number of library version */ 6 | #define SND_LIB_MINOR 0 /**< minor number of library version */ 7 | #define SND_LIB_SUBMINOR 27 /**< subminor number of library version */ 8 | #define SND_LIB_EXTRAVER 1000000 /**< extra version number, used mainly for betas */ 9 | /** library version */ 10 | #define SND_LIB_VERSION ((SND_LIB_MAJOR<<16)|\ 11 | (SND_LIB_MINOR<<8)|\ 12 | SND_LIB_SUBMINOR) 13 | /** library version (string) */ 14 | #define SND_LIB_VERSION_STR "1.0.27.2" 15 | 16 | -------------------------------------------------------------------------------- /doc/GPL2J: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/doc/GPL2J -------------------------------------------------------------------------------- /doc/readme.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/doc/readme.html -------------------------------------------------------------------------------- /joypad/.joypad.ko.cmd: -------------------------------------------------------------------------------- 1 | cmd_/mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.ko := arm-fsl-linux-gnueabi-ld -EL -r -T /mnt/hgfs/b503/imax283/linux-2.6.35.3/scripts/module-common.lds --build-id -o /mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.ko /mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.o /mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.mod.o 2 | -------------------------------------------------------------------------------- /joypad/.tmp_versions/joypad.mod: -------------------------------------------------------------------------------- 1 | /mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.ko 2 | /mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.o 3 | -------------------------------------------------------------------------------- /joypad/Makefile: -------------------------------------------------------------------------------- 1 | KERN_DIR = /mnt/hgfs/b503/imax283/linux-2.6.35.3 2 | 3 | all: 4 | make -C $(KERN_DIR) M=`pwd` modules 5 | 6 | clean: 7 | make -C $(KERN_DIR) M=`pwd` modules clean 8 | rm -rf modules.order 9 | 10 | obj-m += joypad.o 11 | -------------------------------------------------------------------------------- /joypad/Module.symvers: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/joypad/Module.symvers -------------------------------------------------------------------------------- /joypad/gpio.h: -------------------------------------------------------------------------------- 1 | #ifndef GPIO_ZLG_H 2 | #define GPIO_ZLG_H 3 | 4 | enum { 5 | SET_GPIO_HIGHT = 9, 6 | SET_GPIO_LOW, 7 | GET_GPIO_VALUE, 8 | }; 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /joypad/joypad.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include <../arch/arm/mach-mx28/mx28_pins.h> 11 | #include "gpio.h" 12 | 13 | 14 | static struct class *joypad_drv_class; 15 | 16 | /** 17 | * FC手柄 bit 键位对应关系 真实手柄中有一个定时器,处理 连A 连B 18 | * 0 1 2 3 4 5 6 7 19 | * A B Select Start Up Down Left Right 20 | */ 21 | static ssize_t joypad_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) 22 | { 23 | //利用 sszie_t 返回 手柄键值 24 | //buf 是有符号无法保存 8 bit 25 | int i; 26 | ssize_t val = 0; 27 | if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA6))){ 28 | //printk(KERN_INFO "key1 pressed!\n"); 29 | val = 1<<0; //A 30 | }else{ 31 | //printk(KERN_INFO "no key pressed!\n"); 32 | } 33 | if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA5))){ 34 | //printk(KERN_INFO "key2 pressed!\n"); 35 | val = 1<<6;//LEFT 36 | } 37 | if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA4))){ 38 | //printk(KERN_INFO "key3 pressed!\n"); 39 | val = 1<<3;//start 40 | } 41 | if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_LCD_D18))){ 42 | //printk(KERN_INFO "key4 pressed!\n"); 43 | val = 1<<7;//RIGHT 44 | } 45 | if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_LCD_D17))){ 46 | //printk(KERN_INFO "key5 pressed!\n"); 47 | val = 1<<5;//UP 48 | } 49 | return val; 50 | } 51 | static struct file_operations joypad_drv_fops = { 52 | .owner = THIS_MODULE, 53 | .read = joypad_drv_read, 54 | }; 55 | 56 | int major; 57 | //注册驱动程序 58 | int joypad_drv_init(void) 59 | { 60 | printk(KERN_INFO "joypad_drv_init\n"); 61 | major = register_chrdev(0, "joypad_drv", &joypad_drv_fops); 62 | 63 | //自动创建 dev 节点 64 | joypad_drv_class = class_create(THIS_MODULE, "joypad_drv"); 65 | device_create(joypad_drv_class, NULL, MKDEV(major, 0), NULL, "joypad"); 66 | 67 | //P3.26 PINID_SAIF1_SDATA0配置为输入 68 | gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SAIF1_SDATA0)); 69 | 70 | gpio_direction_input(MXS_PIN_TO_GPIO(PINID_LCD_D17)); 71 | gpio_direction_input(MXS_PIN_TO_GPIO(PINID_LCD_D18)); 72 | gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA4)); 73 | gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA5)); 74 | gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA6)); 75 | return 0; 76 | } 77 | 78 | //卸载驱动程序 79 | void joypad_drv_exit(void) 80 | { 81 | printk(KERN_INFO "joypad_drv_exit\n"); 82 | unregister_chrdev(major, "joypad_drv"); 83 | device_destroy(joypad_drv_class, MKDEV(major, 0)); 84 | class_destroy(joypad_drv_class); 85 | } 86 | 87 | module_init(joypad_drv_init); 88 | module_exit(joypad_drv_exit); 89 | MODULE_LICENSE("GPL"); 90 | 91 | -------------------------------------------------------------------------------- /joypad/joypad.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/joypad/joypad.ko -------------------------------------------------------------------------------- /joypad/joypad.mod.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | MODULE_INFO(vermagic, VERMAGIC_STRING); 6 | 7 | struct module __this_module 8 | __attribute__((section(".gnu.linkonce.this_module"))) = { 9 | .name = KBUILD_MODNAME, 10 | .init = init_module, 11 | #ifdef CONFIG_MODULE_UNLOAD 12 | .exit = cleanup_module, 13 | #endif 14 | .arch = MODULE_ARCH_INIT, 15 | }; 16 | 17 | static const struct modversion_info ____versions[] 18 | __used 19 | __attribute__((section("__versions"))) = { 20 | { 0x405fe887, "module_layout" }, 21 | { 0x65d6d0f0, "gpio_direction_input" }, 22 | { 0x564a6735, "device_create" }, 23 | { 0x582a74ba, "__class_create" }, 24 | { 0xb40be847, "__register_chrdev" }, 25 | { 0x6c8d5ae8, "__gpio_get_value" }, 26 | { 0x42b26667, "class_destroy" }, 27 | { 0xd5c45942, "device_destroy" }, 28 | { 0x6bc3fbc0, "__unregister_chrdev" }, 29 | { 0xea147363, "printk" }, 30 | }; 31 | 32 | static const char __module_depends[] 33 | __used 34 | __attribute__((section(".modinfo"))) = 35 | "depends="; 36 | 37 | -------------------------------------------------------------------------------- /joypad/joypad.mod.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/joypad/joypad.mod.o -------------------------------------------------------------------------------- /joypad/joypad.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/joypad/joypad.o -------------------------------------------------------------------------------- /joypad/modules.order: -------------------------------------------------------------------------------- 1 | kernel//mnt/hgfs/b503/imax283/infones/arm-NES-linux/joypad/joypad.ko 2 | -------------------------------------------------------------------------------- /joypad/read.txt: -------------------------------------------------------------------------------- 1 | cd /home/yang/b503/ctools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin 2 | export PATH=$PATH:$(pwd) 3 | arm-fsl-linux-gnueabi-gcc testpad.c -o testpad 4 | -------------------------------------------------------------------------------- /joypad/testpad: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/joypad/testpad -------------------------------------------------------------------------------- /joypad/testpad.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | int main(int argc, char **argv) 7 | { 8 | int fd, val, i; 9 | fd = open("/dev/joypad", O_RDONLY); 10 | while(1) 11 | { 12 | val = read(fd, 0, 0); 13 | for(i=0; i<8; i++) 14 | { 15 | printf("%d-%d ", i, (val & 1< 2 ) 46 | { 47 | ROMBANK0 = ROMPAGE( 0 ); 48 | ROMBANK1 = ROMPAGE( 1 ); 49 | ROMBANK2 = ROMPAGE( 2 ); 50 | ROMBANK3 = ROMPAGE( 3 ); 51 | } else { 52 | ROMBANK0 = ROMPAGE( 0 ); 53 | ROMBANK1 = ROMPAGE( 1 ); 54 | ROMBANK2 = ROMPAGE( 0 ); 55 | ROMBANK3 = ROMPAGE( 1 ); 56 | } 57 | 58 | /* Set PPU Banks */ 59 | if ( NesHeader.byVRomSize > 0 ) 60 | { 61 | for ( nPage = 0; nPage < 8; ++nPage ) 62 | { 63 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 64 | } 65 | InfoNES_SetupChr(); 66 | } 67 | 68 | /* Set up wiring of the interrupt pin */ 69 | /* "DragonQuest" doesn't run if IRQ isn't made to occur in CLI */ 70 | K6502_Set_Int_Wiring( 1, 1 ); 71 | } 72 | 73 | /*-------------------------------------------------------------------*/ 74 | /* Mapper 3 Write Function */ 75 | /*-------------------------------------------------------------------*/ 76 | void Map3_Write( WORD wAddr, BYTE byData ) 77 | { 78 | DWORD dwBase; 79 | 80 | /* Set PPU Banks */ 81 | byData %= NesHeader.byVRomSize; 82 | dwBase = ( (DWORD)byData ) << 3; 83 | 84 | PPUBANK[ 0 ] = VROMPAGE( dwBase + 0 ); 85 | PPUBANK[ 1 ] = VROMPAGE( dwBase + 1 ); 86 | PPUBANK[ 2 ] = VROMPAGE( dwBase + 2 ); 87 | PPUBANK[ 3 ] = VROMPAGE( dwBase + 3 ); 88 | PPUBANK[ 4 ] = VROMPAGE( dwBase + 4 ); 89 | PPUBANK[ 5 ] = VROMPAGE( dwBase + 5 ); 90 | PPUBANK[ 6 ] = VROMPAGE( dwBase + 6 ); 91 | PPUBANK[ 7 ] = VROMPAGE( dwBase + 7 ); 92 | 93 | InfoNES_SetupChr(); 94 | } 95 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_007.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 7 (AOROM) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 7 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map7_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map7_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map7_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 7 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map7_Write( WORD wAddr, BYTE byData ) 56 | { 57 | BYTE byBank; 58 | 59 | /* Set ROM Banks */ 60 | byBank = ( byData & 0x07 ) << 2; 61 | byBank %= ( NesHeader.byRomSize << 1 ); 62 | 63 | ROMBANK0 = ROMPAGE( byBank ); 64 | ROMBANK1 = ROMPAGE( byBank + 1 ); 65 | ROMBANK2 = ROMPAGE( byBank + 2 ); 66 | ROMBANK3 = ROMPAGE( byBank + 3 ); 67 | 68 | /* Name Table Mirroring */ 69 | InfoNES_Mirroring( byData & 0x10 ? 2 : 3 ); 70 | } 71 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_008.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 8 (FFE F3xxx) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 8 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map8_Init() 11 | { 12 | int nPage; 13 | 14 | /* Initialize Mapper */ 15 | MapperInit = Map8_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map8_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 0 ); 46 | ROMBANK1 = ROMPAGE( 1 ); 47 | ROMBANK2 = ROMPAGE( 2 ); 48 | ROMBANK3 = ROMPAGE( 3 ); 49 | 50 | /* Set PPU Banks */ 51 | if ( NesHeader.byVRomSize > 0 ) 52 | { 53 | for ( nPage = 0; nPage < 8; ++nPage ) 54 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 55 | InfoNES_SetupChr(); 56 | } 57 | 58 | /* Set up wiring of the interrupt pin */ 59 | K6502_Set_Int_Wiring( 1, 1 ); 60 | } 61 | 62 | /*-------------------------------------------------------------------*/ 63 | /* Mapper 8 Write Function */ 64 | /*-------------------------------------------------------------------*/ 65 | void Map8_Write( WORD wAddr, BYTE byData ) 66 | { 67 | BYTE byPrgBank = ( byData & 0xf8 ) >> 3; 68 | BYTE byChrBank = byData & 0x07; 69 | 70 | /* Set ROM Banks */ 71 | byPrgBank <<= 1; 72 | byPrgBank %= ( NesHeader.byRomSize << 1 ); 73 | 74 | ROMBANK0 = ROMPAGE( byPrgBank + 0 ); 75 | ROMBANK1 = ROMPAGE( byPrgBank + 1 ); 76 | 77 | /* Set PPU Banks */ 78 | byChrBank <<= 3; 79 | byChrBank %= ( NesHeader.byVRomSize << 3 ); 80 | 81 | PPUBANK[ 0 ] = VROMPAGE( byChrBank + 0 ); 82 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 83 | PPUBANK[ 2 ] = VROMPAGE( byChrBank + 2 ); 84 | PPUBANK[ 3 ] = VROMPAGE( byChrBank + 3 ); 85 | PPUBANK[ 4 ] = VROMPAGE( byChrBank + 4 ); 86 | PPUBANK[ 5 ] = VROMPAGE( byChrBank + 5 ); 87 | PPUBANK[ 6 ] = VROMPAGE( byChrBank + 6 ); 88 | PPUBANK[ 7 ] = VROMPAGE( byChrBank + 7 ); 89 | InfoNES_SetupChr(); 90 | } 91 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_011.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 11 (Color Dreams) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 11 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map11_Init() 11 | { 12 | int nPage; 13 | 14 | /* Initialize Mapper */ 15 | MapperInit = Map11_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map11_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 0 ); 46 | ROMBANK1 = ROMPAGE( 1 ); 47 | ROMBANK2 = ROMPAGE( 2 ); 48 | ROMBANK3 = ROMPAGE( 3 ); 49 | 50 | /* Set PPU Banks */ 51 | if ( NesHeader.byVRomSize > 0 ) 52 | { 53 | for ( nPage = 0; nPage < 8; ++nPage ) 54 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 55 | InfoNES_SetupChr(); 56 | } 57 | 58 | /* Name Table Mirroring */ 59 | InfoNES_Mirroring( 1 ); 60 | 61 | /* Set up wiring of the interrupt pin */ 62 | K6502_Set_Int_Wiring( 1, 1 ); 63 | } 64 | 65 | /*-------------------------------------------------------------------*/ 66 | /* Mapper 11 Write Function */ 67 | /*-------------------------------------------------------------------*/ 68 | void Map11_Write( WORD wAddr, BYTE byData ) 69 | { 70 | BYTE byPrgBank = ( byData & 0x01 ) << 2; 71 | BYTE byChrBank = ( ( byData & 0x70 ) >> 4 ) << 3; 72 | 73 | /* Set ROM Banks */ 74 | ROMBANK0 = ROMPAGE( ( byPrgBank + 0 ) % ( NesHeader.byRomSize << 1 ) ); 75 | ROMBANK1 = ROMPAGE( ( byPrgBank + 1 ) % ( NesHeader.byRomSize << 1 ) ); 76 | ROMBANK2 = ROMPAGE( ( byPrgBank + 2 ) % ( NesHeader.byRomSize << 1 ) ); 77 | ROMBANK3 = ROMPAGE( ( byPrgBank + 3 ) % ( NesHeader.byRomSize << 1 ) ); 78 | 79 | /* Set PPU Banks */ 80 | PPUBANK[ 0 ] = VROMPAGE( ( byChrBank + 0 ) % ( NesHeader.byVRomSize << 3 ) ); 81 | PPUBANK[ 1 ] = VROMPAGE( ( byChrBank + 1 ) % ( NesHeader.byVRomSize << 3 ) ); 82 | PPUBANK[ 2 ] = VROMPAGE( ( byChrBank + 2 ) % ( NesHeader.byVRomSize << 3 ) ); 83 | PPUBANK[ 3 ] = VROMPAGE( ( byChrBank + 3 ) % ( NesHeader.byVRomSize << 3 ) ); 84 | PPUBANK[ 4 ] = VROMPAGE( ( byChrBank + 4 ) % ( NesHeader.byVRomSize << 3 ) ); 85 | PPUBANK[ 5 ] = VROMPAGE( ( byChrBank + 5 ) % ( NesHeader.byVRomSize << 3 ) ); 86 | PPUBANK[ 6 ] = VROMPAGE( ( byChrBank + 6 ) % ( NesHeader.byVRomSize << 3 ) ); 87 | PPUBANK[ 7 ] = VROMPAGE( ( byChrBank + 7 ) % ( NesHeader.byVRomSize << 3 ) ); 88 | InfoNES_SetupChr(); 89 | } 90 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_013.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 13 : CPROM */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 13 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map13_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map13_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map13_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | PPUBANK[ 0 ] = CRAMPAGE( 0 ); 50 | PPUBANK[ 1 ] = CRAMPAGE( 1 ); 51 | PPUBANK[ 2 ] = CRAMPAGE( 2 ); 52 | PPUBANK[ 3 ] = CRAMPAGE( 3 ); 53 | PPUBANK[ 4 ] = CRAMPAGE( 0 ); 54 | PPUBANK[ 5 ] = CRAMPAGE( 1 ); 55 | PPUBANK[ 6 ] = CRAMPAGE( 2 ); 56 | PPUBANK[ 7 ] = CRAMPAGE( 3 ); 57 | InfoNES_SetupChr(); 58 | 59 | /* Set up wiring of the interrupt pin */ 60 | K6502_Set_Int_Wiring( 1, 1 ); 61 | } 62 | 63 | /*-------------------------------------------------------------------*/ 64 | /* Mapper 13 Write Function */ 65 | /*-------------------------------------------------------------------*/ 66 | void Map13_Write( WORD wAddr, BYTE byData ) 67 | { 68 | /* Set ROM Banks */ 69 | ROMBANK0 = ROMPAGE((((byData&0x30)>>2)+0) % (NesHeader.byRomSize<<1)); 70 | ROMBANK1 = ROMPAGE((((byData&0x30)>>2)+1) % (NesHeader.byRomSize<<1)); 71 | ROMBANK2 = ROMPAGE((((byData&0x30)>>2)+2) % (NesHeader.byRomSize<<1)); 72 | ROMBANK3 = ROMPAGE((((byData&0x30)>>2)+3) % (NesHeader.byRomSize<<1)); 73 | 74 | /* Set PPU Banks */ 75 | PPUBANK[ 4 ] = CRAMPAGE(((byData&0x03)<<2)+0); 76 | PPUBANK[ 5 ] = CRAMPAGE(((byData&0x03)<<2)+1); 77 | PPUBANK[ 6 ] = CRAMPAGE(((byData&0x03)<<2)+2); 78 | PPUBANK[ 7 ] = CRAMPAGE(((byData&0x03)<<2)+3); 79 | InfoNES_SetupChr(); 80 | } 81 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_015.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 15 (100-in-1) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 15 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map15_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map15_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map15_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 15 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map15_Write( WORD wAddr, BYTE byData ) 56 | { 57 | BYTE byBank; 58 | 59 | switch ( wAddr ) 60 | { 61 | case 0x8000: 62 | /* Name Table Mirroring */ 63 | InfoNES_Mirroring( byData & 0x20 ? 0 : 1); 64 | 65 | /* Set ROM Banks */ 66 | byBank = byData & 0x1f; 67 | byBank %= ( NesHeader.byRomSize << 1 ); 68 | byBank <<= 1; 69 | 70 | ROMBANK0 = ROMPAGE( byBank ); 71 | ROMBANK1 = ROMPAGE( byBank + 1 ); 72 | ROMBANK2 = ROMPAGE( byBank + 2 ); 73 | ROMBANK3 = ROMPAGE( byBank + 3 ); 74 | break; 75 | 76 | case 0x8001: 77 | /* Set ROM Banks */ 78 | byData &= 0x3f; 79 | byData %= ( NesHeader.byRomSize << 1 ); 80 | byData <<= 1; 81 | 82 | ROMBANK2 = ROMPAGE( byData ); 83 | ROMBANK3 = ROMPAGE( byData + 1 ); 84 | break; 85 | 86 | case 0x8002: 87 | /* Set ROM Banks */ 88 | byBank = byData & 0x3f; 89 | byBank %= ( NesHeader.byRomSize << 1 ); 90 | byBank <<= 1; 91 | byBank += ( byData & 0x80 ? 1 : 0 ); 92 | 93 | ROMBANK0 = ROMPAGE( byBank ); 94 | ROMBANK1 = ROMPAGE( byBank ); 95 | ROMBANK2 = ROMPAGE( byBank ); 96 | ROMBANK3 = ROMPAGE( byBank ); 97 | break; 98 | 99 | case 0x8003: 100 | /* Name Table Mirroring */ 101 | InfoNES_Mirroring( byData & 0x20 ? 0 : 1); 102 | 103 | /* Set ROM Banks */ 104 | byData &= 0x1f; 105 | byData %= ( NesHeader.byRomSize << 1 ); 106 | byData <<= 1; 107 | 108 | ROMBANK2 = ROMPAGE( byData ); 109 | ROMBANK3 = ROMPAGE( byData + 1 ); 110 | break; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_032.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 32 (Irem G-101) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map32_Saved; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 32 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map32_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map32_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map32_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Initialize state flag */ 42 | Map32_Saved = 0x00; 43 | 44 | /* Set SRAM Banks */ 45 | SRAMBANK = SRAM; 46 | 47 | /* Set ROM Banks */ 48 | ROMBANK0 = ROMPAGE( 0 ); 49 | ROMBANK1 = ROMPAGE( 1 ); 50 | ROMBANK2 = ROMLASTPAGE( 1 ); 51 | ROMBANK3 = ROMLASTPAGE( 0 ); 52 | 53 | /* Set PPU Banks */ 54 | if ( NesHeader.byVRomSize > 0 ) 55 | { 56 | for ( int nPage = 0; nPage < 8; ++nPage ) 57 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 58 | InfoNES_SetupChr(); 59 | } 60 | 61 | /* Set up wiring of the interrupt pin */ 62 | K6502_Set_Int_Wiring( 1, 1 ); 63 | } 64 | 65 | /*-------------------------------------------------------------------*/ 66 | /* Mapper 32 Write Function */ 67 | /*-------------------------------------------------------------------*/ 68 | void Map32_Write( WORD wAddr, BYTE byData ) 69 | { 70 | switch ( wAddr & 0xf000 ) 71 | { 72 | case 0x8000: 73 | /* Set ROM Banks */ 74 | byData %= ( NesHeader.byRomSize << 1 ); 75 | 76 | if ( Map32_Saved & 0x02 ) 77 | { 78 | ROMBANK2 = ROMPAGE( byData ); 79 | } else { 80 | ROMBANK0 = ROMPAGE( byData ); 81 | } 82 | break; 83 | 84 | case 0x9000: 85 | Map32_Saved = byData; 86 | 87 | // Name Table Mirroring 88 | InfoNES_Mirroring( byData & 0x01 ); 89 | break; 90 | 91 | case 0xa000: 92 | /* Set ROM Banks */ 93 | byData %= ( NesHeader.byRomSize << 1 ); 94 | ROMBANK1 = ROMPAGE( byData ); 95 | break; 96 | 97 | case 0xb000: 98 | /* Set PPU Banks */ 99 | byData %= ( NesHeader.byVRomSize << 3 ); 100 | PPUBANK[ wAddr & 0x0007 ] = VROMPAGE( byData ); 101 | InfoNES_SetupChr(); 102 | break; 103 | 104 | default: 105 | break; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_040.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 40 (SMB2J) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map40_IRQ_Enable; 8 | DWORD Map40_Line_To_IRQ; 9 | 10 | /*-------------------------------------------------------------------*/ 11 | /* Initialize Mapper 40 */ 12 | /*-------------------------------------------------------------------*/ 13 | void Map40_Init() 14 | { 15 | /* Initialize Mapper */ 16 | MapperInit = Map40_Init; 17 | 18 | /* Write to Mapper */ 19 | MapperWrite = Map40_Write; 20 | 21 | /* Write to SRAM */ 22 | MapperSram = Map0_Sram; 23 | 24 | /* Write to APU */ 25 | MapperApu = Map0_Apu; 26 | 27 | /* Read from APU */ 28 | MapperReadApu = Map0_ReadApu; 29 | 30 | /* Callback at VSync */ 31 | MapperVSync = Map0_VSync; 32 | 33 | /* Callback at HSync */ 34 | MapperHSync = Map40_HSync; 35 | 36 | /* Callback at PPU */ 37 | MapperPPU = Map0_PPU; 38 | 39 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 40 | MapperRenderScreen = Map0_RenderScreen; 41 | 42 | /* Set SRAM Banks */ 43 | SRAMBANK = ROMPAGE( 6 ); 44 | 45 | /* Initialize IRQ Registers */ 46 | Map40_IRQ_Enable = 0; 47 | Map40_Line_To_IRQ = 0; 48 | 49 | /* Set ROM Banks */ 50 | ROMBANK0 = ROMPAGE( 4 ); 51 | ROMBANK1 = ROMPAGE( 5 ); 52 | ROMBANK2 = ROMPAGE( 0 ); 53 | ROMBANK3 = ROMPAGE( 7 ); 54 | 55 | /* Set PPU Banks */ 56 | if ( NesHeader.byVRomSize > 0 ) 57 | { 58 | for ( int nPage = 0; nPage < 8; ++nPage ) 59 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 60 | InfoNES_SetupChr(); 61 | } 62 | 63 | /* Set up wiring of the interrupt pin */ 64 | K6502_Set_Int_Wiring( 1, 1 ); 65 | } 66 | 67 | /*-------------------------------------------------------------------*/ 68 | /* Mapper 40 Write Function */ 69 | /*-------------------------------------------------------------------*/ 70 | void Map40_Write( WORD wAddr, BYTE byData ) 71 | { 72 | switch ( wAddr & 0xe000 ) 73 | { 74 | case 0x8000: 75 | Map40_IRQ_Enable = 0; 76 | break; 77 | 78 | case 0xa000: 79 | Map40_IRQ_Enable = 1; 80 | Map40_Line_To_IRQ = 37; 81 | break; 82 | 83 | case 0xc000: 84 | break; 85 | 86 | case 0xe000: 87 | /* Set ROM Banks */ 88 | ROMBANK2 = ROMPAGE ( ( byData & 0x07 ) % ( NesHeader.byRomSize << 1 ) ); 89 | break; 90 | } 91 | } 92 | 93 | /*-------------------------------------------------------------------*/ 94 | /* Mapper 40 H-Sync Function */ 95 | /*-------------------------------------------------------------------*/ 96 | void Map40_HSync() 97 | { 98 | /* 99 | * Callback at HSync 100 | * 101 | */ 102 | if ( Map40_IRQ_Enable ) 103 | { 104 | if ( ( --Map40_Line_To_IRQ ) <= 0 ) 105 | { 106 | IRQ_REQ; 107 | } 108 | } 109 | } 110 | 111 | /* End of InfoNES_Mapper_40.cpp */ 112 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_042.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 42 (Pirates) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map42_IRQ_Cnt; 8 | BYTE Map42_IRQ_Enable; 9 | 10 | /*-------------------------------------------------------------------*/ 11 | /* Initialize Mapper 42 */ 12 | /*-------------------------------------------------------------------*/ 13 | void Map42_Init() 14 | { 15 | /* Initialize Mapper */ 16 | MapperInit = Map42_Init; 17 | 18 | /* Write to Mapper */ 19 | MapperWrite = Map42_Write; 20 | 21 | /* Write to SRAM */ 22 | MapperSram = Map0_Sram; 23 | 24 | /* Write to APU */ 25 | MapperApu = Map0_Apu; 26 | 27 | /* Read from APU */ 28 | MapperReadApu = Map0_ReadApu; 29 | 30 | /* Callback at VSync */ 31 | MapperVSync = Map0_VSync; 32 | 33 | /* Callback at HSync */ 34 | MapperHSync = Map42_HSync; 35 | 36 | /* Callback at PPU */ 37 | MapperPPU = Map0_PPU; 38 | 39 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 40 | MapperRenderScreen = Map0_RenderScreen; 41 | 42 | /* Set SRAM Banks */ 43 | SRAMBANK = ROMPAGE( 0 ); 44 | 45 | /* Set ROM Banks */ 46 | ROMBANK0 = ROMLASTPAGE( 3 ); 47 | ROMBANK1 = ROMLASTPAGE( 2 ); 48 | ROMBANK2 = ROMLASTPAGE( 1 ); 49 | ROMBANK3 = ROMLASTPAGE( 0 ); 50 | 51 | /* Set PPU Banks */ 52 | if ( NesHeader.byVRomSize > 0 ) 53 | { 54 | for ( int nPage = 0; nPage < 8; ++nPage ) 55 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 56 | InfoNES_SetupChr(); 57 | } 58 | 59 | /* Set up wiring of the interrupt pin */ 60 | K6502_Set_Int_Wiring( 1, 1 ); 61 | } 62 | 63 | /*-------------------------------------------------------------------*/ 64 | /* Mapper 42 Write Function */ 65 | /*-------------------------------------------------------------------*/ 66 | void Map42_Write( WORD wAddr, BYTE byData ) 67 | { 68 | switch ( wAddr & 0xe003 ) 69 | { 70 | /* Set ROM Banks */ 71 | case 0xe000: 72 | SRAMBANK = ROMPAGE( ( byData & 0x0f ) % ( NesHeader.byRomSize << 1 ) ); 73 | break; 74 | 75 | case 0xe001: 76 | if ( byData & 0x08 ) 77 | { 78 | InfoNES_Mirroring( 0 ); 79 | } else { 80 | InfoNES_Mirroring( 1 ); 81 | } 82 | break; 83 | 84 | case 0xe002: 85 | if ( byData & 0x02 ) 86 | { 87 | Map42_IRQ_Enable = 1; 88 | } else { 89 | Map42_IRQ_Enable = 0; 90 | Map42_IRQ_Cnt = 0; 91 | } 92 | break; 93 | } 94 | } 95 | 96 | /*-------------------------------------------------------------------*/ 97 | /* Mapper 42 H-Sync Function */ 98 | /*-------------------------------------------------------------------*/ 99 | void Map42_HSync() 100 | { 101 | /* 102 | * Callback at HSync 103 | * 104 | */ 105 | if ( Map42_IRQ_Enable ) 106 | { 107 | if ( Map42_IRQ_Cnt < 215 ) 108 | { 109 | Map42_IRQ_Cnt++; 110 | } 111 | if ( Map42_IRQ_Cnt == 215 ) 112 | { 113 | IRQ_REQ; 114 | Map42_IRQ_Enable = 0; 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_050.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 50 (Pirates) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map50_IRQ_Enable; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 50 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map50_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map50_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map0_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map50_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map50_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = ROMPAGE( 15 % ( NesHeader.byRomSize << 1 ) ); 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 8 % ( NesHeader.byRomSize << 1 ) ); 46 | ROMBANK1 = ROMPAGE( 9 % ( NesHeader.byRomSize << 1 ) ); 47 | ROMBANK2 = ROMPAGE( 0 % ( NesHeader.byRomSize << 1 ) ); 48 | ROMBANK3 = ROMPAGE( 11 % ( NesHeader.byRomSize << 1 ) ); 49 | 50 | /* Set PPU Banks */ 51 | if ( NesHeader.byVRomSize > 0 ) 52 | { 53 | for ( int nPage = 0; nPage < 8; ++nPage ) 54 | { 55 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 56 | } 57 | InfoNES_SetupChr(); 58 | } 59 | 60 | /* Initialize IRQ Registers */ 61 | Map50_IRQ_Enable = 0; 62 | 63 | /* Set up wiring of the interrupt pin */ 64 | K6502_Set_Int_Wiring( 1, 1 ); 65 | } 66 | 67 | /*-------------------------------------------------------------------*/ 68 | /* Mapper 50 Write to Apu Function */ 69 | /*-------------------------------------------------------------------*/ 70 | void Map50_Apu( WORD wAddr, BYTE byData ) 71 | { 72 | if ( ( wAddr & 0xE060 ) == 0x4020 ) 73 | { 74 | if( wAddr & 0x0100 ) 75 | { 76 | Map50_IRQ_Enable = byData & 0x01; 77 | } 78 | else 79 | { 80 | BYTE byDummy; 81 | 82 | byDummy = ( byData & 0x08 ) | ( ( byData & 0x01 ) << 2 ) | ( ( byData & 0x06 ) >> 1 ); 83 | ROMBANK2 = ROMPAGE( byDummy % ( NesHeader.byRomSize << 1 ) ); 84 | } 85 | } 86 | } 87 | 88 | /*-------------------------------------------------------------------*/ 89 | /* Mapper 50 H-Sync Function */ 90 | /*-------------------------------------------------------------------*/ 91 | void Map50_HSync() 92 | { 93 | /* 94 | * Callback at HSync 95 | * 96 | */ 97 | if ( Map50_IRQ_Enable ) 98 | { 99 | if ( PPU_Scanline == 21 ) 100 | { 101 | IRQ_REQ; 102 | } 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_058.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 58 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 58 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map58_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map58_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map58_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 0 ); 46 | ROMBANK3 = ROMPAGE( 1 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 58 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map58_Write( WORD wAddr, BYTE byData ) 63 | { 64 | if( wAddr & 0x40 ) { 65 | ROMBANK0 = ROMPAGE((((wAddr&0x07)<<1)+0) % (NesHeader.byRomSize<<1)); 66 | ROMBANK1 = ROMPAGE((((wAddr&0x07)<<1)+1) % (NesHeader.byRomSize<<1)); 67 | ROMBANK2 = ROMPAGE((((wAddr&0x07)<<1)+0) % (NesHeader.byRomSize<<1)); 68 | ROMBANK3 = ROMPAGE((((wAddr&0x07)<<1)+1) % (NesHeader.byRomSize<<1)); 69 | } else { 70 | ROMBANK0 = ROMPAGE((((wAddr&0x06)<<1)+0) % (NesHeader.byRomSize<<1)); 71 | ROMBANK1 = ROMPAGE((((wAddr&0x06)<<1)+1) % (NesHeader.byRomSize<<1)); 72 | ROMBANK2 = ROMPAGE((((wAddr&0x06)<<1)+2) % (NesHeader.byRomSize<<1)); 73 | ROMBANK3 = ROMPAGE((((wAddr&0x06)<<1)+3) % (NesHeader.byRomSize<<1)); 74 | } 75 | 76 | if ( NesHeader.byVRomSize > 0 ) { 77 | PPUBANK[ 0 ] = VROMPAGE(((wAddr&0x38)+0) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[ 1 ] = VROMPAGE(((wAddr&0x38)+1) % (NesHeader.byVRomSize<<3)); 79 | PPUBANK[ 2 ] = VROMPAGE(((wAddr&0x38)+2) % (NesHeader.byVRomSize<<3)); 80 | PPUBANK[ 3 ] = VROMPAGE(((wAddr&0x38)+3) % (NesHeader.byVRomSize<<3)); 81 | PPUBANK[ 4 ] = VROMPAGE(((wAddr&0x38)+4) % (NesHeader.byVRomSize<<3)); 82 | PPUBANK[ 5 ] = VROMPAGE(((wAddr&0x38)+5) % (NesHeader.byVRomSize<<3)); 83 | PPUBANK[ 6 ] = VROMPAGE(((wAddr&0x38)+6) % (NesHeader.byVRomSize<<3)); 84 | PPUBANK[ 7 ] = VROMPAGE(((wAddr&0x38)+7) % (NesHeader.byVRomSize<<3)); 85 | InfoNES_SetupChr(); 86 | } 87 | 88 | if( byData & 0x02 ) InfoNES_Mirroring( 1 ); 89 | else InfoNES_Mirroring( 0 ); 90 | } 91 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_060.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 60 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 60 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map60_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map60_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map60_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 60 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map60_Write( WORD wAddr, BYTE byData ) 63 | { 64 | if( wAddr & 0x80 ) { 65 | ROMBANK0 = ROMPAGE((((wAddr&0x70)>>3)+0) % (NesHeader.byRomSize<<1)); 66 | ROMBANK1 = ROMPAGE((((wAddr&0x70)>>3)+1) % (NesHeader.byRomSize<<1)); 67 | ROMBANK2 = ROMPAGE((((wAddr&0x70)>>3)+0) % (NesHeader.byRomSize<<1)); 68 | ROMBANK3 = ROMPAGE((((wAddr&0x70)>>3)+1) % (NesHeader.byRomSize<<1)); 69 | } else { 70 | ROMBANK0 = ROMPAGE((((wAddr&0x70)>>3)+0) % (NesHeader.byRomSize<<1)); 71 | ROMBANK1 = ROMPAGE((((wAddr&0x70)>>3)+1) % (NesHeader.byRomSize<<1)); 72 | ROMBANK2 = ROMPAGE((((wAddr&0x70)>>3)+2) % (NesHeader.byRomSize<<1)); 73 | ROMBANK3 = ROMPAGE((((wAddr&0x70)>>3)+3) % (NesHeader.byRomSize<<1)); 74 | } 75 | 76 | 77 | PPUBANK[ 0 ] = VROMPAGE((((wAddr&0x07)<<3)+0) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[ 1 ] = VROMPAGE((((wAddr&0x07)<<3)+1) % (NesHeader.byVRomSize<<3)); 79 | PPUBANK[ 2 ] = VROMPAGE((((wAddr&0x07)<<3)+2) % (NesHeader.byVRomSize<<3)); 80 | PPUBANK[ 3 ] = VROMPAGE((((wAddr&0x07)<<3)+3) % (NesHeader.byVRomSize<<3)); 81 | PPUBANK[ 4 ] = VROMPAGE((((wAddr&0x07)<<3)+4) % (NesHeader.byVRomSize<<3)); 82 | PPUBANK[ 5 ] = VROMPAGE((((wAddr&0x07)<<3)+5) % (NesHeader.byVRomSize<<3)); 83 | PPUBANK[ 6 ] = VROMPAGE((((wAddr&0x07)<<3)+6) % (NesHeader.byVRomSize<<3)); 84 | PPUBANK[ 7 ] = VROMPAGE((((wAddr&0x07)<<3)+7) % (NesHeader.byVRomSize<<3)); 85 | InfoNES_SetupChr(); 86 | 87 | if( byData & 0x08 ) InfoNES_Mirroring( 0 ); 88 | else InfoNES_Mirroring( 1 ); 89 | } 90 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_061.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 61 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 61 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map61_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map61_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map61_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 61 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map61_Write( WORD wAddr, BYTE byData ) 56 | { 57 | BYTE byBank; 58 | 59 | switch( wAddr & 0x30 ) { 60 | case 0x00: 61 | case 0x30: 62 | ROMBANK0 = ROMPAGE((((wAddr&0x0F)<<2)+0) % (NesHeader.byRomSize<<1)); 63 | ROMBANK1 = ROMPAGE((((wAddr&0x0F)<<2)+1) % (NesHeader.byRomSize<<1)); 64 | ROMBANK2 = ROMPAGE((((wAddr&0x0F)<<2)+2) % (NesHeader.byRomSize<<1)); 65 | ROMBANK3 = ROMPAGE((((wAddr&0x0F)<<2)+3) % (NesHeader.byRomSize<<1)); 66 | break; 67 | case 0x10: 68 | case 0x20: 69 | byBank = ((wAddr & 0x0F)<<1)|((wAddr&0x20)>>4); 70 | 71 | ROMBANK0 = ROMPAGE(((byBank<<1)+0) % (NesHeader.byRomSize<<1)); 72 | ROMBANK1 = ROMPAGE(((byBank<<1)+1) % (NesHeader.byRomSize<<1)); 73 | ROMBANK2 = ROMPAGE(((byBank<<1)+0) % (NesHeader.byRomSize<<1)); 74 | ROMBANK3 = ROMPAGE(((byBank<<1)+1) % (NesHeader.byRomSize<<1)); 75 | break; 76 | } 77 | 78 | if( wAddr & 0x80 ) InfoNES_Mirroring( 0 ); 79 | else InfoNES_Mirroring( 1 ); 80 | } 81 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_062.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 62 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 62 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map62_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map62_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map62_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 62 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map62_Write( WORD wAddr, BYTE byData ) 63 | { 64 | switch( wAddr & 0xFF00 ) { 65 | case 0x8100: 66 | ROMBANK0 = ROMPAGE((byData+0) % (NesHeader.byRomSize<<1)); 67 | ROMBANK1 = ROMPAGE((byData+1) % (NesHeader.byRomSize<<1)); 68 | break; 69 | case 0x8500: 70 | ROMBANK0 = ROMPAGE(byData % (NesHeader.byRomSize<<1)); 71 | break; 72 | case 0x8700: 73 | ROMBANK1 = ROMPAGE(byData % (NesHeader.byRomSize<<1)); 74 | break; 75 | 76 | default: 77 | PPUBANK[ 0 ] = VROMPAGE((byData+0) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[ 1 ] = VROMPAGE((byData+1) % (NesHeader.byVRomSize<<3)); 79 | PPUBANK[ 2 ] = VROMPAGE((byData+2) % (NesHeader.byVRomSize<<3)); 80 | PPUBANK[ 3 ] = VROMPAGE((byData+3) % (NesHeader.byVRomSize<<3)); 81 | PPUBANK[ 4 ] = VROMPAGE((byData+4) % (NesHeader.byVRomSize<<3)); 82 | PPUBANK[ 5 ] = VROMPAGE((byData+5) % (NesHeader.byVRomSize<<3)); 83 | PPUBANK[ 6 ] = VROMPAGE((byData+6) % (NesHeader.byVRomSize<<3)); 84 | PPUBANK[ 7 ] = VROMPAGE((byData+7) % (NesHeader.byVRomSize<<3)); 85 | InfoNES_SetupChr(); 86 | break; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_066.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 66 (GNROM) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 66 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map66_Init() 11 | { 12 | int nPage; 13 | 14 | /* Initialize Mapper */ 15 | MapperInit = Map66_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map66_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map66_Write; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 0 ); 46 | ROMBANK1 = ROMPAGE( 1 ); 47 | ROMBANK2 = ROMPAGE( 2 ); 48 | ROMBANK3 = ROMPAGE( 3 ); 49 | 50 | /* Set PPU Banks */ 51 | if ( NesHeader.byVRomSize > 0 ) 52 | { 53 | for ( nPage = 0; nPage < 8; ++nPage ) 54 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 55 | InfoNES_SetupChr(); 56 | } 57 | 58 | /* Set up wiring of the interrupt pin */ 59 | K6502_Set_Int_Wiring( 1, 0 ); 60 | } 61 | 62 | /*-------------------------------------------------------------------*/ 63 | /* Mapper 66 Write Function */ 64 | /*-------------------------------------------------------------------*/ 65 | void Map66_Write( WORD wAddr, BYTE byData ) 66 | { 67 | BYTE byRom; 68 | BYTE byVRom; 69 | 70 | byRom = ( byData >> 4 ) & 0x0F; 71 | byVRom = byData & 0x0F; 72 | 73 | /* Set ROM Banks */ 74 | byRom <<= 1; 75 | byRom %= NesHeader.byRomSize; 76 | byRom <<= 1; 77 | 78 | ROMBANK0 = ROMPAGE( byRom ); 79 | ROMBANK1 = ROMPAGE( byRom + 1 ); 80 | ROMBANK2 = ROMPAGE( byRom + 2 ); 81 | ROMBANK3 = ROMPAGE( byRom + 3 ); 82 | 83 | /* Set PPU Banks */ 84 | byVRom <<= 3; 85 | byVRom %= ( NesHeader.byVRomSize << 3 ); 86 | 87 | PPUBANK[ 0 ] = VROMPAGE( byVRom ); 88 | PPUBANK[ 1 ] = VROMPAGE( byVRom + 1 ); 89 | PPUBANK[ 2 ] = VROMPAGE( byVRom + 2 ); 90 | PPUBANK[ 3 ] = VROMPAGE( byVRom + 3 ); 91 | PPUBANK[ 4 ] = VROMPAGE( byVRom + 4 ); 92 | PPUBANK[ 5 ] = VROMPAGE( byVRom + 5 ); 93 | PPUBANK[ 6 ] = VROMPAGE( byVRom + 6 ); 94 | PPUBANK[ 7 ] = VROMPAGE( byVRom + 7 ); 95 | InfoNES_SetupChr(); 96 | } 97 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_070.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 70 (74161/32 Bandai) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 70 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map70_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map70_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map70_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 70 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map70_Write( WORD wAddr, BYTE byData ) 56 | { 57 | BYTE byChrBank = byData & 0x0f; 58 | BYTE byPrgBank = ( byData & 0x70 ) >> 4; 59 | 60 | /* Set ROM Banks */ 61 | byPrgBank <<= 1; 62 | byPrgBank %= ( NesHeader.byRomSize << 1 ); 63 | 64 | ROMBANK0 = ROMPAGE( byPrgBank ); 65 | ROMBANK1 = ROMPAGE( byPrgBank + 1 ); 66 | 67 | /* Set PPU Banks */ 68 | byChrBank <<= 3; 69 | byChrBank %= ( NesHeader.byVRomSize << 3 ); 70 | 71 | PPUBANK[ 0 ] = VROMPAGE( byChrBank + 0 ); 72 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 73 | PPUBANK[ 2 ] = VROMPAGE( byChrBank + 2 ); 74 | PPUBANK[ 3 ] = VROMPAGE( byChrBank + 3 ); 75 | PPUBANK[ 4 ] = VROMPAGE( byChrBank + 4 ); 76 | PPUBANK[ 5 ] = VROMPAGE( byChrBank + 5 ); 77 | PPUBANK[ 6 ] = VROMPAGE( byChrBank + 6 ); 78 | PPUBANK[ 7 ] = VROMPAGE( byChrBank + 7 ); 79 | InfoNES_SetupChr(); 80 | 81 | /* Name Table Mirroring */ 82 | if ( byData & 0x80 ) 83 | { 84 | InfoNES_Mirroring( 2 ); 85 | } else { 86 | InfoNES_Mirroring( 3 ); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_071.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 71 (Camerica Custom Mapper) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 71 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map71_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map71_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map71_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 71 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map71_Write( WORD wAddr, BYTE byData ) 56 | { 57 | switch ( wAddr & 0xf000 ) 58 | { 59 | case 0x9000: 60 | if ( byData & 0x10 ) 61 | { 62 | InfoNES_Mirroring( 2 ); 63 | } else { 64 | InfoNES_Mirroring( 3 ); 65 | } 66 | break; 67 | 68 | /* Set ROM Banks */ 69 | case 0xc000: 70 | case 0xd000: 71 | case 0xe000: 72 | case 0xf000: 73 | ROMBANK0 = ROMPAGE( ( ( byData << 1 ) + 0 ) % ( NesHeader.byRomSize << 1 ) ); 74 | ROMBANK1 = ROMPAGE( ( ( byData << 1 ) + 1 ) % ( NesHeader.byRomSize << 1 ) ); 75 | break; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_072.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 72 (Jaleco Early Mapper #0) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 72 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map72_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map72_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map72_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 72 Write Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map72_Write( WORD wAddr, BYTE byData ) 64 | { 65 | BYTE byBank = byData & 0x0f; 66 | 67 | if ( byData & 0x80 ) 68 | { 69 | /* Set ROM Banks */ 70 | byBank <<= 1; 71 | byBank %= ( NesHeader.byRomSize << 1 ); 72 | ROMBANK0 = ROMPAGE( byBank ); 73 | ROMBANK1 = ROMPAGE( byBank + 1 ); 74 | } else 75 | if ( byData & 0x40 ) 76 | { 77 | /* Set PPU Banks */ 78 | byBank <<= 3; 79 | byBank %= ( NesHeader.byVRomSize << 3 ); 80 | PPUBANK[ 0 ] = VROMPAGE( byBank ); 81 | PPUBANK[ 1 ] = VROMPAGE( byBank + 1 ); 82 | PPUBANK[ 2 ] = VROMPAGE( byBank + 2 ); 83 | PPUBANK[ 3 ] = VROMPAGE( byBank + 3 ); 84 | PPUBANK[ 4 ] = VROMPAGE( byBank + 4 ); 85 | PPUBANK[ 5 ] = VROMPAGE( byBank + 5 ); 86 | PPUBANK[ 6 ] = VROMPAGE( byBank + 6 ); 87 | PPUBANK[ 7 ] = VROMPAGE( byBank + 7 ); 88 | InfoNES_SetupChr(); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_077.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 77 (Irem Early Mapper #0) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 77 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map77_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map77_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map77_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* VRAM Write Enabled */ 49 | byVramWriteEnable = 1; 50 | 51 | /* Set up wiring of the interrupt pin */ 52 | K6502_Set_Int_Wiring( 1, 1 ); 53 | } 54 | 55 | /*-------------------------------------------------------------------*/ 56 | /* Mapper 77 Write Function */ 57 | /*-------------------------------------------------------------------*/ 58 | void Map77_Write( WORD wAddr, BYTE byData ) 59 | { 60 | BYTE byRomBank = byData & 0x07; 61 | BYTE byChrBank = ( byData & 0xf0 ) >> 4; 62 | 63 | /* Set ROM Banks */ 64 | byRomBank <<= 2; 65 | byRomBank %= ( NesHeader.byRomSize << 1 ); 66 | 67 | ROMBANK0 = ROMPAGE( byRomBank ); 68 | ROMBANK1 = ROMPAGE( byRomBank + 1 ); 69 | ROMBANK2 = ROMPAGE( byRomBank + 2 ); 70 | ROMBANK3 = ROMPAGE( byRomBank + 3 ); 71 | 72 | /* Set PPU Banks */ 73 | byChrBank <<= 1; 74 | byChrBank %= ( NesHeader.byVRomSize << 3 ); 75 | 76 | PPUBANK[ 0 ] = VROMPAGE( byChrBank ); 77 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 78 | InfoNES_SetupChr(); 79 | } 80 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_078.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 78 (74161/32 Irem) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 78 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map78_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map78_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map78_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 78 Write Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map78_Write( WORD wAddr, BYTE byData ) 64 | { 65 | BYTE byPrgBank = byData & 0x0f; 66 | BYTE byChrBank = ( byData & 0xf0 ) >> 4; 67 | 68 | /* Set ROM Banks */ 69 | byPrgBank <<= 1; 70 | byPrgBank %= ( NesHeader.byRomSize << 1 ); 71 | ROMBANK0 = ROMPAGE( byPrgBank ); 72 | ROMBANK1 = ROMPAGE( byPrgBank + 1); 73 | 74 | /* Set PPU Banks */ 75 | byChrBank <<= 3; 76 | byChrBank %= ( NesHeader.byVRomSize << 3 ); 77 | PPUBANK[ 0 ] = VROMPAGE( byChrBank ); 78 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 79 | PPUBANK[ 2 ] = VROMPAGE( byChrBank + 2 ); 80 | PPUBANK[ 3 ] = VROMPAGE( byChrBank + 3 ); 81 | PPUBANK[ 4 ] = VROMPAGE( byChrBank + 4 ); 82 | PPUBANK[ 5 ] = VROMPAGE( byChrBank + 5 ); 83 | PPUBANK[ 6 ] = VROMPAGE( byChrBank + 6 ); 84 | PPUBANK[ 7 ] = VROMPAGE( byChrBank + 7 ); 85 | InfoNES_SetupChr(); 86 | 87 | /* Set Name Table Mirroring */ 88 | if ( ( wAddr & 0xfe00 ) != 0xfe00 ) 89 | { 90 | if ( byData & 0x08 ) 91 | { 92 | InfoNES_Mirroring( 2 ); 93 | } else { 94 | InfoNES_Mirroring( 3 ); 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_079.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 79 (American Video Entertainment/Sachen Custom Mapper) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 79 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map79_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map79_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map79_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 79 Write to Apu Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map79_Apu( WORD wAddr, BYTE byData ) 64 | { 65 | BYTE byPrgBank = ( byData & 0x08 ) >> 3; 66 | BYTE byChrBank = byData & 0x07; 67 | 68 | /* Set ROM Banks */ 69 | byPrgBank <<= 2; 70 | byPrgBank %= ( NesHeader.byRomSize << 1 ); 71 | 72 | ROMBANK0 = ROMPAGE( byPrgBank + 0 ); 73 | ROMBANK1 = ROMPAGE( byPrgBank + 1 ); 74 | ROMBANK2 = ROMPAGE( byPrgBank + 2 ); 75 | ROMBANK3 = ROMPAGE( byPrgBank + 3 ); 76 | 77 | /* Set PPU Banks */ 78 | byChrBank <<= 3; 79 | byChrBank %= ( NesHeader.byVRomSize << 3 ); 80 | 81 | PPUBANK[ 0 ] = VROMPAGE( byChrBank + 0 ); 82 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 83 | PPUBANK[ 2 ] = VROMPAGE( byChrBank + 2 ); 84 | PPUBANK[ 3 ] = VROMPAGE( byChrBank + 3 ); 85 | PPUBANK[ 4 ] = VROMPAGE( byChrBank + 4 ); 86 | PPUBANK[ 5 ] = VROMPAGE( byChrBank + 5 ); 87 | PPUBANK[ 6 ] = VROMPAGE( byChrBank + 6 ); 88 | PPUBANK[ 7 ] = VROMPAGE( byChrBank + 7 ); 89 | InfoNES_SetupChr(); 90 | } 91 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_086.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 86 (Jaleco) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 86 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map86_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map86_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map86_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 86 Write to Sram Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map86_Sram( WORD wAddr, BYTE byData ) 64 | { 65 | BYTE byChrBank; 66 | BYTE byPrgBank; 67 | 68 | switch ( wAddr ) 69 | { 70 | case 0x6000: 71 | byChrBank = byData & 0x03 | ( byData & 0x40 ) >> 4; 72 | byPrgBank = ( byData & 0x30 ) >> 4; 73 | 74 | byPrgBank = ( byPrgBank << 2 ) % ( NesHeader.byRomSize << 1 ); 75 | byChrBank = ( byChrBank << 3 ) % ( NesHeader.byVRomSize << 3 ); 76 | 77 | /* Set ROM Banks */ 78 | ROMBANK0 = ROMPAGE( byPrgBank + 0 ); 79 | ROMBANK1 = ROMPAGE( byPrgBank + 1 ); 80 | ROMBANK2 = ROMPAGE( byPrgBank + 2 ); 81 | ROMBANK3 = ROMPAGE( byPrgBank + 3 ); 82 | 83 | /* Set PPU Banks */ 84 | PPUBANK[ 0 ] = VROMPAGE( byChrBank + 0 ); 85 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 86 | PPUBANK[ 2 ] = VROMPAGE( byChrBank + 2 ); 87 | PPUBANK[ 3 ] = VROMPAGE( byChrBank + 3 ); 88 | PPUBANK[ 4 ] = VROMPAGE( byChrBank + 4 ); 89 | PPUBANK[ 5 ] = VROMPAGE( byChrBank + 5 ); 90 | PPUBANK[ 6 ] = VROMPAGE( byChrBank + 6 ); 91 | PPUBANK[ 7 ] = VROMPAGE( byChrBank + 7 ); 92 | InfoNES_SetupChr(); 93 | break; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_087.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 87 (74161/32) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 87 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map87_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map87_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map87_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 87 Write to SRAM Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map87_Sram( WORD wAddr, BYTE byData ) 64 | { 65 | BYTE byChrBank; 66 | 67 | switch ( wAddr ) 68 | { 69 | case 0x6000: 70 | byChrBank = ( byData & 0x02 ) >> 1; 71 | byChrBank <<= 3; 72 | byChrBank %= ( NesHeader.byVRomSize << 3 ); 73 | 74 | PPUBANK[ 0 ] = VROMPAGE( byChrBank + 0 ); 75 | PPUBANK[ 1 ] = VROMPAGE( byChrBank + 1 ); 76 | PPUBANK[ 2 ] = VROMPAGE( byChrBank + 2 ); 77 | PPUBANK[ 3 ] = VROMPAGE( byChrBank + 3 ); 78 | PPUBANK[ 4 ] = VROMPAGE( byChrBank + 4 ); 79 | PPUBANK[ 5 ] = VROMPAGE( byChrBank + 5 ); 80 | PPUBANK[ 6 ] = VROMPAGE( byChrBank + 6 ); 81 | PPUBANK[ 7 ] = VROMPAGE( byChrBank + 7 ); 82 | InfoNES_SetupChr(); 83 | break; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_089.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 89 (Sunsoft) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 89 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map89_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map89_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map89_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | 54 | InfoNES_SetupChr(); 55 | } 56 | 57 | /* Set up wiring of the interrupt pin */ 58 | K6502_Set_Int_Wiring( 1, 1 ); 59 | } 60 | 61 | /*-------------------------------------------------------------------*/ 62 | /* Mapper 89 Write Function */ 63 | /*-------------------------------------------------------------------*/ 64 | void Map89_Write( WORD wAddr, BYTE byData ) 65 | { 66 | if ( ( wAddr & 0xFF00 ) == 0xC000 ) 67 | { 68 | BYTE byPrgBank = (byData & 0x70) >> 4; 69 | BYTE byChrBank = ((byData & 0x80) >> 4) | (byData & 0x07); 70 | 71 | /* Set ROM Banks */ 72 | ROMBANK0 = ROMPAGE( (byPrgBank*2+0) % (NesHeader.byRomSize << 1) ); 73 | ROMBANK1 = ROMPAGE( (byPrgBank*2+1) % (NesHeader.byRomSize << 1) ); 74 | 75 | PPUBANK[ 0 ] = VROMPAGE( (byChrBank*8+0) % (NesHeader.byVRomSize << 3) ); 76 | PPUBANK[ 1 ] = VROMPAGE( (byChrBank*8+1) % (NesHeader.byVRomSize << 3) ); 77 | PPUBANK[ 2 ] = VROMPAGE( (byChrBank*8+2) % (NesHeader.byVRomSize << 3) ); 78 | PPUBANK[ 3 ] = VROMPAGE( (byChrBank*8+3) % (NesHeader.byVRomSize << 3) ); 79 | PPUBANK[ 4 ] = VROMPAGE( (byChrBank*8+4) % (NesHeader.byVRomSize << 3) ); 80 | PPUBANK[ 5 ] = VROMPAGE( (byChrBank*8+5) % (NesHeader.byVRomSize << 3) ); 81 | PPUBANK[ 6 ] = VROMPAGE( (byChrBank*8+6) % (NesHeader.byVRomSize << 3) ); 82 | PPUBANK[ 7 ] = VROMPAGE( (byChrBank*8+7) % (NesHeader.byVRomSize << 3) ); 83 | InfoNES_SetupChr(); 84 | 85 | if ( byData & 0x08 ) 86 | { 87 | InfoNES_Mirroring( 2 ); 88 | } 89 | else 90 | { 91 | InfoNES_Mirroring( 3 ); 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_091.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 91 (Pirates) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 91 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map91_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map91_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map91_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMLASTPAGE( 1 ); 44 | ROMBANK1 = ROMLASTPAGE( 0 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set Name Table Mirroring */ 57 | InfoNES_Mirroring( 1 ); 58 | 59 | /* Set up wiring of the interrupt pin */ 60 | K6502_Set_Int_Wiring( 1, 1 ); 61 | } 62 | 63 | /*-------------------------------------------------------------------*/ 64 | /* Mapper 91 Write to Sram Function */ 65 | /*-------------------------------------------------------------------*/ 66 | void Map91_Sram( WORD wAddr, BYTE byData ) 67 | { 68 | switch( wAddr & 0xF00F) 69 | { 70 | /* Set PPU Banks */ 71 | case 0x6000: 72 | PPUBANK[ 0 ] = VROMPAGE( (byData*2+0) % ( NesHeader.byVRomSize << 3 ) ); 73 | PPUBANK[ 1 ] = VROMPAGE( (byData*2+1) % ( NesHeader.byVRomSize << 3 ) ); 74 | InfoNES_SetupChr(); 75 | break; 76 | 77 | case 0x6001: 78 | PPUBANK[ 2 ] = VROMPAGE( (byData*2+0) % ( NesHeader.byVRomSize << 3 ) ); 79 | PPUBANK[ 3 ] = VROMPAGE( (byData*2+1) % ( NesHeader.byVRomSize << 3 ) ); 80 | InfoNES_SetupChr(); 81 | break; 82 | 83 | case 0x6002: 84 | PPUBANK[ 4 ] = VROMPAGE( (byData*2+0) % ( NesHeader.byVRomSize << 3 ) ); 85 | PPUBANK[ 5 ] = VROMPAGE( (byData*2+1) % ( NesHeader.byVRomSize << 3 ) ); 86 | InfoNES_SetupChr(); 87 | break; 88 | 89 | case 0x6003: 90 | PPUBANK[ 6 ] = VROMPAGE( (byData*2+0) % ( NesHeader.byVRomSize << 3 ) ); 91 | PPUBANK[ 7 ] = VROMPAGE( (byData*2+1) % ( NesHeader.byVRomSize << 3 ) ); 92 | InfoNES_SetupChr(); 93 | break; 94 | 95 | /* Set CPU Banks */ 96 | case 0x7000: 97 | ROMBANK0 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 98 | break; 99 | 100 | case 0x7001: 101 | ROMBANK1 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 102 | break; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_093.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 93 (74161/32) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 93 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map93_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map93_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map93_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 93 Write to Sram Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map93_Sram( WORD wAddr, BYTE byData ) 64 | { 65 | /* Set ROM Banks */ 66 | if ( wAddr == 0x6000 ) 67 | { 68 | byData <<= 1; 69 | byData %= ( NesHeader.byRomSize << 1 ); 70 | 71 | ROMBANK0 = ROMPAGE( byData ); 72 | ROMBANK1 = ROMPAGE( byData + 1 ); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_094.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 94 (74161/32 Capcom) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 94 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map94_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map94_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map94_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 94 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map94_Write( WORD wAddr, BYTE byData ) 56 | { 57 | switch ( wAddr & 0xfff0 ) 58 | { 59 | /* Set ROM Banks */ 60 | case 0xff00: 61 | byData = ( byData & 0x1c ) >> 2; 62 | byData <<= 1; 63 | byData %= ( NesHeader.byRomSize << 1 ); 64 | ROMBANK0 = ROMPAGE( byData ); 65 | ROMBANK1 = ROMPAGE( byData + 1 ); 66 | break; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_097.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 97 (74161/32 Irem) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 97 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map97_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map97_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map97_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMLASTPAGE( 1 ); 44 | ROMBANK1 = ROMLASTPAGE( 0 ); 45 | ROMBANK2 = ROMPAGE( 0 ); 46 | ROMBANK3 = ROMPAGE( 1 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 97 Write Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map97_Write( WORD wAddr, BYTE byData ) 64 | { 65 | /* Set ROM Banks */ 66 | if ( wAddr < 0xc000 ) 67 | { 68 | BYTE byPrgBank = byData & 0x0f; 69 | 70 | byPrgBank <<= 1; 71 | byPrgBank %= ( NesHeader.byRomSize << 1 ); 72 | 73 | ROMBANK2 = ROMPAGE( byPrgBank ); 74 | ROMBANK3 = ROMPAGE( byPrgBank + 1 ); 75 | 76 | if ( ( byData & 0x80 ) == 0 ) 77 | { 78 | InfoNES_Mirroring( 0 ); 79 | } else { 80 | InfoNES_Mirroring( 1 ); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_101.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 101 () */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 101 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map101_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map101_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map101_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map101_Write; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 101 Write & Write to SRAM Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map101_Write( WORD wAddr, BYTE byData ) 64 | { 65 | byData &= 0x03; 66 | byData <<= 3; 67 | byData %= ( NesHeader.byVRomSize << 3 ); 68 | 69 | /* Set PPU Banks */ 70 | PPUBANK[ 0 ] = VROMPAGE( byData ); 71 | PPUBANK[ 1 ] = VROMPAGE( byData + 1 ); 72 | PPUBANK[ 2 ] = VROMPAGE( byData + 2 ); 73 | PPUBANK[ 3 ] = VROMPAGE( byData + 3 ); 74 | PPUBANK[ 4 ] = VROMPAGE( byData + 4 ); 75 | PPUBANK[ 5 ] = VROMPAGE( byData + 5 ); 76 | PPUBANK[ 6 ] = VROMPAGE( byData + 6 ); 77 | PPUBANK[ 7 ] = VROMPAGE( byData + 7 ); 78 | InfoNES_SetupChr(); 79 | } 80 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_107.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 107 : Magic Dragon Mapper */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 107 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map107_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map107_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map107_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 107 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map107_Write( WORD wAddr, BYTE byData ) 63 | { 64 | /* Set ROM Banks */ 65 | ROMBANK0 = ROMPAGE( ( (((byData>>1)&0x03)<<2) + 0 ) % ( NesHeader.byRomSize << 1 ) ); 66 | ROMBANK1 = ROMPAGE( ( (((byData>>1)&0x03)<<2) + 1 ) % ( NesHeader.byRomSize << 1 ) ); 67 | ROMBANK2 = ROMPAGE( ( (((byData>>1)&0x03)<<2) + 2 ) % ( NesHeader.byRomSize << 1 ) ); 68 | ROMBANK3 = ROMPAGE( ( (((byData>>1)&0x03)<<2) + 3 ) % ( NesHeader.byRomSize << 1 ) ); 69 | 70 | /* Set PPU Banks */ 71 | if ( NesHeader.byVRomSize > 0 ) { 72 | PPUBANK[ 0 ] = VROMPAGE( ( ((byData&0x07)<<3) + 0 ) % ( NesHeader.byVRomSize << 3 ) ); 73 | PPUBANK[ 1 ] = VROMPAGE( ( ((byData&0x07)<<3) + 1 ) % ( NesHeader.byVRomSize << 3 ) ); 74 | PPUBANK[ 2 ] = VROMPAGE( ( ((byData&0x07)<<3) + 2 ) % ( NesHeader.byVRomSize << 3 ) ); 75 | PPUBANK[ 3 ] = VROMPAGE( ( ((byData&0x07)<<3) + 3 ) % ( NesHeader.byVRomSize << 3 ) ); 76 | PPUBANK[ 4 ] = VROMPAGE( ( ((byData&0x07)<<3) + 4 ) % ( NesHeader.byVRomSize << 3 ) ); 77 | PPUBANK[ 5 ] = VROMPAGE( ( ((byData&0x07)<<3) + 5 ) % ( NesHeader.byVRomSize << 3 ) ); 78 | PPUBANK[ 6 ] = VROMPAGE( ( ((byData&0x07)<<3) + 6 ) % ( NesHeader.byVRomSize << 3 ) ); 79 | PPUBANK[ 7 ] = VROMPAGE( ( ((byData&0x07)<<3) + 7 ) % ( NesHeader.byVRomSize << 3 ) ); 80 | InfoNES_SetupChr(); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_108.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 108 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 108 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map108_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map108_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map108_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = ROMPAGE( 0 ); 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0xC % ( NesHeader.byRomSize << 1 ) ); 44 | ROMBANK1 = ROMPAGE( 0xD % ( NesHeader.byRomSize << 1 ) ); 45 | ROMBANK2 = ROMPAGE( 0xE % ( NesHeader.byRomSize << 1 ) ); 46 | ROMBANK3 = ROMPAGE( 0xF % ( NesHeader.byRomSize << 1 ) ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 108 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map108_Write( WORD wAddr, BYTE byData ) 56 | { 57 | /* Set SRAM Banks */ 58 | SRAMBANK = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 59 | } 60 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_122.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 122 (Sunsoft) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 122 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map122_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map122_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map122_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 122 Write to Sram Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map122_Sram( WORD wAddr, BYTE byData ) 56 | { 57 | if ( wAddr == 0x6000 ) 58 | { 59 | BYTE byChrBank0 = byData & 0x07; 60 | BYTE byChrBank1 = ( byData & 0x70 ) >> 4; 61 | 62 | byChrBank0 = ( byChrBank0 << 2 ) % ( NesHeader.byVRomSize << 3 ); 63 | byChrBank1 = ( byChrBank1 << 2 ) % ( NesHeader.byVRomSize << 3 ); 64 | 65 | PPUBANK[ 0 ] = VROMPAGE( byChrBank0 + 0 ); 66 | PPUBANK[ 1 ] = VROMPAGE( byChrBank0 + 1 ); 67 | PPUBANK[ 2 ] = VROMPAGE( byChrBank0 + 2 ); 68 | PPUBANK[ 3 ] = VROMPAGE( byChrBank0 + 3 ); 69 | PPUBANK[ 4 ] = VROMPAGE( byChrBank1 + 0 ); 70 | PPUBANK[ 5 ] = VROMPAGE( byChrBank1 + 1 ); 71 | PPUBANK[ 6 ] = VROMPAGE( byChrBank1 + 2 ); 72 | PPUBANK[ 7 ] = VROMPAGE( byChrBank1 + 3 ); 73 | InfoNES_SetupChr(); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_133.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 133 : SACHEN CHEN */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 133 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map133_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map133_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map133_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 133 Write to APU Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map133_Apu( WORD wAddr, BYTE byData ) 63 | { 64 | if ( wAddr == 0x4120 ) { 65 | /* Set ROM Banks */ 66 | ROMBANK0 = ROMPAGE( ((byData&0x04) + 0 ) % (NesHeader.byRomSize << 1) ); 67 | ROMBANK1 = ROMPAGE( ((byData&0x04) + 1 ) % (NesHeader.byRomSize << 1) ); 68 | ROMBANK2 = ROMPAGE( ((byData&0x04) + 2 ) % (NesHeader.byRomSize << 1) ); 69 | ROMBANK3 = ROMPAGE( ((byData&0x04) + 3 ) % (NesHeader.byRomSize << 1) ); 70 | 71 | /* Set PPU Banks */ 72 | PPUBANK[ 0 ] = VROMPAGE( (((byData&0x03)<<3) + 0) % (NesHeader.byVRomSize << 3) ); 73 | PPUBANK[ 1 ] = VROMPAGE( (((byData&0x03)<<3) + 1) % (NesHeader.byVRomSize << 3) ); 74 | PPUBANK[ 2 ] = VROMPAGE( (((byData&0x03)<<3) + 2) % (NesHeader.byVRomSize << 3) ); 75 | PPUBANK[ 3 ] = VROMPAGE( (((byData&0x03)<<3) + 3) % (NesHeader.byVRomSize << 3) ); 76 | PPUBANK[ 4 ] = VROMPAGE( (((byData&0x03)<<3) + 4) % (NesHeader.byVRomSize << 3) ); 77 | PPUBANK[ 5 ] = VROMPAGE( (((byData&0x03)<<3) + 5) % (NesHeader.byVRomSize << 3) ); 78 | PPUBANK[ 6 ] = VROMPAGE( (((byData&0x03)<<3) + 6) % (NesHeader.byVRomSize << 3) ); 79 | PPUBANK[ 7 ] = VROMPAGE( (((byData&0x03)<<3) + 7) % (NesHeader.byVRomSize << 3) ); 80 | InfoNES_SetupChr(); 81 | } 82 | //Map133_Wram[ wAddr & 0x1fff ] = byData; 83 | } 84 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_140.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 140 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 140 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map140_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map0_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map140_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map140_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 140 Write to SRAM Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map140_Sram( WORD wAddr, BYTE byData ) 63 | { 64 | Map140_Apu( wAddr, byData ); 65 | } 66 | 67 | /*-------------------------------------------------------------------*/ 68 | /* Mapper 140 Write to APU Function */ 69 | /*-------------------------------------------------------------------*/ 70 | void Map140_Apu( WORD wAddr, BYTE byData ) 71 | { 72 | /* Set ROM Banks */ 73 | ROMBANK0 = ROMPAGE( (((byData&0xF0)>>2) + 0 ) % (NesHeader.byRomSize << 1) ); 74 | ROMBANK1 = ROMPAGE( (((byData%0xF0)>>2) + 1 ) % (NesHeader.byRomSize << 1) ); 75 | ROMBANK2 = ROMPAGE( (((byData%0xF0)>>2) + 2 ) % (NesHeader.byRomSize << 1) ); 76 | ROMBANK3 = ROMPAGE( (((byData%0xF0)>>2) + 3 ) % (NesHeader.byRomSize << 1) ); 77 | 78 | /* Set PPU Banks */ 79 | PPUBANK[ 0 ] = VROMPAGE( (((byData&0x0F)<<3) + 0) % (NesHeader.byVRomSize << 3) ); 80 | PPUBANK[ 1 ] = VROMPAGE( (((byData&0x0F)<<3) + 1) % (NesHeader.byVRomSize << 3) ); 81 | PPUBANK[ 2 ] = VROMPAGE( (((byData&0x0F)<<3) + 2) % (NesHeader.byVRomSize << 3) ); 82 | PPUBANK[ 3 ] = VROMPAGE( (((byData&0x0F)<<3) + 3) % (NesHeader.byVRomSize << 3) ); 83 | PPUBANK[ 4 ] = VROMPAGE( (((byData&0x0F)<<3) + 4) % (NesHeader.byVRomSize << 3) ); 84 | PPUBANK[ 5 ] = VROMPAGE( (((byData&0x0F)<<3) + 5) % (NesHeader.byVRomSize << 3) ); 85 | PPUBANK[ 6 ] = VROMPAGE( (((byData&0x0F)<<3) + 6) % (NesHeader.byVRomSize << 3) ); 86 | PPUBANK[ 7 ] = VROMPAGE( (((byData&0x0F)<<3) + 7) % (NesHeader.byVRomSize << 3) ); 87 | InfoNES_SetupChr(); 88 | } 89 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_151.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 151 (VSUnisystem) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 151 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map151_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map151_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map151_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 151 Write Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map151_Write( WORD wAddr, BYTE byData ) 64 | { 65 | /* Set ROM Banks */ 66 | switch( wAddr & 0xF000 ) 67 | { 68 | case 0x8000: 69 | ROMBANK0 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 70 | break; 71 | 72 | case 0xA000: 73 | ROMBANK1 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 74 | break; 75 | 76 | case 0xC000: 77 | ROMBANK2 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 78 | break; 79 | 80 | case 0xE000: 81 | PPUBANK[ 0 ] = VROMPAGE( ( byData*4+0 ) % ( NesHeader.byVRomSize << 3 ) ); 82 | PPUBANK[ 1 ] = VROMPAGE( ( byData*4+1 ) % ( NesHeader.byVRomSize << 3 ) ); 83 | PPUBANK[ 2 ] = VROMPAGE( ( byData*4+2 ) % ( NesHeader.byVRomSize << 3 ) ); 84 | PPUBANK[ 3 ] = VROMPAGE( ( byData*4+3 ) % ( NesHeader.byVRomSize << 3 ) ); 85 | InfoNES_SetupChr(); 86 | break; 87 | 88 | case 0xF000: 89 | PPUBANK[ 4 ] = VROMPAGE( ( byData*4+0 ) % ( NesHeader.byVRomSize << 3 ) ); 90 | PPUBANK[ 5 ] = VROMPAGE( ( byData*4+1 ) % ( NesHeader.byVRomSize << 3 ) ); 91 | PPUBANK[ 6 ] = VROMPAGE( ( byData*4+2 ) % ( NesHeader.byVRomSize << 3 ) ); 92 | PPUBANK[ 7 ] = VROMPAGE( ( byData*4+3 ) % ( NesHeader.byVRomSize << 3 ) ); 93 | InfoNES_SetupChr(); 94 | break; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_180.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 180 (Nichibutsu) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 180 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map180_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map180_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map180_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) 50 | { 51 | for ( int nPage = 0; nPage < 8; ++nPage ) 52 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 53 | InfoNES_SetupChr(); 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 180 Write Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map180_Write( WORD wAddr, BYTE byData ) 64 | { 65 | /* Set ROM Banks */ 66 | byData &= 0x07; 67 | byData <<= 1; 68 | byData %= ( NesHeader.byRomSize << 1 ); 69 | ROMBANK2 = ROMPAGE( byData ); 70 | ROMBANK3 = ROMPAGE( byData + 1 ); 71 | } 72 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_181.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 181 : Hacker International Type2 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 181 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map181_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map181_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map181_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 181 Write to APU Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map181_Apu( WORD wAddr, BYTE byData ) 63 | { 64 | if( wAddr == 0x4120 ) { 65 | /* Set ROM Banks */ 66 | ROMBANK0 = ROMPAGE( (((byData&0x08)>>1) + 0 ) % (NesHeader.byRomSize << 1) ); 67 | ROMBANK1 = ROMPAGE( (((byData&0x08)>>1) + 1 ) % (NesHeader.byRomSize << 1) ); 68 | ROMBANK2 = ROMPAGE( (((byData&0x08)>>1) + 2 ) % (NesHeader.byRomSize << 1) ); 69 | ROMBANK3 = ROMPAGE( (((byData&0x08)>>1) + 3 ) % (NesHeader.byRomSize << 1) ); 70 | 71 | /* Set PPU Banks */ 72 | PPUBANK[ 0 ] = VROMPAGE( (((byData&0x07)<<3) + 0) % (NesHeader.byVRomSize << 3) ); 73 | PPUBANK[ 1 ] = VROMPAGE( (((byData&0x07)<<3) + 1) % (NesHeader.byVRomSize << 3) ); 74 | PPUBANK[ 2 ] = VROMPAGE( (((byData&0x07)<<3) + 2) % (NesHeader.byVRomSize << 3) ); 75 | PPUBANK[ 3 ] = VROMPAGE( (((byData&0x07)<<3) + 3) % (NesHeader.byVRomSize << 3) ); 76 | PPUBANK[ 4 ] = VROMPAGE( (((byData&0x07)<<3) + 4) % (NesHeader.byVRomSize << 3) ); 77 | PPUBANK[ 5 ] = VROMPAGE( (((byData&0x07)<<3) + 5) % (NesHeader.byVRomSize << 3) ); 78 | PPUBANK[ 6 ] = VROMPAGE( (((byData&0x07)<<3) + 6) % (NesHeader.byVRomSize << 3) ); 79 | PPUBANK[ 7 ] = VROMPAGE( (((byData&0x07)<<3) + 7) % (NesHeader.byVRomSize << 3) ); 80 | InfoNES_SetupChr(); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_185.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 185 (Tecmo) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map185_Dummy_Chr_Rom[ 0x400 ]; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 185 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map185_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map185_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map185_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 0 ); 46 | ROMBANK1 = ROMPAGE( 1 ); 47 | ROMBANK2 = ROMPAGE( 2 ); 48 | ROMBANK3 = ROMPAGE( 3 ); 49 | 50 | /* Initialize Dummy VROM */ 51 | for ( int nPage = 0; nPage < 0x400; nPage++ ) 52 | { 53 | Map185_Dummy_Chr_Rom[ nPage ] = 0xff; 54 | } 55 | 56 | /* Set up wiring of the interrupt pin */ 57 | K6502_Set_Int_Wiring( 1, 1 ); 58 | } 59 | 60 | /*-------------------------------------------------------------------*/ 61 | /* Mapper 185 Write Function */ 62 | /*-------------------------------------------------------------------*/ 63 | void Map185_Write( WORD wAddr, BYTE byData ) 64 | { 65 | /* Set PPU Banks */ 66 | if ( byData & 0x03 ) 67 | { 68 | PPUBANK[ 0 ] = VROMPAGE( 0 ); 69 | PPUBANK[ 1 ] = VROMPAGE( 1 ); 70 | PPUBANK[ 2 ] = VROMPAGE( 2 ); 71 | PPUBANK[ 3 ] = VROMPAGE( 3 ); 72 | PPUBANK[ 4 ] = VROMPAGE( 4 ); 73 | PPUBANK[ 5 ] = VROMPAGE( 5 ); 74 | PPUBANK[ 6 ] = VROMPAGE( 6 ); 75 | PPUBANK[ 7 ] = VROMPAGE( 7 ); 76 | InfoNES_SetupChr(); 77 | } else { 78 | PPUBANK[ 0 ] = Map185_Dummy_Chr_Rom; 79 | PPUBANK[ 1 ] = Map185_Dummy_Chr_Rom; 80 | PPUBANK[ 2 ] = Map185_Dummy_Chr_Rom; 81 | PPUBANK[ 3 ] = Map185_Dummy_Chr_Rom; 82 | PPUBANK[ 4 ] = Map185_Dummy_Chr_Rom; 83 | PPUBANK[ 5 ] = Map185_Dummy_Chr_Rom; 84 | PPUBANK[ 6 ] = Map185_Dummy_Chr_Rom; 85 | PPUBANK[ 7 ] = Map185_Dummy_Chr_Rom; 86 | InfoNES_SetupChr(); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_188.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 188 (Bandai) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map188_Dummy[ 0x2000 ]; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 188 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map188_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map188_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map188_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = Map188_Dummy; 43 | 44 | /* Set ROM Banks */ 45 | if ( ( NesHeader.byRomSize << 1 ) > 16 ) 46 | { 47 | ROMBANK0 = ROMPAGE( 0 ); 48 | ROMBANK1 = ROMPAGE( 1 ); 49 | ROMBANK2 = ROMPAGE( 14 ); 50 | ROMBANK3 = ROMPAGE( 15 ); 51 | } else { 52 | ROMBANK0 = ROMPAGE( 0 ); 53 | ROMBANK1 = ROMPAGE( 1 ); 54 | ROMBANK2 = ROMLASTPAGE( 1 ); 55 | ROMBANK3 = ROMLASTPAGE( 0 ); 56 | } 57 | 58 | /* Magic Code */ 59 | Map188_Dummy[ 0 ] = 0x03; 60 | 61 | /* Set up wiring of the interrupt pin */ 62 | K6502_Set_Int_Wiring( 1, 1 ); 63 | } 64 | 65 | /*-------------------------------------------------------------------*/ 66 | /* Mapper 188 Write Function */ 67 | /*-------------------------------------------------------------------*/ 68 | void Map188_Write( WORD wAddr, BYTE byData ) 69 | { 70 | /* Set ROM Banks */ 71 | if ( byData ) 72 | { 73 | if ( byData & 0x10 ) 74 | { 75 | byData = ( byData & 0x07 ) << 1; 76 | ROMBANK0 = ROMPAGE( ( byData + 0 ) % ( NesHeader.byRomSize << 1 ) ); 77 | ROMBANK1 = ROMPAGE( ( byData + 1 ) % ( NesHeader.byRomSize << 1 ) ); 78 | } else { 79 | byData <<= 1; 80 | ROMBANK0 = ROMPAGE( ( byData + 16 ) % ( NesHeader.byRomSize << 1 ) ); 81 | ROMBANK1 = ROMPAGE( ( byData + 17 ) % ( NesHeader.byRomSize << 1 ) ); 82 | } 83 | } 84 | else 85 | { 86 | if ( ( NesHeader.byRomSize << 1 ) == 0x10 ) 87 | { 88 | ROMBANK0 = ROMPAGE( 14 ); 89 | ROMBANK1 = ROMPAGE( 15 ); 90 | } else { 91 | ROMBANK0 = ROMPAGE( 16 ); 92 | ROMBANK1 = ROMPAGE( 17 ); 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_193.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 193 : MEGA SOFT (NTDEC) : Fighting Hero */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 193 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map193_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map193_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map193_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( (NesHeader.byRomSize<<1) - 4 ); 44 | ROMBANK1 = ROMPAGE( (NesHeader.byRomSize<<1) - 3 ); 45 | ROMBANK2 = ROMPAGE( (NesHeader.byRomSize<<1) - 2 ); 46 | ROMBANK3 = ROMPAGE( (NesHeader.byRomSize<<1) - 1 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 193 Write to SRAM Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map193_Sram( WORD wAddr, BYTE byData ) 63 | { 64 | switch( wAddr ) { 65 | case 0x6000: 66 | PPUBANK[ 0 ] = VROMPAGE( ((byData&0xfc) + 0 ) % ( NesHeader.byVRomSize << 3 ) ); 67 | PPUBANK[ 1 ] = VROMPAGE( ((byData&0xfc) + 1 ) % ( NesHeader.byVRomSize << 3 ) ); 68 | PPUBANK[ 2 ] = VROMPAGE( ((byData&0xfc) + 2 ) % ( NesHeader.byVRomSize << 3 ) ); 69 | PPUBANK[ 3 ] = VROMPAGE( ((byData&0xfc) + 3 ) % ( NesHeader.byVRomSize << 3 ) ); 70 | InfoNES_SetupChr(); 71 | break; 72 | case 0x6001: 73 | PPUBANK[ 4 ] = VROMPAGE( ( byData + 0 ) % ( NesHeader.byVRomSize << 3 ) ); 74 | PPUBANK[ 5 ] = VROMPAGE( ( byData + 1 ) % ( NesHeader.byVRomSize << 3 ) ); 75 | InfoNES_SetupChr(); 76 | break; 77 | case 0x6002: 78 | PPUBANK[ 6 ] = VROMPAGE( ( byData + 0 ) % ( NesHeader.byVRomSize << 3 ) ); 79 | PPUBANK[ 7 ] = VROMPAGE( ( byData + 1 ) % ( NesHeader.byVRomSize << 3 ) ); 80 | InfoNES_SetupChr(); 81 | break; 82 | case 0x6003: 83 | ROMBANK0 = ROMPAGE( ((byData<<2) + 0 ) % ( NesHeader.byRomSize << 1 ) ); 84 | ROMBANK1 = ROMPAGE( ((byData<<2) + 1 ) % ( NesHeader.byRomSize << 1 ) ); 85 | ROMBANK2 = ROMPAGE( ((byData<<2) + 2 ) % ( NesHeader.byRomSize << 1 ) ); 86 | ROMBANK3 = ROMPAGE( ((byData<<2) + 3 ) % ( NesHeader.byRomSize << 1 ) ); 87 | break; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_194.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 194 : Meikyuu Jiin Dababa */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 194 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map194_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map194_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map194_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( (NesHeader.byRomSize<<1) - 4 ); 44 | ROMBANK1 = ROMPAGE( (NesHeader.byRomSize<<1) - 3 ); 45 | ROMBANK2 = ROMPAGE( (NesHeader.byRomSize<<1) - 2 ); 46 | ROMBANK3 = ROMPAGE( (NesHeader.byRomSize<<1) - 1 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 194 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map194_Write( WORD wAddr, BYTE byData ) 56 | { 57 | SRAMBANK = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 58 | } 59 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_200.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 200 (1200-in-1) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 200 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map200_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map200_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map200_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 0 ); 46 | ROMBANK3 = ROMPAGE( 1 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 200 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map200_Write( WORD wAddr, BYTE byData ) 63 | { 64 | /* Set ROM Banks */ 65 | ROMBANK0 = ROMPAGE((((wAddr&0x07)<<1)+0) % (NesHeader.byRomSize<<1)); 66 | ROMBANK1 = ROMPAGE((((wAddr&0x07)<<1)+1) % (NesHeader.byRomSize<<1)); 67 | ROMBANK2 = ROMPAGE((((wAddr&0x07)<<1)+0) % (NesHeader.byRomSize<<1)); 68 | ROMBANK3 = ROMPAGE((((wAddr&0x07)<<1)+1) % (NesHeader.byRomSize<<1)); 69 | 70 | /* Set PPU Banks */ 71 | PPUBANK[0] = VROMPAGE((((wAddr&0x07)<<3)+0) % (NesHeader.byVRomSize<<3)); 72 | PPUBANK[1] = VROMPAGE((((wAddr&0x07)<<3)+1) % (NesHeader.byVRomSize<<3)); 73 | PPUBANK[2] = VROMPAGE((((wAddr&0x07)<<3)+2) % (NesHeader.byVRomSize<<3)); 74 | PPUBANK[3] = VROMPAGE((((wAddr&0x07)<<3)+3) % (NesHeader.byVRomSize<<3)); 75 | PPUBANK[4] = VROMPAGE((((wAddr&0x07)<<3)+4) % (NesHeader.byVRomSize<<3)); 76 | PPUBANK[5] = VROMPAGE((((wAddr&0x07)<<3)+5) % (NesHeader.byVRomSize<<3)); 77 | PPUBANK[6] = VROMPAGE((((wAddr&0x07)<<3)+6) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[7] = VROMPAGE((((wAddr&0x07)<<3)+7) % (NesHeader.byVRomSize<<3)); 79 | InfoNES_SetupChr(); 80 | 81 | if ( wAddr & 0x01 ) { 82 | InfoNES_Mirroring( 1 ); 83 | } else { 84 | InfoNES_Mirroring( 0 ); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_201.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 201 (21-in-1) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 201 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map201_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map201_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map201_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 0 ); 46 | ROMBANK3 = ROMPAGE( 1 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 201 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map201_Write( WORD wAddr, BYTE byData ) 63 | { 64 | BYTE byBank = (BYTE)wAddr & 0x03; 65 | if (!(wAddr&0x08) ) 66 | byBank = 0; 67 | 68 | /* Set ROM Banks */ 69 | ROMBANK0 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 70 | ROMBANK1 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 71 | ROMBANK2 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 72 | ROMBANK3 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 73 | 74 | /* Set PPU Banks */ 75 | PPUBANK[0] = VROMPAGE(((byBank<<3)+0) % (NesHeader.byVRomSize<<3)); 76 | PPUBANK[1] = VROMPAGE(((byBank<<3)+1) % (NesHeader.byVRomSize<<3)); 77 | PPUBANK[2] = VROMPAGE(((byBank<<3)+2) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[3] = VROMPAGE(((byBank<<3)+3) % (NesHeader.byVRomSize<<3)); 79 | PPUBANK[4] = VROMPAGE(((byBank<<3)+4) % (NesHeader.byVRomSize<<3)); 80 | PPUBANK[5] = VROMPAGE(((byBank<<3)+5) % (NesHeader.byVRomSize<<3)); 81 | PPUBANK[6] = VROMPAGE(((byBank<<3)+6) % (NesHeader.byVRomSize<<3)); 82 | PPUBANK[7] = VROMPAGE(((byBank<<3)+7) % (NesHeader.byVRomSize<<3)); 83 | InfoNES_SetupChr(); 84 | } 85 | 86 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_222.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 222 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 222 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map222_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map222_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map222_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set Mirroring */ 56 | InfoNES_Mirroring( 1 ); 57 | 58 | /* Set up wiring of the interrupt pin */ 59 | K6502_Set_Int_Wiring( 1, 1 ); 60 | } 61 | 62 | /*-------------------------------------------------------------------*/ 63 | /* Mapper 222 Write Function */ 64 | /*-------------------------------------------------------------------*/ 65 | void Map222_Write( WORD wAddr, BYTE byData ) 66 | { 67 | switch( wAddr & 0xF003 ) { 68 | case 0x8000: 69 | ROMBANK0 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 70 | break; 71 | case 0xA000: 72 | ROMBANK1 = ROMPAGE( byData % ( NesHeader.byRomSize << 1 ) ); 73 | break; 74 | case 0xB000: 75 | PPUBANK[ 0 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 76 | InfoNES_SetupChr(); 77 | break; 78 | case 0xB002: 79 | PPUBANK[ 1 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 80 | InfoNES_SetupChr(); 81 | break; 82 | case 0xC000: 83 | PPUBANK[ 2 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 84 | InfoNES_SetupChr(); 85 | break; 86 | case 0xC002: 87 | PPUBANK[ 3 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 88 | InfoNES_SetupChr(); 89 | break; 90 | case 0xD000: 91 | PPUBANK[ 4 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 92 | InfoNES_SetupChr(); 93 | break; 94 | case 0xD002: 95 | PPUBANK[ 5 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 96 | InfoNES_SetupChr(); 97 | break; 98 | case 0xE000: 99 | PPUBANK[ 6 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 100 | InfoNES_SetupChr(); 101 | break; 102 | case 0xE002: 103 | PPUBANK[ 7 ] = VROMPAGE( byData % ( NesHeader.byVRomSize << 3 ) ); 104 | InfoNES_SetupChr(); 105 | break; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_226.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 226 : 76-in-1 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map226_Reg[2]; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 226 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map226_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map226_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map226_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 0 ); 46 | ROMBANK1 = ROMPAGE( 1 ); 47 | ROMBANK2 = ROMPAGE( 2 ); 48 | ROMBANK3 = ROMPAGE( 3 ); 49 | 50 | /* Initialize Registers */ 51 | Map226_Reg[0] = 0; 52 | Map226_Reg[1] = 0; 53 | 54 | /* Set up wiring of the interrupt pin */ 55 | K6502_Set_Int_Wiring( 1, 1 ); 56 | } 57 | 58 | /*-------------------------------------------------------------------*/ 59 | /* Mapper 226 Write Function */ 60 | /*-------------------------------------------------------------------*/ 61 | void Map226_Write( WORD wAddr, BYTE byData ) 62 | { 63 | if( wAddr & 0x0001 ) { 64 | Map226_Reg[1] = byData; 65 | } else { 66 | Map226_Reg[0] = byData; 67 | } 68 | 69 | if( Map226_Reg[0] & 0x40 ) { 70 | InfoNES_Mirroring( 1 ); 71 | } else { 72 | InfoNES_Mirroring( 0 ); 73 | } 74 | 75 | BYTE byBank = ((Map226_Reg[0]&0x1E)>>1)|((Map226_Reg[0]&0x80)>>3)|((Map226_Reg[1]&0x01)<<5); 76 | 77 | if( Map226_Reg[0] & 0x20 ) { 78 | if( Map226_Reg[0] & 0x01 ) { 79 | ROMBANK0 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 80 | ROMBANK1 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 81 | ROMBANK2 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 82 | ROMBANK3 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 83 | } else { 84 | ROMBANK0 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 85 | ROMBANK1 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 86 | ROMBANK2 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 87 | ROMBANK3 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 88 | } 89 | } else { 90 | ROMBANK0 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 91 | ROMBANK1 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 92 | ROMBANK2 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 93 | ROMBANK3 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_227.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 227 : 1200-in-1 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 227 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map227_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map227_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map227_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 0 ); 46 | ROMBANK3 = ROMPAGE( 1 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 227 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map227_Write( WORD wAddr, BYTE byData ) 56 | { 57 | BYTE byBank = ((wAddr&0x0100)>>4)|((wAddr&0x0078)>>3); 58 | 59 | if( wAddr & 0x0001 ) { 60 | ROMBANK0 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 61 | ROMBANK1 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 62 | ROMBANK2 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 63 | ROMBANK3 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 64 | } else { 65 | if( wAddr & 0x0004 ) { 66 | ROMBANK0 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 67 | ROMBANK1 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 68 | ROMBANK2 = ROMPAGE(((byBank<<2)+2) % (NesHeader.byRomSize<<1)); 69 | ROMBANK3 = ROMPAGE(((byBank<<2)+3) % (NesHeader.byRomSize<<1)); 70 | } else { 71 | ROMBANK0 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 72 | ROMBANK1 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 73 | ROMBANK2 = ROMPAGE(((byBank<<2)+0) % (NesHeader.byRomSize<<1)); 74 | ROMBANK3 = ROMPAGE(((byBank<<2)+1) % (NesHeader.byRomSize<<1)); 75 | } 76 | } 77 | 78 | if( !(wAddr & 0x0080) ) { 79 | if( wAddr & 0x0200 ) { 80 | ROMBANK2 = ROMPAGE((((byBank&0x1C)<<2)+14) % (NesHeader.byRomSize<<1)); 81 | ROMBANK3 = ROMPAGE((((byBank&0x1C)<<2)+15) % (NesHeader.byRomSize<<1)); 82 | } else { 83 | ROMBANK2 = ROMPAGE((((byBank&0x1C)<<2)+0) % (NesHeader.byRomSize<<1)); 84 | ROMBANK3 = ROMPAGE((((byBank&0x1C)<<2)+1) % (NesHeader.byRomSize<<1)); 85 | } 86 | } 87 | if( wAddr & 0x0002 ) { 88 | InfoNES_Mirroring( 0 ); 89 | } else { 90 | InfoNES_Mirroring( 1 ); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_230.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 230 : 22-in-1 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map230_RomSw; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 230 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map230_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map230_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map230_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Initialize Registers */ 45 | if( Map230_RomSw ) { 46 | Map230_RomSw = 0; 47 | } else { 48 | Map230_RomSw = 1; 49 | } 50 | 51 | /* Set ROM Banks */ 52 | if( Map230_RomSw ) { 53 | ROMBANK0 = ROMPAGE( 0 ); 54 | ROMBANK1 = ROMPAGE( 1 ); 55 | ROMBANK2 = ROMPAGE( 14 ); 56 | ROMBANK3 = ROMPAGE( 15 ); 57 | } else { 58 | ROMBANK0 = ROMPAGE( 16 ); 59 | ROMBANK1 = ROMPAGE( 17 ); 60 | ROMBANK2 = ROMLASTPAGE( 1 ); 61 | ROMBANK3 = ROMLASTPAGE( 0 ); 62 | } 63 | 64 | /* Set up wiring of the interrupt pin */ 65 | K6502_Set_Int_Wiring( 1, 1 ); 66 | } 67 | 68 | /*-------------------------------------------------------------------*/ 69 | /* Mapper 230 Write Function */ 70 | /*-------------------------------------------------------------------*/ 71 | void Map230_Write( WORD wAddr, BYTE byData ) 72 | { 73 | if( Map230_RomSw ) { 74 | ROMBANK0 = ROMPAGE((((byData&0x07)<<1)+0) % (NesHeader.byRomSize<<1)); 75 | ROMBANK1 = ROMPAGE((((byData&0x07)<<1)+1) % (NesHeader.byRomSize<<1)); 76 | } else { 77 | if( byData & 0x20 ) { 78 | ROMBANK0 = ROMPAGE((((byData&0x1F)<<1)+16) % (NesHeader.byRomSize<<1)); 79 | ROMBANK1 = ROMPAGE((((byData&0x1F)<<1)+17) % (NesHeader.byRomSize<<1)); 80 | ROMBANK2 = ROMPAGE((((byData&0x1F)<<1)+16) % (NesHeader.byRomSize<<1)); 81 | ROMBANK3 = ROMPAGE((((byData&0x1F)<<1)+17) % (NesHeader.byRomSize<<1)); 82 | } else { 83 | ROMBANK0 = ROMPAGE((((byData&0x1E)<<1)+16) % (NesHeader.byRomSize<<1)); 84 | ROMBANK1 = ROMPAGE((((byData&0x1E)<<1)+17) % (NesHeader.byRomSize<<1)); 85 | ROMBANK2 = ROMPAGE((((byData&0x1E)<<1)+18) % (NesHeader.byRomSize<<1)); 86 | ROMBANK3 = ROMPAGE((((byData&0x1E)<<1)+19) % (NesHeader.byRomSize<<1)); 87 | } 88 | if( byData & 0x40 ) { 89 | InfoNES_Mirroring( 1 ); 90 | } else { 91 | InfoNES_Mirroring( 0 ); 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_231.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 231 : 20-in-1 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 231 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map231_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map231_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map231_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 231 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map231_Write( WORD wAddr, BYTE byData ) 63 | { 64 | BYTE byBank = wAddr & 0x1E; 65 | 66 | if( wAddr & 0x0020 ) { 67 | ROMBANK0 = ROMPAGE(((byBank<<1)+0) % (NesHeader.byRomSize<<1)); 68 | ROMBANK1 = ROMPAGE(((byBank<<1)+1) % (NesHeader.byRomSize<<1)); 69 | ROMBANK2 = ROMPAGE(((byBank<<1)+2) % (NesHeader.byRomSize<<1)); 70 | ROMBANK3 = ROMPAGE(((byBank<<1)+3) % (NesHeader.byRomSize<<1)); 71 | } else { 72 | ROMBANK0 = ROMPAGE(((byBank<<1)+0) % (NesHeader.byRomSize<<1)); 73 | ROMBANK1 = ROMPAGE(((byBank<<1)+1) % (NesHeader.byRomSize<<1)); 74 | ROMBANK2 = ROMPAGE(((byBank<<1)+0) % (NesHeader.byRomSize<<1)); 75 | ROMBANK3 = ROMPAGE(((byBank<<1)+1) % (NesHeader.byRomSize<<1)); 76 | } 77 | 78 | if( wAddr & 0x0080 ) { 79 | InfoNES_Mirroring( 0 ); 80 | } else { 81 | InfoNES_Mirroring( 1 ); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_232.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 232 : Quattro Games */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | BYTE Map232_Regs[2]; 8 | 9 | /*-------------------------------------------------------------------*/ 10 | /* Initialize Mapper 232 */ 11 | /*-------------------------------------------------------------------*/ 12 | void Map232_Init() 13 | { 14 | /* Initialize Mapper */ 15 | MapperInit = Map232_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map232_Write; 19 | 20 | /* Write to SRAM */ 21 | MapperSram = Map0_Sram; 22 | 23 | /* Write to APU */ 24 | MapperApu = Map0_Apu; 25 | 26 | /* Read from APU */ 27 | MapperReadApu = Map0_ReadApu; 28 | 29 | /* Callback at VSync */ 30 | MapperVSync = Map0_VSync; 31 | 32 | /* Callback at HSync */ 33 | MapperHSync = Map0_HSync; 34 | 35 | /* Callback at PPU */ 36 | MapperPPU = Map0_PPU; 37 | 38 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 39 | MapperRenderScreen = Map0_RenderScreen; 40 | 41 | /* Set SRAM Banks */ 42 | SRAMBANK = SRAM; 43 | 44 | /* Set ROM Banks */ 45 | ROMBANK0 = ROMPAGE( 0 ); 46 | ROMBANK1 = ROMPAGE( 1 ); 47 | ROMBANK2 = ROMLASTPAGE( 1 ); 48 | ROMBANK3 = ROMLASTPAGE( 0 ); 49 | 50 | /* Initialize Registers */ 51 | Map232_Regs[0] = 0x0C; 52 | Map232_Regs[1] = 0x00; 53 | 54 | /* Set up wiring of the interrupt pin */ 55 | K6502_Set_Int_Wiring( 1, 1 ); 56 | } 57 | 58 | /*-------------------------------------------------------------------*/ 59 | /* Mapper 232 Write Function */ 60 | /*-------------------------------------------------------------------*/ 61 | void Map232_Write( WORD wAddr, BYTE byData ) 62 | { 63 | if( wAddr == 0x9000 ) { 64 | Map232_Regs[0] = (byData & 0x18)>>1; 65 | } else if( wAddr >= 0xA000 && wAddr <= 0xFFFF ) { 66 | Map232_Regs[1] = byData & 0x03; 67 | } 68 | 69 | ROMBANK0= ROMPAGE((((Map232_Regs[0]|Map232_Regs[1])<<1)+0) % (NesHeader.byRomSize<<1)); 70 | ROMBANK1= ROMPAGE((((Map232_Regs[0]|Map232_Regs[1])<<1)+1) % (NesHeader.byRomSize<<1)); 71 | ROMBANK2= ROMPAGE((((Map232_Regs[0]|0x03)<<1)+0) % (NesHeader.byRomSize<<1)); 72 | ROMBANK3= ROMPAGE((((Map232_Regs[0]|0x03)<<1)+1) % (NesHeader.byRomSize<<1)); 73 | } 74 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_233.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 233 : 42-in-1 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 233 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map233_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map233_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map233_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 233 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map233_Write( WORD wAddr, BYTE byData ) 56 | { 57 | if( byData & 0x20 ) { 58 | ROMBANK0 = ROMPAGE((((byData&0x1F)<<1)+0) % (NesHeader.byRomSize<<1)); 59 | ROMBANK1 = ROMPAGE((((byData&0x1F)<<1)+1) % (NesHeader.byRomSize<<1)); 60 | ROMBANK2 = ROMPAGE((((byData&0x1F)<<1)+0) % (NesHeader.byRomSize<<1)); 61 | ROMBANK3 = ROMPAGE((((byData&0x1F)<<1)+1) % (NesHeader.byRomSize<<1)); 62 | } else { 63 | ROMBANK0 = ROMPAGE((((byData&0x1E)<<1)+0) % (NesHeader.byRomSize<<1)); 64 | ROMBANK1 = ROMPAGE((((byData&0x1E)<<1)+1) % (NesHeader.byRomSize<<1)); 65 | ROMBANK2 = ROMPAGE((((byData&0x1E)<<1)+2) % (NesHeader.byRomSize<<1)); 66 | ROMBANK3 = ROMPAGE((((byData&0x1E)<<1)+3) % (NesHeader.byRomSize<<1)); 67 | } 68 | 69 | if( (byData&0xC0) == 0x00 ) { 70 | InfoNES_Mirroring( 5 ); 71 | } else if( (byData&0xC0) == 0x40 ) { 72 | InfoNES_Mirroring( 1 ); 73 | } else if( (byData&0xC0) == 0x80 ) { 74 | InfoNES_Mirroring( 0 ); 75 | } else { 76 | InfoNES_Mirroring( 2 ); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_240.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 240 : Gen Ke Le Zhuan */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 240 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map240_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map240_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map240_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 240 Write to APU Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map240_Apu( WORD wAddr, BYTE byData ) 63 | { 64 | if( wAddr>=0x4020 && wAddr<0x6000 ) { 65 | /* Set ROM Banks */ 66 | ROMBANK0 = ROMPAGE((((byData&0xF0)>>2)+0) % (NesHeader.byRomSize<<1)); 67 | ROMBANK1 = ROMPAGE((((byData&0xF0)>>2)+1) % (NesHeader.byRomSize<<1)); 68 | ROMBANK2 = ROMPAGE((((byData&0xF0)>>2)+2) % (NesHeader.byRomSize<<1)); 69 | ROMBANK3 = ROMPAGE((((byData&0xF0)>>2)+3) % (NesHeader.byRomSize<<1)); 70 | 71 | /* Set PPU Banks */ 72 | PPUBANK[ 0 ] = VROMPAGE((((byData&0x0F)<<3)+0) % (NesHeader.byVRomSize<<3)); 73 | PPUBANK[ 1 ] = VROMPAGE((((byData&0x0F)<<3)+1) % (NesHeader.byVRomSize<<3)); 74 | PPUBANK[ 2 ] = VROMPAGE((((byData&0x0F)<<3)+2) % (NesHeader.byVRomSize<<3)); 75 | PPUBANK[ 3 ] = VROMPAGE((((byData&0x0F)<<3)+3) % (NesHeader.byVRomSize<<3)); 76 | PPUBANK[ 4 ] = VROMPAGE((((byData&0x0F)<<3)+4) % (NesHeader.byVRomSize<<3)); 77 | PPUBANK[ 5 ] = VROMPAGE((((byData&0x0F)<<3)+5) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[ 6 ] = VROMPAGE((((byData&0x0F)<<3)+6) % (NesHeader.byVRomSize<<3)); 79 | PPUBANK[ 7 ] = VROMPAGE((((byData&0x0F)<<3)+7) % (NesHeader.byVRomSize<<3)); 80 | InfoNES_SetupChr(); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_241.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 241 : Fon Serm Bon */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 241 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map241_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map241_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map241_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set PPU Banks */ 49 | if ( NesHeader.byVRomSize > 0 ) { 50 | for ( int nPage = 0; nPage < 8; ++nPage ) 51 | PPUBANK[ nPage ] = VROMPAGE( nPage ); 52 | InfoNES_SetupChr(); 53 | } 54 | 55 | /* Set up wiring of the interrupt pin */ 56 | K6502_Set_Int_Wiring( 1, 1 ); 57 | } 58 | 59 | /*-------------------------------------------------------------------*/ 60 | /* Mapper 241 Write Function */ 61 | /*-------------------------------------------------------------------*/ 62 | void Map241_Write( WORD wAddr, BYTE byData ) 63 | { 64 | if( wAddr == 0x8000 ) { 65 | /* Set ROM Banks */ 66 | ROMBANK0 = ROMPAGE(((byData<<2)+0) % (NesHeader.byRomSize<<1)); 67 | ROMBANK1 = ROMPAGE(((byData<<2)+1) % (NesHeader.byRomSize<<1)); 68 | ROMBANK2 = ROMPAGE(((byData<<2)+2) % (NesHeader.byRomSize<<1)); 69 | ROMBANK3 = ROMPAGE(((byData<<2)+3) % (NesHeader.byRomSize<<1)); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_242.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 242 : Wai Xing Zhan Shi */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 242 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map242_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map242_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map242_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 242 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map242_Write( WORD wAddr, BYTE byData ) 56 | { 57 | if( wAddr & 0x01 ) { 58 | /* Set ROM Banks */ 59 | ROMBANK0 = ROMPAGE((((wAddr&0xF8)>>1)+0) % (NesHeader.byRomSize<<1)); 60 | ROMBANK1 = ROMPAGE((((wAddr&0xF8)>>1)+1) % (NesHeader.byRomSize<<1)); 61 | ROMBANK2 = ROMPAGE((((wAddr&0xF8)>>1)+2) % (NesHeader.byRomSize<<1)); 62 | ROMBANK3 = ROMPAGE((((wAddr&0xF8)>>1)+3) % (NesHeader.byRomSize<<1)); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_244.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 244 */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 244 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map244_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map244_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map244_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map0_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMPAGE( 2 ); 46 | ROMBANK3 = ROMPAGE( 3 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 244 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map244_Write( WORD wAddr, BYTE byData ) 56 | { 57 | if( wAddr>=0x8065 && wAddr<=0x80A4 ) { 58 | /* Set ROM Banks */ 59 | ROMBANK0 = ROMPAGE(((((wAddr-0x8065)&0x3)<<2)+0) % (NesHeader.byRomSize<<1)); 60 | ROMBANK1 = ROMPAGE(((((wAddr-0x8065)&0x3)<<2)+1) % (NesHeader.byRomSize<<1)); 61 | ROMBANK2 = ROMPAGE(((((wAddr-0x8065)&0x3)<<2)+2) % (NesHeader.byRomSize<<1)); 62 | ROMBANK3 = ROMPAGE(((((wAddr-0x8065)&0x3)<<2)+3) % (NesHeader.byRomSize<<1)); 63 | } 64 | 65 | if( wAddr>=0x80A5 && wAddr<=0x80E4 ) { 66 | /* Set ROM Banks */ 67 | ROMBANK0 = ROMPAGE(((((wAddr-0x80A5)&0x7)<<2)+0) % (NesHeader.byRomSize<<1)); 68 | ROMBANK1 = ROMPAGE(((((wAddr-0x80A5)&0x7)<<2)+1) % (NesHeader.byRomSize<<1)); 69 | ROMBANK2 = ROMPAGE(((((wAddr-0x80A5)&0x7)<<2)+2) % (NesHeader.byRomSize<<1)); 70 | ROMBANK3 = ROMPAGE(((((wAddr-0x80A5)&0x7)<<2)+3) % (NesHeader.byRomSize<<1)); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /mapper/InfoNES_Mapper_246.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 246 : Phone Serm Berm */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 246 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map246_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map246_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map0_Write; 17 | 18 | /* Write to SRAM */ 19 | MapperSram = Map246_Sram; 20 | 21 | /* Write to APU */ 22 | MapperApu = Map0_Apu; 23 | 24 | /* Read from APU */ 25 | MapperReadApu = Map0_ReadApu; 26 | 27 | /* Callback at VSync */ 28 | MapperVSync = Map0_VSync; 29 | 30 | /* Callback at HSync */ 31 | MapperHSync = Map0_HSync; 32 | 33 | /* Callback at PPU */ 34 | MapperPPU = Map0_PPU; 35 | 36 | /* Callback at Rendering Screen ( 1:BG, 0:Sprite ) */ 37 | MapperRenderScreen = Map0_RenderScreen; 38 | 39 | /* Set SRAM Banks */ 40 | SRAMBANK = SRAM; 41 | 42 | /* Set ROM Banks */ 43 | ROMBANK0 = ROMPAGE( 0 ); 44 | ROMBANK1 = ROMPAGE( 1 ); 45 | ROMBANK2 = ROMLASTPAGE( 1 ); 46 | ROMBANK3 = ROMLASTPAGE( 0 ); 47 | 48 | /* Set up wiring of the interrupt pin */ 49 | K6502_Set_Int_Wiring( 1, 1 ); 50 | } 51 | 52 | /*-------------------------------------------------------------------*/ 53 | /* Mapper 246 Write to SRAM Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map246_Sram( WORD wAddr, BYTE byData ) 56 | { 57 | if( wAddr>=0x6000 && wAddr<0x8000 ) { 58 | switch( wAddr ) { 59 | case 0x6000: 60 | ROMBANK0 = ROMPAGE(((byData<<2)+0) % (NesHeader.byRomSize<<1)); 61 | break; 62 | case 0x6001: 63 | ROMBANK1 = ROMPAGE(((byData<<2)+1) % (NesHeader.byRomSize<<1)); 64 | break; 65 | case 0x6002: 66 | ROMBANK2 = ROMPAGE(((byData<<2)+2) % (NesHeader.byRomSize<<1)); 67 | break; 68 | case 0x6003: 69 | ROMBANK3 = ROMPAGE(((byData<<2)+3) % (NesHeader.byRomSize<<1)); 70 | break; 71 | case 0x6004: 72 | PPUBANK[ 0 ] = VROMPAGE(((byData<<1)+0) % (NesHeader.byVRomSize<<3)); 73 | PPUBANK[ 1 ] = VROMPAGE(((byData<<1)+1) % (NesHeader.byVRomSize<<3)); 74 | InfoNES_SetupChr(); 75 | break; 76 | case 0x6005: 77 | PPUBANK[ 2 ] = VROMPAGE(((byData<<1)+0) % (NesHeader.byVRomSize<<3)); 78 | PPUBANK[ 3 ] = VROMPAGE(((byData<<1)+1) % (NesHeader.byVRomSize<<3)); 79 | InfoNES_SetupChr(); 80 | break; 81 | case 0x6006: 82 | PPUBANK[ 4 ] = VROMPAGE(((byData<<1)+0) % (NesHeader.byVRomSize<<3)); 83 | PPUBANK[ 5 ] = VROMPAGE(((byData<<1)+1) % (NesHeader.byVRomSize<<3)); 84 | InfoNES_SetupChr(); 85 | break; 86 | case 0x6007: 87 | PPUBANK[ 6 ] = VROMPAGE(((byData<<1)+0) % (NesHeader.byVRomSize<<3)); 88 | PPUBANK[ 7 ] = VROMPAGE(((byData<<1)+1) % (NesHeader.byVRomSize<<3)); 89 | InfoNES_SetupChr(); 90 | break; 91 | default: 92 | SRAMBANK[wAddr&0x1FFF] = byData; 93 | break; 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /ppc2002/InfoNES2002.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2002/InfoNES2002.rc -------------------------------------------------------------------------------- /ppc2002/InfoNES2002.vcw: -------------------------------------------------------------------------------- 1 | Microsoft eMbedded Visual Tools Workspace File, Format Version 3.00 2 | # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! 3 | 4 | ############################################################################### 5 | 6 | Project: "InfoNES2002"=.\InfoNES2002.vcp - Package Owner=<4> 7 | 8 | Package=<5> 9 | {{{ 10 | }}} 11 | 12 | Package=<4> 13 | {{{ 14 | }}} 15 | 16 | ############################################################################### 17 | 18 | Global: 19 | 20 | Package=<5> 21 | {{{ 22 | }}} 23 | 24 | Package=<3> 25 | {{{ 26 | }}} 27 | 28 | ############################################################################### 29 | 30 | -------------------------------------------------------------------------------- /ppc2002/InfoNES_System_ppc2002.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2002/InfoNES_System_ppc2002.cpp -------------------------------------------------------------------------------- /ppc2002/InfoNES_System_ppc2002.cpp.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2002/InfoNES_System_ppc2002.cpp.bak -------------------------------------------------------------------------------- /ppc2002/newres.h: -------------------------------------------------------------------------------- 1 | #ifndef __NEWRES_H__ 2 | #define __NEWRES_H__ 3 | 4 | #if !defined(UNDER_CE) 5 | #define UNDER_CE _WIN32_WCE 6 | #endif 7 | 8 | #if defined(_WIN32_WCE) 9 | #if !defined(WCEOLE_ENABLE_DIALOGEX) 10 | #define DIALOGEX DIALOG DISCARDABLE 11 | #endif 12 | #include 13 | #define SHMENUBAR RCDATA 14 | #if defined(WIN32_PLATFORM_PSPC) && (_WIN32_WCE >= 300) 15 | #include 16 | #define AFXCE_IDR_SCRATCH_SHMENU 28700 17 | #else 18 | #define I_IMAGENONE (-2) 19 | #define NOMENU 0xFFFF 20 | #define IDS_SHNEW 1 21 | 22 | #define IDM_SHAREDNEW 10 23 | #define IDM_SHAREDNEWDEFAULT 11 24 | #endif // _WIN32_WCE_PSPC 25 | #define AFXCE_IDD_SAVEMODIFIEDDLG 28701 26 | #endif // _WIN32_WCE 27 | 28 | #ifdef RC_INVOKED 29 | #ifndef _INC_WINDOWS 30 | #define _INC_WINDOWS 31 | #include "winuser.h" // extract from windows header 32 | #include "winver.h" 33 | #endif 34 | #endif 35 | 36 | #ifdef IDC_STATIC 37 | #undef IDC_STATIC 38 | #endif 39 | #define IDC_STATIC (-1) 40 | 41 | #endif //__NEWRES_H__ 42 | -------------------------------------------------------------------------------- /ppc2002/res/InfoNES2002.ICO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2002/res/InfoNES2002.ICO -------------------------------------------------------------------------------- /ppc2002/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Developer Studio generated include file. 3 | // Used by InfoNES2002.rc 4 | // 5 | #define IDI_INFONES2002 101 6 | #define IDM_MENU 102 7 | #define IDD_ABOUTBOX 103 8 | #define IDS_HELP 104 9 | #define IDD_KEY_CONFIG 105 10 | #define IDD_KEY_PRESS 107 11 | #define IDS_COMMAND1 301 12 | #define IDC_STATIC_KEY_A 1001 13 | #define IDC_STATIC_KEY_B 1002 14 | #define IDC_STATIC_KEY_SELECT 1003 15 | #define IDC_STATIC_KEY_START 1004 16 | #define IDC_STATIC_KEY_UP 1005 17 | #define IDC_STATIC_KEY_DOWN 1006 18 | #define IDC_STATIC_KEY_LEFT 1007 19 | #define IDC_STATIC_KEY_RIGHT 1008 20 | #define IDC_STATIC_KEY_EXIT 1009 21 | #define IDC_A 1021 22 | #define IDC_B 1022 23 | #define IDC_SELECT 1023 24 | #define IDC_START 1024 25 | #define IDC_UP 1025 26 | #define IDC_DOWN 1026 27 | #define IDC_LEFT 1027 28 | #define IDC_RIGHT 1028 29 | #define IDC_EXIT 1029 30 | #define IDC_DEL_A 1031 31 | #define IDC_DEL_B 1032 32 | #define IDC_DEL_SELECT 1033 33 | #define IDC_DEL_START 1034 34 | #define IDC_DEL_UP 1035 35 | #define IDC_DEL_DOWN 1036 36 | #define IDC_DEL_LEFT 1037 37 | #define IDC_DEL_RIGHT 1038 38 | #define IDC_DEL_EXIT 1039 39 | #define IDM_MAIN_COMMAND1 40001 40 | #define IDM_HELP_ABOUT 40003 41 | #define ID_MENUITEM40004 40004 42 | #define IDS_MENUITEM40005 40006 43 | #define IDS_MENU_FILE 40006 44 | #define IDM_MAIN_END 40007 45 | #define IDM_MAIN_RESET 40008 46 | #define IDM_MAIN_RESUME 40009 47 | #define ID_MENUITEM40010 40010 48 | #define IDS_MENUITEM40011 40012 49 | #define IDM_MAIN_FRAME_0 40013 50 | #define IDM_MAIN_FRAME_1 40014 51 | #define IDM_MAIN_FRAME_2 40015 52 | #define IDM_MAIN_FRAME_3 40016 53 | #define IDM_MAIN_FRAME_4 40017 54 | #define IDM_MAIN_FRAME_5 40018 55 | #define IDM_MAIN_FRAME_8 40019 56 | #define IDM_MAIN_FRAME_10 40020 57 | #define ID_FILE 40021 58 | #define IDM_MAIN_SOUND 40022 59 | #define IDM_MAIN_KEY_CONFIG 40023 60 | #define ID_OPTION 40025 61 | #define IDS_MENUITEM40026 40027 62 | #define IDS_MENU_OPTION 40027 63 | #define IDM_MAIN_SCREEN_CLIP 40028 64 | #define IDM_MAIN_CLIP 40028 65 | #define IDM_MAIN_VERSION 40029 66 | #define IDM_MAIN_ROM 40030 67 | 68 | // Next default values for new objects 69 | // 70 | #ifdef APSTUDIO_INVOKED 71 | #ifndef APSTUDIO_READONLY_SYMBOLS 72 | #define _APS_NEXT_RESOURCE_VALUE 105 73 | #define _APS_NEXT_COMMAND_VALUE 40031 74 | #define _APS_NEXT_CONTROL_VALUE 1001 75 | #define _APS_NEXT_SYMED_VALUE 101 76 | #endif 77 | #endif 78 | -------------------------------------------------------------------------------- /ppc2003/InfoNES2003.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2003/InfoNES2003.rc -------------------------------------------------------------------------------- /ppc2003/InfoNES2003.vcp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2003/InfoNES2003.vcp -------------------------------------------------------------------------------- /ppc2003/InfoNES2003.vcw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2003/InfoNES2003.vcw -------------------------------------------------------------------------------- /ppc2003/InfoNES_System_ppc2003.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2003/InfoNES_System_ppc2003.cpp -------------------------------------------------------------------------------- /ppc2003/newres.h: -------------------------------------------------------------------------------- 1 | #ifndef __NEWRES_H__ 2 | #define __NEWRES_H__ 3 | 4 | #if !defined(UNDER_CE) 5 | #define UNDER_CE _WIN32_WCE 6 | #endif 7 | 8 | #if defined(_WIN32_WCE) 9 | #if !defined(WCEOLE_ENABLE_DIALOGEX) 10 | #define DIALOGEX DIALOG DISCARDABLE 11 | #endif 12 | #include 13 | #define SHMENUBAR RCDATA 14 | #if defined(WIN32_PLATFORM_PSPC) && (_WIN32_WCE >= 300) 15 | #include 16 | #define AFXCE_IDR_SCRATCH_SHMENU 28700 17 | #else 18 | #define I_IMAGENONE (-2) 19 | #define NOMENU 0xFFFF 20 | #define IDS_SHNEW 1 21 | 22 | #define IDM_SHAREDNEW 10 23 | #define IDM_SHAREDNEWDEFAULT 11 24 | #endif // _WIN32_WCE_PSPC 25 | #define AFXCE_IDD_SAVEMODIFIEDDLG 28701 26 | #endif // _WIN32_WCE 27 | 28 | #ifdef RC_INVOKED 29 | #ifndef _INC_WINDOWS 30 | #define _INC_WINDOWS 31 | #include "winuser.h" // extract from windows header 32 | #include "winver.h" 33 | #endif 34 | #endif 35 | 36 | #ifdef IDC_STATIC 37 | #undef IDC_STATIC 38 | #endif 39 | #define IDC_STATIC (-1) 40 | 41 | #endif //__NEWRES_H__ 42 | -------------------------------------------------------------------------------- /ppc2003/res/InfoNES2003.ICO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/ppc2003/res/InfoNES2003.ICO -------------------------------------------------------------------------------- /ppc2003/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Developer Studio generated include file. 3 | // Used by InfoNES2003.rc 4 | // 5 | #define IDI_INFONES2003 101 6 | #define IDM_MENU 102 7 | #define IDD_ABOUTBOX 103 8 | #define IDS_HELP 104 9 | #define IDD_KEY_CONFIG 105 10 | #define IDD_KEY_PRESS 107 11 | #define IDS_COMMAND1 301 12 | #define IDC_STATIC_KEY_A 1001 13 | #define IDC_STATIC_KEY_B 1002 14 | #define IDC_STATIC_KEY_SELECT 1003 15 | #define IDC_STATIC_KEY_START 1004 16 | #define IDC_STATIC_KEY_UP 1005 17 | #define IDC_STATIC_KEY_DOWN 1006 18 | #define IDC_STATIC_KEY_LEFT 1007 19 | #define IDC_STATIC_KEY_RIGHT 1008 20 | #define IDC_STATIC_KEY_EXIT 1009 21 | #define IDC_A 1021 22 | #define IDC_B 1022 23 | #define IDC_SELECT 1023 24 | #define IDC_START 1024 25 | #define IDC_UP 1025 26 | #define IDC_DOWN 1026 27 | #define IDC_LEFT 1027 28 | #define IDC_RIGHT 1028 29 | #define IDC_EXIT 1029 30 | #define IDC_DEL_A 1031 31 | #define IDC_DEL_B 1032 32 | #define IDC_DEL_SELECT 1033 33 | #define IDC_DEL_START 1034 34 | #define IDC_DEL_UP 1035 35 | #define IDC_DEL_DOWN 1036 36 | #define IDC_DEL_LEFT 1037 37 | #define IDC_DEL_RIGHT 1038 38 | #define IDC_DEL_EXIT 1039 39 | #define IDM_MAIN_COMMAND1 40001 40 | #define IDM_HELP_ABOUT 40003 41 | #define ID_MENUITEM40004 40004 42 | #define IDS_MENUITEM40005 40006 43 | #define IDS_MENU_FILE 40006 44 | #define IDM_MAIN_END 40007 45 | #define IDM_MAIN_RESET 40008 46 | #define IDM_MAIN_RESUME 40009 47 | #define ID_MENUITEM40010 40010 48 | #define IDS_MENUITEM40011 40012 49 | #define IDM_MAIN_FRAME_0 40013 50 | #define IDM_MAIN_FRAME_1 40014 51 | #define IDM_MAIN_FRAME_2 40015 52 | #define IDM_MAIN_FRAME_3 40016 53 | #define IDM_MAIN_FRAME_4 40017 54 | #define IDM_MAIN_FRAME_5 40018 55 | #define IDM_MAIN_FRAME_8 40019 56 | #define IDM_MAIN_FRAME_10 40020 57 | #define ID_FILE 40021 58 | #define IDM_MAIN_SOUND 40022 59 | #define IDM_MAIN_KEY_CONFIG 40023 60 | #define ID_OPTION 40025 61 | #define IDS_MENUITEM40026 40027 62 | #define IDS_MENU_OPTION 40027 63 | #define IDM_MAIN_SCREEN_CLIP 40028 64 | #define IDM_MAIN_CLIP 40028 65 | #define IDM_MAIN_VERSION 40029 66 | #define IDM_MAIN_ROM 40030 67 | 68 | // Next default values for new objects 69 | // 70 | #ifdef APSTUDIO_INVOKED 71 | #ifndef APSTUDIO_READONLY_SYMBOLS 72 | #define _APS_NEXT_RESOURCE_VALUE 105 73 | #define _APS_NEXT_COMMAND_VALUE 40031 74 | #define _APS_NEXT_CONTROL_VALUE 1001 75 | #define _APS_NEXT_SYMED_VALUE 101 76 | #endif 77 | #endif 78 | -------------------------------------------------------------------------------- /test.nes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/test.nes -------------------------------------------------------------------------------- /test1.nes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/test1.nes -------------------------------------------------------------------------------- /test3.nes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/test3.nes -------------------------------------------------------------------------------- /test4.nes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yongzhena/infoNES/647141ce8bc5fa4cf887044484a62145ffe1ff71/test4.nes --------------------------------------------------------------------------------