src/mess/machine/nes_pcb.c
| r8292 | r8293 | |
| 300 | 300 | /* Discrete board IC_74x161x161x32 */ |
| 301 | 301 | { "BANDAI-74*161/161/32", DIS_74X161X161X32 }, |
| 302 | 302 | { "TAITO-74*161/161/32", DIS_74X161X161X32 }, |
| 303 | | /* FIXME: Made up boards the different mirroring handling */ |
| 304 | | { "BANDAI-74*161/161/32-A", DIS_74X161X161X32_A }, |
| 305 | 303 | /* Discrete board IC_74x161x138 */ |
| 306 | 304 | { "BIT-CORP-74*161/138", DIS_74X161X138 }, |
| 307 | 305 | // |
| r8292 | r8293 | |
| 366 | 364 | { "NAMCOT-3453", NAMCOT_3453 }, |
| 367 | 365 | // |
| 368 | 366 | { "SUNSOFT-1", SUNSOFT_1 }, |
| 369 | | { "SUNSOFT-2", SUNSOFT_2_B }, |
| 367 | { "SUNSOFT-2", SUNSOFT_2 }, |
| 370 | 368 | { "SUNSOFT-3", SUNSOFT_3 }, |
| 371 | | /* FIXME: Made up boards the different mirroring handling */ |
| 372 | | { "SUNSOFT-2A", SUNSOFT_2_A }, |
| 373 | | { "SUNSOFT-2B", SUNSOFT_2_B }, |
| 374 | 369 | // |
| 375 | 370 | { "TAITO-TC0190FMC", TAITO_TC0190FMC }, |
| 376 | 371 | { "TAITO-TC0190FMC+PAL16R4", TAITO_TC0190FMCP }, |
| r8292 | r8293 | |
| 2530 | 2525 | |
| 2531 | 2526 | *************************************************************/ |
| 2532 | 2527 | |
| 2533 | | static WRITE8_HANDLER( dis_74x161x161x32a_w ) |
| 2528 | static WRITE8_HANDLER( dis_74x161x161x32_w ) |
| 2534 | 2529 | { |
| 2530 | nes_state *state = (nes_state *)space->machine->driver_data; |
| 2535 | 2531 | LOG_MMC(("dis_74x161x161x32_w, offset: %04x, data: %02x\n", offset, data)); |
| 2536 | 2532 | |
| 2533 | if (!state->hard_mirroring) // there are two 'variants' depending on hardwired or mapper ctrl mirroring |
| 2534 | set_nt_mirroring(space->machine, BIT(data, 7) ? PPU_MIRROR_HIGH : PPU_MIRROR_LOW); |
| 2537 | 2535 | chr8(space->machine, data, CHRROM); |
| 2538 | 2536 | prg16_89ab(space->machine, data >> 4); |
| 2539 | 2537 | } |
| 2540 | 2538 | |
| 2541 | | static WRITE8_HANDLER( dis_74x161x161x32_w ) |
| 2542 | | { |
| 2543 | | LOG_MMC(("dis_74x161x161x32_w, offset: %04x, data: %02x\n", offset, data)); |
| 2544 | | |
| 2545 | | set_nt_mirroring(space->machine, BIT(data, 7) ? PPU_MIRROR_HIGH : PPU_MIRROR_LOW); |
| 2546 | | dis_74x161x161x32a_w(space, offset, data); |
| 2547 | | } |
| 2548 | | |
| 2549 | 2539 | /************************************************************* |
| 2550 | 2540 | |
| 2551 | 2541 | Bandai LZ93D50 boards emulation |
| r8292 | r8293 | |
| 2764 | 2754 | |
| 2765 | 2755 | Irem G-101 board emulation |
| 2766 | 2756 | |
| 2767 | | Major League uses hardwired mirroring, making necessary two |
| 2768 | | distinct pcb_id |
| 2757 | Major League uses hardwired mirroring |
| 2769 | 2758 | |
| 2770 | 2759 | iNES: mapper 32 |
| 2771 | 2760 | |
| 2772 | 2761 | *************************************************************/ |
| 2773 | 2762 | |
| 2774 | | static WRITE8_HANDLER( g101a_w ) |
| 2763 | static WRITE8_HANDLER( g101_w ) |
| 2775 | 2764 | { |
| 2776 | 2765 | nes_state *state = (nes_state *)space->machine->driver_data; |
| 2777 | 2766 | LOG_MMC(("g101_w, offset: %04x, data: %02x\n", offset, data)); |
| r8292 | r8293 | |
| 2784 | 2773 | break; |
| 2785 | 2774 | case 0x1000: |
| 2786 | 2775 | state->mmc_latch1 = BIT(data, 1); |
| 2776 | if (!state->hard_mirroring) // there are two 'variants' depending on hardwired or mapper ctrl mirroring |
| 2777 | set_nt_mirroring(space->machine, BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); |
| 2787 | 2778 | break; |
| 2788 | 2779 | case 0x2000: |
| 2789 | 2780 | prg8_ab(space->machine, data); |
| r8292 | r8293 | |
| 2794 | 2785 | } |
| 2795 | 2786 | } |
| 2796 | 2787 | |
| 2797 | | static WRITE8_HANDLER( g101_w ) |
| 2798 | | { |
| 2799 | | LOG_MMC(("g101_w, offset: %04x, data: %02x\n", offset, data)); |
| 2800 | | |
| 2801 | | if ((offset & 0x7000) == 0x1000) |
| 2802 | | set_nt_mirroring(space->machine, BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); |
| 2803 | | |
| 2804 | | g101a_w(space, offset, data); |
| 2805 | | } |
| 2806 | | |
| 2807 | | |
| 2808 | 2788 | /************************************************************* |
| 2809 | 2789 | |
| 2810 | 2790 | Irem H-3001 board emulation |
| r8292 | r8293 | |
| 3214 | 3194 | shift = BIT(shifted_offs, 8) * 4; |
| 3215 | 3195 | bank = ((shifted_offs & 0x7000) - 0x3000) / 0x0800 + BIT(shifted_offs, 9); |
| 3216 | 3196 | state->mmc_vrom_bank[bank] = (state->mmc_vrom_bank[bank] & (0xf0 >> shift)) |
| 3217 | | | ((data >> state->vrc_ls_chr) << shift); |
| 3197 | | ((data >> state->vrc_ls_chr) << shift); |
| 3218 | 3198 | chr1_x(space->machine, bank, state->mmc_vrom_bank[bank], CHRROM); |
| 3219 | 3199 | } |
| 3220 | 3200 | else |
| r8292 | r8293 | |
| 3420 | 3400 | break; |
| 3421 | 3401 | case 0x3300: |
| 3422 | 3402 | switch (data & 0x0c) |
| 3423 | | { |
| 3403 | { |
| 3424 | 3404 | case 0x00: set_nt_mirroring(space->machine, PPU_MIRROR_VERT); break; |
| 3425 | 3405 | case 0x04: set_nt_mirroring(space->machine, PPU_MIRROR_HORZ); break; |
| 3426 | 3406 | case 0x08: set_nt_mirroring(space->machine, PPU_MIRROR_LOW); break; |
| 3427 | 3407 | case 0x0c: set_nt_mirroring(space->machine, PPU_MIRROR_HIGH); break; |
| 3428 | | } |
| 3408 | } |
| 3429 | 3409 | break; |
| 3430 | 3410 | case 0x5000: |
| 3431 | 3411 | case 0x5100: |
| r8292 | r8293 | |
| 3516 | 3496 | |
| 3517 | 3497 | case 0x6000: |
| 3518 | 3498 | switch (data & 0x03) |
| 3519 | | { |
| 3499 | { |
| 3520 | 3500 | case 0x00: set_nt_mirroring(space->machine, PPU_MIRROR_VERT); break; |
| 3521 | 3501 | case 0x01: set_nt_mirroring(space->machine, PPU_MIRROR_HORZ); break; |
| 3522 | 3502 | case 0x02: set_nt_mirroring(space->machine, PPU_MIRROR_LOW); break; |
| 3523 | 3503 | case 0x03: set_nt_mirroring(space->machine, PPU_MIRROR_HIGH); break; |
| 3524 | | } |
| 3504 | } |
| 3525 | 3505 | break; |
| 3526 | 3506 | case 0x6008: case 0x6010: case 0x6018: |
| 3527 | 3507 | state->IRQ_count_latch = data; |
| r8292 | r8293 | |
| 3687 | 3667 | |
| 3688 | 3668 | *************************************************************/ |
| 3689 | 3669 | |
| 3690 | | static WRITE8_HANDLER( sunsoft2a_w ) |
| 3670 | static WRITE8_HANDLER( sunsoft2_w ) |
| 3691 | 3671 | { |
| 3672 | nes_state *state = (nes_state *)space->machine->driver_data; |
| 3692 | 3673 | UINT8 sunsoft_helper = (data & 0x07) | ((data & 0x80) ? 0x08 : 0x00); |
| 3693 | 3674 | LOG_MMC(("mapper93_w, offset: %04x, data: %02x\n", offset, data)); |
| 3694 | | |
| 3675 | |
| 3676 | if (!state->hard_mirroring) // there are two 'variants' depending on hardwired or mapper ctrl mirroring |
| 3677 | set_nt_mirroring(space->machine, BIT(data, 3) ? PPU_MIRROR_HIGH : PPU_MIRROR_LOW); |
| 3695 | 3678 | prg16_89ab(space->machine, data >> 4); |
| 3696 | 3679 | chr8(space->machine, sunsoft_helper, CHRROM); |
| 3697 | 3680 | } |
| 3698 | 3681 | |
| 3699 | | static WRITE8_HANDLER( sunsoft2b_w ) |
| 3700 | | { |
| 3701 | | LOG_MMC(("mapper89_m_w, offset: %04x, data: %02x\n", offset, data)); |
| 3702 | | |
| 3703 | | set_nt_mirroring(space->machine, BIT(data, 3) ? PPU_MIRROR_HIGH : PPU_MIRROR_LOW); |
| 3704 | | sunsoft2a_w(space, offset, data); |
| 3705 | | } |
| 3706 | | |
| 3707 | 3682 | /************************************************************* |
| 3708 | 3683 | |
| 3709 | 3684 | Sunsoft-3 board emulation |
| r8292 | r8293 | |
| 3982 | 3957 | /************************************************************* |
| 3983 | 3958 | |
| 3984 | 3959 | Taito X1-017 board emulation |
| 3985 | | |
| 3986 | | Actually, Fudou Myouou Den uses a variant of the board with |
| 3987 | | CIRAM, making necessary two distinct mappers & pcb_id. |
| 3988 | | |
| 3989 | | Also, we miss to emulate the security check at 0x6000-0x73ff |
| 3960 | |
| 3961 | We miss to emulate the security check at 0x6000-0x73ff |
| 3990 | 3962 | and the ram! |
| 3991 | 3963 | |
| 3992 | 3964 | iNES: mapper 82 |
| r8292 | r8293 | |
| 10371 | 10343 | { DIS_74X139X74, NES_NOACCESS, NES_WRITEONLY(dis_74x139x74_m_w), NES_NOACCESS, NULL, NULL, NULL }, |
| 10372 | 10344 | { DIS_74X377, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(dis_74x377_w), NULL, NULL, NULL }, |
| 10373 | 10345 | { DIS_74X161X161X32, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(dis_74x161x161x32_w), NULL, NULL, NULL }, |
| 10374 | | { DIS_74X161X161X32_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(dis_74x161x161x32a_w), NULL, NULL, NULL }, |
| 10375 | 10346 | { DIS_74X161X138, NES_NOACCESS, NES_WRITEONLY(dis_74x161x138_m_w), NES_NOACCESS, NULL, NULL, NULL }, |
| 10376 | 10347 | { BANDAI_LZ93, NES_NOACCESS, NES_WRITEONLY(lz93d50_m_w), NES_WRITEONLY(lz93d50_w), NULL, NULL, bandai_lz_irq }, |
| 10377 | 10348 | { BANDAI_FCG, NES_NOACCESS, NES_WRITEONLY(lz93d50_m_w), NES_WRITEONLY(lz93d50_w), NULL, NULL, bandai_lz_irq }, |
| r8292 | r8293 | |
| 10380 | 10351 | { BANDAI_KARAOKE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(bandai_ks_w), NULL, NULL, NULL }, |
| 10381 | 10352 | { BANDAI_OEKAKIDS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(bandai_ok_w), NULL, NULL, NULL }, |
| 10382 | 10353 | { IREM_G101, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(g101_w), NULL, NULL, NULL }, |
| 10383 | | { IREM_G101_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(g101a_w), NULL, NULL, NULL }, |
| 10384 | 10354 | { IREM_LROG017, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(lrog017_w), NULL, NULL, NULL }, |
| 10385 | 10355 | { IREM_H3001, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(h3001_w), NULL, NULL, h3001_irq }, |
| 10386 | 10356 | { IREM_TAM_S1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(tam_s1_w), NULL, NULL, NULL }, |
| r8292 | r8293 | |
| 10399 | 10369 | { KONAMI_VRC7, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(konami_vrc7_w), NULL, NULL, konami_irq }, |
| 10400 | 10370 | { NAMCOT_163, {namcot163_l_w, namcot163_l_r}, NES_NOACCESS, NES_WRITEONLY(namcot163_w), NULL, NULL, namcot163_irq }, |
| 10401 | 10371 | { SUNSOFT_1, NES_NOACCESS, NES_WRITEONLY(sunsoft1_m_w), NES_NOACCESS, NULL, NULL, NULL }, |
| 10402 | | { SUNSOFT_2_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(sunsoft2a_w), NULL, NULL, NULL }, |
| 10403 | | { SUNSOFT_2_B, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(sunsoft2b_w), NULL, NULL, NULL }, |
| 10372 | { SUNSOFT_2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(sunsoft2_w), NULL, NULL, NULL }, |
| 10404 | 10373 | { SUNSOFT_3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(sunsoft3_w), NULL, NULL, sunsoft3_irq }, |
| 10405 | 10374 | { TAITO_TC0190FMC, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(tc0190fmc_w), NULL, NULL, NULL }, |
| 10406 | 10375 | { TAITO_TC0190FMCP, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(tc0190fmc_p16_w), NULL, NULL, mmc3_irq }, |
src/mess/machine/nes_mmc.h
| r8292 | r8293 | |
| 12 | 12 | STD_TQROM, STD_TVROM, STD_UN1ROM, STD_UXROM, |
| 13 | 13 | HVC_FAMBASIC, NES_QJ, PAL_ZZ, UXROM_CC, |
| 14 | 14 | STD_DRROM, STD_SXROM_A, STD_SOROM, STD_SOROM_A, |
| 15 | | /* Discrete components boards (by various manufacturer */ |
| 16 | | DIS_74X161X138, DIS_74X139X74, DIS_74X377, |
| 17 | | DIS_74X161X161X32, DIS_74X161X161X32_A, |
| 15 | /* Discrete components boards (by various manufacturer) */ |
| 16 | DIS_74X161X138, DIS_74X139X74, |
| 17 | DIS_74X377, DIS_74X161X161X32, |
| 18 | 18 | /* Active Enterprises */ |
| 19 | 19 | ACTENT_ACT52, |
| 20 | 20 | /* AGCI */ |
| r8292 | r8293 | |
| 33 | 33 | /* Dreamtech */ |
| 34 | 34 | DREAMTECH_BOARD, |
| 35 | 35 | /* Irem */ |
| 36 | | IREM_G101, IREM_G101_A, IREM_HOLYDIV, |
| 37 | | IREM_H3001, IREM_LROG017, IREM_TAM_S1, |
| 36 | IREM_G101, IREM_H3001, IREM_LROG017, |
| 37 | IREM_TAM_S1, IREM_HOLYDIV, |
| 38 | 38 | /* Jaleco */ |
| 39 | 39 | JALECO_SS88006, JALECO_JF11, JALECO_JF13, |
| 40 | 40 | JALECO_JF16, JALECO_JF17, JALECO_JF19, |
| r8292 | r8293 | |
| 55 | 55 | SACHEN_TCU01, SACHEN_TCU02, |
| 56 | 56 | SACHEN_74LS374, SACHEN_74LS374_A, |
| 57 | 57 | /* Sunsoft */ |
| 58 | | SUNSOFT_1, SUNSOFT_2_A, SUNSOFT_2_B, SUNSOFT_3, |
| 59 | | SUNSOFT_4, SUNSOFT_DCS, SUNSOFT_5B, SUNSOFT_FME7, |
| 58 | SUNSOFT_1, SUNSOFT_2, SUNSOFT_3, SUNSOFT_4, |
| 59 | SUNSOFT_DCS, SUNSOFT_5B, SUNSOFT_FME7, |
| 60 | 60 | /* Taito */ |
| 61 | 61 | TAITO_TC0190FMC, TAITO_TC0190FMCP, |
| 62 | 62 | TAITO_X1_005, TAITO_X1_005_A, TAITO_X1_017, |