├── .github └── workflows │ ├── BuildAndRelease.yml │ └── TEST.yml ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── CMakeLists.txt ├── LICENSE ├── PCB ├── Gerber_PicoNES_Mini_PCB_v1.0.zip ├── README.md ├── images │ ├── PCB2.0_bottom.png │ ├── PCB2.0_layers.png │ └── PCB2.0_top.png ├── pico_nesPCB_v2.0.zip ├── pico_nesPCB_v2.1.zip └── v0.2 │ ├── README.md │ └── pico_nesPCB_v0.2.zip ├── README.md ├── assets ├── 2plfeatherdv.png ├── 2plpcb.png ├── 2plpicobreadb.png ├── 2plpimoronidv.png ├── 2plwsrp2040.png ├── 3d1.jpg ├── 3d2.jpg ├── DVIBreakout.jpg ├── PicoBreadBoard.jpg ├── PicoInfoNesPlusAdafruit.jpeg ├── PicoInfoNesPlusPimoroni.jpeg ├── PinHeadersPimoroniDV.png ├── WaveShareRP2040.jpg ├── WaveShareRP2040_1.jpg ├── WaveShareRP2040_2.jpg ├── catalex.jpg ├── featherDVI.jpg ├── font_8x8.png ├── nes-controller-pinout.png ├── pcbw.png ├── pcbway.png ├── pico-sdk-pico_rand.zip ├── picodisplay2.jpeg ├── picones.jpg └── piconesPlusCatalex.uf2 ├── bld.sh ├── build.sh ├── buildAll.sh ├── build_alternate.sh ├── build_alternate_debug.sh ├── build_debug.sh ├── build_feather_dvi.sh ├── build_feather_dvi_debug.sh ├── build_ws_rp2040_pizero.sh ├── build_ws_rp2040_pizero_debug.sh ├── include └── common_dvi_pin_configs.h ├── infones ├── CMakeLists.txt ├── InfoNES.cpp ├── InfoNES.h ├── InfoNES_Mapper.cpp ├── InfoNES_Mapper.h ├── InfoNES_System.h ├── InfoNES_Types.h ├── InfoNES_pAPU.cpp ├── InfoNES_pAPU.h ├── K6502.cpp ├── K6502.h ├── K6502_rw.h ├── doc │ ├── GPL2 │ ├── GPL2J │ └── readme.html ├── linux │ ├── InfoNES_System_Linux.cpp │ └── Makefile ├── 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 │ ├── 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 └── win32 │ ├── InfoNES.dsp │ ├── InfoNES.dsw │ ├── InfoNES.ico │ ├── InfoNES_Resource_Win.h │ ├── InfoNES_Resource_Win.rc │ ├── InfoNES_Sound_Win.cpp │ ├── InfoNES_Sound_Win.h │ ├── InfoNES_System_Win.cpp │ ├── bitmap1.bmp │ └── resource.h ├── main.cpp ├── pico_sdk_import.cmake ├── rom_selector.h ├── splash.cpp └── testresults.md /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "pico_lib"] 2 | path = pico_lib 3 | url = https://github.com/fhoedemakers/pico_lib.git 4 | [submodule "tusb_xinput"] 5 | path = tusb_xinput 6 | url = https://github.com/fhoedemakers/tusb_xinput.git 7 | [submodule "pico_shared"] 8 | path = pico_shared 9 | url = https://github.com/fhoedemakers/pico_shared.git 10 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | # General Info 4 | 5 | Binaries for each configuration and PCB design are at the end of this page. 6 | 7 | - For Raspberry Pi Pico (RP2040) you need to download the .uf2 files starting with pico_piconesPlus. 8 | - For Raspberry Pi Pico w (rp2040) you can download the .uf2 files starting with pico_w_piconesPlus. Although you can also use the pico_piconesPlus binaries on the Pico w if you don't mind the blinking led. 9 | - For Raspberry Pi Pico 2 (RP2350) you need to download the .uf2 files starting with pico2_piconesPlus for ARM or pico2_riscv_piconesPlus for Risc-V. 10 | - For Raspberry Pi Pico 2 w (RP2350) you can download the .uf2 files starting with pico2_w_piconesPlus for ARM or pico2_w_riscv_piconesPlus for Risc-V Although you can also use the pico2_piconesPlus binaries on the Pico w if you don't mind the blinking led. 11 | 12 | [Click here for tested configurations](testresults.md). 13 | 14 | [See setup section in readme how to install and wire up](https://github.com/fhoedemakers/pico-infonesPlus#pico-setup) 15 | 16 | # 3D-printed case designs for custom PCBs 17 | 18 | ## Raspberry Pi Pico and Pico 2 PCB 19 | 20 | [https://www.thingiverse.com/thing:6689537](https://www.thingiverse.com/thing:6689537). 21 | For the latest two player PCB 2.0, you need: 22 | 23 | - Top_v2.0_with_Bootsel_Button.stl. This allows for software upgrades without removing the cover. (*) 24 | - Base_v2.0.stl 25 | - Power_Switch.stl. 26 | 27 | (*) in case you don't want to access the bootsel button on the Pico, you can choose Top_v2.0.stl 28 | 29 | ## Waveshare RP2040-Zero and RP2350-Zero PCB 30 | 31 | [https://www.thingiverse.com/thing:7041536](https://www.thingiverse.com/thing:7041536) 32 | 33 | ## Waveshare RP2040-PiZero 34 | 35 | [https://www.thingiverse.com/thing:6758682](https://www.thingiverse.com/thing:6758682) 36 | 37 | # v0.27 release notes 38 | 39 | - Added second PCB design for use with Waveshare [RP2040-Zero](https://www.waveshare.com/rp2040-zero.htm) or [RP2350-Zero](https://www.waveshare.com/rp2350-zero.htm) mini development board. The PCB is designed to fit in a 3D-printed case. PCB and Case design by [@DynaMight1124](https://github.com/DynaMight1124). 40 | Based around cheaper but harder to solder components for those that fancy a bigger challenge. It also allows the design to be smaller. 41 | - Added new configuration to BoardConfigs.cmake and bld.sh to support the new configuration for this PCB. 42 | 43 | | | | 44 | | ---- | ---- | 45 | | ![NESMiniPCB](https://github.com/user-attachments/assets/64696de1-2896-4a9c-94e9-692f125c55b6) | ![NESMiniCase](https://github.com/user-attachments/assets/a68f31ff-529f-49fb-9ec4-f3512c8e9e38) | 46 | 47 | 48 | ## Fixes 49 | - Pico 2 W executables added to the release. 50 | 51 | All changes are in the pico_shared submodule. When building from source, make sure you do a **git submodule update --init** from within the source folder to get the latest pico_shared module. 52 | 53 | -------------------------------------------------------------------------------- /PCB/Gerber_PicoNES_Mini_PCB_v1.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/Gerber_PicoNES_Mini_PCB_v1.0.zip -------------------------------------------------------------------------------- /PCB/README.md: -------------------------------------------------------------------------------- 1 | The file **pico_nesPCB_v2.0.zip** in this folder is the current PCB release, as found on the [releases](https://github.com/fhoedemakers/pico-infonesPlus/releases/latest) page. This zip file contains the Gerber files and can be uploaded to a PCB manufacturer of choice. 2 | 3 | **pico_nesPCB_v2.1.zip** is identical to v2.0, except that D3 and D4 of NES controller port 2 are mapped to GPIO28 (D3) and GPIO27 (D4). This is intended for possible zapper use, which is currently in beta. 4 | 5 | **Gerber_PicoNES_Mini_PCB_v1.0.zip** is for the PicoNES Mini with a Waveshare RP2040/RP2350 Zero board. 6 | 7 | The v0.2 folder contains the previous version of the design. 8 | -------------------------------------------------------------------------------- /PCB/images/PCB2.0_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/images/PCB2.0_bottom.png -------------------------------------------------------------------------------- /PCB/images/PCB2.0_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/images/PCB2.0_layers.png -------------------------------------------------------------------------------- /PCB/images/PCB2.0_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/images/PCB2.0_top.png -------------------------------------------------------------------------------- /PCB/pico_nesPCB_v2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/pico_nesPCB_v2.0.zip -------------------------------------------------------------------------------- /PCB/pico_nesPCB_v2.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/pico_nesPCB_v2.1.zip -------------------------------------------------------------------------------- /PCB/v0.2/pico_nesPCB_v0.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/PCB/v0.2/pico_nesPCB_v0.2.zip -------------------------------------------------------------------------------- /assets/2plfeatherdv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/2plfeatherdv.png -------------------------------------------------------------------------------- /assets/2plpcb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/2plpcb.png -------------------------------------------------------------------------------- /assets/2plpicobreadb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/2plpicobreadb.png -------------------------------------------------------------------------------- /assets/2plpimoronidv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/2plpimoronidv.png -------------------------------------------------------------------------------- /assets/2plwsrp2040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/2plwsrp2040.png -------------------------------------------------------------------------------- /assets/3d1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/3d1.jpg -------------------------------------------------------------------------------- /assets/3d2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/3d2.jpg -------------------------------------------------------------------------------- /assets/DVIBreakout.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/DVIBreakout.jpg -------------------------------------------------------------------------------- /assets/PicoBreadBoard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/PicoBreadBoard.jpg -------------------------------------------------------------------------------- /assets/PicoInfoNesPlusAdafruit.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/PicoInfoNesPlusAdafruit.jpeg -------------------------------------------------------------------------------- /assets/PicoInfoNesPlusPimoroni.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/PicoInfoNesPlusPimoroni.jpeg -------------------------------------------------------------------------------- /assets/PinHeadersPimoroniDV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/PinHeadersPimoroniDV.png -------------------------------------------------------------------------------- /assets/WaveShareRP2040.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/WaveShareRP2040.jpg -------------------------------------------------------------------------------- /assets/WaveShareRP2040_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/WaveShareRP2040_1.jpg -------------------------------------------------------------------------------- /assets/WaveShareRP2040_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/WaveShareRP2040_2.jpg -------------------------------------------------------------------------------- /assets/catalex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/catalex.jpg -------------------------------------------------------------------------------- /assets/featherDVI.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/featherDVI.jpg -------------------------------------------------------------------------------- /assets/font_8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/font_8x8.png -------------------------------------------------------------------------------- /assets/nes-controller-pinout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/nes-controller-pinout.png -------------------------------------------------------------------------------- /assets/pcbw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/pcbw.png -------------------------------------------------------------------------------- /assets/pcbway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/pcbway.png -------------------------------------------------------------------------------- /assets/pico-sdk-pico_rand.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/pico-sdk-pico_rand.zip -------------------------------------------------------------------------------- /assets/picodisplay2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/picodisplay2.jpeg -------------------------------------------------------------------------------- /assets/picones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/picones.jpg -------------------------------------------------------------------------------- /assets/piconesPlusCatalex.uf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/assets/piconesPlusCatalex.uf2 -------------------------------------------------------------------------------- /bld.sh: -------------------------------------------------------------------------------- 1 | : 2 | # execute pico_shared/bld.sh and pass all the parameters 3 | cd `dirname $0` 4 | ./pico_shared/bld.sh $* -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script with default configuration 4 | # Builds the emulator for use with the 5 | # Pimoroni Pico DV Demo Base 6 | # https://shop.pimoroni.com/products/pimoroni-pico-dv-demo-base?variant=39494203998291 7 | # ==================================================================================== 8 | cd `dirname $0` || exit 1 9 | ./bld.sh 10 | -------------------------------------------------------------------------------- /buildAll.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build all script 4 | # Builds the emulator for tall the supported hardware configurations in RELEASE configuration 5 | # Binaries are copied to the releases folder 6 | # ==================================================================================== 7 | cd `dirname $0` || exit 1 8 | [ -d releases ] && rm -rf releases 9 | mkdir releases || exit 1 10 | # check picotool exists in path 11 | if ! command -v picotool &> /dev/null 12 | then 13 | echo "picotool could not be found" 14 | echo "Please install picotool from https://github.com/raspberrypi/picotool.git" 15 | exit 16 | fi 17 | # build for Pico 18 | HWCONFIGS="1 2 3 4 6" 19 | for HWCONFIG in $HWCONFIGS 20 | do 21 | ./bld.sh -c $HWCONFIG 22 | done 23 | # build for Pico w 24 | HWCONFIGS="1 2" 25 | for HWCONFIG in $HWCONFIGS 26 | do 27 | ./bld.sh -c $HWCONFIG -w 28 | done 29 | # build for Pico 2 (w) -arm-s 30 | HWCONFIGS="1 2 5 6" 31 | for HWCONFIG in $HWCONFIGS 32 | do 33 | ./bld.sh -c $HWCONFIG -2 34 | # don't build for w when HWCONFIG=5 and 6 35 | if [[ $HWCONFIG -ne 5 && $HWCONFIG -ne 6 ]]; then 36 | ./bld.sh -c $HWCONFIG -2 -w 37 | fi 38 | done 39 | # build for Pico 2 -riscv, Metro RP2350 has no risc support because sd card not working 40 | HWCONFIGS="1 2 6" 41 | #HWCONFIGS="1 2 5" 42 | if [ ! -d $PICO_SDK_PATH/toolchain/RISCV_RPI_2_0_0_2/bin ] ; then 43 | echo "RISC-V toolchain not found in $PICO_SDK_PATH/toolchain/RISCV_RPI_2_0_0_2/bin" 44 | echo "To install the RISC-V toolchain, execute \"bld.sh -h\" for instructions" 45 | else 46 | for HWCONFIG in $HWCONFIGS 47 | do 48 | ./bld.sh -c $HWCONFIG -r -t $PICO_SDK_PATH/toolchain/RISCV_RPI_2_0_0_2/bin 49 | # don't build for w when HWCONFIG=5 or 6 50 | if [[ $HWCONFIG -ne 5 && $HWCONFIG -ne 6 ]]; then 51 | ./bld.sh -c $HWCONFIG -r -t $PICO_SDK_PATH/toolchain/RISCV_RPI_2_0_0_2/bin -w 52 | fi 53 | done 54 | fi 55 | if [ -z "$(ls -A releases)" ]; then 56 | echo "No UF2 files found in releases folder" 57 | exit 58 | fi 59 | for UF2 in releases/*.uf2 60 | do 61 | ls -l $UF2 62 | picotool info $UF2 63 | echo " " 64 | done 65 | -------------------------------------------------------------------------------- /build_alternate.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script with alternate configuration 4 | # Builds the emulator for use with the 5 | # AdaFruit DVI Breakout Board 6 | # https://www.adafruit.com/product/4984 7 | # https://learn.adafruit.com/adafruit-dvi-breakout-board 8 | # and the 9 | # AdaFruit MicroSD card breakout board+ 10 | # https://www.adafruit.com/product/254 11 | # ==================================================================================== 12 | cd `dirname $0` || exit 1 13 | ./bld.sh -c 2 14 | -------------------------------------------------------------------------------- /build_alternate_debug.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script with alternate configuration and debug enabled 4 | # Builds the emulator for use with the 5 | # AdaFruit DVI Breakout Board 6 | # https://www.adafruit.com/product/4984 7 | # https://learn.adafruit.com/adafruit-dvi-breakout-board 8 | # and the 9 | # AdaFruit MicroSD card breakout board+ 10 | # https://www.adafruit.com/product/254 11 | # ==================================================================================== 12 | cd `dirname $0` || exit 1 13 | ./bld.sh -c 2 -d -------------------------------------------------------------------------------- /build_debug.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script with default configuration and debug enabled 4 | # Builds the emulator for use with the 5 | # Pimoroni Pico DV Demo Base 6 | # https://shop.pimoroni.com/products/pimoroni-pico-dv-demo-base?variant=39494203998291 7 | # ==================================================================================== 8 | cd `dirname $0` || exit 1 9 | ./bld.sh -d 10 | -------------------------------------------------------------------------------- /build_feather_dvi.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script with alternate configuration 4 | # Builds the emulator for use with the 5 | # Adafruit Feather RP2040 DVI 6 | # and the 7 | # Adafruit microSD Card FeatherWing 8 | # ==================================================================================== 9 | cd `dirname $0` || exit 1 10 | ./bld.sh -c 3 11 | -------------------------------------------------------------------------------- /build_feather_dvi_debug.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script with alternate configuration and debug enabled 4 | # Builds the emulator for use with the 5 | # Adafruit Feather RP2040 DVI 6 | # and the 7 | # Adafruit microSD Card FeatherWing 8 | # ==================================================================================== 9 | cd `dirname $0` || exit 1 10 | ./bld.sh -c 3 -d -------------------------------------------------------------------------------- /build_ws_rp2040_pizero.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script in RELEASE configuration 4 | # Builds the emulator for use with the 5 | # Waveshare RP2040-PiZero 6 | # https://www.waveshare.com/rp2040-pizero.htm 7 | # ==================================================================================== 8 | cd `dirname $0` || exit 1 9 | ./bld.sh -c 4 10 | 11 | 12 | -------------------------------------------------------------------------------- /build_ws_rp2040_pizero_debug.sh: -------------------------------------------------------------------------------- 1 | : 2 | # ==================================================================================== 3 | # PICO-INFONESPLUS build script in DEBUG configuration 4 | # Builds the emulator for use with the 5 | # Waveshare RP2040-PiZero 6 | # https://www.waveshare.com/rp2040-pizero.htm 7 | # ==================================================================================== 8 | cd `dirname $0` || exit 1 9 | ./bld.sh -c 4 -d 10 | 11 | -------------------------------------------------------------------------------- /include/common_dvi_pin_configs.h: -------------------------------------------------------------------------------- 1 | #ifndef _COMMON_DVI_PIN_CONFIGS_H 2 | #define _COMMON_DVI_PIN_CONFIGS_H 3 | 4 | // This file defines the TMDS pair layouts on a handful of boards I have been 5 | // developing on. It's not a particularly important file -- just saves some 6 | // copy + paste. 7 | 8 | #include "libdvi_serialiser.h" 9 | 10 | #ifndef DVI_DEFAULT_SERIAL_CONFIG 11 | #define DVI_DEFAULT_SERIAL_CONFIG pico_sock_cfg 12 | #endif 13 | 14 | #ifndef DVI_DEFAULT_PIO_INST 15 | #define DVI_DEFAULT_PIO_INST pio0 16 | #endif 17 | 18 | // ---------------------------------------------------------------------------- 19 | // PicoDVI boards 20 | 21 | // Legacy pin mapping for Rev A PicoDVI boards -- I think just Graham and I 22 | // have these :) 23 | static const struct dvi_serialiser_cfg picodvi_reva_dvi_cfg = { 24 | .pio = DVI_DEFAULT_PIO_INST, 25 | .sm_tmds = {0, 1, 2}, 26 | .pins_tmds = {24, 26, 28}, 27 | .pins_clk = 22, 28 | .invert_diffpairs = true 29 | }; 30 | 31 | // The not-HDMI socket on Rev C PicoDVI boards 32 | // (we don't talk about Rev B) 33 | static const struct dvi_serialiser_cfg picodvi_dvi_cfg = { 34 | .pio = DVI_DEFAULT_PIO_INST, 35 | .sm_tmds = {0, 1, 2}, 36 | .pins_tmds = {10, 12, 14}, 37 | .pins_clk = 8, 38 | .invert_diffpairs = true 39 | }; 40 | 41 | // You can jam an adapter board into either of the PMOD sockets on a PicoDVI! 42 | static const struct dvi_serialiser_cfg picodvi_pmod0_cfg = { 43 | .pio = DVI_DEFAULT_PIO_INST, 44 | .sm_tmds = {0, 1, 2}, 45 | .pins_tmds = {2, 4, 0}, 46 | .pins_clk = 6, 47 | .invert_diffpairs = false 48 | }; 49 | 50 | // ---------------------------------------------------------------------------- 51 | // Other boards 52 | 53 | // The not-HDMI socket on SparkX HDMI carrier board with RP2040 MicroMod 54 | // inserted. 55 | static const struct dvi_serialiser_cfg micromod_cfg = { 56 | .pio = DVI_DEFAULT_PIO_INST, 57 | .sm_tmds = {0, 1, 2}, 58 | .pins_tmds = {18, 20, 22}, 59 | .pins_clk = 16, 60 | .invert_diffpairs = true 61 | }; 62 | 63 | // Pico DVI Sock (small hat on the bottom) which solders to the end of a Pico 64 | static const struct dvi_serialiser_cfg pico_sock_cfg = { 65 | .pio = DVI_DEFAULT_PIO_INST, 66 | .sm_tmds = {0, 1, 2}, 67 | .pins_tmds = {12, 18, 16}, 68 | .pins_clk = 14, 69 | .invert_diffpairs = false 70 | }; 71 | 72 | // The HDMI socket on Pimoroni Pico Demo HDMI 73 | // (we would talk about rev B if we had a rev B...) 74 | static const struct dvi_serialiser_cfg pimoroni_demo_hdmi_cfg = { 75 | .pio = DVI_DEFAULT_PIO_INST, 76 | .sm_tmds = {0, 1, 2}, 77 | .pins_tmds = {8, 10, 12}, 78 | .pins_clk = 6, 79 | .invert_diffpairs = true 80 | }; 81 | 82 | // Not HDMI Featherwing 83 | static const struct dvi_serialiser_cfg not_hdmi_featherwing_cfg = { 84 | .pio = pio0, 85 | .sm_tmds = {0, 1, 2}, 86 | .pins_tmds = {11, 9, 7}, 87 | .pins_clk = 24, 88 | .invert_diffpairs = true 89 | }; 90 | 91 | #endif 92 | -------------------------------------------------------------------------------- /infones/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(infones INTERFACE) 2 | 3 | target_sources(infones 4 | INTERFACE 5 | InfoNES_Mapper.cpp 6 | InfoNES_pAPU.cpp 7 | InfoNES.cpp 8 | K6502.cpp 9 | ) 10 | 11 | # target_include_directories(infones 12 | # INTERFACE 13 | # ) 14 | 15 | # target_link_libraries(infones 16 | # INTERFACE 17 | # ) 18 | -------------------------------------------------------------------------------- /infones/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 const 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 | int InfoNES_LoadFrame(); 38 | 39 | /* Get a joypad state */ 40 | void InfoNES_PadState(DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem); 41 | 42 | /* memcpy */ 43 | inline void *InfoNES_MemoryCopy(void *dest, const void *src, int count) 44 | { 45 | __builtin_memcpy(dest, src, count); 46 | return dest; 47 | } 48 | 49 | /* memset */ 50 | inline void *InfoNES_MemorySet(void *dest, int c, int count) 51 | { 52 | __builtin_memset(dest, c, count); 53 | return dest; 54 | } 55 | 56 | /* Print debug message */ 57 | void InfoNES_DebugPrint(const char *pszMsg); 58 | 59 | /* Wait */ 60 | inline void InfoNES_Wait() {} 61 | 62 | /* Sound Initialize */ 63 | void InfoNES_SoundInit(void); 64 | 65 | /* Sound Open */ 66 | int InfoNES_SoundOpen(int samples_per_sync, int sample_rate); 67 | 68 | /* Sound Close */ 69 | void InfoNES_SoundClose(void); 70 | 71 | /* Sound Output 5 Waves - 2 Pulse, 1 Triangle, 1 Noise, 1 DPCM */ 72 | void InfoNES_SoundOutput(int samples, BYTE *wave1, BYTE *wave2, BYTE *wave3, BYTE *wave4, BYTE *wave5); 73 | int InfoNES_GetSoundBufferSize(); 74 | 75 | /* Print system message */ 76 | void InfoNES_MessageBox(const char *pszMsg, ...); 77 | 78 | void InfoNES_Error(const char *pszMsg, ...); 79 | void InfoNES_PreDrawLine(int line); 80 | void InfoNES_PostDrawLine(int line); 81 | 82 | #endif /* !InfoNES_SYSTEM_H_INCLUDED */ 83 | -------------------------------------------------------------------------------- /infones/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/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(int 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 | extern WORD PC; 79 | 80 | // The number of the clocks that it passed 81 | //extern WORD g_wPassedClocks; 82 | WORD getPassedClocks(); 83 | 84 | #endif /* !K6502_H_INCLUDED */ 85 | -------------------------------------------------------------------------------- /infones/doc/GPL2J: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/doc/GPL2J -------------------------------------------------------------------------------- /infones/doc/readme.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/doc/readme.html -------------------------------------------------------------------------------- /infones/linux/Makefile: -------------------------------------------------------------------------------- 1 | CC = gcc 2 | TARBALL = InfoNES08J 3 | 4 | # InfoNES 5 | .CFILES = ./../K6502.cpp \ 6 | ./../InfoNES.cpp \ 7 | ./../InfoNES_Mapper.cpp \ 8 | ./../InfoNES_pAPU.cpp \ 9 | ./InfoNES_System_Linux.cpp 10 | 11 | .OFILES = $(.CFILES:.cpp=.o) 12 | 13 | CCFLAGS = `gtk-config --cflags` -O2 14 | LDFILGS = `gtk-config --libs gthread` -lstdc++ # gcc3.x.x 15 | 16 | all: InfoNES 17 | 18 | InfoNES: $(.OFILES) 19 | $(CC) $(INCLUDES) -o $@ $(.OFILES) $(LDFILGS) -lm -lz 20 | 21 | .cpp.o: 22 | $(CC) $(INCLUDES) -c $(CCFLAGS) $*.cpp -o $@ 23 | 24 | clean: 25 | rm -f $(.OFILES) ../*~ ../*/*~ core 26 | 27 | cleanall: 28 | rm -f $(.OFILES) ../*~ ../*/*~ core InfoNES 29 | 30 | release: clean all 31 | 32 | tar: 33 | ( cd ..; \ 34 | tar cvf $(TARBALL).tar ./*; \ 35 | gzip $(TARBALL).tar \ 36 | ) 37 | 38 | install: 39 | install ./InfoNES /usr/local/bin 40 | -------------------------------------------------------------------------------- /infones/mapper/InfoNES_Mapper_002.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 2 (UNROM) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 2 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map2_Init() 11 | { 12 | /* Initialize Mapper */ 13 | MapperInit = Map2_Init; 14 | 15 | /* Write to Mapper */ 16 | MapperWrite = Map2_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 2 Write Function */ 54 | /*-------------------------------------------------------------------*/ 55 | void Map2_Write( WORD wAddr, BYTE byData ) 56 | { 57 | /* Set ROM Banks */ 58 | byData %= NesHeader.byRomSize; 59 | byData <<= 1; 60 | 61 | ROMBANK0 = ROMPAGE( byData ); 62 | ROMBANK1 = ROMPAGE( byData + 1 ); 63 | } 64 | -------------------------------------------------------------------------------- /infones/mapper/InfoNES_Mapper_003.cpp: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* Mapper 3 (VROM Switch) */ 4 | /* */ 5 | /*===================================================================*/ 6 | 7 | /*-------------------------------------------------------------------*/ 8 | /* Initialize Mapper 3 */ 9 | /*-------------------------------------------------------------------*/ 10 | void Map3_Init() 11 | { 12 | int nPage; 13 | 14 | /* Initialize Mapper */ 15 | MapperInit = Map3_Init; 16 | 17 | /* Write to Mapper */ 18 | MapperWrite = Map3_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 | if ( ( NesHeader.byRomSize << 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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/ppc2002/InfoNES2002.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2002/InfoNES2002.rc -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/ppc2002/InfoNES_System_ppc2002.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2002/InfoNES_System_ppc2002.cpp -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/ppc2002/res/InfoNES2002.ICO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2002/res/InfoNES2002.ICO -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/ppc2003/InfoNES2003.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2003/InfoNES2003.rc -------------------------------------------------------------------------------- /infones/ppc2003/InfoNES2003.vcp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2003/InfoNES2003.vcp -------------------------------------------------------------------------------- /infones/ppc2003/InfoNES2003.vcw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2003/InfoNES2003.vcw -------------------------------------------------------------------------------- /infones/ppc2003/InfoNES_System_ppc2003.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2003/InfoNES_System_ppc2003.cpp -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/ppc2003/res/InfoNES2003.ICO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/ppc2003/res/InfoNES2003.ICO -------------------------------------------------------------------------------- /infones/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 | -------------------------------------------------------------------------------- /infones/win32/InfoNES.dsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/win32/InfoNES.dsp -------------------------------------------------------------------------------- /infones/win32/InfoNES.dsw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/win32/InfoNES.dsw -------------------------------------------------------------------------------- /infones/win32/InfoNES.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/win32/InfoNES.ico -------------------------------------------------------------------------------- /infones/win32/InfoNES_Resource_Win.h: -------------------------------------------------------------------------------- 1 | /*===================================================================*/ 2 | /* */ 3 | /* InfoNES_Resource_Win.h : InfoNES for Windows Resource */ 4 | /* */ 5 | /* 1999/11/03 Racoon New preparation */ 6 | /* 2000/05/14 InfoNES Project */ 7 | /* */ 8 | /*===================================================================*/ 9 | 10 | #define IDR_MENU 102 11 | #define IDD_DIALOG 104 12 | #define IDB_BITMAP 105 13 | #define IDI_ICON 106 14 | #define IDC_BTN_RESET 1000 15 | #define IDC_BTN_OPEN 1001 16 | #define IDC_BTN_EXIT 1002 17 | #define IDC_OK 1003 18 | #define IDC_BTN_STOP 40001 19 | #define IDC_BTN_FAST 40002 20 | #define IDC_BTN_SLOW 40003 21 | #define IDC_BTN_ABOUT 40004 22 | #define IDC_BTN_SINGLE 40006 23 | #define IDC_BTN_DOUBLE 40007 24 | #define IDC_BTN_TRIPLE 40008 25 | #define IDC_BTN_CLIP_VERTICAL 40010 26 | #define IDC_BTN_FRAMESKIP 40011 27 | #define IDC_BTN_MUTE 40012 28 | #define IDC_BTN_INFO 40013 29 | 30 | // Next default values for new objects 31 | // 32 | #ifdef APSTUDIO_INVOKED 33 | #ifndef APSTUDIO_READONLY_SYMBOLS 34 | #define _APS_NEXT_RESOURCE_VALUE 102 35 | #define _APS_NEXT_COMMAND_VALUE 40001 36 | #define _APS_NEXT_CONTROL_VALUE 1003 37 | #define _APS_NEXT_SYMED_VALUE 101 38 | #endif 39 | #endif 40 | -------------------------------------------------------------------------------- /infones/win32/InfoNES_Resource_Win.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/win32/InfoNES_Resource_Win.rc -------------------------------------------------------------------------------- /infones/win32/InfoNES_System_Win.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/win32/InfoNES_System_Win.cpp -------------------------------------------------------------------------------- /infones/win32/bitmap1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fhoedemakers/pico-infonesPlus/5f29801547cac092f75d4f251c336f35577d7805/infones/win32/bitmap1.bmp -------------------------------------------------------------------------------- /infones/win32/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Developer Studio generated include file. 3 | // Used by InfoNES_Resource_Win.rc 4 | // 5 | #define IDR_MENU 102 6 | #define IDD_DIALOG 104 7 | #define IDB_BITMAP1 105 8 | #define IDB_BITMAP 105 9 | #define IDI_ICON 106 10 | #define IDC_OK 1003 11 | #define IDC_BTN_STOP 40001 12 | #define IDC_BTN_FAST 40002 13 | #define IDC_BTN_SLOW 40003 14 | #define IDC_BTN_ABOUT 40004 15 | #define IDC_BTN_SINGLE 40006 16 | #define IDC_BTN_DOUBLE 40007 17 | #define IDC_BTN_TRIPLE 40008 18 | #define IDC_BTN_CLIP_VERTICAL 40010 19 | #define IDC_BTN_FRAMESKIP 40011 20 | #define IDC_BTN_MUTE 40012 21 | #define IDC_BTN_INFO 40013 22 | #define IDC_STATIC -1 23 | 24 | // Next default values for new objects 25 | // 26 | #ifdef APSTUDIO_INVOKED 27 | #ifndef APSTUDIO_READONLY_SYMBOLS 28 | #define _APS_NO_MFC 1 29 | #define _APS_NEXT_RESOURCE_VALUE 108 30 | #define _APS_NEXT_COMMAND_VALUE 40014 31 | #define _APS_NEXT_CONTROL_VALUE 1004 32 | #define _APS_NEXT_SYMED_VALUE 101 33 | #endif 34 | #endif 35 | -------------------------------------------------------------------------------- /pico_sdk_import.cmake: -------------------------------------------------------------------------------- 1 | # This is a copy of /external/pico_sdk_import.cmake 2 | 3 | # This can be dropped into an external project to help locate this SDK 4 | # It should be include()ed prior to project() 5 | 6 | if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) 7 | set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) 8 | message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") 9 | endif () 10 | 11 | if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) 12 | set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) 13 | message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") 14 | endif () 15 | 16 | if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) 17 | set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) 18 | message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") 19 | endif () 20 | 21 | set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") 22 | set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") 23 | set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") 24 | 25 | if (NOT PICO_SDK_PATH) 26 | if (PICO_SDK_FETCH_FROM_GIT) 27 | include(FetchContent) 28 | set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) 29 | if (PICO_SDK_FETCH_FROM_GIT_PATH) 30 | get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") 31 | endif () 32 | FetchContent_Declare( 33 | pico_sdk 34 | GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk 35 | GIT_TAG master 36 | ) 37 | if (NOT pico_sdk) 38 | message("Downloading Raspberry Pi Pico SDK") 39 | FetchContent_Populate(pico_sdk) 40 | set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) 41 | endif () 42 | set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) 43 | else () 44 | message(FATAL_ERROR 45 | "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." 46 | ) 47 | endif () 48 | endif () 49 | 50 | get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") 51 | if (NOT EXISTS ${PICO_SDK_PATH}) 52 | message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") 53 | endif () 54 | 55 | set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) 56 | if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) 57 | message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") 58 | endif () 59 | 60 | set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) 61 | 62 | include(${PICO_SDK_INIT_CMAKE_FILE}) 63 | -------------------------------------------------------------------------------- /rom_selector.h: -------------------------------------------------------------------------------- 1 | #ifndef _22B2B909_1134_6471_AE6D_14EF3AF46BF0 2 | #define _22B2B909_1134_6471_AE6D_14EF3AF46BF0 3 | 4 | #include 5 | #include 6 | #include 7 | //#include "tar.h" 8 | 9 | inline bool checkNESMagic(const uint8_t *data) 10 | { 11 | return memcmp(data, "NES\x1a", 4) == 0; 12 | } 13 | 14 | inline bool hasNVRAM(const uint8_t *data) 15 | { 16 | auto info1 = data[6]; 17 | return info1 & 2; 18 | } 19 | 20 | class ROMSelector 21 | { 22 | const uint8_t *singleROM_{}; 23 | // std::vector entries_; 24 | 25 | // int selectedIndex_ = 0; 26 | 27 | public: 28 | void init(uintptr_t addr) 29 | { 30 | auto *p = reinterpret_cast(addr); 31 | if (checkNESMagic(p)) 32 | { 33 | singleROM_ = p; 34 | printf("Single ROM.\n"); 35 | return; 36 | } 37 | 38 | // entries_ = parseTAR(p, checkNESMagic); 39 | // printf("%zd ROMs.\n", entries_.size()); 40 | // for (auto &e : entries_) 41 | // { 42 | // printf(" %s: %p, %zd\n", e.filename.data(), e.data, e.size); 43 | // } 44 | } 45 | 46 | const uint8_t *getCurrentROM() const 47 | { 48 | if (singleROM_) 49 | { 50 | return singleROM_; 51 | } 52 | // if (!entries_.empty()) 53 | // { 54 | // return entries_[selectedIndex_].data; 55 | // } 56 | return {}; 57 | } 58 | 59 | int getCurrentNVRAMSlot() const 60 | { 61 | auto currentROM = getCurrentROM(); 62 | if (!currentROM) 63 | { 64 | return -1; 65 | } 66 | if (!hasNVRAM(currentROM)) 67 | { 68 | return -1; 69 | } 70 | if (singleROM_) 71 | { 72 | return 0; 73 | } 74 | // int slot = 0; 75 | // for (int i = 0; i < selectedIndex_; ++i) 76 | // { 77 | // if (hasNVRAM(entries_[i].data)) 78 | // { 79 | // ++slot; 80 | // } 81 | // } 82 | // return slot; 83 | return -1; 84 | } 85 | 86 | // void next() 87 | // { 88 | // if (singleROM_ || entries_.empty()) 89 | // { 90 | // return; 91 | // } 92 | // ++selectedIndex_; 93 | // if (selectedIndex_ == static_cast(entries_.size())) 94 | // { 95 | // selectedIndex_ = 0; 96 | // } 97 | // } 98 | 99 | // void prev() 100 | // { 101 | // if (singleROM_ || entries_.empty()) 102 | // { 103 | // return; 104 | // } 105 | // --selectedIndex_; 106 | // if (selectedIndex_ < 0) 107 | // { 108 | // selectedIndex_ = static_cast(entries_.size() - 1); 109 | // } 110 | // } 111 | }; 112 | 113 | #endif /* _22B2B909_1134_6471_AE6D_14EF3AF46BF0 */ 114 | -------------------------------------------------------------------------------- /splash.cpp: -------------------------------------------------------------------------------- 1 | #include "menu.h" 2 | #include "FrensHelpers.h" 3 | #include 4 | 5 | // called by menu.cpp 6 | // shows emulator specific splash screen 7 | static int fgcolorSplash = DEFAULT_FGCOLOR; 8 | static int bgcolorSplash = DEFAULT_BGCOLOR; 9 | void splash() 10 | { 11 | char s[SCREEN_COLS + 1]; 12 | ClearScreen(bgcolorSplash); 13 | 14 | strcpy(s, "Pico-Info"); 15 | putText(SCREEN_COLS / 2 - (strlen(s) + 4) / 2, 2, s, fgcolorSplash, bgcolorSplash); 16 | 17 | putText((SCREEN_COLS / 2 - (strlen(s)) / 2) + 7, 2, "N", CRED, bgcolorSplash); 18 | putText((SCREEN_COLS / 2 - (strlen(s)) / 2) + 8, 2, "E", CGREEN, bgcolorSplash); 19 | putText((SCREEN_COLS / 2 - (strlen(s)) / 2) + 9, 2, "S", CBLUE, bgcolorSplash); 20 | putText((SCREEN_COLS / 2 - (strlen(s)) / 2) + 10, 2, "+", fgcolorSplash, bgcolorSplash); 21 | 22 | strcpy(s, "NES emulator for RP2040/2350"); 23 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 3, s, fgcolorSplash, bgcolorSplash); 24 | strcpy(s, "Emulator"); 25 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 5, s, fgcolorSplash, bgcolorSplash); 26 | strcpy(s, "@jay_kumogata"); 27 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 6, s, CLIGHTBLUE, bgcolorSplash); 28 | 29 | strcpy(s, "Pico Port"); 30 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 9, s, fgcolorSplash, bgcolorSplash); 31 | strcpy(s, "@shuichi_takano"); 32 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 10, s, CLIGHTBLUE, bgcolorSplash); 33 | 34 | strcpy(s, "Menu System & SD Card Support"); 35 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 13, s, fgcolorSplash, bgcolorSplash); 36 | strcpy(s, "@frenskefrens"); 37 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 14, s, CLIGHTBLUE, bgcolorSplash); 38 | 39 | strcpy(s, "NES/WII controller support"); 40 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 17, s, fgcolorSplash, bgcolorSplash); 41 | 42 | strcpy(s, "@PaintYourDragon @adafruit"); 43 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 18, s, CLIGHTBLUE, bgcolorSplash); 44 | 45 | strcpy(s, "PCB Design"); 46 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 21, s, fgcolorSplash, bgcolorSplash); 47 | 48 | strcpy(s, "@johnedgarpark"); 49 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 22, s, CLIGHTBLUE, bgcolorSplash); 50 | 51 | strcpy(s, "https://github.com/"); 52 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 25, s, CLIGHTBLUE, bgcolorSplash); 53 | strcpy(s, "fhoedemakers/pico-infonesPlus"); 54 | putText(SCREEN_COLS / 2 - strlen(s) / 2, 26, s, CLIGHTBLUE, bgcolorSplash); 55 | } --------------------------------------------------------------------------------