void ines_mapr_setup( int mapper, int *pcb_id ) { const nes_mmc *mmc = nes_mapper_lookup(mapper); if (mmc == NULL) fatalerror("Unimplemented Mapper %d\n", mapper); *pcb_id = mmc->pcb_id; }
int nes_get_mmc_id( running_machine &machine, int mapper ) { const nes_mmc *mmc = nes_mapper_lookup(mapper); if (mmc == NULL) fatalerror("Unimplemented Mapper %d\n", mapper); return mmc->pcb_id; }
static void init_nes_core (void) { /* We set these here in case they weren't set in the cart loader */ nes.rom = memory_region(REGION_CPU1); nes.vrom = memory_region(REGION_GFX1); nes.vram = memory_region(REGION_GFX2); nes.wram = memory_region(REGION_USER1); /* Brutal hack put in as a consequence of the new memory system; we really * need to fix the NES code */ memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x07ff, 0, 0x1800, MRA8_BANK10); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x07ff, 0, 0x1800, MWA8_BANK10); memory_set_bankptr(10, nes.rom); battery_ram = nes.wram; /* Set up the memory handlers for the mapper */ switch (nes.mapper) { case 20: nes.slow_banking = 0; memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4030, 0x403f, 0, 0, fds_r); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000, 0xdfff, 0, 0, MRA8_RAM); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xe000, 0xffff, 0, 0, MRA8_ROM); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4020, 0x402f, 0, 0, fds_w); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000, 0xdfff, 0, 0, MWA8_RAM); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xe000, 0xffff, 0, 0, MWA8_ROM); break; case 40: nes.slow_banking = 1; /* Game runs code in between banks, so we do things different */ memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000, 0x7fff, 0, 0, MRA8_RAM); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x8000, 0xffff, 0, 0, MRA8_ROM); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000, 0x7fff, 0, 0, nes_mid_mapper_w); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x8000, 0xffff, 0, 0, nes_mapper_w); break; default: nes.slow_banking = 0; memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000, 0x7fff, 0, 0, MRA8_BANK5); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x8000, 0x9fff, 0, 0, MRA8_BANK1); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xa000, 0xbfff, 0, 0, MRA8_BANK2); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xc000, 0xdfff, 0, 0, MRA8_BANK3); memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xe000, 0xffff, 0, 0, MRA8_BANK4); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000, 0x7fff, 0, 0, nes_mid_mapper_w); memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x8000, 0xffff, 0, 0, nes_mapper_w); break; } /* Set up the mapper callbacks */ { const mmc *mapper; mapper = nes_mapper_lookup(nes.mapper); if (mapper) { mmc_write_low = mapper->mmc_write_low; mmc_read_low = mapper->mmc_read_low; mmc_write_mid = mapper->mmc_write_mid; mmc_write = mapper->mmc_write; ppu_latch = mapper->ppu_latch; // mmc_irq = mmc_list[i].mmc_irq; } else { logerror ("Mapper %d is not yet supported, defaulting to no mapper.\n",nes.mapper); mmc_write_low = mmc_write_mid = mmc_write = NULL; mmc_read_low = NULL; } } /* Load a battery file, but only if there's no trainer since they share */ /* overlapping memory. */ if (nes.trainer) return; /* We need this because battery ram is loaded before the */ /* memory subsystem is set up. When this routine is called */ /* everything is ready, so we can just copy over the data */ /* we loaded before. */ memcpy (battery_ram, battery_data, BATTERY_SIZE); }