Previous 199869 Revisions Next

r18065 Friday 21st September, 2012 at 16:41:12 UTC by Fabio Priuli
nes.c: partially split cart variables from the system ones. no whatsnew.
[src/mess/includes]nes.h
[src/mess/machine]nes.c nes_ines.c nes_pcb.c

trunk/src/mess/machine/nes.c
r18064r18065
7979   }
8080
8181   /* Set up the mapper callbacks */
82   pcb_handlers_setup(machine());
82   pcb_handlers_setup();
8383
8484   /* Set up the memory handlers for the mapper */
8585   space.install_read_bank(0x8000, 0x9fff, "bank1");
trunk/src/mess/machine/nes_ines.c
r18064r18065
4545   }
4646}
4747
48WRITE8_MEMBER(nes_state::mapper6_l_w)
48WRITE8_MEMBER(nes_carts_state::mapper6_l_w)
4949{
5050   LOG_MMC(("mapper6_l_w, offset: %04x, data: %02x\n", offset, data));
5151
r18064r18065
7272   }
7373}
7474
75WRITE8_MEMBER(nes_state::mapper6_w)
75WRITE8_MEMBER(nes_carts_state::mapper6_w)
7676{
7777   LOG_MMC(("mapper6_w, offset: %04x, data: %02x\n", offset, data));
7878
r18064r18065
9999
100100*************************************************************/
101101
102WRITE8_MEMBER(nes_state::mapper8_w)
102WRITE8_MEMBER(nes_carts_state::mapper8_w)
103103{
104104   LOG_MMC(("mapper8_w, offset: %04x, data: %02x\n", offset, data));
105105
r18064r18065
119119
120120*************************************************************/
121121
122WRITE8_MEMBER(nes_state::mapper17_l_w)
122WRITE8_MEMBER(nes_carts_state::mapper17_l_w)
123123{
124124   LOG_MMC(("mapper17_l_w, offset: %04x, data: %02x\n", offset, data));
125125
trunk/src/mess/machine/nes_pcb.c
r18064r18065
714714
715715 *************************************************************/
716716
717WRITE8_MEMBER(nes_state::uxrom_w)
717WRITE8_MEMBER(nes_carts_state::uxrom_w)
718718{
719719   LOG_MMC(("uxrom_w, offset: %04x, data: %02x\n", offset, data));
720720
r18064r18065
737737
738738 *************************************************************/
739739
740WRITE8_MEMBER(nes_state::uxrom_cc_w)
740WRITE8_MEMBER(nes_carts_state::uxrom_cc_w)
741741{
742742   LOG_MMC(("uxrom_cc_w, offset: %04x, data: %02x\n", offset, data));
743743
r18064r18065
760760
761761 *************************************************************/
762762
763WRITE8_MEMBER(nes_state::un1rom_w)
763WRITE8_MEMBER(nes_carts_state::un1rom_w)
764764{
765765   LOG_MMC(("un1rom_w, offset: %04x, data: %02x\n", offset, data));
766766
r18064r18065
791791
792792 *************************************************************/
793793
794WRITE8_MEMBER(nes_state::cnrom_w)
794WRITE8_MEMBER(nes_carts_state::cnrom_w)
795795{
796796   LOG_MMC(("cnrom_w, offset: %04x, data: %02x\n", offset, data));
797797
r18064r18065
820820
821821 *************************************************************/
822822
823WRITE8_MEMBER(nes_state::bandai_pt554_m_w)
823WRITE8_MEMBER(nes_carts_state::bandai_pt554_m_w)
824824{
825825   LOG_MMC(("Bandai PT-554 Sound write, data: %02x\n", data));
826826
r18064r18065
845845
846846 *************************************************************/
847847
848WRITE8_MEMBER(nes_state::cprom_w)
848WRITE8_MEMBER(nes_carts_state::cprom_w)
849849{
850850   LOG_MMC(("cprom_w, offset: %04x, data: %02x\n", offset, data));
851851   chr4_4(machine(), data, CHRRAM);
r18064r18065
867867
868868 *************************************************************/
869869
870WRITE8_MEMBER(nes_state::axrom_w)
870WRITE8_MEMBER(nes_carts_state::axrom_w)
871871{
872872   LOG_MMC(("axrom_w, offset: %04x, data: %02x\n", offset, data));
873873
r18064r18065
887887
888888 *************************************************************/
889889
890WRITE8_MEMBER(nes_state::bxrom_w)
890WRITE8_MEMBER(nes_carts_state::bxrom_w)
891891{
892892   /* This portion of the mapper is nearly identical to Mapper 7, except no one-screen mirroring */
893893   /* Deadly Towers is really a BxROM game - the demo screens look wrong using mapper 7. */
r18064r18065
908908
909909 *************************************************************/
910910
911WRITE8_MEMBER(nes_state::gxrom_w)
911WRITE8_MEMBER(nes_carts_state::gxrom_w)
912912{
913913   LOG_MMC(("gxrom_w, offset %04x, data: %02x\n", offset, data));
914914
r18064r18065
11001100   }
11011101}
11021102
1103WRITE8_MEMBER(nes_state::sxrom_w)
1103WRITE8_MEMBER(nes_carts_state::sxrom_w)
11041104{
1105
11061105   LOG_MMC(("sxrom_w, offset: %04x, data: %02x\n", offset, data));
11071106   common_sxrom_write_handler(space, offset, data, m_pcb_id);
11081107}
r18064r18065
11481147   }
11491148}
11501149
1151WRITE8_MEMBER(nes_state::pxrom_w)
1150WRITE8_MEMBER(nes_carts_state::pxrom_w)
11521151{
11531152   LOG_MMC(("pxrom_w, offset: %04x, data: %02x\n", offset, data));
11541153   switch (offset & 0x7000)
r18064r18065
11971196
11981197*************************************************************/
11991198
1200WRITE8_MEMBER(nes_state::fxrom_w)
1199WRITE8_MEMBER(nes_carts_state::fxrom_w)
12011200{
12021201   LOG_MMC(("fxrom_w, offset: %04x, data: %02x\n", offset, data));
12031202   switch (offset & 0x7000)
r18064r18065
12941293   state->m_IRQ_clear = 0;
12951294}
12961295
1297WRITE8_MEMBER(nes_state::txrom_w)
1296WRITE8_MEMBER(nes_carts_state::txrom_w)
12981297{
12991298   UINT8 mmc_helper, cmd;
13001299
r18064r18065
13711370
13721371 *************************************************************/
13731372
1374WRITE8_MEMBER(nes_state::hkrom_m_w)
1373WRITE8_MEMBER(nes_carts_state::hkrom_m_w)
13751374{
13761375   UINT8 write_hi, write_lo;
13771376   LOG_MMC(("hkrom_m_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
13901389      m_mapper_bram[offset & (m_mapper_bram_size - 1)] = data;
13911390}
13921391
1393READ8_MEMBER(nes_state::hkrom_m_r)
1392READ8_MEMBER(nes_carts_state::hkrom_m_r)
13941393{
13951394   LOG_MMC(("hkrom_m_r, offset: %04x\n", offset));
13961395
r18064r18065
14101409   return 0x00;
14111410}
14121411
1413WRITE8_MEMBER(nes_state::hkrom_w)
1412WRITE8_MEMBER(nes_carts_state::hkrom_w)
14141413{
14151414   UINT8 mmc6_helper;
14161415   LOG_MMC(("hkrom_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
14871486   chr1_x(machine, start, bank, source);
14881487}
14891488
1490WRITE8_MEMBER(nes_state::txsrom_w)
1489WRITE8_MEMBER(nes_carts_state::txsrom_w)
14911490{
14921491   LOG_MMC(("txsrom_w, offset: %04x, data: %02x\n", offset, data));
14931492
r18064r18065
15371536   chr1_x(machine, chr_page ^ 7, (state->m_mmc_vrom_bank[5] & chr_mask[5]), chr_src[5]);
15381537}
15391538
1540WRITE8_MEMBER(nes_state::tqrom_w)
1539WRITE8_MEMBER(nes_carts_state::tqrom_w)
15411540{
15421541   UINT8 mmc_helper, cmd;
15431542   LOG_MMC(("tqrom_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
15881587
15891588 *************************************************************/
15901589
1591WRITE8_MEMBER(nes_state::zz_m_w)
1590WRITE8_MEMBER(nes_carts_state::zz_m_w)
15921591{
15931592   UINT8 mmc_helper = data & 0x07;
15941593   LOG_MMC(("zz_m_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
16101609
16111610 *************************************************************/
16121611
1613WRITE8_MEMBER(nes_state::qj_m_w)
1612WRITE8_MEMBER(nes_carts_state::qj_m_w)
16141613{
16151614   LOG_MMC(("qj_m_w, offset: %04x, data: %02x\n", offset, data));
16161615
r18064r18065
18461845   }
18471846}
18481847
1849READ8_MEMBER(nes_state::exrom_l_r)
1848READ8_MEMBER(nes_carts_state::exrom_l_r)
18501849{
18511850   int retVal;
18521851
r18064r18065
18821881}
18831882
18841883
1885WRITE8_MEMBER(nes_state::exrom_l_w)
1884WRITE8_MEMBER(nes_carts_state::exrom_l_w)
18861885{
18871886
18881887   //  LOG_MMC(("Mapper 5 write, offset: %04x, data: %02x\n", offset + 0x4100, data));
r18064r18065
23832382   }
23842383}
23852384
2386WRITE8_MEMBER(nes_state::ntbrom_w)
2385WRITE8_MEMBER(nes_carts_state::ntbrom_w)
23872386{
23882387
23892388   LOG_MMC(("ntbrom_w, offset %04x, data: %02x\n", offset, data));
r18064r18065
24612460   }
24622461}
24632462
2464WRITE8_MEMBER(nes_state::jxrom_w)
2463WRITE8_MEMBER(nes_carts_state::jxrom_w)
24652464{
24662465   LOG_MMC(("jxrom_w, offset %04x, data: %02x\n", offset, data));
24672466
r18064r18065
25532552
25542553 *************************************************************/
25552554
2556WRITE8_MEMBER(nes_state::dxrom_w)
2555WRITE8_MEMBER(nes_carts_state::dxrom_w)
25572556{
25582557   LOG_MMC(("dxrom_w, offset: %04x, data: %02x\n", offset, data));
25592558
r18064r18065
25952594
25962595 *************************************************************/
25972596
2598WRITE8_MEMBER(nes_state::namcot3453_w)
2597WRITE8_MEMBER(nes_carts_state::namcot3453_w)
25992598{
26002599   LOG_MMC(("namcot3453_w, offset: %04x, data: %02x\n", offset, data));
26012600
r18064r18065
26182617
26192618 *************************************************************/
26202619
2621WRITE8_MEMBER(nes_state::namcot3446_w)
2620WRITE8_MEMBER(nes_carts_state::namcot3446_w)
26222621{
26232622   LOG_MMC(("namcot3446_w, offset: %04x, data: %02x\n", offset, data));
26242623
r18064r18065
26622661
26632662 *************************************************************/
26642663
2665WRITE8_MEMBER(nes_state::namcot3425_w)
2664WRITE8_MEMBER(nes_carts_state::namcot3425_w)
26662665{
26672666   UINT8 mode;
26682667   LOG_MMC(("namcot3425_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
27152714
27162715 *************************************************************/
27172716
2718WRITE8_MEMBER(nes_state::dis_74x377_w)
2717WRITE8_MEMBER(nes_carts_state::dis_74x377_w)
27192718{
27202719   LOG_MMC(("dis_74x377_w, offset: %04x, data: %02x\n", offset, data));
27212720
r18064r18065
27312730
27322731 *************************************************************/
27332732
2734WRITE8_MEMBER(nes_state::dis_74x139x74_m_w)
2733WRITE8_MEMBER(nes_carts_state::dis_74x139x74_m_w)
27352734{
27362735   LOG_MMC(("dis_74x139x74_m_w, offset: %04x, data: %02x\n", offset, data));
27372736
r18064r18065
27482747
27492748 *************************************************************/
27502749
2751WRITE8_MEMBER(nes_state::dis_74x161x138_m_w)
2750WRITE8_MEMBER(nes_carts_state::dis_74x161x138_m_w)
27522751{
27532752   LOG_MMC(("dis_74x161x138_m_w, offset: %04x, data: %02x\n", offset, data));
27542753
r18064r18065
27682767
27692768 *************************************************************/
27702769
2771WRITE8_MEMBER(nes_state::dis_74x161x161x32_w)
2770WRITE8_MEMBER(nes_carts_state::dis_74x161x161x32_w)
27722771{
27732772   LOG_MMC(("dis_74x161x161x32_w, offset: %04x, data: %02x\n", offset, data));
27742773
r18064r18065
28212820   }
28222821}
28232822
2824WRITE8_MEMBER(nes_state::lz93d50_w)
2823WRITE8_MEMBER(nes_carts_state::lz93d50_w)
28252824{
28262825   LOG_MMC(("lz93d50_w, offset: %04x, data: %02x\n", offset, data));
28272826
r18064r18065
28582857   }
28592858}
28602859
2861WRITE8_MEMBER(nes_state::lz93d50_m_w)
2860WRITE8_MEMBER(nes_carts_state::lz93d50_m_w)
28622861{
28632862   LOG_MMC(("lz93d50_m_w, offset: %04x, data: %02x\n", offset, data));
28642863
r18064r18065
28832882   prg16_cdef(machine, mmc_helper | 0x0f);
28842883}
28852884
2886WRITE8_MEMBER(nes_state::fjump2_w)
2885WRITE8_MEMBER(nes_carts_state::fjump2_w)
28872886{
28882887   LOG_MMC(("fjump2_w, offset: %04x, data: %02x\n", offset, data));
28892888
r18064r18065
29162915
29172916 *************************************************************/
29182917
2919WRITE8_MEMBER(nes_state::bandai_ks_w)
2918WRITE8_MEMBER(nes_carts_state::bandai_ks_w)
29202919{
29212920   LOG_MMC(("bandai_ks_w, offset: %04x, data: %02x\n", offset, data));
29222921
r18064r18065
29362935
29372936 *************************************************************/
29382937
2939WRITE8_MEMBER(nes_state::bandai_ok_w)
2938WRITE8_MEMBER(nes_carts_state::bandai_ok_w)
29402939{
29412940   UINT8 mmc_helper;
29422941   LOG_MMC(("mapper96_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
29592958
29602959 *************************************************************/
29612960
2962WRITE8_MEMBER(nes_state::lrog017_w)
2961WRITE8_MEMBER(nes_carts_state::lrog017_w)
29632962{
29642963   LOG_MMC(("lrog017_w, offset: %04x, data: %02x\n", offset, data));
29652964
r18064r18065
29752974
29762975 *************************************************************/
29772976
2978WRITE8_MEMBER(nes_state::irem_hd_w)
2977WRITE8_MEMBER(nes_carts_state::irem_hd_w)
29792978{
29802979   LOG_MMC(("irem_hd_w, offset: %04x, data: %02x\n", offset, data));
29812980
r18064r18065
29962995
29972996 *************************************************************/
29982997
2999WRITE8_MEMBER(nes_state::tam_s1_w)
2998WRITE8_MEMBER(nes_carts_state::tam_s1_w)
30002999{
30013000   LOG_MMC(("tam_s1_w, offset: %04x, data: %02x\n", offset, data));
30023001
r18064r18065
30173016
30183017 *************************************************************/
30193018
3020WRITE8_MEMBER(nes_state::g101_w)
3019WRITE8_MEMBER(nes_carts_state::g101_w)
30213020{
30223021   LOG_MMC(("g101_w, offset: %04x, data: %02x\n", offset, data));
30233022
r18064r18065
30723071   }
30733072}
30743073
3075WRITE8_MEMBER(nes_state::h3001_w)
3074WRITE8_MEMBER(nes_carts_state::h3001_w)
30763075{
30773076   LOG_MMC(("h3001_w, offset %04x, data: %02x\n", offset, data));
30783077
r18064r18065
31843183   }
31853184}
31863185
3187WRITE8_MEMBER(nes_state::ss88006_w)
3186WRITE8_MEMBER(nes_carts_state::ss88006_w)
31883187{
31893188   UINT8 bank;
31903189   LOG_MMC(("mapper18_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
32813280
32823281 *************************************************************/
32833282
3284WRITE8_MEMBER(nes_state::jf11_m_w)
3283WRITE8_MEMBER(nes_carts_state::jf11_m_w)
32853284{
32863285   LOG_MMC(("jf11_m_w, offset: %04x, data: %02x\n", offset, data));
32873286   chr8(machine(), data, CHRROM);
r18064r18065
33023301
33033302 *************************************************************/
33043303
3305WRITE8_MEMBER(nes_state::jf13_m_w)
3304WRITE8_MEMBER(nes_carts_state::jf13_m_w)
33063305{
33073306   LOG_MMC(("jf13_m_w, offset: %04x, data: %02x\n", offset, data));
33083307
r18064r18065
33313330
33323331 *************************************************************/
33333332
3334WRITE8_MEMBER(nes_state::jf16_w)
3333WRITE8_MEMBER(nes_carts_state::jf16_w)
33353334{
33363335   LOG_MMC(("jf16_w, offset: %04x, data: %02x\n", offset, data));
33373336
r18064r18065
33553354
33563355 *************************************************************/
33573356
3358WRITE8_MEMBER(nes_state::jf17_w)
3357WRITE8_MEMBER(nes_carts_state::jf17_w)
33593358{
33603359   LOG_MMC(("jf17_w, offset: %04x, data: %02x\n", offset, data));
33613360
r18064r18065
33813380
33823381 *************************************************************/
33833382
3384WRITE8_MEMBER(nes_state::jf19_w)
3383WRITE8_MEMBER(nes_carts_state::jf19_w)
33853384{
33863385   LOG_MMC(("jf19_w, offset: %04x, data: %02x\n", offset, data));
33873386
r18064r18065
34053404
34063405 *************************************************************/
34073406
3408WRITE8_MEMBER(nes_state::konami_vrc1_w)
3407WRITE8_MEMBER(nes_carts_state::konami_vrc1_w)
34093408{
34103409   LOG_MMC(("konami_vrc1_w, offset: %04x, data: %02x\n", offset, data));
34113410
r18064r18065
34463445
34473446 *************************************************************/
34483447
3449WRITE8_MEMBER(nes_state::konami_vrc2_w)
3448WRITE8_MEMBER(nes_carts_state::konami_vrc2_w)
34503449{
34513450   UINT8 bank, shift, mask;
34523451   UINT32 shifted_offs = (offset & 0x7000)
r18064r18065
34933492
34943493 *************************************************************/
34953494
3496WRITE8_MEMBER(nes_state::konami_vrc3_w)
3495WRITE8_MEMBER(nes_carts_state::konami_vrc3_w)
34973496{
34983497   LOG_MMC(("konami_vrc3_w, offset: %04x, data: %02x\n", offset, data));
34993498
r18064r18065
35603559   }
35613560}
35623561
3563WRITE8_MEMBER(nes_state::konami_vrc4_w)
3562WRITE8_MEMBER(nes_carts_state::konami_vrc4_w)
35643563{
35653564   UINT8 bank, shift, mask;
35663565   UINT32 shifted_offs = (offset & 0x7000)
r18064r18065
36483647
36493648 *************************************************************/
36503649
3651WRITE8_MEMBER(nes_state::konami_vrc6_w)
3650WRITE8_MEMBER(nes_carts_state::konami_vrc6_w)
36523651{
36533652   UINT8 bank;
36543653   UINT32 shifted_offs = (offset & 0x7000)
r18064r18065
37273726
37283727 *************************************************************/
37293728
3730WRITE8_MEMBER(nes_state::konami_vrc7_w)
3729WRITE8_MEMBER(nes_carts_state::konami_vrc7_w)
37313730{
37323731   UINT8 bank;
37333732   LOG_MMC(("konami_vrc7_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
38303829   }
38313830}
38323831
3833WRITE8_MEMBER(nes_state::namcot163_l_w)
3832WRITE8_MEMBER(nes_carts_state::namcot163_l_w)
38343833{
38353834   LOG_MMC(("namcot163_l_w, offset: %04x, data: %02x\n", offset, data));
38363835   offset += 0x100;
r18064r18065
38503849   }
38513850}
38523851
3853READ8_MEMBER(nes_state::namcot163_l_r)
3852READ8_MEMBER(nes_carts_state::namcot163_l_r)
38543853{
38553854   LOG_MMC(("namcot163_l_r, offset: %04x\n", offset));
38563855   offset += 0x100;
r18064r18065
38763875      set_nt_page(machine, page, ROM, data, 0);
38773876}
38783877
3879WRITE8_MEMBER(nes_state::namcot163_w)
3878WRITE8_MEMBER(nes_carts_state::namcot163_w)
38803879{
38813880   LOG_MMC(("namcot163_w, offset: %04x, data: %02x\n", offset, data));
38823881   switch (offset & 0x7800)
r18064r18065
39273926
39283927 *************************************************************/
39293928
3930WRITE8_MEMBER(nes_state::sunsoft1_m_w)
3929WRITE8_MEMBER(nes_carts_state::sunsoft1_m_w)
39313930{
39323931   LOG_MMC(("sunsoft1_m_w, offset: %04x, data: %02x\n", offset, data));
39333932
r18064r18065
39513950
39523951 *************************************************************/
39533952
3954WRITE8_MEMBER(nes_state::sunsoft2_w)
3953WRITE8_MEMBER(nes_carts_state::sunsoft2_w)
39553954{
39563955   UINT8 sunsoft_helper = (data & 0x07) | ((data & 0x80) ? 0x08 : 0x00);
39573956   LOG_MMC(("sunsoft2_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
39973996   }
39983997}
39993998
4000WRITE8_MEMBER(nes_state::sunsoft3_w)
3999WRITE8_MEMBER(nes_carts_state::sunsoft3_w)
40014000{
40024001   LOG_MMC(("sunsoft3_w, offset %04x, data: %02x\n", offset, data));
40034002
r18064r18065
40594058
40604059 *************************************************************/
40614060
4062WRITE8_MEMBER(nes_state::tc0190fmc_w)
4061WRITE8_MEMBER(nes_carts_state::tc0190fmc_w)
40634062{
40644063   LOG_MMC(("tc0190fmc_w, offset: %04x, data: %02x\n", offset, data));
40654064
r18064r18065
41124111
41134112 *************************************************************/
41144113
4115WRITE8_MEMBER(nes_state::tc0190fmc_p16_w)
4114WRITE8_MEMBER(nes_carts_state::tc0190fmc_p16_w)
41164115{
41174116   LOG_MMC(("tc0190fmc_p16_w, offset: %04x, data: %02x\n", offset, data));
41184117
r18064r18065
41624161
41634162 *************************************************************/
41644163
4165WRITE8_MEMBER(nes_state::x1005_m_w)
4164WRITE8_MEMBER(nes_carts_state::x1005_m_w)
41664165{
41674166   LOG_MMC(("x1005_m_w, offset: %04x, data: %02x\n", offset, data));
41684167
r18064r18065
42174216      m_mapper_bram[offset & (m_mapper_bram_size - 1)] = data;
42184217}
42194218
4220READ8_MEMBER(nes_state::x1005_m_r)
4219READ8_MEMBER(nes_carts_state::x1005_m_r)
42214220{
42224221   LOG_MMC(("x1005a_m_r, offset: %04x\n", offset));
42234222
r18064r18065
42294228   return 0xff;
42304229}
42314230
4232WRITE8_MEMBER(nes_state::x1005a_m_w)
4231WRITE8_MEMBER(nes_carts_state::x1005a_m_w)
42334232{
42344233   LOG_MMC(("x1005a_m_w, offset: %04x, data: %02x\n", offset, data));
42354234
r18064r18065
42874286   chr1_x(machine, 7 ^ state->m_mmc_latch1, state->m_mmc_vrom_bank[5], CHRROM);
42884287}
42894288
4290WRITE8_MEMBER(nes_state::x1017_m_w)
4289WRITE8_MEMBER(nes_carts_state::x1017_m_w)
42914290{
42924291   UINT8 reg = offset & 0x07;
42934292   LOG_MMC(("x1017_m_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
43374336   }
43384337}
43394338
4340READ8_MEMBER(nes_state::x1017_m_r)
4339READ8_MEMBER(nes_carts_state::x1017_m_r)
43414340{
43424341   LOG_MMC(("x1017_m_r, offset: %04x\n", offset));
43434342
r18064r18065
43704369
43714370 *************************************************************/
43724371
4373WRITE8_MEMBER(nes_state::agci_50282_w)
4372WRITE8_MEMBER(nes_carts_state::agci_50282_w)
43744373{
43754374   LOG_MMC(("agci_50282_w, offset: %04x, data: %02x\n", offset, data));
43764375
r18064r18065
43894388
43904389 *************************************************************/
43914390
4392WRITE8_MEMBER(nes_state::nina01_m_w)
4391WRITE8_MEMBER(nes_carts_state::nina01_m_w)
43934392{
43944393   LOG_MMC(("nina01_m_w, offset: %04x, data: %02x\n", offset, data));
43954394
r18064r18065
44204419
44214420 *************************************************************/
44224421
4423WRITE8_MEMBER(nes_state::nina06_l_w)
4422WRITE8_MEMBER(nes_carts_state::nina06_l_w)
44244423{
44254424   LOG_MMC(("nina06_l_w, offset: %04x, data: %02x\n", offset, data));
44264425
r18064r18065
44394438
44404439 *************************************************************/
44414440
4442WRITE8_MEMBER(nes_state::ae_act52_w)
4441WRITE8_MEMBER(nes_carts_state::ae_act52_w)
44434442{
44444443   int pbank, cbank;
44454444   UINT8 pmode;
r18064r18065
44774476
44784477 *************************************************************/
44794478
4480WRITE8_MEMBER(nes_state::cne_decathl_w)
4479WRITE8_MEMBER(nes_carts_state::cne_decathl_w)
44814480{
44824481   LOG_MMC(("cne_decathl_w, offset: %04x, data: %02x\n", offset, data));
44834482
r18064r18065
45114510
45124511 *************************************************************/
45134512
4514WRITE8_MEMBER(nes_state::cne_fsb_m_w)
4513WRITE8_MEMBER(nes_carts_state::cne_fsb_m_w)
45154514{
45164515   LOG_MMC(("cne_fsb_m_w, offset: %04x, data: %02x\n", offset, data));
45174516
r18064r18065
45664565
45674566 *************************************************************/
45684567
4569WRITE8_MEMBER(nes_state::cne_shlz_l_w)
4568WRITE8_MEMBER(nes_carts_state::cne_shlz_l_w)
45704569{
45714570   LOG_MMC(("cne_shlz_l_w, offset: %04x, data: %02x\n", offset, data));
45724571
r18064r18065
45864585
45874586 *************************************************************/
45884587
4589WRITE8_MEMBER(nes_state::caltron6in1_m_w)
4588WRITE8_MEMBER(nes_carts_state::caltron6in1_m_w)
45904589{
45914590   LOG_MMC(("caltron6in1_m_w, offset: %04x, data: %02x\n", offset, data));
45924591
r18064r18065
45954594   prg32(machine(), offset & 0x07);
45964595}
45974596
4598WRITE8_MEMBER(nes_state::caltron6in1_w)
4597WRITE8_MEMBER(nes_carts_state::caltron6in1_w)
45994598{
46004599   LOG_MMC(("caltron6in1_w, offset: %04x, data: %02x\n", offset, data));
46014600
r18064r18065
46204619
46214620 *************************************************************/
46224621
4623WRITE8_MEMBER(nes_state::bf9093_w)
4622WRITE8_MEMBER(nes_carts_state::bf9093_w)
46244623{
46254624   LOG_MMC(("bf9093_w, offset: %04x, data: %02x\n", offset, data));
46264625
r18064r18065
46654664   prg16_cdef(machine, 0x03 | ((state->m_mmc_latch1 & 0x18) >> 1));
46664665}
46674666
4668WRITE8_MEMBER(nes_state::bf9096_w)
4667WRITE8_MEMBER(nes_carts_state::bf9096_w)
46694668{
46704669   LOG_MMC(("bf9096_w, offset: %04x, data: %02x\n", offset, data));
46714670
r18064r18065
46894688
46904689 *************************************************************/
46914690
4692WRITE8_MEMBER(nes_state::golden5_w)
4691WRITE8_MEMBER(nes_carts_state::golden5_w)
46934692{
46944693   LOG_MMC(("golden5_w, offset: %04x, data: %02x\n", offset, data));
46954694
r18064r18065
47234722
47244723 *************************************************************/
47254724
4726WRITE8_MEMBER(nes_state::cony_l_w)
4725WRITE8_MEMBER(nes_carts_state::cony_l_w)
47274726{
47284727   LOG_MMC(("cony_l_w, offset: %04x, data: %02x\n", offset, data));
47294728
r18064r18065
47314730      m_mapper83_low_reg[offset & 0x03] = data;
47324731}
47334732
4734READ8_MEMBER(nes_state::cony_l_r)
4733READ8_MEMBER(nes_carts_state::cony_l_r)
47354734{
47364735   LOG_MMC(("cony_l_r, offset: %04x\n", offset));
47374736
r18064r18065
47804779   }
47814780}
47824781
4783WRITE8_MEMBER(nes_state::cony_w)
4782WRITE8_MEMBER(nes_carts_state::cony_w)
47844783{
47854784   LOG_MMC(("cony_w, offset: %04x, data: %02x\n", offset, data));
47864785
r18064r18065
48614860
48624861 *************************************************************/
48634862
4864WRITE8_MEMBER(nes_state::yoko_l_w)
4863WRITE8_MEMBER(nes_carts_state::yoko_l_w)
48654864{
48664865   LOG_MMC(("cony_l_w, offset: %04x, data: %02x\n", offset, data));
48674866
r18064r18065
48694868      m_mapper83_low_reg[offset & 0x03] = data;
48704869}
48714870
4872READ8_MEMBER(nes_state::yoko_l_r)
4871READ8_MEMBER(nes_carts_state::yoko_l_r)
48734872{
48744873   LOG_MMC(("cony_l_r, offset: %04x\n", offset));
48754874
r18064r18065
49124911   chr2_6(machine, state->m_mapper83_reg[7], CHRROM);
49134912}
49144913
4915WRITE8_MEMBER(nes_state::yoko_w)
4914WRITE8_MEMBER(nes_carts_state::yoko_w)
49164915{
49174916   LOG_MMC(("yoko_w, offset: %04x, data: %02x\n", offset, data));
49184917
r18064r18065
49634962
49644963 *************************************************************/
49654964
4966WRITE8_MEMBER(nes_state::dreamtech_l_w)
4965WRITE8_MEMBER(nes_carts_state::dreamtech_l_w)
49674966{
49684967   LOG_MMC(("dreamtech_l_w offset: %04x, data: %02x\n", offset, data));
49694968   offset += 0x100;
r18064r18065
49854984
49864985 *************************************************************/
49874986
4988WRITE8_MEMBER(nes_state::fukutake_l_w)
4987WRITE8_MEMBER(nes_carts_state::fukutake_l_w)
49894988{
49904989   LOG_MMC(("fukutake_l_w offset: %04x, data: %02x\n", offset, data));
49914990   offset += 0x100;
r18064r18065
50015000      m_mapper_ram[offset - 0x400] = data;
50025001}
50035002
5004READ8_MEMBER(nes_state::fukutake_l_r)
5003READ8_MEMBER(nes_carts_state::fukutake_l_r)
50055004{
50065005   LOG_MMC(("fukutake_l_r offset: %04x\n", offset));
50075006   offset += 0x100;
r18064r18065
50475046   }
50485047}
50495048
5050WRITE8_MEMBER(nes_state::futuremedia_w)
5049WRITE8_MEMBER(nes_carts_state::futuremedia_w)
50515050{
50525051   LOG_MMC(("futuremedia_w, offset: %04x, data: %02x\n", offset, data));
50535052
r18064r18065
51095108
51105109 *************************************************************/
51115110
5112WRITE8_MEMBER(nes_state::gouder_sf4_l_w)
5111WRITE8_MEMBER(nes_carts_state::gouder_sf4_l_w)
51135112{
51145113   static const UINT8 conv_table[256] =
51155114   {
r18064r18065
51415140      prg32(machine(), ((data >> 3) & 0x02) | (data & 0x01));
51425141}
51435142
5144READ8_MEMBER(nes_state::gouder_sf4_l_r)
5143READ8_MEMBER(nes_carts_state::gouder_sf4_l_r)
51455144{
51465145   LOG_MMC(("gouder_sf4_l_r, offset: %04x\n", offset));
51475146
r18064r18065
51745173
51755174 *************************************************************/
51765175
5177WRITE8_MEMBER(nes_state::henggedianzi_w)
5176WRITE8_MEMBER(nes_carts_state::henggedianzi_w)
51785177{
51795178   LOG_MMC(("henggedianzi_w, offset: %04x, data: %02x\n", offset, data));
51805179
r18064r18065
51975196
51985197 *************************************************************/
51995198
5200WRITE8_MEMBER(nes_state::heng_xjzb_l_w)
5199WRITE8_MEMBER(nes_carts_state::heng_xjzb_l_w)
52015200{
52025201   LOG_MMC(("heng_xjzb_l_w, offset: %04x, data: %02x\n", offset, data));
52035202   offset += 0x4100;
r18064r18065
52065205      prg32(machine(), data >> 1);
52075206}
52085207
5209WRITE8_MEMBER(nes_state::heng_xjzb_w)
5208WRITE8_MEMBER(nes_carts_state::heng_xjzb_w)
52105209{
52115210   LOG_MMC(("heng_xjzb_w, offset: %04x, data: %02x\n", offset, data));
52125211
r18064r18065
52295228
52305229 *************************************************************/
52315230
5232WRITE8_MEMBER(nes_state::hes6in1_l_w)
5231WRITE8_MEMBER(nes_carts_state::hes6in1_l_w)
52335232{
52345233   LOG_MMC(("hes6in1_l_w, offset: %04x, data: %02x\n", offset, data));
52355234
r18064r18065
52415240   }
52425241}
52435242
5244WRITE8_MEMBER(nes_state::hes_l_w)
5243WRITE8_MEMBER(nes_carts_state::hes_l_w)
52455244{
52465245   LOG_MMC(("hes_l_w, offset: %04x, data: %02x\n", offset, data));
52475246
r18064r18065
52645263
52655264 *************************************************************/
52665265
5267WRITE8_MEMBER(nes_state::hosenkan_w)
5266WRITE8_MEMBER(nes_carts_state::hosenkan_w)
52685267{
52695268   LOG_MMC(("hosenkan_w, offset: %04x, data: %02x\n", offset, data));
52705269
r18064r18065
53335332
53345333 *************************************************************/
53355334
5336WRITE8_MEMBER(nes_state::ks7058_w)
5335WRITE8_MEMBER(nes_carts_state::ks7058_w)
53375336{
53385337   LOG_MMC(("ks7058_w, offset: %04x, data: %02x\n", offset, data));
53395338
r18064r18065
53605359
53615360 *************************************************************/
53625361
5363WRITE8_MEMBER(nes_state::ks7022_w)
5362WRITE8_MEMBER(nes_carts_state::ks7022_w)
53645363{
53655364   LOG_MMC(("ks7022_w, offset: %04x, data: %02x\n", offset, data));
53665365
r18064r18065
53715370      m_mmc_latch1 = data & 0x0f;
53725371}
53735372
5374READ8_MEMBER(nes_state::ks7022_r)
5373READ8_MEMBER(nes_carts_state::ks7022_r)
53755374{
53765375   LOG_MMC(("ks7022_r, offset: %04x\n", offset));
53775376
r18064r18065
54245423   }
54255424}
54265425
5427WRITE8_MEMBER(nes_state::ks7032_w)
5426WRITE8_MEMBER(nes_carts_state::ks7032_w)
54285427{
54295428   LOG_MMC(("ks7032_w, offset: %04x, data: %02x\n", offset, data));
54305429
r18064r18065
54685467 *************************************************************/
54695468
54705469
5471WRITE8_MEMBER(nes_state::ks202_w)
5470WRITE8_MEMBER(nes_carts_state::ks202_w)
54725471{
54735472   LOG_MMC(("ks202_w, offset: %04x, data: %02x\n", offset, data));
54745473
r18064r18065
55375536   }
55385537}
55395538
5540WRITE8_MEMBER(nes_state::ks7017_l_w)
5539WRITE8_MEMBER(nes_carts_state::ks7017_l_w)
55415540{
55425541   LOG_MMC(("ks7022_w, offset: %04x, data: %02x\n", offset, data));
55435542
r18064r18065
55505549      prg16_89ab(machine(), m_mmc_latch1);
55515550}
55525551
5553WRITE8_MEMBER(nes_state::ks7017_extra_w)
5552WRITE8_MEMBER(nes_carts_state::ks7017_extra_w)
55545553{
55555554   LOG_MMC(("ks7017_extra_w, offset: %04x, data: %02x\n", offset, data));
55565555
r18064r18065
55665565      set_nt_mirroring(machine(), BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
55675566}
55685567
5569READ8_MEMBER(nes_state::ks7017_extra_r)
5568READ8_MEMBER(nes_carts_state::ks7017_extra_r)
55705569{
55715570   LOG_MMC(("ks7017_extra_r, offset: %04x\n", offset));
55725571
r18064r18065
55895588
55905589 *************************************************************/
55915590
5592WRITE8_MEMBER(nes_state::kay_pp_l_w)
5591WRITE8_MEMBER(nes_carts_state::kay_pp_l_w)
55935592{
55945593   LOG_MMC(("kay_pp_l_w, offset: %04x, data: %02x\n", offset, data));
55955594   offset += 0x100;
r18064r18065
56125611   }
56135612}
56145613
5615READ8_MEMBER(nes_state::kay_pp_l_r)
5614READ8_MEMBER(nes_carts_state::kay_pp_l_r)
56165615{
56175616   LOG_MMC(("kay_pp_l_r, offset: %04x\n", offset));
56185617   offset += 0x100;
r18064r18065
56915690   chr1_x(machine, start, bank, source);
56925691}
56935692
5694WRITE8_MEMBER(nes_state::kay_pp_w)
5693WRITE8_MEMBER(nes_carts_state::kay_pp_w)
56955694{
56965695   LOG_MMC(("kay_pp_w, offset: %04x, data: %02x\n", offset, data));
56975696
r18064r18065
57485747      prg8_x(machine, start, bank);
57495748}
57505749
5751WRITE8_MEMBER(nes_state::kasing_m_w)
5750WRITE8_MEMBER(nes_carts_state::kasing_m_w)
57525751{
57535752   LOG_MMC(("kasing_m_w, offset: %04x, data: %02x\n", offset, data));
57545753
r18064r18065
57805779
57815780 *************************************************************/
57825781
5783WRITE8_MEMBER(nes_state::magics_md_w)
5782WRITE8_MEMBER(nes_carts_state::magics_md_w)
57845783{
57855784   LOG_MMC(("magics_md_w, offset: %04x, data: %02x\n", offset, data));
57865785
r18064r18065
58215820
58225821}
58235822
5824WRITE8_MEMBER(nes_state::nanjing_l_w)
5823WRITE8_MEMBER(nes_carts_state::nanjing_l_w)
58255824{
58265825   LOG_MMC(("nanjing_l_w, offset: %04x, data: %02x\n", offset, data));
58275826
r18064r18065
58625861   prg32(machine(), (m_mmc_reg[0] & 0x0f) | ((m_mmc_reg[1] & 0x0f) << 4));
58635862}
58645863
5865READ8_MEMBER(nes_state::nanjing_l_r)
5864READ8_MEMBER(nes_carts_state::nanjing_l_r)
58665865{
58675866   UINT8 value = 0;
58685867   LOG_MMC(("nanjing_l_r, offset: %04x\n", offset));
r18064r18065
59075906
59085907 *************************************************************/
59095908
5910WRITE8_MEMBER(nes_state::nitra_w)
5909WRITE8_MEMBER(nes_carts_state::nitra_w)
59115910{
59125911   LOG_MMC(("nitra_w, offset: %04x, data: %02x\n", offset, data));
59135912
r18064r18065
59275926
59285927 *************************************************************/
59295928
5930WRITE8_MEMBER(nes_state::ntdec_asder_w)
5929WRITE8_MEMBER(nes_carts_state::ntdec_asder_w)
59315930{
59325931   LOG_MMC(("ntdec_asder_w, offset: %04x, data: %02x\n", offset, data));
59335932
r18064r18065
59905989
59915990 *************************************************************/
59925991
5993WRITE8_MEMBER(nes_state::ntdec_fh_m_w)
5992WRITE8_MEMBER(nes_carts_state::ntdec_fh_m_w)
59945993{
59955994   LOG_MMC(("ntdec_fh_m_w, offset: %04x, data: %02x\n", offset, data));
59965995
r18064r18065
60266025
60276026 *************************************************************/
60286027
6029WRITE8_MEMBER(nes_state::daou306_w)
6028WRITE8_MEMBER(nes_carts_state::daou306_w)
60306029{
60316030   LOG_MMC(("daou306_w, offset: %04x, data: %02x\n", offset, data));
60326031   int reg = BIT(offset, 2) ? 8 : 0;
r18064r18065
61006099
61016100 *************************************************************/
61026101
6103WRITE8_MEMBER(nes_state::gs2015_w)
6102WRITE8_MEMBER(nes_carts_state::gs2015_w)
61046103{
61056104   LOG_MMC(("gs2015_w, offset: %04x, data: %02x\n", offset, data));
61066105
r18064r18065
61266125
61276126 *************************************************************/
61286127
6129WRITE8_MEMBER(nes_state::rcm_tf_w)
6128WRITE8_MEMBER(nes_carts_state::rcm_tf_w)
61306129{
61316130   LOG_MMC(("rcm_tf_w, offset: %04x, data: %02x\n", offset, data));
61326131
r18064r18065
61596158
61606159 *************************************************************/
61616160
6162WRITE8_MEMBER(nes_state::rex_dbz_l_w)
6161WRITE8_MEMBER(nes_carts_state::rex_dbz_l_w)
61636162{
61646163   LOG_MMC(("rex_dbz_l_w, offset: %04x, data: %02x\n", offset, data));
61656164
r18064r18065
61686167}
61696168
61706169/* we would need to use this read handler in 0x6000-0x7fff as well */
6171READ8_MEMBER(nes_state::rex_dbz_l_r)
6170READ8_MEMBER(nes_carts_state::rex_dbz_l_r)
61726171{
61736172   LOG_MMC(("rex_dbz_l_r, offset: %04x\n", offset));
61746173   return 0x01;
r18064r18065
62506249   chr1_x(machine, chr_page ^ 7, chr_base2[7] | (bank[7] & chr_mask), chr);
62516250}
62526251
6253WRITE8_MEMBER(nes_state::rex_sl1632_w)
6252WRITE8_MEMBER(nes_carts_state::rex_sl1632_w)
62546253{
62556254   UINT8 map14_helper1, map14_helper2, mmc_helper, cmd;
62566255   LOG_MMC(("rex_sl1632_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
63506349
63516350 *************************************************************/
63526351
6353WRITE8_MEMBER(nes_state::rumblestation_m_w)
6352WRITE8_MEMBER(nes_carts_state::rumblestation_m_w)
63546353{
63556354   LOG_MMC(("rumblestation_m_w, offset: %04x, data: %02x\n", offset, data));
63566355
r18064r18065
63606359   chr8(machine(), m_mmc_vrom_bank[0], CHRROM);
63616360}
63626361
6363WRITE8_MEMBER(nes_state::rumblestation_w)
6362WRITE8_MEMBER(nes_carts_state::rumblestation_w)
63646363{
63656364   LOG_MMC(("rumblestation_w, offset: %04x, data: %02x\n", offset, data));
63666365
r18064r18065
64046403   }
64056404}
64066405
6407WRITE8_MEMBER(nes_state::sachen_74x374_l_w)
6406WRITE8_MEMBER(nes_carts_state::sachen_74x374_l_w)
64086407{
64096408   LOG_MMC(("sachen_74x374_l_w, offset: %04x, data: %02x\n", offset, data));
64106409
r18064r18065
64436442   }
64446443}
64456444
6446READ8_MEMBER(nes_state::sachen_74x374_l_r)
6445READ8_MEMBER(nes_carts_state::sachen_74x374_l_r)
64476446{
64486447   LOG_MMC(("sachen_74x374_l_r, offset: %04x", offset));
64496448
r18064r18065
64546453      return 0;
64556454}
64566455
6457WRITE8_MEMBER(nes_state::sachen_74x374a_l_w)
6456WRITE8_MEMBER(nes_carts_state::sachen_74x374a_l_w)
64586457{
64596458   LOG_MMC(("sachen_74x374a_l_w, offset: %04x, data: %02x\n", offset, data));
64606459
r18064r18065
65606559   }
65616560}
65626561
6563WRITE8_MEMBER(nes_state::s8259_l_w)
6562WRITE8_MEMBER(nes_carts_state::s8259_l_w)
65646563{
65656564   LOG_MMC(("s8259_w, type: %d, offset: %04x, data: %02x\n", m_pcb_id, offset, data));
65666565
65676566   common_s8259_write_handler(space, offset, data, m_pcb_id);
65686567}
65696568
6570WRITE8_MEMBER(nes_state::s8259_m_w)
6569WRITE8_MEMBER(nes_carts_state::s8259_m_w)
65716570{
65726571   LOG_MMC(("s8259_w, type: %d, offset: %04x, data: %02x\n", m_pcb_id, offset, data));
65736572
r18064r18065
65876586
65886587 *************************************************************/
65896588
6590WRITE8_MEMBER(nes_state::sa009_l_w)
6589WRITE8_MEMBER(nes_carts_state::sa009_l_w)
65916590{
65926591   LOG_MMC(("sa009_l_w, offset: %04x, data: %02x\n", offset, data));
65936592
r18064r18065
66066605
66076606 *************************************************************/
66086607
6609WRITE8_MEMBER(nes_state::sa0036_w)
6608WRITE8_MEMBER(nes_carts_state::sa0036_w)
66106609{
66116610   LOG_MMC(("sa0036_w, offset: %04x, data: %02x\n", offset, data));
66126611
r18064r18065
66256624
66266625 *************************************************************/
66276626
6628WRITE8_MEMBER(nes_state::sa0037_w)
6627WRITE8_MEMBER(nes_carts_state::sa0037_w)
66296628{
66306629   LOG_MMC(("sa0037_w, offset: %04x, data: %02x\n", offset, data));
66316630
r18064r18065
66456644
66466645 *************************************************************/
66476646
6648WRITE8_MEMBER(nes_state::sa72007_l_w)
6647WRITE8_MEMBER(nes_carts_state::sa72007_l_w)
66496648{
66506649   LOG_MMC(("sa72007_l_w, offset: %04x, data: %02x\n", offset, data));
66516650
r18064r18065
66666665
66676666 *************************************************************/
66686667
6669WRITE8_MEMBER(nes_state::sa72008_l_w)
6668WRITE8_MEMBER(nes_carts_state::sa72008_l_w)
66706669{
66716670   LOG_MMC(("sa72008_l_w, offset: %04x, data: %02x\n", offset, data));
66726671
r18064r18065
66866685
66876686 *************************************************************/
66886687
6689READ8_MEMBER(nes_state::tca01_l_r)
6688READ8_MEMBER(nes_carts_state::tca01_l_r)
66906689{
66916690   LOG_MMC(("tca01_l_r, offset: %04x\n", offset));
66926691
r18064r18065
67096708
67106709 *************************************************************/
67116710
6712WRITE8_MEMBER(nes_state::tcu01_l_w)
6711WRITE8_MEMBER(nes_carts_state::tcu01_l_w)
67136712{
67146713   LOG_MMC(("tcu01_l_w, offset: %04x, data: %02x\n", offset, data));
67156714
r18064r18065
67206719   }
67216720}
67226721
6723WRITE8_MEMBER(nes_state::tcu01_m_w)
6722WRITE8_MEMBER(nes_carts_state::tcu01_m_w)
67246723{
67256724   LOG_MMC(("tcu01_m_w, offset: %04x, data: %02x\n", offset, data));
67266725
67276726   tcu01_l_w(space, (offset + 0x100) & 0xfff, data, mem_mask);
67286727}
67296728
6730WRITE8_MEMBER(nes_state::tcu01_w)
6729WRITE8_MEMBER(nes_carts_state::tcu01_w)
67316730{
67326731   LOG_MMC(("tcu01_w, offset: %04x, data: %02x\n", offset, data));
67336732
r18064r18065
67466745
67476746 *************************************************************/
67486747
6749WRITE8_MEMBER(nes_state::tcu02_l_w)
6748WRITE8_MEMBER(nes_carts_state::tcu02_l_w)
67506749{
67516750   LOG_MMC(("tcu02_l_w, offset: %04x, data: %02x\n", offset, data));
67526751
r18064r18065
67576756   }
67586757}
67596758
6760READ8_MEMBER(nes_state::tcu02_l_r)
6759READ8_MEMBER(nes_carts_state::tcu02_l_r)
67616760{
67626761   LOG_MMC(("tcu02_l_r, offset: %04x\n", offset));
67636762
r18064r18065
67766775
67776776 *************************************************************/
67786777
6779WRITE8_MEMBER(nes_state::subor0_w)
6778WRITE8_MEMBER(nes_carts_state::subor0_w)
67806779{
67816780   UINT8 subor_helper1, subor_helper2;
67826781   LOG_MMC(("subor0_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
68146813
68156814 *************************************************************/
68166815
6817WRITE8_MEMBER(nes_state::subor1_w)
6816WRITE8_MEMBER(nes_carts_state::subor1_w)
68186817{
68196818   UINT8 subor_helper1, subor_helper2;
68206819   LOG_MMC(("subor1_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
68976896      mmc3_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
68986897}
68996898
6900WRITE8_MEMBER(nes_state::sgame_boog_l_w)
6899WRITE8_MEMBER(nes_carts_state::sgame_boog_l_w)
69016900{
69026901   LOG_MMC(("sgame_boog_l_w, offset: %04x, data: %02x\n", offset, data));
69036902   offset += 0x100;
r18064r18065
69216920   }
69226921}
69236922
6924WRITE8_MEMBER(nes_state::sgame_boog_m_w)
6923WRITE8_MEMBER(nes_carts_state::sgame_boog_m_w)
69256924{
69266925   LOG_MMC(("sgame_boog_m_w, offset: %04x, data: %02x\n", offset, data));
69276926
r18064r18065
69446943   }
69456944}
69466945
6947WRITE8_MEMBER(nes_state::sgame_boog_w)
6946WRITE8_MEMBER(nes_carts_state::sgame_boog_w)
69486947{
69496948   static const UINT8 conv_table[8] = {0,2,5,3,6,1,7,4};
69506949   LOG_MMC(("sgame_boog_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
70227021
70237022 *************************************************************/
70247023
7025WRITE8_MEMBER(nes_state::sgame_lion_m_w)
7024WRITE8_MEMBER(nes_carts_state::sgame_lion_m_w)
70267025{
70277026   LOG_MMC(("sgame_lion_m_w, offset: %04x, data: %02x\n", offset, data));
70287027
r18064r18065
70387037
70397038}
70407039
7041WRITE8_MEMBER(nes_state::sgame_lion_w)
7040WRITE8_MEMBER(nes_carts_state::sgame_lion_w)
70427041{
70437042   static const UINT8 conv_table[8] = {0, 3, 1, 5, 6, 7, 2, 4};
70447043   LOG_MMC(("sgame_lion_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
70907089
70917090 *************************************************************/
70927091
7093WRITE8_MEMBER(nes_state::tengen_800008_w)
7092WRITE8_MEMBER(nes_carts_state::tengen_800008_w)
70947093{
70957094   LOG_MMC(("tengen_800008_w, offset: %04x, data: %02x\n", offset, data));
70967095
r18064r18065
72047203   chr1_x(machine, 7 ^ chr_page, state->m_mmc_vrom_bank[5], CHRROM);
72057204}
72067205
7207WRITE8_MEMBER(nes_state::tengen_800032_w)
7206WRITE8_MEMBER(nes_carts_state::tengen_800032_w)
72087207{
72097208   UINT8 map64_helper, cmd;
72107209   LOG_MMC(("tengen_800032_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
73007299   set_nt_page(machine, 3, ROM, state->m_mmc_vrom_bank[nt_mode ? 5 : 1], 0);
73017300}
73027301
7303WRITE8_MEMBER(nes_state::tengen_800037_w)
7302WRITE8_MEMBER(nes_carts_state::tengen_800037_w)
73047303{
73057304   UINT8 map158_helper, cmd;
73067305   LOG_MMC(("tengen_800037_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
73757374
73767375 *************************************************************/
73777376
7378WRITE8_MEMBER(nes_state::txc_22211_l_w)
7377WRITE8_MEMBER(nes_carts_state::txc_22211_l_w)
73797378{
73807379   LOG_MMC(("txc_22211_l_w, offset: %04x, data: %02x\n", offset, data));
73817380
r18064r18065
73837382      m_txc_reg[offset & 0x03] = data;
73847383}
73857384
7386READ8_MEMBER(nes_state::txc_22211_l_r)
7385READ8_MEMBER(nes_carts_state::txc_22211_l_r)
73877386{
73887387   LOG_MMC(("txc_22211_l_r, offset: %04x\n", offset));
73897388
r18064r18065
73937392      return 0x00;
73947393}
73957394
7396WRITE8_MEMBER(nes_state::txc_22211_w)
7395WRITE8_MEMBER(nes_carts_state::txc_22211_w)
73977396{
73987397   LOG_MMC(("txc_22211_w, offset: %04x, data: %02x\n", offset, data));
73997398
r18064r18065
74167415
74177416 *************************************************************/
74187417
7419WRITE8_MEMBER(nes_state::txc_22211b_w)
7418WRITE8_MEMBER(nes_carts_state::txc_22211b_w)
74207419{
74217420   LOG_MMC(("txc_22211b_w, offset: %04x, data: %02x\n", offset, data));
74227421
r18064r18065
74397438
74407439 *************************************************************/
74417440
7442READ8_MEMBER(nes_state::txc_22211c_l_r)
7441READ8_MEMBER(nes_carts_state::txc_22211c_l_r)
74437442{
74447443   LOG_MMC(("txc_22211c_l_r, offset: %04x\n", offset));
74457444
r18064r18065
74637462
74647463 *************************************************************/
74657464
7466WRITE8_MEMBER(nes_state::txc_tw_l_w)
7465WRITE8_MEMBER(nes_carts_state::txc_tw_l_w)
74677466{
74687467   LOG_MMC(("txctw_l_w, offset: %04x, data: %02x\n", offset, data));
74697468
74707469   prg32(machine(), (data >> 4) | data);
74717470}
74727471
7473WRITE8_MEMBER(nes_state::txc_tw_m_w)
7472WRITE8_MEMBER(nes_carts_state::txc_tw_m_w)
74747473{
74757474   LOG_MMC(("txctw_m_w, offset: %04x, data: %04x\n", offset, data));
74767475
r18064r18065
74977496
74987497 *************************************************************/
74997498
7500WRITE8_MEMBER(nes_state::txc_strikewolf_w)
7499WRITE8_MEMBER(nes_carts_state::txc_strikewolf_w)
75017500{
75027501   LOG_MMC(("txc_strikewolf_w, offset: %04x, data: %02x\n", offset, data));
75037502
r18064r18065
75247523
75257524 *************************************************************/
75267525
7527READ8_MEMBER(nes_state::txc_mxmdhtwo_l_r)
7526READ8_MEMBER(nes_carts_state::txc_mxmdhtwo_l_r)
75287527{
75297528   return 0x50;
75307529}
75317530
7532WRITE8_MEMBER(nes_state::txc_mxmdhtwo_w)
7531WRITE8_MEMBER(nes_carts_state::txc_mxmdhtwo_w)
75337532{
75347533   LOG_MMC(("txc_mxmdhtwo_w, offset: %04x, data: %02x\n", offset, data));
75357534
r18064r18065
75887587   chr1_x(machine, start, bank, chr_src);
75897588}
75907589
7591WRITE8_MEMBER(nes_state::waixing_a_w)
7590WRITE8_MEMBER(nes_carts_state::waixing_a_w)
75927591{
75937592   LOG_MMC(("waixing_a_w, offset: %04x, data: %02x\n", offset, data));
75947593
r18064r18065
77107709
77117710 *************************************************************/
77127711
7713WRITE8_MEMBER(nes_state::waixing_f_w)
7712WRITE8_MEMBER(nes_carts_state::waixing_f_w)
77147713{
77157714   UINT8 cmd;
77167715   LOG_MMC(("waixing_f_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
77707769   state->m_mmc3_chr_cb(machine, chr_page ^ 7, chr_base | (state->m_mmc_vrom_bank[5] & chr_mask), state->m_mmc_chr_source);
77717770}
77727771
7773WRITE8_MEMBER(nes_state::waixing_g_w)
7772WRITE8_MEMBER(nes_carts_state::waixing_g_w)
77747773{
77757774   UINT8 MMC3_helper, cmd;
77767775   LOG_MMC(("waixing_g_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
78407839      chr1_x(machine, start, bank, source);
78417840}
78427841
7843WRITE8_MEMBER(nes_state::waixing_h_w)
7842WRITE8_MEMBER(nes_carts_state::waixing_h_w)
78447843{
78457844   UINT8 cmd;
78467845   LOG_MMC(("waixing_h_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
78857884
78867885 *************************************************************/
78877886
7888WRITE8_MEMBER(nes_state::waixing_sgz_w)
7887WRITE8_MEMBER(nes_carts_state::waixing_sgz_w)
78897888{
78907889   UINT8 mmc_helper, bank;
78917890   LOG_MMC(("waixing_sgz_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
79477946
79487947 *************************************************************/
79497948
7950WRITE8_MEMBER(nes_state::waixing_sgzlz_l_w)
7949WRITE8_MEMBER(nes_carts_state::waixing_sgzlz_l_w)
79517950{
79527951   LOG_MMC(("waixing_sgzlz_l_w, offset: %04x, data: %02x\n", offset, data));
79537952
r18064r18065
79797978
79807979 *************************************************************/
79817980
7982WRITE8_MEMBER(nes_state::waixing_ffv_l_w)
7981WRITE8_MEMBER(nes_carts_state::waixing_ffv_l_w)
79837982{
79847983   UINT8 mmc_helper;
79857984   LOG_MMC(("waixing_ffv_l_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
80288027
80298028 *************************************************************/
80308029
8031WRITE8_MEMBER(nes_state::waixing_zs_w)
8030WRITE8_MEMBER(nes_carts_state::waixing_zs_w)
80328031{
80338032   LOG_MMC(("waixing_zs_w, offset: %04x, data: %02x\n", offset, data));
80348033
r18064r18065
80588057
80598058 *************************************************************/
80608059
8061WRITE8_MEMBER(nes_state::waixing_dq8_w)
8060WRITE8_MEMBER(nes_carts_state::waixing_dq8_w)
80628061{
80638062   LOG_MMC(("waixing_dq8_w, offset: %04x, data: %02x\n", offset, data));
80648063
r18064r18065
80788077
80798078 *************************************************************/
80808079
8081WRITE8_MEMBER(nes_state::waixing_ps2_w)
8080WRITE8_MEMBER(nes_carts_state::waixing_ps2_w)
80828081{
80838082   UINT8 map15_flip = (data & 0x80) >> 7;
80848083   UINT8 map15_helper = (data & 0x7f) << 1;
r18064r18065
81558154   chr1_x(machine, start, bank, source);
81568155}
81578156
8158WRITE8_MEMBER(nes_state::waixing_sec_l_w)
8157WRITE8_MEMBER(nes_carts_state::waixing_sec_l_w)
81598158{
81608159   LOG_MMC(("waixing_sec_l_w, offset: %04x, data: %02x\n", offset, data));
81618160
r18064r18065
81918190   chr4_4(machine, state->m_mmc_reg[1], state->m_mmc_reg[1] ? CHRRAM : CHRROM);
81928191}
81938192
8194READ8_MEMBER(nes_state::waixing_sh2_chr_r)
8193READ8_MEMBER(nes_carts_state::waixing_sh2_chr_r)
81958194{
81968195   int bank = offset >> 10;
81978196   UINT8 val = m_chr_map[bank].access[offset & 0x3ff];   // this would be usual return value
r18064r18065
82418240   chr1_x(machine, start, bank, source);
82428241}
82438242
8244WRITE8_MEMBER(nes_state::unl_8237_l_w)
8243WRITE8_MEMBER(nes_carts_state::unl_8237_l_w)
82458244{
82468245   LOG_MMC(("unl_8237_l_w offset: %04x, data: %02x\n", offset, data));
82478246   offset += 0x100;
r18064r18065
82708269   }
82718270}
82728271
8273WRITE8_MEMBER(nes_state::unl_8237_w)
8272WRITE8_MEMBER(nes_carts_state::unl_8237_w)
82748273{
82758274   static const UINT8 conv_table[8] = {0, 2, 6, 1, 7, 3, 4, 5};
82768275   LOG_MMC(("unl_8237_w offset: %04x, data: %02x\n", offset, data));
r18064r18065
83268325   prg8_ab(machine, state->m_mmc_prg_bank[1]);
83278326}
83288327
8329WRITE8_MEMBER(nes_state::unl_ax5705_w)
8328WRITE8_MEMBER(nes_carts_state::unl_ax5705_w)
83308329{
83318330   UINT8 bank;
83328331   LOG_MMC(("unl_ax5705_w offset: %04x, data: %02x\n", offset, data));
r18064r18065
83918390
83928391 *************************************************************/
83938392
8394WRITE8_MEMBER(nes_state::unl_cc21_w)
8393WRITE8_MEMBER(nes_carts_state::unl_cc21_w)
83958394{
83968395   LOG_MMC(("unl_cc21_w offset: %04x, data: %02x\n", offset, data));
83978396
r18064r18065
84168415   return ((data >> 1) & 0x01) | ((data >> 4) & 0x02) | ((data << 2) & 0x04) | ((data >> 0) & 0xd8) | ((data << 3) & 0x20);
84178416}
84188417
8419WRITE8_MEMBER(nes_state::unl_kof97_w)
8418WRITE8_MEMBER(nes_carts_state::unl_kof97_w)
84208419{
84218420   LOG_MMC(("unl_kof97_w offset: %04x, data: %02x\n", offset, data));
84228421
r18064r18065
84728471
84738472 *************************************************************/
84748473
8475WRITE8_MEMBER(nes_state::ks7057_w)
8474WRITE8_MEMBER(nes_carts_state::ks7057_w)
84768475{
84778476   LOG_MMC(("ks7057_w, offset: %04x, data: %02x\n", offset, data));
84788477   offset = (BIT(offset, 0) << 1) | BIT(offset, 1) | (offset & ~0x03);
r18064r18065
84898488
84908489 *************************************************************/
84918490
8492WRITE8_MEMBER(nes_state::unl_t230_w)
8491WRITE8_MEMBER(nes_carts_state::unl_t230_w)
84938492{
84948493   UINT8 bank;
84958494   LOG_MMC(("unl_t230_w offset: %04x, data: %02x\n", offset, data));
r18064r18065
85978596   chr1_x(machine, start, bank, source);
85988597}
85998598
8600WRITE8_MEMBER(nes_state::kof96_l_w)
8599WRITE8_MEMBER(nes_carts_state::kof96_l_w)
86018600{
86028601   UINT8 new_bank;
86038602   LOG_MMC(("kof96_l_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
86488647   }
86498648}
86508649
8651READ8_MEMBER(nes_state::kof96_l_r)
8650READ8_MEMBER(nes_carts_state::kof96_l_r)
86528651{
86538652   LOG_MMC(("kof96_l_r, offset: %04x\n", offset));
86548653   offset += 0x100;
r18064r18065
86598658      return 0;
86608659}
86618660
8662WRITE8_MEMBER(nes_state::kof96_w)
8661WRITE8_MEMBER(nes_carts_state::kof96_w)
86638662{
86648663   LOG_MMC(("kof96_w, offset: %04x, data: %02x\n", offset, data));
86658664
r18064r18065
87098708
87108709 *************************************************************/
87118710
8712WRITE8_MEMBER(nes_state::mk2_m_w)
8711WRITE8_MEMBER(nes_carts_state::mk2_m_w)
87138712{
87148713   LOG_MMC(("mk2_m_w, offset: %04x, data: %02x\n", offset, data));
87158714
r18064r18065
87648763   prg16_cdef(machine, map221_helper2 | ((reg1 & 0x70) >> 1));
87658764}
87668765
8767WRITE8_MEMBER(nes_state::n625092_w)
8766WRITE8_MEMBER(nes_carts_state::n625092_w)
87688767{
87698768   LOG_MMC(("n625092_w, offset: %04x, data: %02x\n", offset, data));
87708769
r18064r18065
88218820   }
88228821}
88238822
8824WRITE8_MEMBER(nes_state::sc127_w)
8823WRITE8_MEMBER(nes_carts_state::sc127_w)
88258824{
88268825   LOG_MMC(("sc127_w, offset: %04x, data: %02x\n", offset, data));
88278826
r18064r18065
88768875
88778876 *************************************************************/
88788877
8879WRITE8_MEMBER(nes_state::smb2j_w)
8878WRITE8_MEMBER(nes_carts_state::smb2j_w)
88808879{
88818880   int bank = (((offset >> 8) & 0x03) * 0x20) + (offset & 0x1f);
88828881
r18064r18065
89638962   }
89648963}
89658964
8966WRITE8_MEMBER(nes_state::smb2jb_l_w)
8965WRITE8_MEMBER(nes_carts_state::smb2jb_l_w)
89678966{
89688967   UINT8 prg;
89698968   LOG_MMC(("smb2jb_l_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
89828981}
89838982
89848983/* This goes to 0x4020-0x403f */
8985WRITE8_MEMBER(nes_state::smb2jb_extra_w)
8984WRITE8_MEMBER(nes_carts_state::smb2jb_extra_w)
89868985{
89878986   UINT8 prg;
89888987   LOG_MMC(("smb2jb_extra_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
90119010   chr2_6(machine, chr_base | (state->m_mmc_vrom_bank[2] & chr_mask), chr_source);
90129011}
90139012
9014WRITE8_MEMBER(nes_state::unl_sf3_w)
9013WRITE8_MEMBER(nes_carts_state::unl_sf3_w)
90159014{
90169015   UINT8 mmc_helper, cmd;
90179016   LOG_MMC(("unl_sf3_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
90689067
90699068 *************************************************************/
90709069
9071WRITE8_MEMBER(nes_state::unl_xzy_l_w)
9070WRITE8_MEMBER(nes_carts_state::unl_xzy_l_w)
90729071{
90739072   LOG_MMC(("unl_xzy_l_w, offset: %04x, data: %02x\n", offset, data));
90749073
r18064r18065
90999098   prg16_89ab(machine, state->m_mmc_latch1 >> 1);
91009099}
91019100
9102WRITE8_MEMBER(nes_state::unl_racmate_w)
9101WRITE8_MEMBER(nes_carts_state::unl_racmate_w)
91039102{
91049103   LOG_MMC(("unl_racmate_w offset: %04x, data: %02x\n", offset, data));
91059104
r18064r18065
91239122
91249123 *************************************************************/
91259124
9126WRITE8_MEMBER(nes_state::unl_fs304_l_w)
9125WRITE8_MEMBER(nes_carts_state::unl_fs304_l_w)
91279126{
91289127   LOG_MMC(("unl_fs304_l_w, offset: %04x, data: %02x\n", offset, data));
91299128   int bank;
r18064r18065
91609159
91619160 *************************************************************/
91629161
9163WRITE8_MEMBER(nes_state::btl_smb11_w)
9162WRITE8_MEMBER(nes_carts_state::btl_smb11_w)
91649163{
91659164   LOG_MMC(("btl_smb11_w, offset: %04x, data: %02x\n", offset, data));
91669165
r18064r18065
91809179 *************************************************************/
91819180
91829181// is the code fine for ai senshi nicol?!?
9183WRITE8_MEMBER(nes_state::btl_mariobaby_w)
9182WRITE8_MEMBER(nes_carts_state::btl_mariobaby_w)
91849183{
91859184   LOG_MMC(("btl_mariobaby_w, offset: %04x, data: %02x\n", offset, data));
91869185
r18064r18065
92409239   }
92419240}
92429241
9243WRITE8_MEMBER(nes_state::btl_smb2a_w)
9242WRITE8_MEMBER(nes_carts_state::btl_smb2a_w)
92449243{
92459244   LOG_MMC(("btl_smb2a_w, offset: %04x, data: %02x\n", offset, data));
92469245
r18064r18065
92719270
92729271 *************************************************************/
92739272
9274WRITE8_MEMBER(nes_state::whirl2706_w)
9273WRITE8_MEMBER(nes_carts_state::whirl2706_w)
92759274{
92769275   LOG_MMC(("whirl2706_w, offset: %04x, data: %02x\n", offset, data));
92779276   prg8_67(machine(), data);
r18064r18065
92899288
92909289 *************************************************************/
92919290
9292WRITE8_MEMBER(nes_state::btl_tobi_l_w)
9291WRITE8_MEMBER(nes_carts_state::btl_tobi_l_w)
92939292{
92949293   LOG_MMC(("btl_tobi_l_w, offset: %04x, data: %02x\n", offset, data));
92959294   offset += 0x100;
r18064r18065
93269325   }
93279326}
93289327
9329WRITE8_MEMBER(nes_state::btl_smb3_w)
9328WRITE8_MEMBER(nes_carts_state::btl_smb3_w)
93309329{
93319330   LOG_MMC(("btl_smb3_w, offset: %04x, data: %02x\n", offset, data));
93329331   switch (offset & 0x0f)
r18064r18065
94009399   }
94019400}
94029401
9403WRITE8_MEMBER(nes_state::btl_dn_w)
9402WRITE8_MEMBER(nes_carts_state::btl_dn_w)
94049403{
94059404   UINT8 bank;
94069405   LOG_MMC(("btl_dn_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
94459444
94469445 *************************************************************/
94479446
9448WRITE8_MEMBER(nes_state::btl_pika_y2k_w)
9447WRITE8_MEMBER(nes_carts_state::btl_pika_y2k_w)
94499448{
94509449   LOG_MMC(("btl_pika_y2k_w, offset: %04x, data: %02x\n", offset, data));
94519450
r18064r18065
94649463}
94659464
94669465// strange WRAM usage: it is protected at start, and gets unprotected after the first write to 0xa000
9467WRITE8_MEMBER(nes_state::btl_pika_y2k_m_w)
9466WRITE8_MEMBER(nes_carts_state::btl_pika_y2k_m_w)
94689467{
94699468   LOG_MMC(("btl_pika_y2k_m_w, offset: %04x, data: %02x\n", offset, data));
94709469
94719470   m_wram[offset] = data;
94729471}
94739472
9474READ8_MEMBER(nes_state::btl_pika_y2k_m_r)
9473READ8_MEMBER(nes_carts_state::btl_pika_y2k_m_r)
94759474{
94769475   LOG_MMC(("btl_pika_y2k_m_r, offset: %04x\n", offset));
94779476
r18064r18065
95819580   }
95829581}
95839582
9584WRITE8_MEMBER(nes_state::fk23c_l_w)
9583WRITE8_MEMBER(nes_carts_state::fk23c_l_w)
95859584{
95869585   LOG_MMC(("fk23c_l_w, offset: %04x, data: %02x\n", offset, data));
95879586   offset += 0x100;
r18064r18065
95989597   }
95999598}
96009599
9601WRITE8_MEMBER(nes_state::fk23c_w)
9600WRITE8_MEMBER(nes_carts_state::fk23c_w)
96029601{
96039602   LOG_MMC(("fk23c_w, offset: %04x, data: %02x\n", offset, data));
96049603
r18064r18065
96699668      prg16_cdef(machine, helper2);
96709669}
96719670
9672WRITE8_MEMBER(nes_state::bmc_64in1nr_l_w)
9671WRITE8_MEMBER(nes_carts_state::bmc_64in1nr_l_w)
96739672{
96749673   LOG_MMC(("bmc_64in1nr_l_w offset: %04x, data: %02x\n", offset, data));
96759674   offset += 0x100;
r18064r18065
96899688      set_nt_mirroring(machine(), BIT(data, 5) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
96909689}
96919690
9692WRITE8_MEMBER(nes_state::bmc_64in1nr_w)
9691WRITE8_MEMBER(nes_carts_state::bmc_64in1nr_w)
96939692{
96949693   LOG_MMC(("bmc_64in1nr_w offset: %04x, data: %02x\n", offset, data));
96959694
r18064r18065
97069705
97079706 *************************************************************/
97089707
9709WRITE8_MEMBER(nes_state::bmc_190in1_w)
9708WRITE8_MEMBER(nes_carts_state::bmc_190in1_w)
97109709{
97119710   LOG_MMC(("bmc_190in1_w offset: %04x, data: %02x\n", offset, data));
97129711
r18064r18065
97279726
97289727 *************************************************************/
97299728
9730WRITE8_MEMBER(nes_state::bmc_a65as_w)
9729WRITE8_MEMBER(nes_carts_state::bmc_a65as_w)
97319730{
97329731   UINT8 helper = (data & 0x30) >> 1;
97339732   LOG_MMC(("bmc_a65as_w offset: %04x, data: %02x\n", offset, data));
r18064r18065
97579756
97589757 *************************************************************/
97599758
9760WRITE8_MEMBER(nes_state::bmc_gs2004_w)
9759WRITE8_MEMBER(nes_carts_state::bmc_gs2004_w)
97619760{
97629761   LOG_MMC(("bmc_gs2004_w offset: %04x, data: %02x\n", offset, data));
97639762
r18064r18065
97759774
97769775 *************************************************************/
97779776
9778WRITE8_MEMBER(nes_state::bmc_gs2013_w)
9777WRITE8_MEMBER(nes_carts_state::bmc_gs2013_w)
97799778{
97809779   LOG_MMC(("bmc_gs2013_w offset: %04x, data: %02x\n", offset, data));
97819780
r18064r18065
98159814   chr1_x(machine, start, chr_base | bank, chr);
98169815}
98179816
9818WRITE8_MEMBER(nes_state::bmc_s24in1sc03_l_w)
9817WRITE8_MEMBER(nes_carts_state::bmc_s24in1sc03_l_w)
98199818{
98209819   LOG_MMC(("bmc_s24in1sc03_l_w offset: %04x, data: %02x\n", offset, data));
98219820   offset += 0x100;
r18064r18065
98509849
98519850 *************************************************************/
98529851
9853WRITE8_MEMBER(nes_state::bmc_t262_w)
9852WRITE8_MEMBER(nes_carts_state::bmc_t262_w)
98549853{
98559854   UINT8 mmc_helper;
98569855   LOG_MMC(("bmc_t262_w offset: %04x, data: %02x\n", offset, data));
r18064r18065
98829881
98839882 *************************************************************/
98849883
9885WRITE8_MEMBER(nes_state::bmc_ws_m_w)
9884WRITE8_MEMBER(nes_carts_state::bmc_ws_m_w)
98869885{
98879886   UINT8 mmc_helper;
98889887   LOG_MMC(("bmc_ws_m_w offset: %04x, data: %02x\n", offset, data));
r18064r18065
99289927 *************************************************************/
99299928
99309929// Are this correct or should they work the same?
9931WRITE8_MEMBER(nes_state::novel1_w)
9930WRITE8_MEMBER(nes_carts_state::novel1_w)
99329931{
99339932   LOG_MMC(("novel1_w, offset: %04x, data: %02x\n", offset, data));
99349933
r18064r18065
99369935   chr8(machine(), offset & 0x07, CHRROM);
99379936}
99389937
9939WRITE8_MEMBER(nes_state::novel2_w)
9938WRITE8_MEMBER(nes_carts_state::novel2_w)
99409939{
99419940   LOG_MMC(("novel2_w, offset: %04x, data: %02x\n", offset, data));
99429941
r18064r18065
99579956
99589957 *************************************************************/
99599958
9960WRITE8_MEMBER(nes_state::bmc_gka_w)
9959WRITE8_MEMBER(nes_carts_state::bmc_gka_w)
99619960{
99629961   LOG_MMC(("bmc_gka_w, offset: %04x, data: %02x\n", offset, data));
99639962
r18064r18065
99939992
99949993 *************************************************************/
99959994
9996WRITE8_MEMBER(nes_state::sng32_w)
9995WRITE8_MEMBER(nes_carts_state::sng32_w)
99979996{
99989997   LOG_MMC(("sng32_w, offset: %04x, data: %02x\n", offset, data));
99999998   prg32(machine(), data);
r18064r18065
1001210011
1001310012 *************************************************************/
1001410013
10015WRITE8_MEMBER(nes_state::bmc_gkb_w)
10014WRITE8_MEMBER(nes_carts_state::bmc_gkb_w)
1001610015{
1001710016   UINT8 bank = (offset & 0x40) ? 0 : 1;
1001810017   LOG_MMC(("bmc_gkb_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1003610035
1003710036 *************************************************************/
1003810037
10039WRITE8_MEMBER(nes_state::bmc_super700in1_w)
10038WRITE8_MEMBER(nes_carts_state::bmc_super700in1_w)
1004010039{
1004110040   LOG_MMC(("bmc_super700in1_w, offset :%04x, data: %02x\n", offset, data));
1004210041
r18064r18065
1006810067
1006910068 *************************************************************/
1007010069
10071WRITE8_MEMBER(nes_state::bmc_36in1_w)
10070WRITE8_MEMBER(nes_carts_state::bmc_36in1_w)
1007210071{
1007310072   LOG_MMC(("bmc_36in1_w, offset: %04x, data: %02x\n", offset, data));
1007410073
r18064r18065
1009210091
1009310092 *************************************************************/
1009410093
10095WRITE8_MEMBER(nes_state::bmc_21in1_w)
10094WRITE8_MEMBER(nes_carts_state::bmc_21in1_w)
1009610095{
1009710096   LOG_MMC(("bmc_21in1_w, offset: %04x, data: %02x\n", offset, data));
1009810097
r18064r18065
1011310112
1011410113 *************************************************************/
1011510114
10116WRITE8_MEMBER(nes_state::bmc_150in1_w)
10115WRITE8_MEMBER(nes_carts_state::bmc_150in1_w)
1011710116{
1011810117   int bank = (offset >> 1) & 0x07;
1011910118
r18064r18065
1013910138
1014010139 *************************************************************/
1014110140
10142WRITE8_MEMBER(nes_state::bmc_35in1_w)
10141WRITE8_MEMBER(nes_carts_state::bmc_35in1_w)
1014310142{
1014410143   LOG_MMC(("bmc_35in1_w, offset: %04x, data: %02x\n", offset, data));
1014510144
r18064r18065
1016110160
1016210161 *************************************************************/
1016310162
10164WRITE8_MEMBER(nes_state::bmc_64in1_w)
10163WRITE8_MEMBER(nes_carts_state::bmc_64in1_w)
1016510164{
1016610165   int bank = (offset >> 1) & (offset >> 2) & 0x01;
1016710166
r18064r18065
1018710186
1018810187 *************************************************************/
1018910188
10190WRITE8_MEMBER(nes_state::bmc_15in1_m_w)
10189WRITE8_MEMBER(nes_carts_state::bmc_15in1_m_w)
1019110190{
1019210191   LOG_MMC(("bmc_15in1_m_w, offset: %04x, data: %02x\n", offset, data));
1019310192
r18064r18065
1021510214
1021610215 *************************************************************/
1021710216
10218WRITE8_MEMBER(nes_state::bmc_hik300_w)
10217WRITE8_MEMBER(nes_carts_state::bmc_hik300_w)
1021910218{
1022010219   LOG_MMC(("bmc_hik300_w, offset: %04x, data: %02x\n", offset, data));
1022110220
r18064r18065
1024410243
1024510244 *************************************************************/
1024610245
10247WRITE8_MEMBER(nes_state::supergun20in1_w)
10246WRITE8_MEMBER(nes_carts_state::supergun20in1_w)
1024810247{
1024910248   LOG_MMC(("supergun20in1_w, offset: %04x, data: %02x\n", offset, data));
1025010249
r18064r18065
1026610265
1026710266 *************************************************************/
1026810267
10269WRITE8_MEMBER(nes_state::bmc_72in1_w)
10268WRITE8_MEMBER(nes_carts_state::bmc_72in1_w)
1027010269{
1027110270   int hi_bank;
1027210271   int size_16;
r18064r18065
1030710306 *************************************************************/
1030810307
1030910308// does this work for super42in1 as well?!?
10310WRITE8_MEMBER(nes_state::bmc_76in1_w)
10309WRITE8_MEMBER(nes_carts_state::bmc_76in1_w)
1031110310{
1031210311   int hi_bank;
1031310312   int size_16;
r18064r18065
1035210351
1035310352 *************************************************************/
1035410353
10355WRITE8_MEMBER(nes_state::bmc_1200in1_w)
10354WRITE8_MEMBER(nes_carts_state::bmc_1200in1_w)
1035610355{
1035710356   int hi_bank;
1035810357   int size_32;
r18064r18065
1039910398
1040010399 *************************************************************/
1040110400
10402WRITE8_MEMBER(nes_state::bmc_31in1_w)
10401WRITE8_MEMBER(nes_carts_state::bmc_31in1_w)
1040310402{
1040410403   LOG_MMC(("bmc_31in1_w, offset: %04x, data: %02x\n", offset, data));
1040510404
r18064r18065
1043210431
1043310432 *************************************************************/
1043410433
10435WRITE8_MEMBER(nes_state::bmc_22g_w)
10434WRITE8_MEMBER(nes_carts_state::bmc_22g_w)
1043610435{
1043710436   LOG_MMC(("bmc_22g_w, offset: %04x, data: %02x\n", offset, data));
1043810437
r18064r18065
1046910468
1047010469 *************************************************************/
1047110470
10472WRITE8_MEMBER(nes_state::bmc_20in1_w)
10471WRITE8_MEMBER(nes_carts_state::bmc_20in1_w)
1047310472{
1047410473   LOG_MMC(("bmc_20in1_w, offset: %04x, data: %02x\n", offset, data));
1047510474
r18064r18065
1049210491
1049310492 *************************************************************/
1049410493
10495WRITE8_MEMBER(nes_state::bmc_110in1_w)
10494WRITE8_MEMBER(nes_carts_state::bmc_110in1_w)
1049610495{
1049710496   UINT8 map255_helper1 = (offset >> 12) ? 0 : 1;
1049810497   UINT8 map255_helper2 = ((offset >> 8) & 0x40) | ((offset >> 6) & 0x3f);
r18064r18065
1051810517
1051910518 *************************************************************/
1052010519
10521WRITE8_MEMBER(nes_state::bmc_sbig7_w)
10520WRITE8_MEMBER(nes_carts_state::bmc_sbig7_w)
1052210521{
1052310522   UINT8 page;
1052410523   LOG_MMC(("bmc_sbig7_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1055710556
1055810557 *************************************************************/
1055910558
10560WRITE8_MEMBER(nes_state::bmc_hik8_m_w)
10559WRITE8_MEMBER(nes_carts_state::bmc_hik8_m_w)
1056110560{
1056210561   LOG_MMC(("bmc_hik8_m_w, offset: %04x, data: %02x\n", offset, data));
1056310562
r18064r18065
1060410603
1060510604 *************************************************************/
1060610605
10607WRITE8_MEMBER(nes_state::bmc_hik4in1_m_w)
10606WRITE8_MEMBER(nes_carts_state::bmc_hik4in1_m_w)
1060810607{
1060910608   LOG_MMC(("bmc_hik4in1_m_w, offset: %04x, data: %02x\n", offset, data));
1061010609
r18064r18065
1065710656   }
1065810657}
1065910658
10660WRITE8_MEMBER(nes_state::bmc_ball11_m_w)
10659WRITE8_MEMBER(nes_carts_state::bmc_ball11_m_w)
1066110660{
1066210661
1066310662   LOG_MMC(("bmc_ball11_m_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1066610665   bmc_ball11_set_banks(machine());
1066710666}
1066810667
10669WRITE8_MEMBER(nes_state::bmc_ball11_w)
10668WRITE8_MEMBER(nes_carts_state::bmc_ball11_w)
1067010669{
1067110670
1067210671   LOG_MMC(("bmc_ball11_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1069910698
1070010699 *************************************************************/
1070110700
10702WRITE8_MEMBER(nes_state::bmc_mario7in1_m_w)
10701WRITE8_MEMBER(nes_carts_state::bmc_mario7in1_m_w)
1070310702{
1070410703   UINT8 map52_helper1, map52_helper2;
1070510704   LOG_MMC(("bmc_mario7in1_m_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1074110740
1074210741 *************************************************************/
1074310742
10744WRITE8_MEMBER(nes_state::bmc_gold7in1_m_w)
10743WRITE8_MEMBER(nes_carts_state::bmc_gold7in1_m_w)
1074510744{
1074610745   UINT8 map52_helper1, map52_helper2;
1074710746   LOG_MMC(("bmc_gold7in1_m_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1081010809   chr1_x(machine, chr_page ^ 7, chr_base | (state->m_mmc_vrom_bank[5] & chr_mask), chr);
1081110810}
1081210811
10813WRITE8_MEMBER(nes_state::bmc_gc6in1_l_w)
10812WRITE8_MEMBER(nes_carts_state::bmc_gc6in1_l_w)
1081410813{
1081510814   UINT8 bank;
1081610815   LOG_MMC(("bmc_gc6in1_l_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1083910838   }
1084010839}
1084110840
10842WRITE8_MEMBER(nes_state::bmc_gc6in1_w)
10841WRITE8_MEMBER(nes_carts_state::bmc_gc6in1_w)
1084310842{
1084410843   UINT8 mmc_helper, cmd;
1084510844   static const UINT8 conv_table[8] = {0, 6, 3, 7, 5, 2, 4, 1};
r18064r18065
1095610955
1095710956 *************************************************************/
1095810957
10959WRITE8_MEMBER(nes_state::bmc_family4646_m_w)
10958WRITE8_MEMBER(nes_carts_state::bmc_family4646_m_w)
1096010959{
1096110960   LOG_MMC(("bmc_family4646_m_w, offset: %04x, data: %02x\n", offset, data));
1096210961
r18064r18065
1097710976
1097810977 *************************************************************/
1097910978
10980WRITE8_MEMBER(nes_state::bmc_vt5201_w)
10979WRITE8_MEMBER(nes_carts_state::bmc_vt5201_w)
1098110980{
1098210981   LOG_MMC(("bmc_vt5201_w, offset: %04x, data: %02x\n", offset, data));
1098310982
r18064r18065
1099610995   chr8(machine(), offset, CHRROM);
1099710996}
1099810997
10999READ8_MEMBER(nes_state::bmc_vt5201_r)
10998READ8_MEMBER(nes_carts_state::bmc_vt5201_r)
1100010999{
1100111000   LOG_MMC(("bmc_vt5201_r, offset: %04x\n", offset));
1100211001   //  m_mmc_dipsetting = ioport("CARTDIPS")->read();
r18064r18065
1102911028   chr2_6(machine, state->m_mmc_vrom_bank[3], CHRROM);
1103011029}
1103111030
11032WRITE8_MEMBER(nes_state::bmc_bs5_w)
11031WRITE8_MEMBER(nes_carts_state::bmc_bs5_w)
1103311032{
1103411033   UINT8 bs5_helper = (offset & 0xc00) >> 10;
1103511034   LOG_MMC(("bmc_bs5_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1105611055
1105711056 *************************************************************/
1105811057
11059WRITE8_MEMBER(nes_state::bmc_810544_w)
11058WRITE8_MEMBER(nes_carts_state::bmc_810544_w)
1106011059{
1106111060   UINT8 bank = (offset >> 7);
1106211061   LOG_MMC(("bmc_810544_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1108011079
1108111080 *************************************************************/
1108211081
11083WRITE8_MEMBER(nes_state::bmc_ntd03_w)
11082WRITE8_MEMBER(nes_carts_state::bmc_ntd03_w)
1108411083{
1108511084   UINT8 pbank, cbank;
1108611085   LOG_MMC(("bmc_ntd03_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1112911128//      chr8(machine, 0, CHRROM);
1113011129}
1113111130
11132WRITE8_MEMBER(nes_state::bmc_gb63_w)
11131WRITE8_MEMBER(nes_carts_state::bmc_gb63_w)
1113311132{
1113411133   LOG_MMC(("bmc_gb63_w, offset: %04x, data: %02x\n", offset, data));
1113511134
r18064r18065
1113811137
1113911138}
1114011139
11141READ8_MEMBER(nes_state::bmc_gb63_r)
11140READ8_MEMBER(nes_carts_state::bmc_gb63_r)
1114211141{
1114311142   LOG_MMC(("bmc_gb63_r, offset: %04x\n", offset));
1114411143   //  m_mmc_dipsetting = ioport("CARTDIPS")->read();
r18064r18065
1115511154
1115611155 *************************************************************/
1115711156
11158WRITE8_MEMBER(nes_state::edu2k_w)
11157WRITE8_MEMBER(nes_carts_state::edu2k_w)
1115911158{
1116011159   LOG_MMC(("edu2k_w, offset: %04x, data: %02x\n", offset, data));
1116111160
r18064r18065
1117711176      prg8_x(machine, start, bank);
1117811177}
1117911178
11180WRITE8_MEMBER(nes_state::h2288_l_w)
11179WRITE8_MEMBER(nes_carts_state::h2288_l_w)
1118111180{
1118211181   LOG_MMC(("h2288_l_w offset: %04x, data: %02x\n", offset, data));
1118311182   offset += 0x100;
r18064r18065
1119711196   }
1119811197}
1119911198
11200READ8_MEMBER(nes_state::h2288_l_r)
11199READ8_MEMBER(nes_carts_state::h2288_l_r)
1120111200{
1120211201   LOG_MMC(("h2288_l_r offset: %04x\n", offset));
1120311202   offset += 0x100;
r18064r18065
1121411213   return 0;
1121511214}
1121611215
11217WRITE8_MEMBER(nes_state::h2288_w)
11216WRITE8_MEMBER(nes_carts_state::h2288_w)
1121811217{
1121911218   static const UINT8 conv_table[8] = {0, 3, 1, 5, 6, 7, 2, 4};
1122011219   LOG_MMC(("h2288_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1128211281   }
1128311282}
1128411283
11285WRITE8_MEMBER(nes_state::shjy3_w)
11284WRITE8_MEMBER(nes_carts_state::shjy3_w)
1128611285{
1128711286   UINT8 mmc_helper, shift;
1128811287   LOG_MMC(("shjy3_w, offset: %04x, data: %02x\n", offset, data));
r18064r18065
1134311342
1134411343 *************************************************************/
1134511344
11346WRITE8_MEMBER(nes_state::unl_6035052_extra_w)
11345WRITE8_MEMBER(nes_carts_state::unl_6035052_extra_w)
1134711346{
1134811347   LOG_MMC(("unl_6035052_extra_w, offset: %04x, data: %02x\n", offset, data));
1134911348   m_mmc_latch1 = data & 0x03;
r18064r18065
1135111350      m_mmc_latch1 = 2;
1135211351}
1135311352
11354READ8_MEMBER(nes_state::unl_6035052_extra_r)
11353READ8_MEMBER(nes_carts_state::unl_6035052_extra_r)
1135511354{
1135611355   LOG_MMC(("unl_6035052_extra_r, offset: %04x\n", offset));
1135711356   return m_mmc_latch1;
r18064r18065
1140711406   state->m_mmc_chr_mask = BIT(state->m_mmc_reg[0], 7) ? 0x7f : 0xff;
1140811407}
1140911408
11410WRITE8_MEMBER(nes_state::pjoy84_m_w)
11409WRITE8_MEMBER(nes_carts_state::pjoy84_m_w)
1141111410{
1141211411   LOG_MMC(("pjoy84_m_w offset: %04x, data: %02x\n", offset, data));
1141311412
r18064r18065
1148611485      chr8(machine, (state->m_mmc_reg[1] & 0x1f) >> 1, state->m_mmc_chr_source);
1148711486}
1148811487
11489WRITE8_MEMBER(nes_state::someri_mmc1_w)
11488WRITE8_MEMBER(nes_carts_state::someri_mmc1_w)
1149011489{
1149111490
1149211491   assert(m_mmc_cmd1 == 2);
r18064r18065
1154511544}
1154611545
1154711546// MMC3 Mode emulation
11548WRITE8_MEMBER(nes_state::someri_mmc3_w)
11547WRITE8_MEMBER(nes_carts_state::someri_mmc3_w)
1154911548{
1155011549   UINT8 mmc_helper, cmd;
1155111550
r18064r18065
1159211591}
1159311592
1159411593// VRC2 Mode emulation
11595WRITE8_MEMBER(nes_state::someri_vrc2_w)
11594WRITE8_MEMBER(nes_carts_state::someri_vrc2_w)
1159611595{
1159711596   UINT8 bank, shift;
1159811597
r18064r18065
1162811627   }
1162911628}
1163011629
11631WRITE8_MEMBER(nes_state::someri_w)
11630WRITE8_MEMBER(nes_carts_state::someri_w)
1163211631{
1163311632   LOG_MMC(("someri_w mode %d, offset: %04x, data: %02x\n", m_mmc_cmd1, offset, data));
1163411633
r18064r18065
1166411663   }
1166511664}
1166611665
11667WRITE8_MEMBER(nes_state::someri_l_w)
11666WRITE8_MEMBER(nes_carts_state::someri_l_w)
1166811667{
1166911668   LOG_MMC(("someri_l_w, offset: %04x, data: %02x\n", offset, data));
1167011669   offset += 0x100;
r18064r18065
1168811687
1168911688 *************************************************************/
1169011689
11691WRITE8_MEMBER(nes_state::fujiya_m_w)
11690WRITE8_MEMBER(nes_carts_state::fujiya_m_w)
1169211691{
1169311692   LOG_MMC(("fujiya_m_w, offset: %04x, data: %02x\n", offset, data));
1169411693   offset += 0x6000;
r18064r18065
1169711696      m_mmc_latch1 = (data & 0x40) << 1;
1169811697}
1169911698
11700READ8_MEMBER(nes_state::fujiya_m_r)
11699READ8_MEMBER(nes_carts_state::fujiya_m_r)
1170111700{
1170211701   LOG_MMC(("fujiya_m_r, offset: %04x\n", offset));
1170311702   offset += 0x6000;
r18064r18065
1174111740#define NES_WRITEONLY(a) \
1174211741{write8_delegate(FUNC(a),(nes_state *)0), read8_delegate()}
1174311742
11744WRITE8_MEMBER(nes_state::dummy_l_w)
11743#define NES_READWRITE(a, b) \
11744{write8_delegate(FUNC(a),(nes_state *)0), read8_delegate(FUNC(b),(nes_state *)0)}
11745
11746
11747WRITE8_MEMBER(nes_carts_state::dummy_l_w)
1174511748{
1174611749   logerror("write access, offset: %04x, data: %02x\n", offset + 0x4100, data);
1174711750}
1174811751
11749WRITE8_MEMBER(nes_state::dummy_m_w)
11752WRITE8_MEMBER(nes_carts_state::dummy_m_w)
1175011753{
1175111754   logerror("write access, offset: %04x, data: %02x\n", offset + 0x6000, data);
1175211755}
1175311756
11754WRITE8_MEMBER(nes_state::dummy_w)
11757WRITE8_MEMBER(nes_carts_state::dummy_w)
1175511758{
1175611759   logerror("write access, offset: %04x, data: %02x\n", offset + 0x8000, data);
1175711760}
1175811761
11759READ8_MEMBER(nes_state::dummy_l_r)
11762READ8_MEMBER(nes_carts_state::dummy_l_r)
1176011763{
1176111764   logerror("read access, offset: %04x\n", offset + 0x4100);
1176211765   return 0x00;
1176311766}
1176411767
11765READ8_MEMBER(nes_state::dummy_m_r)
11768READ8_MEMBER(nes_carts_state::dummy_m_r)
1176611769{
1176711770   logerror("read access, offset: %04x\n", offset + 0x6000);
1176811771   return 0x00;
1176911772}
1177011773
11771READ8_MEMBER(nes_state::dummy_r)
11774READ8_MEMBER(nes_carts_state::dummy_r)
1177211775{
1177311776   logerror("read access, offset: %04x\n", offset + 0x8000);
1177411777   return 0x00;
r18064r18065
1177911782   { STD_NROM,             NES_NOACCESS, NES_NOACCESS, NES_NOACCESS,                         NULL, NULL, NULL },
1178011783   { HVC_FAMBASIC,         NES_NOACCESS, NES_NOACCESS, NES_NOACCESS,                         NULL, NULL, NULL },
1178111784   { GG_NROM,              NES_NOACCESS, NES_NOACCESS, NES_NOACCESS,                         NULL, NULL, NULL },
11782   { STD_UXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::uxrom_w),               NULL, NULL, NULL },
11783   { STD_UN1ROM,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::un1rom_w),              NULL, NULL, NULL },
11784   { STD_CPROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::cprom_w),               NULL, NULL, NULL },
11785   { STD_CNROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::cnrom_w),               NULL, NULL, NULL },
11786   { BANDAI_PT554,         NES_NOACCESS, NES_WRITEONLY(nes_state::bandai_pt554_m_w), NES_WRITEONLY(nes_state::cnrom_w), NULL, NULL, NULL },
11787   { STD_AXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::axrom_w),               NULL, NULL, NULL },
11788   { STD_PXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::pxrom_w),               mmc2_latch, NULL, NULL },
11789   { STD_FXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::fxrom_w),               mmc2_latch, NULL, NULL },
11790   { STD_BXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bxrom_w),               NULL, NULL, NULL },
11791   { STD_GXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::gxrom_w),               NULL, NULL, NULL },
11792   { STD_MXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::gxrom_w),               NULL, NULL, NULL },
11793   { STD_NXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ntbrom_w),              NULL, NULL, NULL },
11794   { SUNSOFT_DCS,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ntbrom_w),              NULL, NULL, NULL },
11795   { STD_JXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::jxrom_w),               NULL, NULL, jxrom_irq },
11796   { STD_SXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sxrom_w),               NULL, NULL, NULL },
11797   { STD_SOROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sxrom_w),               NULL, NULL, NULL },
11798   { STD_SXROM_A,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sxrom_w),               NULL, NULL, NULL },
11799   { STD_SOROM_A,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sxrom_w),               NULL, NULL, NULL },
11800   { STD_TXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w),               NULL, NULL, mmc3_irq },
11801   { STD_TVROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w),               NULL, NULL, mmc3_irq },
11802   { STD_TKROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w),               NULL, NULL, mmc3_irq },
11803   { STD_HKROM,            NES_NOACCESS, {write8_delegate(FUNC(nes_state::hkrom_m_w),(nes_state *)0), read8_delegate(FUNC(nes_state::hkrom_m_r),(nes_state *)0)}, NES_WRITEONLY(nes_state::hkrom_w),     NULL, NULL, mmc3_irq },
11804   { STD_TQROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tqrom_w),               NULL, NULL, mmc3_irq },
11805   { STD_TXSROM,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txsrom_w),              NULL, NULL, mmc3_irq },
11806   { STD_DXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::dxrom_w),               NULL, NULL, NULL },
11807   { STD_DRROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::dxrom_w),               NULL, NULL, NULL },
11808   { NAMCOT_34X3,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::dxrom_w),               NULL, NULL, NULL },
11809   { NAMCOT_3425,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::namcot3425_w),          NULL, NULL, NULL },
11810   { NAMCOT_3446,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::namcot3446_w),          NULL, NULL, NULL },
11811   { NAMCOT_3453,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::namcot3453_w),          NULL, NULL, NULL },
11812   { STD_EXROM,            {write8_delegate(FUNC(nes_state::exrom_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::exrom_l_r),(nes_state *)0)}, NES_NOACCESS, NES_NOACCESS,               NULL, NULL, mmc5_irq },
11813   { NES_QJ,               NES_NOACCESS, NES_WRITEONLY(nes_state::qj_m_w), NES_WRITEONLY(nes_state::txrom_w),      NULL, NULL, mmc3_irq },
11814   { PAL_ZZ,               NES_NOACCESS, NES_WRITEONLY(nes_state::zz_m_w), NES_WRITEONLY(nes_state::txrom_w),      NULL, NULL, mmc3_irq },
11815   { UXROM_CC,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::uxrom_cc_w),            NULL, NULL, NULL },
11785   { STD_UXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::uxrom_w),               NULL, NULL, NULL },
11786   { STD_UN1ROM,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::un1rom_w),              NULL, NULL, NULL },
11787   { STD_CPROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cprom_w),               NULL, NULL, NULL },
11788   { STD_CNROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cnrom_w),               NULL, NULL, NULL },
11789   { BANDAI_PT554,         NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_pt554_m_w), NES_WRITEONLY(nes_carts_state::cnrom_w), NULL, NULL, NULL },
11790   { STD_AXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::axrom_w),               NULL, NULL, NULL },
11791   { STD_PXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::pxrom_w),               mmc2_latch, NULL, NULL },
11792   { STD_FXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fxrom_w),               mmc2_latch, NULL, NULL },
11793   { STD_BXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bxrom_w),               NULL, NULL, NULL },
11794   { STD_GXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gxrom_w),               NULL, NULL, NULL },
11795   { STD_MXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gxrom_w),               NULL, NULL, NULL },
11796   { STD_NXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntbrom_w),              NULL, NULL, NULL },
11797   { SUNSOFT_DCS,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntbrom_w),              NULL, NULL, NULL },
11798   { STD_JXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jxrom_w),               NULL, NULL, jxrom_irq },
11799   { STD_SXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w),               NULL, NULL, NULL },
11800   { STD_SOROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w),               NULL, NULL, NULL },
11801   { STD_SXROM_A,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w),               NULL, NULL, NULL },
11802   { STD_SOROM_A,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w),               NULL, NULL, NULL },
11803   { STD_TXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w),               NULL, NULL, mmc3_irq },
11804   { STD_TVROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w),               NULL, NULL, mmc3_irq },
11805   { STD_TKROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w),               NULL, NULL, mmc3_irq },
11806   { STD_HKROM,            NES_NOACCESS, NES_READWRITE(nes_carts_state::hkrom_m_w, nes_carts_state::hkrom_m_r), NES_WRITEONLY(nes_carts_state::hkrom_w),     NULL, NULL, mmc3_irq },
11807   { STD_TQROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tqrom_w),               NULL, NULL, mmc3_irq },
11808   { STD_TXSROM,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txsrom_w),              NULL, NULL, mmc3_irq },
11809   { STD_DXROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w),               NULL, NULL, NULL },
11810   { STD_DRROM,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w),               NULL, NULL, NULL },
11811   { NAMCOT_34X3,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w),               NULL, NULL, NULL },
11812   { NAMCOT_3425,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3425_w),          NULL, NULL, NULL },
11813   { NAMCOT_3446,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3446_w),          NULL, NULL, NULL },
11814   { NAMCOT_3453,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3453_w),          NULL, NULL, NULL },
11815   { STD_EXROM,            NES_READWRITE(nes_carts_state::exrom_l_w, nes_carts_state::exrom_l_r), NES_NOACCESS, NES_NOACCESS,               NULL, NULL, mmc5_irq },
11816   { NES_QJ,               NES_NOACCESS, NES_WRITEONLY(nes_carts_state::qj_m_w), NES_WRITEONLY(nes_carts_state::txrom_w),      NULL, NULL, mmc3_irq },
11817   { PAL_ZZ,               NES_NOACCESS, NES_WRITEONLY(nes_carts_state::zz_m_w), NES_WRITEONLY(nes_carts_state::txrom_w),      NULL, NULL, mmc3_irq },
11818   { UXROM_CC,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::uxrom_cc_w),            NULL, NULL, NULL },
1181611819   //
11817   { DIS_74X139X74,        NES_NOACCESS, NES_WRITEONLY(nes_state::dis_74x139x74_m_w), NES_NOACCESS,     NULL, NULL, NULL },
11818   { DIS_74X377,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::dis_74x377_w),          NULL, NULL, NULL },
11819   { DIS_74X161X161X32,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::dis_74x161x161x32_w),   NULL, NULL, NULL },
11820   { DIS_74X161X138,       NES_NOACCESS, NES_WRITEONLY(nes_state::dis_74x161x138_m_w), NES_NOACCESS,    NULL, NULL, NULL },
11821   { BANDAI_LZ93,          NES_NOACCESS, NES_WRITEONLY(nes_state::lz93d50_m_w), NES_WRITEONLY(nes_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11822   { BANDAI_LZ93EX,        NES_NOACCESS, NES_WRITEONLY(nes_state::lz93d50_m_w), NES_WRITEONLY(nes_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11823   { BANDAI_FCG,           NES_NOACCESS, NES_WRITEONLY(nes_state::lz93d50_m_w), NES_WRITEONLY(nes_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11824   { BANDAI_DATACH,        NES_NOACCESS, NES_WRITEONLY(nes_state::lz93d50_m_w), NES_WRITEONLY(nes_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11825   { BANDAI_JUMP2,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::fjump2_w),              NULL, NULL, bandai_lz_irq },
11826   { BANDAI_KARAOKE,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bandai_ks_w),           NULL, NULL, NULL },
11827   { BANDAI_OEKAKIDS,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bandai_ok_w),           NULL, NULL, NULL },
11828   { IREM_G101,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::g101_w),                NULL, NULL, NULL },
11829   { IREM_LROG017,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::lrog017_w),             NULL, NULL, NULL },
11830   { IREM_H3001,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::h3001_w),               NULL, NULL, h3001_irq },
11831   { IREM_TAM_S1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tam_s1_w),              NULL, NULL, NULL },
11832   { IREM_HOLYDIV,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::irem_hd_w),             NULL, NULL, NULL },
11833   { JALECO_SS88006,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ss88006_w),             NULL, NULL, ss88006_irq },
11834   { JALECO_JF11,          NES_NOACCESS, NES_WRITEONLY(nes_state::jf11_m_w), NES_NOACCESS,              NULL, NULL, NULL },
11835   { JALECO_JF13,          NES_NOACCESS, NES_WRITEONLY(nes_state::jf13_m_w), NES_NOACCESS,              NULL, NULL, NULL },
11836   { JALECO_JF16,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::jf16_w),                NULL, NULL, NULL },
11837   { JALECO_JF17,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::jf17_w),                NULL, NULL, NULL },
11838   { JALECO_JF19,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::jf19_w),                NULL, NULL, NULL },
11839   { KONAMI_VRC1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::konami_vrc1_w),         NULL, NULL, NULL },
11840   { KONAMI_VRC2,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::konami_vrc2_w),         NULL, NULL, NULL },
11841   { KONAMI_VRC3,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::konami_vrc3_w),         NULL, NULL, konami_irq },
11842   { KONAMI_VRC4,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::konami_vrc4_w),         NULL, NULL, konami_irq },
11843   { KONAMI_VRC6,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::konami_vrc6_w),         NULL, NULL, konami_irq },
11844   { KONAMI_VRC7,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::konami_vrc7_w),         NULL, NULL, konami_irq },
11845   { NAMCOT_163,           {write8_delegate(FUNC(nes_state::namcot163_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::namcot163_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::namcot163_w), NULL, NULL, namcot_irq },
11846   { SUNSOFT_1,            NES_NOACCESS, NES_WRITEONLY(nes_state::sunsoft1_m_w), NES_NOACCESS,          NULL, NULL, NULL },
11847   { SUNSOFT_2,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sunsoft2_w),            NULL, NULL, NULL },
11848   { SUNSOFT_3,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sunsoft3_w),            NULL, NULL, sunsoft3_irq },
11849   { TAITO_TC0190FMC,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tc0190fmc_w),           NULL, NULL, NULL },
11850   { TAITO_TC0190FMCP,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tc0190fmc_p16_w),       NULL, NULL, mmc3_irq },
11851   { TAITO_X1_005,         NES_NOACCESS, {write8_delegate(FUNC(nes_state::x1005_m_w),(nes_state *)0), read8_delegate(FUNC(nes_state::x1005_m_r),(nes_state *)0)}, NES_NOACCESS,               NULL, NULL, NULL },
11852   { TAITO_X1_005_A,       NES_NOACCESS, {write8_delegate(FUNC(nes_state::x1005a_m_w),(nes_state *)0), read8_delegate(FUNC(nes_state::x1005_m_r),(nes_state *)0)}, NES_NOACCESS,              NULL, NULL, NULL },
11853   { TAITO_X1_017,         NES_NOACCESS, {write8_delegate(FUNC(nes_state::x1017_m_w),(nes_state *)0), read8_delegate(FUNC(nes_state::x1017_m_r),(nes_state *)0)}, NES_NOACCESS,               NULL, NULL, NULL },
11820   { DIS_74X139X74,        NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x139x74_m_w), NES_NOACCESS,     NULL, NULL, NULL },
11821   { DIS_74X377,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x377_w),          NULL, NULL, NULL },
11822   { DIS_74X161X161X32,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x161x161x32_w),   NULL, NULL, NULL },
11823   { DIS_74X161X138,       NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x161x138_m_w), NES_NOACCESS,    NULL, NULL, NULL },
11824   { BANDAI_LZ93,          NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11825   { BANDAI_LZ93EX,        NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11826   { BANDAI_FCG,           NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11827   { BANDAI_DATACH,        NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
11828   { BANDAI_JUMP2,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fjump2_w),              NULL, NULL, bandai_lz_irq },
11829   { BANDAI_KARAOKE,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_ks_w),           NULL, NULL, NULL },
11830   { BANDAI_OEKAKIDS,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_ok_w),           NULL, NULL, NULL },
11831   { IREM_G101,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::g101_w),                NULL, NULL, NULL },
11832   { IREM_LROG017,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lrog017_w),             NULL, NULL, NULL },
11833   { IREM_H3001,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::h3001_w),               NULL, NULL, h3001_irq },
11834   { IREM_TAM_S1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tam_s1_w),              NULL, NULL, NULL },
11835   { IREM_HOLYDIV,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::irem_hd_w),             NULL, NULL, NULL },
11836   { JALECO_SS88006,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ss88006_w),             NULL, NULL, ss88006_irq },
11837   { JALECO_JF11,          NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf11_m_w), NES_NOACCESS,              NULL, NULL, NULL },
11838   { JALECO_JF13,          NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf13_m_w), NES_NOACCESS,              NULL, NULL, NULL },
11839   { JALECO_JF16,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf16_w),                NULL, NULL, NULL },
11840   { JALECO_JF17,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf17_w),                NULL, NULL, NULL },
11841   { JALECO_JF19,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf19_w),                NULL, NULL, NULL },
11842   { KONAMI_VRC1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc1_w),         NULL, NULL, NULL },
11843   { KONAMI_VRC2,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc2_w),         NULL, NULL, NULL },
11844   { KONAMI_VRC3,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc3_w),         NULL, NULL, konami_irq },
11845   { KONAMI_VRC4,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc4_w),         NULL, NULL, konami_irq },
11846   { KONAMI_VRC6,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc6_w),         NULL, NULL, konami_irq },
11847   { KONAMI_VRC7,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc7_w),         NULL, NULL, konami_irq },
11848   { NAMCOT_163,           NES_READWRITE(nes_carts_state::namcot163_l_w, nes_carts_state::namcot163_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot163_w), NULL, NULL, namcot_irq },
11849   { SUNSOFT_1,            NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft1_m_w), NES_NOACCESS,          NULL, NULL, NULL },
11850   { SUNSOFT_2,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft2_w),            NULL, NULL, NULL },
11851   { SUNSOFT_3,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft3_w),            NULL, NULL, sunsoft3_irq },
11852   { TAITO_TC0190FMC,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tc0190fmc_w),           NULL, NULL, NULL },
11853   { TAITO_TC0190FMCP,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tc0190fmc_p16_w),       NULL, NULL, mmc3_irq },
11854   { TAITO_X1_005,         NES_NOACCESS, NES_READWRITE(nes_carts_state::x1005_m_w, nes_carts_state::x1005_m_r), NES_NOACCESS,               NULL, NULL, NULL },
11855   { TAITO_X1_005_A,       NES_NOACCESS, NES_READWRITE(nes_carts_state::x1005a_m_w, nes_carts_state::x1005_m_r), NES_NOACCESS,              NULL, NULL, NULL },
11856   { TAITO_X1_017,         NES_NOACCESS, NES_READWRITE(nes_carts_state::x1017_m_w, nes_carts_state::x1017_m_r), NES_NOACCESS,               NULL, NULL, NULL },
1185411857   //
11855   { AGCI_50282,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::agci_50282_w),          NULL, NULL, NULL },
11856   { ACTENT_ACT52,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ae_act52_w),            NULL, NULL, NULL },
11857   { AVE_NINA01,           NES_NOACCESS, NES_WRITEONLY(nes_state::nina01_m_w), NES_NOACCESS,            NULL, NULL, NULL },
11858   { AVE_NINA06,           NES_WRITEONLY(nes_state::nina06_l_w), NES_NOACCESS, NES_NOACCESS,            NULL, NULL, NULL },
11859   { CNE_DECATHLON,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::cne_decathl_w),         NULL, NULL, NULL },
11860   { CNE_FSB,              NES_NOACCESS, NES_WRITEONLY(nes_state::cne_fsb_m_w), NES_NOACCESS,           NULL, NULL, NULL },
11861   { CNE_SHLZ,             NES_WRITEONLY(nes_state::cne_shlz_l_w), NES_NOACCESS, NES_NOACCESS,          NULL, NULL, NULL },
11862   { CALTRON_6IN1,         NES_NOACCESS, NES_WRITEONLY(nes_state::caltron6in1_m_w), NES_WRITEONLY(nes_state::caltron6in1_w),      NULL, NULL, NULL },
11863   { CAMERICA_BF9093,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bf9093_w),              NULL, NULL, NULL },
11864   { CAMERICA_BF9097,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bf9093_w),              NULL, NULL, NULL },
11865   { CAMERICA_BF9096,      NES_NOACCESS, NES_WRITEONLY(nes_state::bf9096_w), NES_WRITEONLY(nes_state::bf9096_w),   NULL, NULL, NULL },
11866   { CAMERICA_GOLDENFIVE,  NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::golden5_w),             NULL, NULL, NULL },
11867   { CONY_BOARD,           {write8_delegate(FUNC(nes_state::cony_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::cony_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::cony_w),        NULL, NULL, sunsoft3_irq },
11868   { YOKO_BOARD,           {write8_delegate(FUNC(nes_state::yoko_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::yoko_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::yoko_w),        NULL, NULL, sunsoft3_irq },
11869   { DREAMTECH_BOARD,      NES_WRITEONLY(nes_state::dreamtech_l_w), NES_NOACCESS, NES_NOACCESS,         NULL, NULL, NULL },
11870   { FUTUREMEDIA_BOARD,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::futuremedia_w),         NULL, NULL, futuremedia_irq },
11871   { FUKUTAKE_BOARD,       {write8_delegate(FUNC(nes_state::fukutake_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::fukutake_l_r),(nes_state *)0)}, NES_NOACCESS, NES_NOACCESS,         NULL, NULL, NULL },
11872   { GOUDER_37017,         {write8_delegate(FUNC(nes_state::gouder_sf4_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::gouder_sf4_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
11873   { HENGEDIANZI_BOARD,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::henggedianzi_w),        NULL, NULL, NULL },
11874   { HENGEDIANZI_XJZB,     NES_WRITEONLY(nes_state::heng_xjzb_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::heng_xjzb_w), NULL, NULL, NULL },
11875   { HES6IN1_BOARD,        NES_WRITEONLY(nes_state::hes6in1_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11876   { HES_BOARD,            NES_WRITEONLY(nes_state::hes_l_w), NES_NOACCESS, NES_NOACCESS,               NULL, NULL, NULL },
11877   { HOSENKAN_BOARD,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::hosenkan_w),            NULL, NULL, mmc3_irq },
11878   { KAISER_KS7058,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ks7058_w),              NULL, NULL, NULL },
11879   { KAISER_KS7022,        NES_NOACCESS, NES_NOACCESS, {write8_delegate(FUNC(nes_state::ks7022_w),(nes_state *)0), read8_delegate(FUNC(nes_state::ks7022_r),(nes_state *)0)},                 NULL, NULL, NULL },
11880   { KAISER_KS7032,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ks7032_w),              NULL, NULL, ks7032_irq },
11881   { KAISER_KS202,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ks202_w),               NULL, NULL, ks7032_irq },
11882   { KAISER_KS7017,      NES_WRITEONLY(nes_state::ks7017_l_w), NES_NOACCESS, NES_NOACCESS,            NULL, NULL, mmc_fds_irq },
11883   { KAY_PANDAPRINCE,      {write8_delegate(FUNC(nes_state::kay_pp_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::kay_pp_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::kay_pp_w),  NULL, NULL, mmc3_irq },
11884   { KASING_BOARD,         NES_NOACCESS, NES_WRITEONLY(nes_state::kasing_m_w), NES_WRITEONLY(nes_state::txrom_w),  NULL, NULL, mmc3_irq },
11885   { SACHEN_74LS374,       {write8_delegate(FUNC(nes_state::sachen_74x374_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::sachen_74x374_l_r),(nes_state *)0)}, NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
11886   { SACHEN_74LS374_A,     NES_WRITEONLY(nes_state::sachen_74x374a_l_w), NES_NOACCESS, NES_NOACCESS,    NULL, NULL, NULL },
11887   { SACHEN_8259A,         NES_WRITEONLY(nes_state::s8259_l_w), NES_WRITEONLY(nes_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11888   { SACHEN_8259B,         NES_WRITEONLY(nes_state::s8259_l_w), NES_WRITEONLY(nes_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11889   { SACHEN_8259C,         NES_WRITEONLY(nes_state::s8259_l_w), NES_WRITEONLY(nes_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11890   { SACHEN_8259D,         NES_WRITEONLY(nes_state::s8259_l_w), NES_WRITEONLY(nes_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11891   { SACHEN_SA009,         NES_WRITEONLY(nes_state::sa009_l_w), NES_NOACCESS, NES_NOACCESS,             NULL, NULL, NULL },
11892   { SACHEN_SA0036,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sa0036_w),              NULL, NULL, NULL },
11893   { SACHEN_SA0037,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sa0037_w),              NULL, NULL, NULL },
11894   { SACHEN_SA72007,       NES_WRITEONLY(nes_state::sa72007_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11895   { SACHEN_SA72008,       NES_WRITEONLY(nes_state::sa72008_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11896   { SACHEN_TCA01,         NES_READONLY(nes_state::tca01_l_r), NES_NOACCESS, NES_NOACCESS,              NULL, NULL, NULL },
11897   { SACHEN_TCU01,         NES_WRITEONLY(nes_state::tcu01_l_w), NES_WRITEONLY(nes_state::tcu01_m_w), NES_WRITEONLY(nes_state::tcu01_w), NULL, NULL, NULL },
11898   { SACHEN_TCU02,         {write8_delegate(FUNC(nes_state::tcu02_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::tcu02_l_r),(nes_state *)0)}, NES_NOACCESS, NES_NOACCESS,               NULL, NULL, NULL },
11899   { SUBOR_TYPE0,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::subor0_w),              NULL, NULL, NULL },
11900   { SUBOR_TYPE1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::subor1_w),              NULL, NULL, NULL },
11901   { MAGICSERIES_MD,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::magics_md_w),           NULL, NULL, NULL },
11902   { NANJING_BOARD,        {write8_delegate(FUNC(nes_state::nanjing_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::nanjing_l_r),(nes_state *)0)}, NES_NOACCESS, NES_NOACCESS,           NULL, NULL, nanjing_irq },
11903   { NITRA_TDA,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::nitra_w),               NULL, NULL, mmc3_irq },
11904   { NTDEC_ASDER,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ntdec_asder_w),         NULL, NULL, NULL },
11905   { NTDEC_FIGHTINGHERO,   NES_NOACCESS, NES_WRITEONLY(nes_state::ntdec_fh_m_w), NES_NOACCESS,          NULL, NULL, NULL },
11906   { OPENCORP_DAOU306,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::daou306_w),             NULL, NULL, NULL },
11907   { RCM_GS2015,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::gs2015_w),              NULL, NULL, NULL },
11908   { RCM_TETRISFAMILY,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::rcm_tf_w),              NULL, NULL, NULL },
11909   { REXSOFT_DBZ5,         {write8_delegate(FUNC(nes_state::rex_dbz_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::rex_dbz_l_r),(nes_state *)0)}, NES_READONLY(nes_state::rex_dbz_l_r), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
11910   { REXSOFT_SL1632,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::rex_sl1632_w),          NULL, NULL, mmc3_irq },
11911   { RUMBLESTATION_BOARD,  NES_NOACCESS, NES_WRITEONLY(nes_state::rumblestation_m_w), NES_WRITEONLY(nes_state::rumblestation_w),      NULL, NULL, NULL },
11912   { SOMERI_SL12,          NES_WRITEONLY(nes_state::someri_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::someri_w), NULL, NULL, mmc3_irq },
11913   { SUPERGAME_BOOGERMAN,  NES_WRITEONLY(nes_state::sgame_boog_l_w), NES_WRITEONLY(nes_state::sgame_boog_m_w), NES_WRITEONLY(nes_state::sgame_boog_w), NULL, NULL, mmc3_irq },
11914   { SUPERGAME_LIONKING,   NES_NOACCESS, NES_WRITEONLY(nes_state::sgame_lion_m_w), NES_WRITEONLY(nes_state::sgame_lion_w), NULL, NULL, mmc3_irq },
11915   { TENGEN_800008,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tengen_800008_w),       NULL, NULL, NULL },
11916   { TENGEN_800032,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tengen_800032_w),       NULL, NULL, tengen_800032_irq },
11917   { TENGEN_800037,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::tengen_800037_w),       NULL, NULL, tengen_800032_irq },
11918   { TXC_22211A,           {write8_delegate(FUNC(nes_state::txc_22211_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::txc_22211_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::txc_22211_w), NULL, NULL, NULL },
11919   { TXC_22211B,           {write8_delegate(FUNC(nes_state::txc_22211_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::txc_22211_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::txc_22211b_w), NULL, NULL, NULL },
11920   { TXC_22211C,           {write8_delegate(FUNC(nes_state::txc_22211_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::txc_22211c_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::txc_22211_w), NULL, NULL, NULL },
11921   { TXC_TW,               NES_WRITEONLY(nes_state::txc_tw_l_w), NES_WRITEONLY(nes_state::txc_tw_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
11922   { TXC_STRIKEWOLF,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txc_strikewolf_w),      NULL, NULL, NULL },
11923   { TXC_MXMDHTWO,         NES_READONLY(nes_state::txc_mxmdhtwo_l_r), NES_NOACCESS, NES_WRITEONLY(nes_state::txc_mxmdhtwo_w), NULL, NULL, NULL },
11924   { WAIXING_TYPE_A,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11925   { WAIXING_TYPE_A_1,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11926   { WAIXING_TYPE_B,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11927   { WAIXING_TYPE_C,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11928   { WAIXING_TYPE_D,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11929   { WAIXING_TYPE_E,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11930   { WAIXING_TYPE_F,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_f_w),           NULL, NULL, mmc3_irq },
11931   { WAIXING_TYPE_G,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_g_w),           NULL, NULL, mmc3_irq },
11932   { WAIXING_TYPE_H,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_h_w),           NULL, NULL, mmc3_irq },
11933   { WAIXING_TYPE_I,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w),               NULL, NULL, mmc3_irq },   // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
11934   { WAIXING_TYPE_J,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w),               NULL, NULL, mmc3_irq },   // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
11935   { WAIXING_SGZ,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_sgz_w),         NULL, NULL, konami_irq },
11936   { WAIXING_SGZLZ,        NES_WRITEONLY(nes_state::waixing_sgzlz_l_w), NES_NOACCESS, NES_NOACCESS,     NULL, NULL, NULL },
11937   { WAIXING_FFV,          NES_WRITEONLY(nes_state::waixing_ffv_l_w), NES_NOACCESS, NES_NOACCESS,       NULL, NULL, NULL },
11938   { WAIXING_ZS,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_zs_w),          NULL, NULL, NULL },
11939   { WAIXING_DQ8,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_dq8_w),         NULL, NULL, NULL },
11940   { WAIXING_SECURITY,     NES_WRITEONLY(nes_state::waixing_sec_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
11941   { WAIXING_SH2,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w),               NULL, NULL, mmc3_irq },   // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
11942   { WAIXING_PS2,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::waixing_ps2_w),         NULL, NULL, NULL },
11943   { UNL_8237,             NES_WRITEONLY(nes_state::unl_8237_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::unl_8237_w),      NULL, NULL, mmc3_irq },
11944   { UNL_AX5705,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::unl_ax5705_w),          NULL, NULL, NULL },
11945   { UNL_CC21,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::unl_cc21_w),            NULL, NULL, NULL },
11946   { UNL_KOF97,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::unl_kof97_w),           NULL, NULL, mmc3_irq },
11947   { UNL_KS7057,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::ks7057_w),              NULL, NULL, mmc3_irq },
11948   { UNL_T230,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::unl_t230_w),            NULL, NULL, konami_irq },
11949   { UNL_KOF96,            {write8_delegate(FUNC(nes_state::kof96_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::kof96_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::kof96_w),     NULL, NULL, mmc3_irq },
11950   { UNL_MK2,              NES_NOACCESS, NES_WRITEONLY(nes_state::mk2_m_w), NES_NOACCESS,               NULL, NULL, mmc3_irq },
11951   { UNL_N625092,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::n625092_w),             NULL, NULL, NULL },
11952   { UNL_SC127,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sc127_w),               NULL, NULL, sc127_irq },
11953   { UNL_SMB2J,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::smb2j_w),               NULL, NULL, NULL },
11954   { UNL_SUPERFIGHTER3,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::unl_sf3_w),             NULL, NULL, mmc3_irq },
11955   { UNL_XZY,              NES_WRITEONLY(nes_state::unl_xzy_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11956   { UNL_RACERMATE,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::unl_racmate_w),         NULL, NULL, NULL },
11957   { UNL_STUDYNGAME,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::sng32_w),               NULL, NULL, NULL },
11958   { UNL_603_5052,         {write8_delegate(FUNC(nes_state::unl_6035052_extra_w),(nes_state *)0), read8_delegate(FUNC(nes_state::unl_6035052_extra_r),(nes_state *)0)}, {write8_delegate(FUNC(nes_state::unl_6035052_extra_w),(nes_state *)0), read8_delegate(FUNC(nes_state::unl_6035052_extra_r),(nes_state *)0)}, NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
11959   { UNL_EDU2K,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::edu2k_w),               NULL, NULL, NULL },
11960   { UNL_SHJY3,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::shjy3_w),               NULL, NULL, shjy3_irq },
11961   { UNL_H2288,            {write8_delegate(FUNC(nes_state::h2288_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::h2288_l_r),(nes_state *)0)}, NES_NOACCESS, NES_WRITEONLY(nes_state::h2288_w),     NULL, NULL, mmc3_irq },
11962   { UNL_FS304,            NES_WRITEONLY(nes_state::unl_fs304_l_w), NES_NOACCESS, NES_NOACCESS,         NULL, NULL, NULL },
11858   { AGCI_50282,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::agci_50282_w),          NULL, NULL, NULL },
11859   { ACTENT_ACT52,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ae_act52_w),            NULL, NULL, NULL },
11860   { AVE_NINA01,           NES_NOACCESS, NES_WRITEONLY(nes_carts_state::nina01_m_w), NES_NOACCESS,            NULL, NULL, NULL },
11861   { AVE_NINA06,           NES_WRITEONLY(nes_carts_state::nina06_l_w), NES_NOACCESS, NES_NOACCESS,            NULL, NULL, NULL },
11862   { CNE_DECATHLON,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cne_decathl_w),         NULL, NULL, NULL },
11863   { CNE_FSB,              NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cne_fsb_m_w), NES_NOACCESS,           NULL, NULL, NULL },
11864   { CNE_SHLZ,             NES_WRITEONLY(nes_carts_state::cne_shlz_l_w), NES_NOACCESS, NES_NOACCESS,          NULL, NULL, NULL },
11865   { CALTRON_6IN1,         NES_NOACCESS, NES_WRITEONLY(nes_carts_state::caltron6in1_m_w), NES_WRITEONLY(nes_carts_state::caltron6in1_w),      NULL, NULL, NULL },
11866   { CAMERICA_BF9093,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9093_w),              NULL, NULL, NULL },
11867   { CAMERICA_BF9097,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9093_w),              NULL, NULL, NULL },
11868   { CAMERICA_BF9096,      NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9096_w), NES_WRITEONLY(nes_carts_state::bf9096_w),   NULL, NULL, NULL },
11869   { CAMERICA_GOLDENFIVE,  NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::golden5_w),             NULL, NULL, NULL },
11870   { CONY_BOARD,           NES_READWRITE(nes_carts_state::cony_l_w, nes_carts_state::cony_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cony_w),        NULL, NULL, sunsoft3_irq },
11871   { YOKO_BOARD,           NES_READWRITE(nes_carts_state::yoko_l_w, nes_carts_state::yoko_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::yoko_w),        NULL, NULL, sunsoft3_irq },
11872   { DREAMTECH_BOARD,      NES_WRITEONLY(nes_carts_state::dreamtech_l_w), NES_NOACCESS, NES_NOACCESS,         NULL, NULL, NULL },
11873   { FUTUREMEDIA_BOARD,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::futuremedia_w),         NULL, NULL, futuremedia_irq },
11874   { FUKUTAKE_BOARD,       NES_READWRITE(nes_carts_state::fukutake_l_w, nes_carts_state::fukutake_l_r), NES_NOACCESS, NES_NOACCESS,         NULL, NULL, NULL },
11875   { GOUDER_37017,         NES_READWRITE(nes_carts_state::gouder_sf4_l_w, nes_carts_state::gouder_sf4_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
11876   { HENGEDIANZI_BOARD,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::henggedianzi_w),        NULL, NULL, NULL },
11877   { HENGEDIANZI_XJZB,     NES_WRITEONLY(nes_carts_state::heng_xjzb_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::heng_xjzb_w), NULL, NULL, NULL },
11878   { HES6IN1_BOARD,        NES_WRITEONLY(nes_carts_state::hes6in1_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11879   { HES_BOARD,            NES_WRITEONLY(nes_carts_state::hes_l_w), NES_NOACCESS, NES_NOACCESS,               NULL, NULL, NULL },
11880   { HOSENKAN_BOARD,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::hosenkan_w),            NULL, NULL, mmc3_irq },
11881   { KAISER_KS7058,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7058_w),              NULL, NULL, NULL },
11882   { KAISER_KS7022,        NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::ks7022_w, nes_carts_state::ks7022_r),                 NULL, NULL, NULL },
11883   { KAISER_KS7032,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7032_w),              NULL, NULL, ks7032_irq },
11884   { KAISER_KS202,         NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks202_w),               NULL, NULL, ks7032_irq },
11885   { KAISER_KS7017,      NES_WRITEONLY(nes_carts_state::ks7017_l_w), NES_NOACCESS, NES_NOACCESS,            NULL, NULL, mmc_fds_irq },
11886   { KAY_PANDAPRINCE,      NES_READWRITE(nes_carts_state::kay_pp_l_w, nes_carts_state::kay_pp_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kay_pp_w),  NULL, NULL, mmc3_irq },
11887   { KASING_BOARD,         NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kasing_m_w), NES_WRITEONLY(nes_carts_state::txrom_w),  NULL, NULL, mmc3_irq },
11888   { SACHEN_74LS374,       NES_READWRITE(nes_carts_state::sachen_74x374_l_w, nes_carts_state::sachen_74x374_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
11889   { SACHEN_74LS374_A,     NES_WRITEONLY(nes_carts_state::sachen_74x374a_l_w), NES_NOACCESS, NES_NOACCESS,    NULL, NULL, NULL },
11890   { SACHEN_8259A,         NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11891   { SACHEN_8259B,         NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11892   { SACHEN_8259C,         NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11893   { SACHEN_8259D,         NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
11894   { SACHEN_SA009,         NES_WRITEONLY(nes_carts_state::sa009_l_w), NES_NOACCESS, NES_NOACCESS,             NULL, NULL, NULL },
11895   { SACHEN_SA0036,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sa0036_w),              NULL, NULL, NULL },
11896   { SACHEN_SA0037,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sa0037_w),              NULL, NULL, NULL },
11897   { SACHEN_SA72007,       NES_WRITEONLY(nes_carts_state::sa72007_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11898   { SACHEN_SA72008,       NES_WRITEONLY(nes_carts_state::sa72008_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11899   { SACHEN_TCA01,         NES_READONLY(nes_carts_state::tca01_l_r), NES_NOACCESS, NES_NOACCESS,              NULL, NULL, NULL },
11900   { SACHEN_TCU01,         NES_WRITEONLY(nes_carts_state::tcu01_l_w), NES_WRITEONLY(nes_carts_state::tcu01_m_w), NES_WRITEONLY(nes_carts_state::tcu01_w), NULL, NULL, NULL },
11901   { SACHEN_TCU02,         NES_READWRITE(nes_carts_state::tcu02_l_w, nes_carts_state::tcu02_l_r), NES_NOACCESS, NES_NOACCESS,               NULL, NULL, NULL },
11902   { SUBOR_TYPE0,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::subor0_w),              NULL, NULL, NULL },
11903   { SUBOR_TYPE1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::subor1_w),              NULL, NULL, NULL },
11904   { MAGICSERIES_MD,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::magics_md_w),           NULL, NULL, NULL },
11905   { NANJING_BOARD,        NES_READWRITE(nes_carts_state::nanjing_l_w, nes_carts_state::nanjing_l_r), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, nanjing_irq },
11906   { NITRA_TDA,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::nitra_w),               NULL, NULL, mmc3_irq },
11907   { NTDEC_ASDER,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntdec_asder_w),         NULL, NULL, NULL },
11908   { NTDEC_FIGHTINGHERO,   NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntdec_fh_m_w), NES_NOACCESS,          NULL, NULL, NULL },
11909   { OPENCORP_DAOU306,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::daou306_w),             NULL, NULL, NULL },
11910   { RCM_GS2015,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gs2015_w),              NULL, NULL, NULL },
11911   { RCM_TETRISFAMILY,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rcm_tf_w),              NULL, NULL, NULL },
11912   { REXSOFT_DBZ5,         NES_READWRITE(nes_carts_state::rex_dbz_l_w, nes_carts_state::rex_dbz_l_r), NES_READONLY(nes_carts_state::rex_dbz_l_r), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
11913   { REXSOFT_SL1632,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rex_sl1632_w),          NULL, NULL, mmc3_irq },
11914   { RUMBLESTATION_BOARD,  NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rumblestation_m_w), NES_WRITEONLY(nes_carts_state::rumblestation_w),      NULL, NULL, NULL },
11915   { SOMERI_SL12,          NES_WRITEONLY(nes_carts_state::someri_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::someri_w), NULL, NULL, mmc3_irq },
11916   { SUPERGAME_BOOGERMAN,  NES_WRITEONLY(nes_carts_state::sgame_boog_l_w), NES_WRITEONLY(nes_carts_state::sgame_boog_m_w), NES_WRITEONLY(nes_carts_state::sgame_boog_w), NULL, NULL, mmc3_irq },
11917   { SUPERGAME_LIONKING,   NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sgame_lion_m_w), NES_WRITEONLY(nes_carts_state::sgame_lion_w), NULL, NULL, mmc3_irq },
11918   { TENGEN_800008,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800008_w),       NULL, NULL, NULL },
11919   { TENGEN_800032,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800032_w),       NULL, NULL, tengen_800032_irq },
11920   { TENGEN_800037,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800037_w),       NULL, NULL, tengen_800032_irq },
11921   { TXC_22211A,           NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211_w), NULL, NULL, NULL },
11922   { TXC_22211B,           NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211b_w), NULL, NULL, NULL },
11923   { TXC_22211C,           NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211c_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211_w), NULL, NULL, NULL },
11924   { TXC_TW,               NES_WRITEONLY(nes_carts_state::txc_tw_l_w), NES_WRITEONLY(nes_carts_state::txc_tw_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
11925   { TXC_STRIKEWOLF,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_strikewolf_w),      NULL, NULL, NULL },
11926   { TXC_MXMDHTWO,         NES_READONLY(nes_carts_state::txc_mxmdhtwo_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_mxmdhtwo_w), NULL, NULL, NULL },
11927   { WAIXING_TYPE_A,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11928   { WAIXING_TYPE_A_1,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11929   { WAIXING_TYPE_B,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11930   { WAIXING_TYPE_C,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11931   { WAIXING_TYPE_D,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11932   { WAIXING_TYPE_E,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w),           NULL, NULL, mmc3_irq },
11933   { WAIXING_TYPE_F,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_f_w),           NULL, NULL, mmc3_irq },
11934   { WAIXING_TYPE_G,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_g_w),           NULL, NULL, mmc3_irq },
11935   { WAIXING_TYPE_H,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_h_w),           NULL, NULL, mmc3_irq },
11936   { WAIXING_TYPE_I,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w),               NULL, NULL, mmc3_irq },   // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
11937   { WAIXING_TYPE_J,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w),               NULL, NULL, mmc3_irq },   // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
11938   { WAIXING_SGZ,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_sgz_w),         NULL, NULL, konami_irq },
11939   { WAIXING_SGZLZ,        NES_WRITEONLY(nes_carts_state::waixing_sgzlz_l_w), NES_NOACCESS, NES_NOACCESS,     NULL, NULL, NULL },
11940   { WAIXING_FFV,          NES_WRITEONLY(nes_carts_state::waixing_ffv_l_w), NES_NOACCESS, NES_NOACCESS,       NULL, NULL, NULL },
11941   { WAIXING_ZS,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_zs_w),          NULL, NULL, NULL },
11942   { WAIXING_DQ8,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_dq8_w),         NULL, NULL, NULL },
11943   { WAIXING_SECURITY,     NES_WRITEONLY(nes_carts_state::waixing_sec_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
11944   { WAIXING_SH2,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w),               NULL, NULL, mmc3_irq },   // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
11945   { WAIXING_PS2,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_ps2_w),         NULL, NULL, NULL },
11946   { UNL_8237,             NES_WRITEONLY(nes_carts_state::unl_8237_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_8237_w),      NULL, NULL, mmc3_irq },
11947   { UNL_AX5705,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_ax5705_w),          NULL, NULL, NULL },
11948   { UNL_CC21,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_cc21_w),            NULL, NULL, NULL },
11949   { UNL_KOF97,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_kof97_w),           NULL, NULL, mmc3_irq },
11950   { UNL_KS7057,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7057_w),              NULL, NULL, mmc3_irq },
11951   { UNL_T230,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_t230_w),            NULL, NULL, konami_irq },
11952   { UNL_KOF96,            NES_READWRITE(nes_carts_state::kof96_l_w, nes_carts_state::kof96_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kof96_w),     NULL, NULL, mmc3_irq },
11953   { UNL_MK2,              NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mk2_m_w), NES_NOACCESS,               NULL, NULL, mmc3_irq },
11954   { UNL_N625092,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::n625092_w),             NULL, NULL, NULL },
11955   { UNL_SC127,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sc127_w),               NULL, NULL, sc127_irq },
11956   { UNL_SMB2J,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::smb2j_w),               NULL, NULL, NULL },
11957   { UNL_SUPERFIGHTER3,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_sf3_w),             NULL, NULL, mmc3_irq },
11958   { UNL_XZY,              NES_WRITEONLY(nes_carts_state::unl_xzy_l_w), NES_NOACCESS, NES_NOACCESS,           NULL, NULL, NULL },
11959   { UNL_RACERMATE,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_racmate_w),         NULL, NULL, NULL },
11960   { UNL_STUDYNGAME,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sng32_w),               NULL, NULL, NULL },
11961   { UNL_603_5052,         NES_READWRITE(nes_carts_state::unl_6035052_extra_w, nes_carts_state::unl_6035052_extra_r), NES_READWRITE(nes_carts_state::unl_6035052_extra_w, nes_carts_state::unl_6035052_extra_r), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
11962   { UNL_EDU2K,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::edu2k_w),               NULL, NULL, NULL },
11963   { UNL_SHJY3,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::shjy3_w),               NULL, NULL, shjy3_irq },
11964   { UNL_H2288,            NES_READWRITE(nes_carts_state::h2288_l_w, nes_carts_state::h2288_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::h2288_w),     NULL, NULL, mmc3_irq },
11965   { UNL_FS304,            NES_WRITEONLY(nes_carts_state::unl_fs304_l_w), NES_NOACCESS, NES_NOACCESS,         NULL, NULL, NULL },
1196311966   //
11964   { BTL_AISENSHINICOL,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::btl_mariobaby_w),       NULL, NULL, NULL },
11965   { BTL_DRAGONNINJA,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::btl_dn_w),              NULL, NULL, btl_dn_irq },
11966   { BTL_MARIOBABY,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::btl_mariobaby_w),       NULL, NULL, NULL },
11967   { BTL_SMB2A,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::btl_smb2a_w),           NULL, NULL, btl_smb2a_irq },
11968   { BTL_SMB2B,            NES_WRITEONLY(nes_state::smb2jb_l_w), NES_NOACCESS, NES_NOACCESS,            NULL, NULL, smb2jb_irq },
11969   { BTL_SMB3,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::btl_smb3_w),            NULL, NULL, btl_smb3_irq },
11970   { BTL_SUPERBROS11,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::btl_smb11_w),           NULL, NULL, mmc3_irq },
11971   { BTL_TOBIDASE,         NES_WRITEONLY(nes_state::btl_tobi_l_w), NES_NOACCESS, NES_NOACCESS,          NULL, NULL, NULL },
11972   { BTL_PIKACHUY2K,       NES_NOACCESS, {write8_delegate(FUNC(nes_state::btl_pika_y2k_m_w),(nes_state *)0), read8_delegate(FUNC(nes_state::btl_pika_y2k_m_r),(nes_state *)0)}, NES_WRITEONLY(nes_state::btl_pika_y2k_w),  NULL, NULL, mmc3_irq },
11973   { WHIRLWIND_2706,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::whirl2706_w),           NULL, NULL, NULL },
11967   { BTL_AISENSHINICOL,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_mariobaby_w),       NULL, NULL, NULL },
11968   { BTL_DRAGONNINJA,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_dn_w),              NULL, NULL, btl_dn_irq },
11969   { BTL_MARIOBABY,        NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_mariobaby_w),       NULL, NULL, NULL },
11970   { BTL_SMB2A,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb2a_w),           NULL, NULL, btl_smb2a_irq },
11971   { BTL_SMB2B,            NES_WRITEONLY(nes_carts_state::smb2jb_l_w), NES_NOACCESS, NES_NOACCESS,            NULL, NULL, smb2jb_irq },
11972   { BTL_SMB3,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb3_w),            NULL, NULL, btl_smb3_irq },
11973   { BTL_SUPERBROS11,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb11_w),           NULL, NULL, mmc3_irq },
11974   { BTL_TOBIDASE,         NES_WRITEONLY(nes_carts_state::btl_tobi_l_w), NES_NOACCESS, NES_NOACCESS,          NULL, NULL, NULL },
11975   { BTL_PIKACHUY2K,       NES_NOACCESS, NES_READWRITE(nes_carts_state::btl_pika_y2k_m_w, nes_carts_state::btl_pika_y2k_m_r), NES_WRITEONLY(nes_carts_state::btl_pika_y2k_w),  NULL, NULL, mmc3_irq },
11976   { WHIRLWIND_2706,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::whirl2706_w),           NULL, NULL, NULL },
1197411977   //
11975   { BMC_190IN1,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_190in1_w),          NULL, NULL, NULL },
11976   { BMC_A65AS,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_a65as_w),           NULL, NULL, NULL },
11977   { BMC_GS2004,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_gs2004_w),          NULL, NULL, NULL },
11978   { BMC_GS2013,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_gs2013_w),          NULL, NULL, NULL },
11979   { BMC_NOVELDIAMOND,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::novel1_w),              NULL, NULL, NULL },
11980   { BMC_9999999IN1,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::novel2_w),              NULL, NULL, NULL },
11981   { BMC_T262,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_t262_w),            NULL, NULL, NULL },
11982   { BMC_WS,               NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_ws_m_w), NES_NOACCESS,            NULL, NULL, NULL },
11983   { BMC_GKA,              NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_gka_w),             NULL, NULL, NULL },
11984   { BMC_GKB,              NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_gkb_w),             NULL, NULL, NULL },
11985   { BMC_SUPER_700IN1,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_super700in1_w),     NULL, NULL, NULL },
11986   { BMC_36IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_36in1_w),           NULL, NULL, NULL },
11987   { BMC_21IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_21in1_w),           NULL, NULL, NULL },
11988   { BMC_150IN1,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_150in1_w),          NULL, NULL, NULL },
11989   { BMC_35IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_35in1_w),           NULL, NULL, NULL },
11990   { BMC_64IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_64in1_w),           NULL, NULL, NULL },
11991   { BMC_SUPERHIK_300IN1,  NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_hik300_w),          NULL, NULL, NULL },
11992   { BMC_SUPERGUN_20IN1,   NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::supergun20in1_w),       NULL, NULL, NULL },
11993   { BMC_72IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_72in1_w),           NULL, NULL, NULL },
11994   { BMC_76IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_76in1_w),           NULL, NULL, NULL },
11995   { BMC_SUPER_42IN1,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_76in1_w),           NULL, NULL, NULL },
11996   { BMC_1200IN1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_1200in1_w),         NULL, NULL, NULL },
11997   { BMC_31IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_31in1_w),           NULL, NULL, NULL },
11998   { BMC_22GAMES,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_22g_w),             NULL, NULL, NULL },
11999   { BMC_20IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_20in1_w),           NULL, NULL, NULL },
12000   { BMC_110IN1,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_110in1_w),          NULL, NULL, NULL },
12001   { BMC_64IN1NR,          NES_WRITEONLY(nes_state::bmc_64in1nr_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_64in1nr_w), NULL, NULL, NULL },
12002   { BMC_S24IN1SC03,       NES_WRITEONLY(nes_state::bmc_s24in1sc03_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12003   { BMC_HIK8IN1,          NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_hik8_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12004   { BMC_SUPERHIK_4IN1,    NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_hik4in1_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12005   { BMC_SUPERBIG_7IN1,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_sbig7_w),           NULL, NULL, mmc3_irq },
12006   { BMC_MARIOPARTY_7IN1,  NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_mario7in1_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12007   { BMC_GOLD_7IN1,        NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_gold7in1_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12008   { BMC_FAMILY_4646B,     NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_family4646_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12009   { BMC_15IN1,            NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_15in1_m_w), NES_WRITEONLY(nes_state::txrom_w), NULL, NULL, mmc3_irq },
12010   { BMC_BALLGAMES_11IN1,  NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_ball11_m_w), NES_WRITEONLY(nes_state::bmc_ball11_w), NULL, NULL, NULL },
12011   { BMC_GOLDENCARD_6IN1,  NES_WRITEONLY(nes_state::bmc_gc6in1_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_gc6in1_w), NULL, NULL, mmc3_irq },
12012   { BMC_VT5201,           NES_NOACCESS, NES_NOACCESS, {write8_delegate(FUNC(nes_state::bmc_vt5201_w),(nes_state *)0), read8_delegate(FUNC(nes_state::bmc_vt5201_r),(nes_state *)0)},         NULL, NULL, NULL },
12013   { BMC_BENSHENG_BS5,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_bs5_w),             NULL, NULL, NULL },
12014   { BMC_810544,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_810544_w),          NULL, NULL, NULL },
12015   { BMC_NTD_03,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::bmc_ntd03_w),           NULL, NULL, NULL },
12016   { BMC_G63IN1,           NES_NOACCESS, NES_NOACCESS, {write8_delegate(FUNC(nes_state::bmc_gb63_w),(nes_state *)0), read8_delegate(FUNC(nes_state::bmc_gb63_r),(nes_state *)0)},             NULL, NULL, NULL },
12017   { BMC_FK23C,            NES_WRITEONLY(nes_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::fk23c_w),   NULL, NULL, mmc3_irq },
12018   { BMC_FK23CA,           NES_WRITEONLY(nes_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::fk23c_w),   NULL, NULL, mmc3_irq },
12019   { BMC_PJOY84,           NES_NOACCESS, NES_WRITEONLY(nes_state::pjoy84_m_w), NES_WRITEONLY(nes_state::txrom_w),  NULL, NULL, mmc3_irq },
11978   { BMC_190IN1,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_190in1_w),          NULL, NULL, NULL },
11979   { BMC_A65AS,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_a65as_w),           NULL, NULL, NULL },
11980   { BMC_GS2004,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gs2004_w),          NULL, NULL, NULL },
11981   { BMC_GS2013,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gs2013_w),          NULL, NULL, NULL },
11982   { BMC_NOVELDIAMOND,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::novel1_w),              NULL, NULL, NULL },
11983   { BMC_9999999IN1,       NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::novel2_w),              NULL, NULL, NULL },
11984   { BMC_T262,             NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_t262_w),            NULL, NULL, NULL },
11985   { BMC_WS,               NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ws_m_w), NES_NOACCESS,            NULL, NULL, NULL },
11986   { BMC_GKA,              NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gka_w),             NULL, NULL, NULL },
11987   { BMC_GKB,              NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gkb_w),             NULL, NULL, NULL },
11988   { BMC_SUPER_700IN1,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_super700in1_w),     NULL, NULL, NULL },
11989   { BMC_36IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_36in1_w),           NULL, NULL, NULL },
11990   { BMC_21IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_21in1_w),           NULL, NULL, NULL },
11991   { BMC_150IN1,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_150in1_w),          NULL, NULL, NULL },
11992   { BMC_35IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_35in1_w),           NULL, NULL, NULL },
11993   { BMC_64IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_64in1_w),           NULL, NULL, NULL },
11994   { BMC_SUPERHIK_300IN1,  NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik300_w),          NULL, NULL, NULL },
11995   { BMC_SUPERGUN_20IN1,   NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::supergun20in1_w),       NULL, NULL, NULL },
11996   { BMC_72IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_72in1_w),           NULL, NULL, NULL },
11997   { BMC_76IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_76in1_w),           NULL, NULL, NULL },
11998   { BMC_SUPER_42IN1,      NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_76in1_w),           NULL, NULL, NULL },
11999   { BMC_1200IN1,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_1200in1_w),         NULL, NULL, NULL },
12000   { BMC_31IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_31in1_w),           NULL, NULL, NULL },
12001   { BMC_22GAMES,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_22g_w),             NULL, NULL, NULL },
12002   { BMC_20IN1,            NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_20in1_w),           NULL, NULL, NULL },
12003   { BMC_110IN1,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_110in1_w),          NULL, NULL, NULL },
12004   { BMC_64IN1NR,          NES_WRITEONLY(nes_carts_state::bmc_64in1nr_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_64in1nr_w), NULL, NULL, NULL },
12005   { BMC_S24IN1SC03,       NES_WRITEONLY(nes_carts_state::bmc_s24in1sc03_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12006   { BMC_HIK8IN1,          NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik8_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12007   { BMC_SUPERHIK_4IN1,    NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik4in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12008   { BMC_SUPERBIG_7IN1,    NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_sbig7_w),           NULL, NULL, mmc3_irq },
12009   { BMC_MARIOPARTY_7IN1,  NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_mario7in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12010   { BMC_GOLD_7IN1,        NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gold7in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12011   { BMC_FAMILY_4646B,     NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_family4646_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12012   { BMC_15IN1,            NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_15in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
12013   { BMC_BALLGAMES_11IN1,  NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ball11_m_w), NES_WRITEONLY(nes_carts_state::bmc_ball11_w), NULL, NULL, NULL },
12014   { BMC_GOLDENCARD_6IN1,  NES_WRITEONLY(nes_carts_state::bmc_gc6in1_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gc6in1_w), NULL, NULL, mmc3_irq },
12015   { BMC_VT5201,           NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::bmc_vt5201_w, nes_carts_state::bmc_vt5201_r),         NULL, NULL, NULL },
12016   { BMC_BENSHENG_BS5,     NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_bs5_w),             NULL, NULL, NULL },
12017   { BMC_810544,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_810544_w),          NULL, NULL, NULL },
12018   { BMC_NTD_03,           NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ntd03_w),           NULL, NULL, NULL },
12019   { BMC_G63IN1,           NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::bmc_gb63_w, nes_carts_state::bmc_gb63_r),             NULL, NULL, NULL },
12020   { BMC_FK23C,            NES_WRITEONLY(nes_carts_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fk23c_w),   NULL, NULL, mmc3_irq },
12021   { BMC_FK23CA,           NES_WRITEONLY(nes_carts_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fk23c_w),   NULL, NULL, mmc3_irq },
12022   { BMC_PJOY84,           NES_NOACCESS, NES_WRITEONLY(nes_carts_state::pjoy84_m_w), NES_WRITEONLY(nes_carts_state::txrom_w),  NULL, NULL, mmc3_irq },
1202012023   //
12021   { FFE_MAPPER6,          NES_WRITEONLY(nes_state::mapper6_l_w), NES_NOACCESS, NES_WRITEONLY(nes_state::mapper6_w), NULL, NULL, ffe_irq },
12022   { FFE_MAPPER8,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_state::mapper8_w),             NULL, NULL, NULL },
12023   { FFE_MAPPER17,         NES_WRITEONLY(nes_state::mapper17_l_w), NES_NOACCESS, NES_NOACCESS,          NULL, NULL, ffe_irq },
12024   { FFE_MAPPER6,          NES_WRITEONLY(nes_carts_state::mapper6_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mapper6_w), NULL, NULL, ffe_irq },
12025   { FFE_MAPPER8,          NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mapper8_w),             NULL, NULL, NULL },
12026   { FFE_MAPPER17,         NES_WRITEONLY(nes_carts_state::mapper17_l_w), NES_NOACCESS, NES_NOACCESS,          NULL, NULL, ffe_irq },
1202412027   // for debug and development
12025   { UNKNOWN_BOARD,        {write8_delegate(FUNC(nes_state::dummy_l_w),(nes_state *)0), read8_delegate(FUNC(nes_state::dummy_l_r),(nes_state *)0)}, {write8_delegate(FUNC(nes_state::dummy_m_w),(nes_state *)0), read8_delegate(FUNC(nes_state::dummy_m_r),(nes_state *)0)}, {write8_delegate(FUNC(nes_state::dummy_w),(nes_state *)0), read8_delegate(FUNC(nes_state::dummy_r),(nes_state *)0)}, NULL, NULL, NULL },
12028   { UNKNOWN_BOARD,        NES_READWRITE(nes_carts_state::dummy_l_w, nes_carts_state::dummy_l_r), NES_READWRITE(nes_carts_state::dummy_m_w, nes_carts_state::dummy_m_r), NES_READWRITE(nes_carts_state::dummy_w, nes_carts_state::dummy_r), NULL, NULL, NULL },
1202612029   //
1202712030   { UNSUPPORTED_BOARD,    NES_NOACCESS, NES_NOACCESS, NES_NOACCESS,                         NULL, NULL, NULL },
1202812031   //
r18064r18065
1203912042   return NULL;
1204012043}
1204112044
12042void pcb_handlers_setup( running_machine &machine )
12045void nes_state::pcb_handlers_setup()
1204312046{
12044   nes_state *state = machine.driver_data<nes_state>();
12045   const nes_pcb_intf *intf = nes_pcb_intf_lookup(state->m_pcb_id);
12047   const nes_pcb_intf *intf = nes_pcb_intf_lookup(m_pcb_id);
1204612048
1204712049   if (intf == NULL)
1204812050      fatalerror("Missing PCB interface\n");
1204912051
1205012052   if (intf)
1205112053   {   
12052      state->m_mmc_write_low = intf->mmc_l.write;
12053      if (!state->m_mmc_write_low.isnull()) state->m_mmc_write_low.late_bind(*state);
12054      state->m_mmc_write_mid = intf->mmc_m.write;
12055      if (!state->m_mmc_write_mid.isnull()) state->m_mmc_write_mid.late_bind(*state);
12056      state->m_mmc_write = intf->mmc_h.write;
12057      if (!state->m_mmc_write.isnull()) state->m_mmc_write.late_bind(*state);
12058      state->m_mmc_read_low = intf->mmc_l.read;
12059      if (!state->m_mmc_read_low.isnull()) state->m_mmc_read_low.late_bind(*state);
12060      state->m_mmc_read_mid = intf->mmc_m.read;   // in progress
12061      if (!state->m_mmc_read_mid.isnull()) state->m_mmc_read_mid.late_bind(*state);
12062      state->m_mmc_read = intf->mmc_h.read;   // in progress
12063      if (!state->m_mmc_read.isnull()) state->m_mmc_read.late_bind(*state);
12064      state->m_ppu->set_latch(intf->mmc_ppu_latch);
12054      m_mmc_write_low = intf->mmc_l.write;
12055      if (!m_mmc_write_low.isnull()) m_mmc_write_low.late_bind(*this);
12056      m_mmc_write_mid = intf->mmc_m.write;
12057      if (!m_mmc_write_mid.isnull()) m_mmc_write_mid.late_bind(*this);
12058      m_mmc_write = intf->mmc_h.write;
12059      if (!m_mmc_write.isnull()) m_mmc_write.late_bind(*this);
12060      m_mmc_read_low = intf->mmc_l.read;
12061      if (!m_mmc_read_low.isnull()) m_mmc_read_low.late_bind(*this);
12062      m_mmc_read_mid = intf->mmc_m.read;   // in progress
12063      if (!m_mmc_read_mid.isnull()) m_mmc_read_mid.late_bind(*this);
12064      m_mmc_read = intf->mmc_h.read;   // in progress
12065      if (!m_mmc_read.isnull()) m_mmc_read.late_bind(*this);
12066      m_ppu->set_latch(intf->mmc_ppu_latch);
1206512067   }
1206612068   else
1206712069   {
12068      logerror("PCB %d is not yet supported, defaulting to no mapper.\n", state->m_pcb_id);
12069      state->m_mmc_write_low = write8_delegate();
12070      state->m_mmc_write_mid = write8_delegate();
12071      state->m_mmc_write = write8_delegate();
12072      state->m_mmc_read_low = read8_delegate();
12073      state->m_mmc_read_mid = read8_delegate();   // in progress
12074      state->m_mmc_read = read8_delegate();   // in progress
12075      state->m_ppu->set_latch(NULL);
12070      logerror("PCB %d is not yet supported, defaulting to no mapper.\n", m_pcb_id);
12071      m_mmc_write_low = write8_delegate();
12072      m_mmc_write_mid = write8_delegate();
12073      m_mmc_write = write8_delegate();
12074      m_mmc_read_low = read8_delegate();
12075      m_mmc_read_mid = read8_delegate();   // in progress
12076      m_mmc_read = read8_delegate();   // in progress
12077      m_ppu->set_latch(NULL);
1207612078   }
1207712079
12078   state->m_mmc3_prg_cb = prg8_x;
12079   state->m_mmc3_chr_cb = chr1_x;
12080   m_mmc3_prg_cb = prg8_x;
12081   m_mmc3_chr_cb = chr1_x;
1208012082
12081   switch (state->m_pcb_id)
12083   switch (m_pcb_id)
1208212084   {
1208312085      case STD_TXSROM:
12084         state->m_mmc3_chr_cb = txsrom_chr_cb;
12086         m_mmc3_chr_cb = txsrom_chr_cb;
1208512087         break;
1208612088      case GOUDER_37017:
12087         state->m_mmc3_prg_cb = gouder_sf4_prg_cb;
12089         m_mmc3_prg_cb = gouder_sf4_prg_cb;
1208812090         break;
1208912091      case KASING_BOARD:
12090         state->m_mmc3_prg_cb = kasing_prg_cb;
12092         m_mmc3_prg_cb = kasing_prg_cb;
1209112093         break;
1209212094      case REXSOFT_DBZ5:
12093         state->m_mmc3_chr_cb = rex_dbz_chr_cb;
12095         m_mmc3_chr_cb = rex_dbz_chr_cb;
1209412096         break;
1209512097      case TXC_TW:
12096         state->m_mmc3_prg_cb = txc_tw_prg_cb;
12098         m_mmc3_prg_cb = txc_tw_prg_cb;
1209712099         break;
1209812100      case WAIXING_TYPE_A:
12099         state->m_mmc3_chr_cb = waixing_a_chr_cb;
12101         m_mmc3_chr_cb = waixing_a_chr_cb;
1210012102         break;
1210112103      case WAIXING_TYPE_A_1:
12102         state->m_mmc3_chr_cb = waixing_a1_chr_cb;
12104         m_mmc3_chr_cb = waixing_a1_chr_cb;
1210312105         break;
1210412106      case WAIXING_TYPE_B:
12105         state->m_mmc3_chr_cb = waixing_b_chr_cb;
12107         m_mmc3_chr_cb = waixing_b_chr_cb;
1210612108         break;
1210712109      case WAIXING_TYPE_C:
12108         state->m_mmc3_chr_cb = waixing_c_chr_cb;
12110         m_mmc3_chr_cb = waixing_c_chr_cb;
1210912111         break;
1211012112      case WAIXING_TYPE_D:
12111         state->m_mmc3_chr_cb = waixing_d_chr_cb;
12113         m_mmc3_chr_cb = waixing_d_chr_cb;
1211212114         break;
1211312115      case WAIXING_TYPE_E:
12114         state->m_mmc3_chr_cb = waixing_e_chr_cb;
12116         m_mmc3_chr_cb = waixing_e_chr_cb;
1211512117         break;
1211612118      case WAIXING_TYPE_G:
12117         state->m_mmc3_chr_cb = waixing_g_chr_cb;
12119         m_mmc3_chr_cb = waixing_g_chr_cb;
1211812120         break;
1211912121      case WAIXING_TYPE_H:
12120         state->m_mmc3_chr_cb = waixing_h_chr_cb;
12122         m_mmc3_chr_cb = waixing_h_chr_cb;
1212112123         break;
1212212124      case WAIXING_SECURITY:
12123         state->m_mmc3_prg_cb = waixing_sec_prg_cb;
12124         state->m_mmc3_chr_cb = waixing_sec_chr_cb;
12125         m_mmc3_prg_cb = waixing_sec_prg_cb;
12126         m_mmc3_chr_cb = waixing_sec_chr_cb;
1212512127         break;
1212612128      case WAIXING_SH2:
12127         state->m_mmc3_chr_cb = waixing_sh2_chr_cb;
12129         m_mmc3_chr_cb = waixing_sh2_chr_cb;
1212812130         break;
1212912131      case UNL_8237:
12130         state->m_mmc3_prg_cb = unl_8237_prg_cb;
12131         state->m_mmc3_chr_cb = unl_8237_chr_cb;
12132         m_mmc3_prg_cb = unl_8237_prg_cb;
12133         m_mmc3_chr_cb = unl_8237_chr_cb;
1213212134         break;
1213312135      case UNL_H2288:
12134         state->m_mmc3_prg_cb = h2288_prg_cb;
12136         m_mmc3_prg_cb = h2288_prg_cb;
1213512137         break;
1213612138      case SUPERGAME_BOOGERMAN:
12137         state->m_mmc3_prg_cb = sgame_boog_prg_cb;
12138         state->m_mmc3_chr_cb = sgame_boog_chr_cb;
12139         m_mmc3_prg_cb = sgame_boog_prg_cb;
12140         m_mmc3_chr_cb = sgame_boog_chr_cb;
1213912141         break;
1214012142      case UNL_KOF96:
12141         state->m_mmc3_prg_cb = kof96_prg_cb;
12142         state->m_mmc3_chr_cb = kof96_chr_cb;
12143         m_mmc3_prg_cb = kof96_prg_cb;
12144         m_mmc3_chr_cb = kof96_chr_cb;
1214312145         break;
1214412146      case KAY_PANDAPRINCE:
12145         state->m_mmc3_prg_cb = kay_pp_prg_cb;
12146         state->m_mmc3_chr_cb = kay_pp_chr_cb;
12147         m_mmc3_prg_cb = kay_pp_prg_cb;
12148         m_mmc3_chr_cb = kay_pp_chr_cb;
1214712149         break;
1214812150      case BMC_FK23C:
1214912151      case BMC_FK23CA:
12150         state->m_mmc3_prg_cb = fk23c_prg_cb;
12151         state->m_mmc3_chr_cb = fk23c_chr_cb;
12152         m_mmc3_prg_cb = fk23c_prg_cb;
12153         m_mmc3_chr_cb = fk23c_chr_cb;
1215212154         break;
1215312155      case BMC_S24IN1SC03:
12154         state->m_mmc3_prg_cb = bmc_s24in1sc03_prg_cb;
12155         state->m_mmc3_chr_cb = bmc_s24in1sc03_chr_cb;
12156         m_mmc3_prg_cb = bmc_s24in1sc03_prg_cb;
12157         m_mmc3_chr_cb = bmc_s24in1sc03_chr_cb;
1215612158         break;
1215712159      case BMC_PJOY84:
12158         state->m_mmc3_prg_cb = pjoy84_prg_cb;
12159         state->m_mmc3_chr_cb = pjoy84_chr_cb;
12160         m_mmc3_prg_cb = pjoy84_prg_cb;
12161         m_mmc3_chr_cb = pjoy84_chr_cb;
1216012162         break;
1216112163   }
1216212164}
r18064r18065
1218812190}
1218912191
1219012192// WIP code
12191static int pcb_initialize( running_machine &machine, int idx )
12193int nes_state::pcb_initialize( int idx )
1219212194{
12193   nes_state *state = machine.driver_data<nes_state>();
1219412195   int err = 0, i;
1219512196
1219612197   /* basic PRG config */
12197   prg32(machine, 0);
12198   prg32(machine(), 0);
1219812199
1219912200   /* some boards will not use this, but directly CHRROM (resp. CHRRAM) if the board only has VROM (resp. VRAM) */
12200   state->m_mmc_chr_source = state->m_chr_chunks ? CHRROM : CHRRAM;
12201   chr8(machine, 0, state->m_mmc_chr_source);
12201   m_mmc_chr_source = m_chr_chunks ? CHRROM : CHRRAM;
12202   chr8(machine(), 0, m_mmc_chr_source);
1220212203
1220312204   /* Here, we init a few helpers: 4 prg banks and 16 chr banks - some mappers use them */
1220412205   for (i = 0; i < 4; i++)
12205      state->m_mmc_prg_bank[i] = 0;
12206      m_mmc_prg_bank[i] = 0;
1220612207   for (i = 0; i < 16; i++)
12207      state->m_mmc_vrom_bank[i] = 0;
12208      m_mmc_vrom_bank[i] = 0;
1220812209   for (i = 0; i < 16; i++)
12209      state->m_mmc_extra_bank[i] = 0;
12210      m_mmc_extra_bank[i] = 0;
1221012211
12211   state->m_mmc_latch1 = 0;
12212   state->m_mmc_latch2 = 0;
12212   m_mmc_latch1 = 0;
12213   m_mmc_latch2 = 0;
1221312214
1221412215   /* Finally, we init IRQ-related quantities. */
12215   state->m_IRQ_enable = state->m_IRQ_enable_latch = 0;
12216   state->m_IRQ_count = state->m_IRQ_count_latch = 0;
12217   state->m_IRQ_toggle = 0;
12216   m_IRQ_enable = m_IRQ_enable_latch = 0;
12217   m_IRQ_count = m_IRQ_count_latch = 0;
12218   m_IRQ_toggle = 0;
1221812219
1221912220   switch (idx)
1222012221   {
r18064r18065
1231612317      case KAISER_KS7017:
1231712318      case KAISER_KS7032:
1231812319      case KAISER_KS202:
12319         prg16_89ab(machine, 0);
12320         prg16_cdef(machine, state->m_prg_chunks - 1);
12320         prg16_89ab(machine(), 0);
12321         prg16_cdef(machine(), m_prg_chunks - 1);
1232112322         break;
1232212323
1232312324      case STD_CPROM:   // mapper 13
12324         chr4_0(machine, 0, CHRRAM);
12325         chr4_4(machine, 0, CHRRAM);
12325         chr4_0(machine(), 0, CHRRAM);
12326         chr4_4(machine(), 0, CHRRAM);
1232612327         break;
1232712328      case STD_AXROM:   // mapper 7
12328         set_nt_mirroring(machine, PPU_MIRROR_LOW);
12329         set_nt_mirroring(machine(), PPU_MIRROR_LOW);
1232912330         break;
1233012331      case STD_SXROM:   // mapper 1, 155
1233112332      case STD_SOROM:
1233212333      case STD_SXROM_A:
1233312334      case STD_SOROM_A:
12334         state->m_mmc1_latch = 0;
12335         state->m_mmc1_count = 0;
12336         state->m_mmc_reg[0] = 0x0f;
12337         state->m_mmc_reg[1] = state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
12338         state->m_mmc1_reg_write_enable = 1;
12339         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
12340         mmc1_set_chr(machine);
12341         mmc1_set_prg(machine);
12342         if (state->m_battery || state->m_wram)
12343            wram_bank(machine, 0, (idx == STD_SOROM) ? NES_WRAM : NES_BATTERY);
12335         m_mmc1_latch = 0;
12336         m_mmc1_count = 0;
12337         m_mmc_reg[0] = 0x0f;
12338         m_mmc_reg[1] = m_mmc_reg[2] = m_mmc_reg[3] = 0;
12339         m_mmc1_reg_write_enable = 1;
12340         set_nt_mirroring(machine(), PPU_MIRROR_HORZ);
12341         mmc1_set_chr(machine());
12342         mmc1_set_prg(machine());
12343         if (m_battery || m_wram)
12344            wram_bank(machine(), 0, (idx == STD_SOROM) ? NES_WRAM : NES_BATTERY);
1234412345         break;
1234512346      case STD_PXROM:   // mapper 9
12346         state->m_mmc_reg[0] = state->m_mmc_reg[2] = 0;
12347         state->m_mmc_reg[1] = state->m_mmc_reg[3] = 0;
12348         state->m_mmc_latch1 = state->m_mmc_latch2 = 0xfe;
12349         prg8_89(machine, 0);
12350         prg8_ab(machine, (state->m_prg_chunks << 1) - 3);
12351         prg8_cd(machine, (state->m_prg_chunks << 1) - 2);
12352         prg8_ef(machine, (state->m_prg_chunks << 1) - 1);
12347         m_mmc_reg[0] = m_mmc_reg[2] = 0;
12348         m_mmc_reg[1] = m_mmc_reg[3] = 0;
12349         m_mmc_latch1 = m_mmc_latch2 = 0xfe;
12350         prg8_89(machine(), 0);
12351         prg8_ab(machine(), (m_prg_chunks << 1) - 3);
12352         prg8_cd(machine(), (m_prg_chunks << 1) - 2);
12353         prg8_ef(machine(), (m_prg_chunks << 1) - 1);
1235312354         break;
1235412355      case STD_FXROM: // mapper 10
12355         state->m_mmc_reg[0] = state->m_mmc_reg[2] = 0;
12356         state->m_mmc_reg[1] = state->m_mmc_reg[3] = 0;
12357         state->m_mmc_latch1 = state->m_mmc_latch2 = 0xfe;
12358         prg16_89ab(machine, 0);
12359         prg16_cdef(machine, state->m_prg_chunks - 1);
12356         m_mmc_reg[0] = m_mmc_reg[2] = 0;
12357         m_mmc_reg[1] = m_mmc_reg[3] = 0;
12358         m_mmc_latch1 = m_mmc_latch2 = 0xfe;
12359         prg16_89ab(machine(), 0);
12360         prg16_cdef(machine(), m_prg_chunks - 1);
1236012361         break;
1236112362      case STD_TXROM:   // mapper 4
1236212363      case STD_TVROM:
r18064r18065
1237812379      case UNL_KOF97:
1237912380      case UNL_603_5052:
1238012381      case NITRA_TDA:   // mapper 250
12381         if (state->m_four_screen_vram)   // only TXROM and DXROM have 4-screen mirroring
12382         if (m_four_screen_vram)   // only TXROM and DXROM have 4-screen mirroring
1238212383         {
12383            set_nt_page(machine, 0, CART_NTRAM, 0, 1);
12384            set_nt_page(machine, 1, CART_NTRAM, 1, 1);
12385            set_nt_page(machine, 2, CART_NTRAM, 2, 1);
12386            set_nt_page(machine, 3, CART_NTRAM, 3, 1);
12384            set_nt_page(machine(), 0, CART_NTRAM, 0, 1);
12385            set_nt_page(machine(), 1, CART_NTRAM, 1, 1);
12386            set_nt_page(machine(), 2, CART_NTRAM, 2, 1);
12387            set_nt_page(machine(), 3, CART_NTRAM, 3, 1);
1238712388         }
12388         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12389         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1238912390         break;
1239012391      case STD_HKROM:   // MMC6 (basically the same as TxROM, but alt IRQ behaviour)
12391         mmc3_common_initialize(machine, 0xff, 0xff, 1);
12392         state->m_mmc6_reg = 0xf0;
12393         state->m_mmc_latch2 = 0;   // this is used differently here compared to MMC3
12392         mmc3_common_initialize(machine(), 0xff, 0xff, 1);
12393         m_mmc6_reg = 0xf0;
12394         m_mmc_latch2 = 0;   // this is used differently here compared to MMC3
1239412395         break;
1239512396      case PAL_ZZ:   // mapper 37
12396         mmc3_common_initialize(machine, 0x07, 0x7f, 0);
12397         mmc3_common_initialize(machine(), 0x07, 0x7f, 0);
1239712398         break;
1239812399      case NES_QJ:   // mapper 47
12399         mmc3_common_initialize(machine, 0x0f, 0x7f, 0);
12400         mmc3_common_initialize(machine(), 0x0f, 0x7f, 0);
1240012401         break;
1240112402      case STD_EXROM:   // mapper 5
12402         state->m_MMC5_rom_bank_mode = 3;
12403         state->m_MMC5_vrom_bank_mode = 0;
12404         state->m_MMC5_vram_protect = 0;
12405         state->m_mmc5_high_chr = 0;
12406         state->m_mmc5_vram_control = 0;
12407         state->m_mmc5_split_scr = 0;
12408         memset(state->m_MMC5_vrom_bank, 0, ARRAY_LENGTH(state->m_MMC5_vrom_bank));
12409         state->m_mmc5_prg_mode = 3;
12410         state->m_mmc5_last_chr_a = 1;
12411         state->m_mmc5_prg_regs[0] = 0xfc;
12412         state->m_mmc5_prg_regs[1] = 0xfd;
12413         state->m_mmc5_prg_regs[2] = 0xfe;
12414         state->m_mmc5_prg_regs[3] = 0xff;
12415         memset(state->m_mmc5_vrom_regA, ~0, ARRAY_LENGTH(state->m_mmc5_vrom_regA));
12416         memset(state->m_mmc5_vrom_regB, ~0, ARRAY_LENGTH(state->m_mmc5_vrom_regB));
12417         prg16_89ab(machine, state->m_prg_chunks - 2);
12418         prg16_cdef(machine, state->m_prg_chunks - 1);
12403         m_MMC5_rom_bank_mode = 3;
12404         m_MMC5_vrom_bank_mode = 0;
12405         m_MMC5_vram_protect = 0;
12406         m_mmc5_high_chr = 0;
12407         m_mmc5_vram_control = 0;
12408         m_mmc5_split_scr = 0;
12409         memset(m_MMC5_vrom_bank, 0, ARRAY_LENGTH(m_MMC5_vrom_bank));
12410         m_mmc5_prg_mode = 3;
12411         m_mmc5_last_chr_a = 1;
12412         m_mmc5_prg_regs[0] = 0xfc;
12413         m_mmc5_prg_regs[1] = 0xfd;
12414         m_mmc5_prg_regs[2] = 0xfe;
12415         m_mmc5_prg_regs[3] = 0xff;
12416         memset(m_mmc5_vrom_regA, ~0, ARRAY_LENGTH(m_mmc5_vrom_regA));
12417         memset(m_mmc5_vrom_regB, ~0, ARRAY_LENGTH(m_mmc5_vrom_regB));
12418         prg16_89ab(machine(), m_prg_chunks - 2);
12419         prg16_cdef(machine(), m_prg_chunks - 1);
1241912420         break;
1242012421      case STD_NXROM:      // mapper 68
1242112422      case SUNSOFT_DCS:      // mapper 68
12422         state->m_mmc_reg[0] = 0;
12423         prg16_89ab(machine, 0);
12424         prg16_cdef(machine, state->m_prg_chunks - 1);
12423         m_mmc_reg[0] = 0;
12424         prg16_89ab(machine(), 0);
12425         prg16_cdef(machine(), m_prg_chunks - 1);
1242512426         break;
1242612427      case NAMCOT_34X3:   // mapper 88
1242712428      case STD_DXROM:   // mapper 206
1242812429      case STD_DRROM:
12429         if (state->m_four_screen_vram)   // only TXROM and DXROM have 4-screen mirroring
12430         if (m_four_screen_vram)   // only TXROM and DXROM have 4-screen mirroring
1243012431         {
12431            set_nt_page(machine, 0, CART_NTRAM, 0, 1);
12432            set_nt_page(machine, 1, CART_NTRAM, 1, 1);
12433            set_nt_page(machine, 2, CART_NTRAM, 2, 1);
12434            set_nt_page(machine, 3, CART_NTRAM, 3, 1);
12432            set_nt_page(machine(), 0, CART_NTRAM, 0, 1);
12433            set_nt_page(machine(), 1, CART_NTRAM, 1, 1);
12434            set_nt_page(machine(), 2, CART_NTRAM, 2, 1);
12435            set_nt_page(machine(), 3, CART_NTRAM, 3, 1);
1243512436         }
1243612437      case NAMCOT_3453:   // mapper 154
12437         prg16_89ab(machine, state->m_prg_chunks - 2);
12438         prg16_cdef(machine, state->m_prg_chunks - 1);
12438         prg16_89ab(machine(), m_prg_chunks - 2);
12439         prg16_cdef(machine(), m_prg_chunks - 1);
1243912440         break;
1244012441      case NAMCOT_3446:   // mapper 76
12441         prg8_89(machine, 0);
12442         prg8_ab(machine, 1);
12443         prg16_cdef(machine, state->m_prg_chunks - 1);
12444         chr2_0(machine, 0, CHRROM);
12445         chr2_2(machine, 1, CHRROM);
12446         chr2_4(machine, 2, CHRROM);
12447         chr2_6(machine, 3, CHRROM);
12442         prg8_89(machine(), 0);
12443         prg8_ab(machine(), 1);
12444         prg16_cdef(machine(), m_prg_chunks - 1);
12445         chr2_0(machine(), 0, CHRROM);
12446         chr2_2(machine(), 1, CHRROM);
12447         chr2_4(machine(), 2, CHRROM);
12448         chr2_6(machine(), 3, CHRROM);
1244812449         break;
1244912450      case BANDAI_JUMP2:   // mapper 153
1245012451         for (i = 0; i < 8; i++)
12451            state->m_mmc_reg[i] = 0;
12452         prg16_89ab(machine, 0);
12453         prg16_cdef(machine, state->m_prg_chunks - 1);
12454         fjump2_set_prg(machine);
12452            m_mmc_reg[i] = 0;
12453         prg16_89ab(machine(), 0);
12454         prg16_cdef(machine(), m_prg_chunks - 1);
12455         fjump2_set_prg(machine());
1245512456         break;
1245612457      case BANDAI_KARAOKE:   // mapper 188
12457         prg16_89ab(machine, 0);
12458         prg16_cdef(machine, (state->m_prg_chunks - 1) ^ 0x08);
12458         prg16_89ab(machine(), 0);
12459         prg16_cdef(machine(), (m_prg_chunks - 1) ^ 0x08);
1245912460         break;
1246012461      case IREM_LROG017:   // mapper 77
12461         chr2_2(machine, 0, CHRROM);
12462         chr2_4(machine, 1, CHRROM);
12463         chr2_6(machine, 2, CHRROM);
12462         chr2_2(machine(), 0, CHRROM);
12463         chr2_4(machine(), 1, CHRROM);
12464         chr2_6(machine(), 2, CHRROM);
1246412465         break;
1246512466      case IREM_TAM_S1:   // mapper 97
12466         prg16_89ab(machine, state->m_prg_chunks - 1);
12467         prg16_cdef(machine, 0);
12467         prg16_89ab(machine(), m_prg_chunks - 1);
12468         prg16_cdef(machine(), 0);
1246812469         break;
1246912470      case KONAMI_VRC7:   // mapper 85
12470         prg8_89(machine, 0);
12471         prg8_ab(machine, 0);
12472         prg8_cd(machine, 0);
12473         prg8_ef(machine, 0xff);
12471         prg8_89(machine(), 0);
12472         prg8_ab(machine(), 0);
12473         prg8_cd(machine(), 0);
12474         prg8_ef(machine(), 0xff);
1247412475         break;
1247512476      case NAMCOT_163:   // mapper 19
12476         prg16_89ab(machine, 0);
12477         prg16_cdef(machine, state->m_prg_chunks - 1);
12478         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12477         prg16_89ab(machine(), 0);
12478         prg16_cdef(machine(), m_prg_chunks - 1);
12479         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1247912480         break;
1248012481      case SUNSOFT_1:   // mapper 184
1248112482      case SUNSOFT_2:   // mapper 89 & 93
12482         prg16_89ab(machine, 0);
12483         prg16_cdef(machine, state->m_prg_chunks - 1);
12484         if (!state->m_hard_mirroring)
12485            set_nt_mirroring(machine, PPU_MIRROR_LOW);
12483         prg16_89ab(machine(), 0);
12484         prg16_cdef(machine(), m_prg_chunks - 1);
12485         if (!m_hard_mirroring)
12486            set_nt_mirroring(machine(), PPU_MIRROR_LOW);
1248612487         break;
1248712488
1248812489         // mapper 14
1248912490      case REXSOFT_SL1632:
12490         state->m_mmc_extra_bank[2] = 0xfe;
12491         state->m_mmc_extra_bank[3] = 0xff;
12492         state->m_mmc_extra_bank[0] = state->m_mmc_extra_bank[1] = state->m_mmc_extra_bank[4] = state->m_mmc_extra_bank[5] = state->m_mmc_extra_bank[6] = 0;
12493         state->m_mmc_extra_bank[7] = state->m_mmc_extra_bank[8] = state->m_mmc_extra_bank[9] = state->m_mmc_extra_bank[0xa] = state->m_mmc_extra_bank[0xb] = 0;
12494         state->m_mmc_reg[0] = state->m_mmc_reg[1] = 0;
12495         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12491         m_mmc_extra_bank[2] = 0xfe;
12492         m_mmc_extra_bank[3] = 0xff;
12493         m_mmc_extra_bank[0] = m_mmc_extra_bank[1] = m_mmc_extra_bank[4] = m_mmc_extra_bank[5] = m_mmc_extra_bank[6] = 0;
12494         m_mmc_extra_bank[7] = m_mmc_extra_bank[8] = m_mmc_extra_bank[9] = m_mmc_extra_bank[0xa] = m_mmc_extra_bank[0xb] = 0;
12495         m_mmc_reg[0] = m_mmc_reg[1] = 0;
12496         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1249612497         break;
1249712498         // mapper 15
1249812499      case WAIXING_PS2:
12499         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12500         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1250012501         break;
1250112502
1250212503         // mapper 35
r18064r18065
1250412505         // mapper 42
1250512506      case BTL_MARIOBABY:
1250612507      case BTL_AISENSHINICOL:
12507         prg32(machine, 0xff);
12508         prg32(machine(), 0xff);
1250812509         break;
1250912510
1251012511         // mapper 40
1251112512      case BTL_SMB2A:
12512         prg8_67(machine, 0xfe);
12513         prg8_89(machine, 0xfc);
12514         prg8_ab(machine, 0xfd);
12515         prg8_cd(machine, 0xfe);
12516         prg8_ef(machine, 0xff);
12513         prg8_67(machine(), 0xfe);
12514         prg8_89(machine(), 0xfc);
12515         prg8_ab(machine(), 0xfd);
12516         prg8_cd(machine(), 0xfe);
12517         prg8_ef(machine(), 0xff);
1251712518         break;
1251812519
1251912520         // mapper 43
1252012521      case UNL_SMB2J:
12521         if (state->m_battery)
12522            memset(state->m_battery_ram, 0x2000, 0xff);
12523         else if (state->m_prg_ram)
12524            memset(state->m_wram, 0x2000, 0xff);
12522         if (m_battery)
12523            memset(m_battery_ram, 0x2000, 0xff);
12524         else if (m_prg_ram)
12525            memset(m_wram, 0x2000, 0xff);
1252512526         break;
1252612527         // mapper 44
1252712528      case BMC_SUPERBIG_7IN1:
1252812529         // mapper 49
1252912530      case BMC_SUPERHIK_4IN1:
12530         mmc3_common_initialize(machine, 0x0f, 0x7f, 0);
12531         mmc3_common_initialize(machine(), 0x0f, 0x7f, 0);
1253112532         break;
1253212533         // mapper 45
1253312534      case BMC_HIK8IN1:
12534         state->m_mmc_reg[0] = state->m_mmc_reg[1] = state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
12535         mmc3_common_initialize(machine, 0x3f, 0xff, 0);
12535         m_mmc_reg[0] = m_mmc_reg[1] = m_mmc_reg[2] = m_mmc_reg[3] = 0;
12536         mmc3_common_initialize(machine(), 0x3f, 0xff, 0);
1253612537         break;
1253712538
1253812539         // mapper 50
1253912540      case BTL_SMB2B:
12540         prg8_67(machine, 0x0f);
12541         prg8_89(machine, 0x08);
12542         prg8_ab(machine, 0x09);
12543         prg8_cd(machine, 0);
12544         prg8_ef(machine, 0x0b);
12541         prg8_67(machine(), 0x0f);
12542         prg8_89(machine(), 0x08);
12543         prg8_ab(machine(), 0x09);
12544         prg8_cd(machine(), 0);
12545         prg8_ef(machine(), 0x0b);
1254512546         break;
1254612547         // mapper 51
1254712548      case BMC_BALLGAMES_11IN1:
12548         state->m_mmc_reg[0] = 0x01;
12549         state->m_mmc_reg[1] = 0x00;
12550         bmc_ball11_set_banks(machine);
12549         m_mmc_reg[0] = 0x01;
12550         m_mmc_reg[1] = 0x00;
12551         bmc_ball11_set_banks(machine());
1255112552         break;
1255212553         // mapper 52
1255312554      case BMC_MARIOPARTY_7IN1:
1255412555      case BMC_GOLD_7IN1:
12555         state->m_map52_reg_written = 0;
12556         mmc3_common_initialize(machine, 0x1f, 0xff, 0);
12556         m_map52_reg_written = 0;
12557         mmc3_common_initialize(machine(), 0x1f, 0xff, 0);
1255712558         break;
1255812559         // mapper 54
1255912560      case BMC_NOVELDIAMOND:
12560         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12561         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1256112562         break;
1256212563         // mapper 57
1256312564      case BMC_GKA:
12564         prg16_89ab(machine, 0);
12565         prg16_cdef(machine, 0);
12565         prg16_89ab(machine(), 0);
12566         prg16_cdef(machine(), 0);
1256612567         break;
1256712568
1256812569         // mapper 64
1256912570      case TENGEN_800032:
1257012571         // mapper 158
1257112572      case TENGEN_800037:
12572         prg16_89ab(machine, state->m_prg_chunks - 1);
12573         prg16_cdef(machine, state->m_prg_chunks - 1);
12573         prg16_89ab(machine(), m_prg_chunks - 1);
12574         prg16_cdef(machine(), m_prg_chunks - 1);
1257412575         break;
1257512576         // mapper 71
1257612577      case CAMERICA_BF9097:
12577         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
12578         set_nt_mirroring(machine(), PPU_MIRROR_HORZ);
1257812579      case CAMERICA_BF9093:
12579         prg32(machine, 0xff);
12580         prg32(machine(), 0xff);
1258012581         break;
1258112582
1258212583         // mapper 79 (& 146)
1258312584      case AVE_NINA06:
12584         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
12585         set_nt_mirroring(machine(), PPU_MIRROR_HORZ);
1258512586         break;
1258612587
1258712588         // mapper 83
1258812589      case CONY_BOARD:
1258912590      case YOKO_BOARD:
12590         state->m_mapper83_reg[9] = 0x0f;
12591         prg8_cd(machine, 0x1e);
12592         prg8_ef(machine, 0x1f);
12591         m_mapper83_reg[9] = 0x0f;
12592         prg8_cd(machine(), 0x1e);
12593         prg8_ef(machine(), 0x1f);
1259312594         break;
1259412595
1259512596         // mapper 91
1259612597      case UNL_MK2:
12597         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12598         prg16_89ab(machine, state->m_prg_chunks - 1);
12599         prg16_cdef(machine, state->m_prg_chunks - 1);
12598         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
12599         prg16_89ab(machine(), m_prg_chunks - 1);
12600         prg16_cdef(machine(), m_prg_chunks - 1);
1260012601         break;
1260112602
1260212603         // mapper 104
1260312604      case CAMERICA_GOLDENFIVE:
12604         prg16_89ab(machine, 0x00);
12605         prg16_cdef(machine, 0x0f);
12605         prg16_89ab(machine(), 0x00);
12606         prg16_cdef(machine(), 0x0f);
1260612607         break;
1260712608         // mapper 106
1260812609      case BTL_SMB3:
12609         prg8_89(machine, (state->m_prg_chunks << 1) - 1);
12610         prg8_ab(machine, 0);
12611         prg8_cd(machine, 0);
12612         prg8_ef(machine, (state->m_prg_chunks << 1) - 1);
12610         prg8_89(machine(), (m_prg_chunks << 1) - 1);
12611         prg8_ab(machine(), 0);
12612         prg8_cd(machine(), 0);
12613         prg8_ef(machine(), (m_prg_chunks << 1) - 1);
1261312614         break;
1261412615
1261512616         // mapper 108
1261612617      case WHIRLWIND_2706:
12617         prg32(machine, 0xff);
12618         prg32(machine(), 0xff);
1261812619         break;
1261912620
1262012621         // mapper 114
1262112622      case SUPERGAME_LIONKING:
12622         state->m_map114_reg = state->m_map114_reg_enabled = 0;
12623         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12623         m_map114_reg = m_map114_reg_enabled = 0;
12624         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1262412625         break;
1262512626         // mapper 115
1262612627      case KASING_BOARD:
12627         state->m_mmc_reg[0] = 0;
12628         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12628         m_mmc_reg[0] = 0;
12629         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1262912630         break;
1263012631         // mapper 116
1263112632      case SOMERI_SL12:
12632         state->m_mmc_prg_base = state->m_mmc_chr_base = 0;
12633         state->m_mmc_prg_mask = 0xff;
12634         state->m_mmc_chr_mask = 0xff;
12635         state->m_mmc_cmd1 = 2; // mode
12636         state->m_mmc3_latch = 0;
12637         state->m_mmc3_wram_protect = 0;
12633         m_mmc_prg_base = m_mmc_chr_base = 0;
12634         m_mmc_prg_mask = 0xff;
12635         m_mmc_chr_mask = 0xff;
12636         m_mmc_cmd1 = 2; // mode
12637         m_mmc3_latch = 0;
12638         m_mmc3_wram_protect = 0;
1263812639         // MMC1 regs
12639         state->m_mmc1_count = 0;
12640         state->m_mmc_reg[0] = 0x0c;
12641         state->m_mmc_reg[1] = 0x00;
12642         state->m_mmc_reg[2] = 0x00;
12643         state->m_mmc_reg[3] = 0x00;
12640         m_mmc1_count = 0;
12641         m_mmc_reg[0] = 0x0c;
12642         m_mmc_reg[1] = 0x00;
12643         m_mmc_reg[2] = 0x00;
12644         m_mmc_reg[3] = 0x00;
1264412645         // MMC3 regs
12645         state->m_mmc_prg_bank[0] = 0x3c;
12646         state->m_mmc_prg_bank[1] = 0x3d;
12647         state->m_mmc_prg_bank[2] = 0xfe;
12648         state->m_mmc_prg_bank[3] = 0xff;
12649         state->m_mmc_vrom_bank[0] = 0x00;
12650         state->m_mmc_vrom_bank[1] = 0x01;
12651         state->m_mmc_vrom_bank[2] = 0x04;
12652         state->m_mmc_vrom_bank[3] = 0x05;
12653         state->m_mmc_vrom_bank[4] = 0x06;
12654         state->m_mmc_vrom_bank[5] = 0x07;
12646         m_mmc_prg_bank[0] = 0x3c;
12647         m_mmc_prg_bank[1] = 0x3d;
12648         m_mmc_prg_bank[2] = 0xfe;
12649         m_mmc_prg_bank[3] = 0xff;
12650         m_mmc_vrom_bank[0] = 0x00;
12651         m_mmc_vrom_bank[1] = 0x01;
12652         m_mmc_vrom_bank[2] = 0x04;
12653         m_mmc_vrom_bank[3] = 0x05;
12654         m_mmc_vrom_bank[4] = 0x06;
12655         m_mmc_vrom_bank[5] = 0x07;
1265512656         // VRC2 regs
12656         state->m_mmc_prg_bank[4] = 0x00;
12657         state->m_mmc_prg_bank[5] = 0x01;
12657         m_mmc_prg_bank[4] = 0x00;
12658         m_mmc_prg_bank[5] = 0x01;
1265812659         for (i = 0; i < 8; ++i)
12659            state->m_mmc_vrom_bank[6 + i] = i;
12660         someri_mode_update(machine);
12660            m_mmc_vrom_bank[6 + i] = i;
12661         someri_mode_update(machine());
1266112662         break;
1266212663
1266312664         // mapper 120
1266412665      case BTL_TOBIDASE:
12665         prg32(machine, 2);
12666         prg32(machine(), 2);
1266612667         break;
1266712668
1266812669         // mapper 121
1266912670      case KAY_PANDAPRINCE:
12670         state->m_mmc_reg[5] = state->m_mmc_reg[6] = state->m_mmc_reg[7] = 0;
12671         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12671         m_mmc_reg[5] = m_mmc_reg[6] = m_mmc_reg[7] = 0;
12672         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1267212673         break;
1267312674
1267412675         // mapper 126
1267512676      case BMC_PJOY84:
12676         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12677         state->m_mmc_reg[0] = state->m_mmc_reg[1] = state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
12678         pjoy84_set_base_mask(machine);
12679         mmc3_set_chr(machine, state->m_mmc_chr_source, state->m_mmc_chr_base, state->m_mmc_chr_mask);
12680         mmc3_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
12677         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12678         m_mmc_reg[0] = m_mmc_reg[1] = m_mmc_reg[2] = m_mmc_reg[3] = 0;
12679         pjoy84_set_base_mask(machine());
12680         mmc3_set_chr(machine(), m_mmc_chr_source, m_mmc_chr_base, m_mmc_chr_mask);
12681         mmc3_set_prg(machine(), m_mmc_prg_base, m_mmc_prg_mask);
1268112682         break;
1268212683
1268312684         // mapper 132
r18064r18065
1268612687      case TXC_22211B:
1268712688         // mapper 173
1268812689      case TXC_22211C:
12689         state->m_txc_reg[0] = state->m_txc_reg[1] = state->m_txc_reg[2] = state->m_txc_reg[3] = 0;
12690         m_txc_reg[0] = m_txc_reg[1] = m_txc_reg[2] = m_txc_reg[3] = 0;
1269012691         break;
1269112692
1269212693         // mapper 134
1269312694      case BMC_FAMILY_4646B:
12694         mmc3_common_initialize(machine, 0x1f, 0xff, 0);
12695         mmc3_common_initialize(machine(), 0x1f, 0xff, 0);
1269512696         break;
1269612697
1269712698         // mapper 137
1269812699      case SACHEN_8259D:
12699         chr8(machine, state->m_chr_chunks - 1, CHRROM);
12700         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12700         chr8(machine(), m_chr_chunks - 1, CHRROM);
12701         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1270112702         break;
1270212703         // mapper 138
1270312704      case SACHEN_8259B:
r18064r18065
1270712708      case SACHEN_8259A:
1270812709         // mapper 150
1270912710      case SACHEN_74LS374:
12710         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12711         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1271112712         break;
1271212713         // mapper 143
1271312714      case SACHEN_TCA01:
12714         prg16_89ab(machine, 0);
12715         prg16_cdef(machine, 1);
12715         prg16_89ab(machine(), 0);
12716         prg16_cdef(machine(), 1);
1271612717         break;
1271712718
1271812719         // mapper 156
1271912720      case OPENCORP_DAOU306:
12720         prg16_89ab(machine, state->m_prg_chunks - 2);
12721         prg16_cdef(machine, state->m_prg_chunks - 1);
12722         set_nt_mirroring(machine, PPU_MIRROR_LOW);
12721         prg16_89ab(machine(), m_prg_chunks - 2);
12722         prg16_cdef(machine(), m_prg_chunks - 1);
12723         set_nt_mirroring(machine(), PPU_MIRROR_LOW);
1272312724         break;
1272412725         // mapper 163
1272512726      case NANJING_BOARD:
12726         state->m_mmc_count = 0xff;
12727         state->m_mmc_reg[0] = 0xff;
12728         state->m_mmc_reg[1] = 0;
12729         prg16_89ab(machine, state->m_prg_chunks - 2);
12730         prg16_cdef(machine, state->m_prg_chunks - 1);
12727         m_mmc_count = 0xff;
12728         m_mmc_reg[0] = 0xff;
12729         m_mmc_reg[1] = 0;
12730         prg16_89ab(machine(), m_prg_chunks - 2);
12731         prg16_cdef(machine(), m_prg_chunks - 1);
1273112732         break;
1273212733         // mapper 164
1273312734      case WAIXING_FFV:
12734         prg16_89ab(machine, 0);
12735         prg16_cdef(machine, 0x1f);
12735         prg16_89ab(machine(), 0);
12736         prg16_cdef(machine(), 0x1f);
1273612737         break;
1273712738         // mapper 166
1273812739      case SUBOR_TYPE1:
12739         state->m_subor_reg[0] = state->m_subor_reg[1] = state->m_subor_reg[2] = state->m_subor_reg[3] = 0;
12740         prg16_89ab(machine, 0);
12741         prg16_cdef(machine, 0x07);
12740         m_subor_reg[0] = m_subor_reg[1] = m_subor_reg[2] = m_subor_reg[3] = 0;
12741         prg16_89ab(machine(), 0);
12742         prg16_cdef(machine(), 0x07);
1274212743         break;
1274312744         // mapper 167
1274412745      case SUBOR_TYPE0:
12745         state->m_subor_reg[0] = state->m_subor_reg[1] = state->m_subor_reg[2] = state->m_subor_reg[3] = 0;
12746         prg16_89ab(machine, 0);
12747         prg16_cdef(machine, 0x20);
12746         m_subor_reg[0] = m_subor_reg[1] = m_subor_reg[2] = m_subor_reg[3] = 0;
12747         prg16_89ab(machine(), 0);
12748         prg16_cdef(machine(), 0x20);
1274812749         break;
1274912750
1275012751         // mapper 176
1275112752      case UNL_XZY:
1275212753         // mapper 182
1275312754      case HOSENKAN_BOARD:
12754         prg32(machine, (state->m_prg_chunks - 1) >> 1);
12755         prg32(machine(), (m_prg_chunks - 1) >> 1);
1275512756         break;
1275612757
1275712758      case FUKUTAKE_BOARD:   // mapper 186
12758         prg16_89ab(machine, 0);
12759         prg16_cdef(machine, 0);
12759         prg16_89ab(machine(), 0);
12760         prg16_cdef(machine(), 0);
1276012761         break;
1276112762
1276212763         // mapper 187
1276312764      case UNL_KOF96:
12764         state->m_mmc_reg[0] = state->m_mmc_reg[1] = state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
12765         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12765         m_mmc_reg[0] = m_mmc_reg[1] = m_mmc_reg[2] = m_mmc_reg[3] = 0;
12766         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1276612767         break;
1276712768         // mapper 189
1276812769      case TXC_TW:
12769         state->m_mmc_latch1 = 0;
12770         state->m_mmc_latch2 = 0x80;
12771         state->m_mmc_chr_base = 0;
12772         state->m_mmc_chr_mask = 0xff;
12773         mmc3_set_chr(machine, state->m_mmc_chr_source, state->m_mmc_chr_base, state->m_mmc_chr_mask);
12770         m_mmc_latch1 = 0;
12771         m_mmc_latch2 = 0x80;
12772         m_mmc_chr_base = 0;
12773         m_mmc_chr_mask = 0xff;
12774         mmc3_set_chr(machine(), m_mmc_chr_source, m_mmc_chr_base, m_mmc_chr_mask);
1277412775         break;
1277512776         // mapper 193
1277612777      case NTDEC_FIGHTINGHERO:
12777         prg32(machine, (state->m_prg_chunks - 1) >> 1);
12778         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12778         prg32(machine(), (m_prg_chunks - 1) >> 1);
12779         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1277912780         break;
1278012781         // mapper 197
1278112782      case UNL_SUPERFIGHTER3:
12782         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12783         unl_sf3_set_chr(machine, state->m_mmc_chr_source, state->m_mmc_chr_base, state->m_mmc_chr_mask);
12783         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12784         unl_sf3_set_chr(machine(), m_mmc_chr_source, m_mmc_chr_base, m_mmc_chr_mask);
1278412785         break;
1278512786         // mapper 198
1278612787      case WAIXING_TYPE_F:
12787         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12788         state->m_mmc_prg_bank[0] = 0x00;
12789         state->m_mmc_prg_bank[1] = 0x01;
12790         state->m_mmc_prg_bank[2] = 0x4e;
12791         state->m_mmc_prg_bank[3] = 0x4f;
12792         mmc3_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
12788         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12789         m_mmc_prg_bank[0] = 0x00;
12790         m_mmc_prg_bank[1] = 0x01;
12791         m_mmc_prg_bank[2] = 0x4e;
12792         m_mmc_prg_bank[3] = 0x4f;
12793         mmc3_set_prg(machine(), m_mmc_prg_base, m_mmc_prg_mask);
1279312794         break;
1279412795         // mapper 199
1279512796      case WAIXING_TYPE_G:
12796         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12797         state->m_mmc_prg_bank[0] = 0x00;
12798         state->m_mmc_prg_bank[1] = 0x01;
12799         state->m_mmc_prg_bank[2] = 0x3e;
12800         state->m_mmc_prg_bank[3] = 0x3f;
12801         mmc3_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
12802         state->m_mmc_vrom_bank[0] = 0x00;
12803         state->m_mmc_vrom_bank[1] = 0x02;
12804         state->m_mmc_vrom_bank[2] = 0x04;
12805         state->m_mmc_vrom_bank[3] = 0x05;
12806         state->m_mmc_vrom_bank[4] = 0x06;
12807         state->m_mmc_vrom_bank[5] = 0x07;
12808         state->m_mmc_vrom_bank[6] = 0x01;
12809         state->m_mmc_vrom_bank[7] = 0x03;
12810         waixing_g_set_chr(machine, state->m_mmc_chr_base, state->m_mmc_chr_mask);
12797         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12798         m_mmc_prg_bank[0] = 0x00;
12799         m_mmc_prg_bank[1] = 0x01;
12800         m_mmc_prg_bank[2] = 0x3e;
12801         m_mmc_prg_bank[3] = 0x3f;
12802         mmc3_set_prg(machine(), m_mmc_prg_base, m_mmc_prg_mask);
12803         m_mmc_vrom_bank[0] = 0x00;
12804         m_mmc_vrom_bank[1] = 0x02;
12805         m_mmc_vrom_bank[2] = 0x04;
12806         m_mmc_vrom_bank[3] = 0x05;
12807         m_mmc_vrom_bank[4] = 0x06;
12808         m_mmc_vrom_bank[5] = 0x07;
12809         m_mmc_vrom_bank[6] = 0x01;
12810         m_mmc_vrom_bank[7] = 0x03;
12811         waixing_g_set_chr(machine(), m_mmc_chr_base, m_mmc_chr_mask);
1281112812         break;
1281212813
1281312814         // mapper 200
1281412815      case BMC_36IN1:
12815         prg16_89ab(machine, state->m_prg_chunks - 1);
12816         prg16_cdef(machine, state->m_prg_chunks - 1);
12816         prg16_89ab(machine(), m_prg_chunks - 1);
12817         prg16_cdef(machine(), m_prg_chunks - 1);
1281712818         break;
1281812819
1281912820         // mapper 202
r18064r18065
1282412825      case BMC_64IN1:
1282512826         // mapper 214
1282612827      case BMC_SUPERGUN_20IN1:
12827         prg16_89ab(machine, 0);
12828         prg16_cdef(machine, 0);
12828         prg16_89ab(machine(), 0);
12829         prg16_cdef(machine(), 0);
1282912830         break;
1283012831         // mapper 205
1283112832      case BMC_15IN1:
12832         mmc3_common_initialize(machine, 0x1f, 0xff, 0);
12833         state->m_mmc_prg_base = 0x10;   // this board has a diff prg_base
12834         mmc3_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
12833         mmc3_common_initialize(machine(), 0x1f, 0xff, 0);
12834         m_mmc_prg_base = 0x10;   // this board has a diff prg_base
12835         mmc3_set_prg(machine(), m_mmc_prg_base, m_mmc_prg_mask);
1283512836         break;
1283612837
1283712838         // mapper 208
1283812839      case GOUDER_37017:
12839         state->m_mmc_reg[0] = state->m_mmc_reg[1] = state->m_mmc_reg[2] = state->m_mmc_reg[3] = state->m_mmc_reg[4] = 0;
12840         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12840         m_mmc_reg[0] = m_mmc_reg[1] = m_mmc_reg[2] = m_mmc_reg[3] = m_mmc_reg[4] = 0;
12841         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1284112842         break;
1284212843         // mapper 212
1284312844      case BMC_SUPERHIK_300IN1:
12844         chr8(machine, 0xff, CHRROM);
12845         prg32(machine, 0xff);
12845         chr8(machine(), 0xff, CHRROM);
12846         prg32(machine(), 0xff);
1284612847         break;
1284712848
1284812849         // mapper 215
1284912850      case SUPERGAME_BOOGERMAN:
12850         state->m_mmc_reg[0] = 0x00;
12851         state->m_mmc_reg[1] = 0xff;
12852         state->m_mmc_reg[2] = 0x04;
12853         state->m_mmc_reg[3] = 0;
12854         mmc3_common_initialize(machine, 0x1f, 0xff, 0);
12855         sgame_boog_set_prg(machine);
12856         mmc3_set_chr(machine, state->m_mmc_chr_source, state->m_mmc_chr_base, state->m_mmc_chr_mask);
12851         m_mmc_reg[0] = 0x00;
12852         m_mmc_reg[1] = 0xff;
12853         m_mmc_reg[2] = 0x04;
12854         m_mmc_reg[3] = 0;
12855         mmc3_common_initialize(machine(), 0x1f, 0xff, 0);
12856         sgame_boog_set_prg(machine());
12857         mmc3_set_chr(machine(), m_mmc_chr_source, m_mmc_chr_base, m_mmc_chr_mask);
1285712858         break;
1285812859
1285912860         // mapper 217
1286012861      case BMC_GOLDENCARD_6IN1:
12861         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12862         state->m_mmc_reg[0] = 0x00;
12863         state->m_mmc_reg[1] = 0xff;
12864         state->m_mmc_reg[2] = 0x03;
12865         state->m_mmc_reg[3] = 0;
12866         bmc_gc6in1_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
12867         bmc_gc6in1_set_chr(machine, state->m_mmc_chr_source);
12862         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12863         m_mmc_reg[0] = 0x00;
12864         m_mmc_reg[1] = 0xff;
12865         m_mmc_reg[2] = 0x03;
12866         m_mmc_reg[3] = 0;
12867         bmc_gc6in1_set_prg(machine(), m_mmc_prg_base, m_mmc_prg_mask);
12868         bmc_gc6in1_set_chr(machine(), m_mmc_chr_source);
1286812869         break;
1286912870         // mapper 221
1287012871      case UNL_N625092:
12871         prg16_89ab(machine, 0);
12872         prg16_cdef(machine, 0);
12872         prg16_89ab(machine(), 0);
12873         prg16_cdef(machine(), 0);
1287312874         break;
1287412875
1287512876         // mapper 223?
1287612877      case WAIXING_TYPE_I:
12877         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12878         state->m_mmc3_wram_protect = 0;
12878         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12879         m_mmc3_wram_protect = 0;
1287912880         break;
1288012881
1288112882         // mapper 224?
1288212883      case WAIXING_TYPE_J:
12883         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12884         state->m_mmc_prg_bank[0] = 0x01;
12885         state->m_mmc_prg_bank[1] = 0x02;
12886         state->m_mmc_prg_bank[2] = 0x7e;
12887         state->m_mmc_prg_bank[3] = 0x7f;
12888         mmc3_set_prg(machine, state->m_mmc_prg_base, state->m_mmc_prg_mask);
12884         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
12885         m_mmc_prg_bank[0] = 0x01;
12886         m_mmc_prg_bank[1] = 0x02;
12887         m_mmc_prg_bank[2] = 0x7e;
12888         m_mmc_prg_bank[3] = 0x7f;
12889         mmc3_set_prg(machine(), m_mmc_prg_base, m_mmc_prg_mask);
1288912890         break;
1289012891
1289112892         // mapper 227
1289212893      case BMC_1200IN1:
12893         prg16_89ab(machine, 0);
12894         prg16_cdef(machine, 0);
12894         prg16_89ab(machine(), 0);
12895         prg16_cdef(machine(), 0);
1289512896         break;
1289612897
1289712898         // mapper 229
1289812899      case BMC_31IN1:
12899         prg16_89ab(machine, 0);
12900         prg16_cdef(machine, 1);
12901         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12900         prg16_89ab(machine(), 0);
12901         prg16_cdef(machine(), 1);
12902         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1290212903         break;
1290312904         // mapper 230
1290412905      case BMC_22GAMES:
12905         prg16_89ab(machine, 0);
12906         prg16_cdef(machine, 7);
12906         prg16_89ab(machine(), 0);
12907         prg16_cdef(machine(), 7);
1290712908         break;
1290812909         // mapper 231
1290912910      case BMC_20IN1:
12910         prg16_89ab(machine, 0);
12911         prg16_cdef(machine, state->m_prg_chunks - 1);
12912         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12911         prg16_89ab(machine(), 0);
12912         prg16_cdef(machine(), m_prg_chunks - 1);
12913         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1291312914         break;
1291412915         // mapper 232
1291512916      case CAMERICA_BF9096:
12916         state->m_mmc_latch1 = 0x18;
12917         state->m_mmc_latch2 = 0x00;
12918         bf9096_set_prg(machine);
12917         m_mmc_latch1 = 0x18;
12918         m_mmc_latch2 = 0x00;
12919         bf9096_set_prg(machine());
1291912920         break;
1292012921
1292112922         // mapper 243
1292212923      case SACHEN_74LS374_A:
12923         state->m_mmc_vrom_bank[0] = 3;
12924         chr8(machine, 3, CHRROM);
12925         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12924         m_mmc_vrom_bank[0] = 3;
12925         chr8(machine(), 3, CHRROM);
12926         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1292612927         break;
1292712928
1292812929         // mapper 246
1292912930      case CNE_FSB:
12930         prg32(machine, 0xff);
12931         prg32(machine(), 0xff);
1293112932         break;
1293212933         // mapper 249
1293312934      case WAIXING_SECURITY:
12934         state->m_mmc_reg[0] = 0;
12935         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12935         m_mmc_reg[0] = 0;
12936         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1293612937         break;
1293712938
1293812939         // mapper 254
1293912940      case BTL_PIKACHUY2K:
12940         state->m_mmc_reg[0] = 0xff;
12941         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12941         m_mmc_reg[0] = 0xff;
12942         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1294212943         break;
1294312944
1294412945         // mapper 255
1294512946      case BMC_110IN1:
12946         prg16_89ab(machine, 0);
12947         prg16_cdef(machine, 1);
12948         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12947         prg16_89ab(machine(), 0);
12948         prg16_cdef(machine(), 1);
12949         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1294912950         break;
1295012951
1295112952         // UNIF only
1295212953      case BMC_64IN1NR:
12953         state->m_mmc_reg[0] = 0x80;
12954         state->m_mmc_reg[1] = 0x43;
12955         state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
12956         bmc_64in1nr_set_prg(machine);
12957         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12954         m_mmc_reg[0] = 0x80;
12955         m_mmc_reg[1] = 0x43;
12956         m_mmc_reg[2] = m_mmc_reg[3] = 0;
12957         bmc_64in1nr_set_prg(machine());
12958         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1295812959         break;
1295912960      case BMC_190IN1:
12960         prg16_89ab(machine, 0);
12961         prg16_cdef(machine, 0);
12961         prg16_89ab(machine(), 0);
12962         prg16_cdef(machine(), 0);
1296212963         break;
1296312964      case BMC_A65AS:
12964         prg16_89ab(machine, 0);
12965         prg16_cdef(machine, 7);
12966         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12965         prg16_89ab(machine(), 0);
12966         prg16_cdef(machine(), 7);
12967         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1296712968         break;
1296812969      case BMC_GS2004:
1296912970      case BMC_GS2013:
12970         prg32(machine, 0xff);
12971         prg32(machine(), 0xff);
1297112972         break;
1297212973      case BMC_S24IN1SC03:
12973         state->m_mmc_reg[0] = 0x24;
12974         state->m_mmc_reg[1] = 0x9f;
12975         state->m_mmc_reg[2] = 0;
12976         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12974         m_mmc_reg[0] = 0x24;
12975         m_mmc_reg[1] = 0x9f;
12976         m_mmc_reg[2] = 0;
12977         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1297712978         break;
1297812979      case BMC_T262:
12979         state->m_mmc_latch1 = 0;
12980         state->m_mmc_latch2 = 0;
12981         prg16_89ab(machine, 0);
12982         prg16_cdef(machine, 7);
12980         m_mmc_latch1 = 0;
12981         m_mmc_latch2 = 0;
12982         prg16_89ab(machine(), 0);
12983         prg16_cdef(machine(), 7);
1298312984         break;
1298412985      case DREAMTECH_BOARD:
12985         prg16_89ab(machine, 0);
12986         prg16_cdef(machine, 8);
12986         prg16_89ab(machine(), 0);
12987         prg16_cdef(machine(), 8);
1298712988         break;
1298812989      case UNL_8237:
12989         state->m_mmc_reg[0] = state->m_mmc_reg[1] = state->m_mmc_reg[2] = 0;
12990         mmc3_common_initialize(machine, 0xff, 0xff, 0);
12990         m_mmc_reg[0] = m_mmc_reg[1] = m_mmc_reg[2] = 0;
12991         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
1299112992         break;
1299212993      case UNL_AX5705:
12993         state->m_mmc_prg_bank[0] = 0;
12994         state->m_mmc_prg_bank[1] = 1;
12995         prg8_89(machine, state->m_mmc_prg_bank[0]);
12996         prg8_ab(machine, state->m_mmc_prg_bank[1]);
12997         prg8_cd(machine, 0xfe);
12998         prg8_ef(machine, 0xff);
12994         m_mmc_prg_bank[0] = 0;
12995         m_mmc_prg_bank[1] = 1;
12996         prg8_89(machine(), m_mmc_prg_bank[0]);
12997         prg8_ab(machine(), m_mmc_prg_bank[1]);
12998         prg8_cd(machine(), 0xfe);
12999         prg8_ef(machine(), 0xff);
1299913000         break;
1300013001      case UNL_RACERMATE:
13001         chr4_0(machine, 0, state->m_mmc_chr_source);
13002         chr4_4(machine, 0, state->m_mmc_chr_source);
13003         prg16_89ab(machine, 0);
13004         prg16_cdef(machine, state->m_prg_chunks - 1);
13002         chr4_0(machine(), 0, m_mmc_chr_source);
13003         chr4_4(machine(), 0, m_mmc_chr_source);
13004         prg16_89ab(machine(), 0);
13005         prg16_cdef(machine(), m_prg_chunks - 1);
1300513006         break;
1300613007
1300713008      case BMC_BENSHENG_BS5:
13008         state->m_mmc_prg_bank[0] = 0xff;
13009         state->m_mmc_prg_bank[1] = 0xff;
13010         state->m_mmc_prg_bank[2] = 0xff;
13011         state->m_mmc_prg_bank[3] = 0xff;
13012         bmc_bs5_update_banks(machine);
13009         m_mmc_prg_bank[0] = 0xff;
13010         m_mmc_prg_bank[1] = 0xff;
13011         m_mmc_prg_bank[2] = 0xff;
13012         m_mmc_prg_bank[3] = 0xff;
13013         bmc_bs5_update_banks(machine());
1301313014         break;
1301413015
1301513016      case BMC_810544:
13016         prg16_89ab(machine, 0);
13017         prg16_cdef(machine, 0);
13018         set_nt_mirroring(machine, PPU_MIRROR_VERT);
13017         prg16_89ab(machine(), 0);
13018         prg16_cdef(machine(), 0);
13019         set_nt_mirroring(machine(), PPU_MIRROR_VERT);
1301913020         break;
1302013021
1302113022      case BMC_G63IN1:
13022         bmc_gb63_update(machine);
13023         bmc_gb63_update(machine());
1302313024         break;
1302413025
1302513026      case BMC_FK23C:
13026         state->m_mmc_reg[0] = 4;
13027         state->m_mmc_reg[1] = 0xff;
13028         state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
13029         state->m_mmc_reg[4] = state->m_mmc_reg[5] = state->m_mmc_reg[6] = state->m_mmc_reg[7] = 0xff;
13030         mmc3_common_initialize(machine, 0xff, 0xff, 0);
13031         fk23c_set_prg(machine);
13032         fk23c_set_chr(machine);
13027         m_mmc_reg[0] = 4;
13028         m_mmc_reg[1] = 0xff;
13029         m_mmc_reg[2] = m_mmc_reg[3] = 0;
13030         m_mmc_reg[4] = m_mmc_reg[5] = m_mmc_reg[6] = m_mmc_reg[7] = 0xff;
13031         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
13032         fk23c_set_prg(machine());
13033         fk23c_set_chr(machine());
1303313034         break;
1303413035
1303513036      case BMC_FK23CA:
13036         state->m_mmc_reg[0] = state->m_mmc_reg[1] = state->m_mmc_reg[2] = state->m_mmc_reg[3] = 0;
13037         state->m_mmc_reg[4] = state->m_mmc_reg[5] = state->m_mmc_reg[6] = state->m_mmc_reg[7] = 0xff;
13038         mmc3_common_initialize(machine, 0xff, 0xff, 0);
13039         fk23c_set_prg(machine);
13040         fk23c_set_chr(machine);
13037         m_mmc_reg[0] = m_mmc_reg[1] = m_mmc_reg[2] = m_mmc_reg[3] = 0;
13038         m_mmc_reg[4] = m_mmc_reg[5] = m_mmc_reg[6] = m_mmc_reg[7] = 0xff;
13039         mmc3_common_initialize(machine(), 0xff, 0xff, 0);
13040         fk23c_set_prg(machine());
13041         fk23c_set_chr(machine());
1304113042         break;
1304213043
1304313044
1304413045      case FFE_MAPPER6:
13045         prg16_89ab(machine, 0);
13046         prg16_cdef(machine, 7);
13046         prg16_89ab(machine(), 0);
13047         prg16_cdef(machine(), 7);
1304713048         break;
1304813049      case FFE_MAPPER8:
13049         prg32(machine, 0);
13050         prg32(machine(), 0);
1305013051         break;
1305113052      case FFE_MAPPER17:
13052         prg16_89ab(machine, 0);
13053         prg16_cdef(machine, state->m_prg_chunks - 1);
13053         prg16_89ab(machine(), 0);
13054         prg16_cdef(machine(), m_prg_chunks - 1);
1305413055         break;
1305513056
1305613057      case UNSUPPORTED_BOARD:
r18064r18065
1309013091   state->m_ppu->set_scanline_callback(intf ? intf->mmc_scanline : NULL);
1309113092   state->m_ppu->set_hblank_callback(intf ? intf->mmc_hblank : NULL);
1309213093
13093   err = pcb_initialize(machine, state->m_pcb_id);
13094   err = state->pcb_initialize(state->m_pcb_id);
1309413095
1309513096   return err;
1309613097}
trunk/src/mess/includes/nes.h
r18064r18065
6464typedef void (*nes_prg_callback)(running_machine &machine, int start, int bank);
6565typedef void (*nes_chr_callback)(running_machine &machine, int start, int bank, int source);
6666
67class nes_state : public driver_device
67class nes_carts_state : public driver_device
6868{
6969public:
70   nes_state(const machine_config &mconfig, device_type type, const char *tag)
71      : driver_device(mconfig, type, tag) { }
72
73   /* input_related - this part has to be cleaned up (e.g. in_2 and in_3 are not really necessary here...) */
74   nes_input m_in_0, m_in_1, m_in_2, m_in_3;
75   UINT8 m_fck_scan, m_fck_mode;
76
70   nes_carts_state(const machine_config &mconfig, device_type type, const char *tag)
71   : driver_device(mconfig, type, tag) { }
72   
7773   int           m_prg_bank[5];
7874   chr_bank      m_chr_map[8];  //quick banking structure, because some of this changes multiple times per scanline!
7975   name_table    m_nt_page[4];  //quick banking structure for a maximum of 4K of RAM/ROM/ExRAM
76   
77   nes_prg_callback    m_mmc3_prg_cb;   // these are used to simplify a lot emulation of some MMC3 pirate clones
78   nes_chr_callback    m_mmc3_chr_cb;
8079
8180   int m_chr_open_bus;
8281   int m_prgram_bank5_start, m_battery_bank5_start, m_empty_bank5_start;
83
82   
8483   UINT8 m_ce_mask, m_ce_state;
8584   UINT8 m_vrc_ls_prg_a, m_vrc_ls_prg_b, m_vrc_ls_chr;
86
85   
8786   int m_MMC5_floodtile;
8887   int m_MMC5_floodattr;
8988   int m_mmc5_vram_control;
9089   UINT8 m_mmc5_high_chr;
9190   UINT8 m_mmc5_split_scr;
9291   UINT8 *m_extended_ntram;
93
92   
9493   UINT8 m_mmc5_last_chr_a;
9594   UINT16 m_mmc5_vrom_regA[8];
9695   UINT16 m_mmc5_vrom_regB[4];
r18064r18065
102101   UINT8 m_mmc5_split_ctrl;
103102   UINT8 m_mmc5_split_yst;
104103   UINT8 m_mmc5_split_bank;
105
106   /* video-related */
107   int m_nes_vram_sprite[8]; /* Used only by mmc5 for now */
108   int m_last_frame_flip;
109
110   /* misc */
111   write8_delegate   m_mmc_write_low;
112   write8_delegate   m_mmc_write_mid;
113   write8_delegate   m_mmc_write;
114   read8_delegate    m_mmc_read_low;
115   read8_delegate    m_mmc_read_mid;
116   read8_delegate    m_mmc_read;
117   emu_timer           *m_irq_timer;
118
119   nes_prg_callback    m_mmc3_prg_cb;   // these are used to simplify a lot emulation of some MMC3 pirate clones
120   nes_chr_callback    m_mmc3_chr_cb;
121
122   /* devices */
123   cpu_device      *m_maincpu;
124   ppu2c0x_device      *m_ppu;
125   device_t      *m_sound;
126   device_t      *m_cart;
127
128   /* misc region to be allocated at init */
129   // variables which don't change at run-time
130   UINT8      *m_rom;
131   UINT8      *m_prg;
132   UINT8      *m_vrom;
133   UINT8      *m_vram;
134   UINT8      *m_wram;
135   UINT8      *m_ciram; //PPU nametable RAM - external to PPU!
136   UINT8      *m_battery_ram;
137   UINT8      *m_mapper_ram;
138   UINT8      *m_mapper_bram;
139
104   
140105   /***** Mapper-related variables *****/
141
106   
142107   // common ones
143108   int        m_IRQ_enable, m_IRQ_enable_latch;
144109   UINT16     m_IRQ_count, m_IRQ_count_latch;
r18064r18065
148113   UINT8      m_IRQ_mode;
149114   UINT8      m_IRQ_clear;
150115   int        m_mult1, m_mult2;
151
116   
152117   UINT8 m_mmc_chr_source;         // This is set at init to CHRROM or CHRRAM. a few mappers can swap between
153                           // the two (this is done in the specific handlers).
154
118   // the two (this is done in the specific handlers).
119   
155120   UINT8 m_mmc_cmd1, m_mmc_cmd2;      // These represent registers where the mapper writes important values
156121   UINT8 m_mmc_count;            // This is used as counter in mappers like 1 and 45
157
122   
158123   int m_mmc_prg_base, m_mmc_prg_mask;   // MMC3 based multigame carts select a block of banks by using these (and then act like normal MMC3),
159124   int m_mmc_chr_base, m_mmc_chr_mask;   // while MMC3 and clones (mapper 118 & 119) simply set them as 0 and 0xff resp.
160
125   
161126   UINT8 m_mmc_prg_bank[6];            // Many mappers writes only some bits of the selected bank (for both PRG and CHR),
162127   UINT8 m_mmc_vrom_bank[16];         // hence these are handy to latch bank values.
163
128   
164129   UINT16 m_MMC5_vrom_bank[12];         // MMC5 has 10bit wide VROM regs!
165130   UINT8 m_mmc_extra_bank[16];         // some MMC3 clone have 2 series of PRG/CHR banks...
166                              // we collect them all here: first 4 elements PRG banks, then 6/8 CHR banks
167
131   // we collect them all here: first 4 elements PRG banks, then 6/8 CHR banks
132   
168133   UINT8 m_mmc_latch1, m_mmc_latch2;
169134   UINT8 m_mmc_reg[16];
170
135   
171136   UINT8 m_mmc_dipsetting;
172
137   
173138   // misc mapper related variables which should be merged with the above one, where possible
174139   int m_mmc1_reg_write_enable;
175140   int m_mmc1_latch;
176141   int m_mmc1_count;
177
142   
178143   int m_mmc3_latch;
179144   int m_mmc3_wram_protect;
180145   int m_mmc3_alt_irq;
181
146   
182147   int m_MMC5_rom_bank_mode;
183148   int m_MMC5_vrom_bank_mode;
184149   int m_MMC5_vram_protect;
r18064r18065
186151   int m_vrom_page_a;
187152   int m_vrom_page_b;
188153   // int vrom_next[4];
189
154   
190155   UINT8 m_mmc6_reg;
191
156   
192157   // these might be unified in single mmc_reg[] array, together with state->m_mmc_cmd1 & state->m_mmc_cmd2
193158   // but be careful that MMC3 clones often use state->m_mmc_cmd1/state->m_mmc_cmd2 (from base MMC3) AND additional regs below!
194159   UINT8 m_mapper83_reg[10];
r18064r18065
199164   UINT8 m_map52_reg_written;
200165   UINT8 m_map114_reg, m_map114_reg_enabled;
201166
202   /***** NES-cart related *****/
203
204   /* load-time cart variables which remain constant */
205   UINT16 m_prg_chunks;      // iNES 2.0 allows for more chunks (a recently dumped multigame cart has 256 chunks of both PRG & CHR!)
206   UINT16 m_chr_chunks;
207   UINT16 m_vram_chunks;
208   UINT8 m_trainer;
209   UINT8 m_battery;         // if there is PRG RAM with battery backup
210   UINT32 m_battery_size;
211   UINT8 m_prg_ram;         // if there is PRG RAM with no backup
212   UINT32 m_wram_size;
213   UINT32 m_mapper_ram_size;
214   UINT32 m_mapper_bram_size;
215
216   /* system variables which don't change at run-time */
217   UINT16 m_mapper;      // for iNES
218   UINT16 m_pcb_id;      // for UNIF & xml
219   UINT8 m_four_screen_vram;
220   UINT8 m_hard_mirroring;
221   UINT8 m_crc_hack;   // this is needed to detect different boards sharing the same Mappers (shame on .nes format)
222   UINT8 m_ines20;
223
224   /***** FDS-floppy related *****/
225
226   int     m_disk_expansion;
227
228   UINT8   m_fds_sides;
229   UINT8   *m_fds_data;   // here, we store a copy of the disk
230   UINT8   *m_fds_ram;   // here, we emulate the RAM adapter
231
232   /* Variables which can change */
233   UINT8   m_fds_motor_on;
234   UINT8   m_fds_door_closed;
235   UINT8   m_fds_current_side;
236   UINT32  m_fds_head_position;
237   UINT8   m_fds_status0;
238   UINT8   m_fds_read_mode;
239   UINT8   m_fds_write_reg;
240
241   /* these are used in the mapper 20 handlers */
242   int     m_fds_last_side;
243   int     m_fds_count;
244   DECLARE_READ8_MEMBER(nes_IN0_r);
245   DECLARE_READ8_MEMBER(nes_IN1_r);
246   DECLARE_WRITE8_MEMBER(nes_IN0_w);
247   DECLARE_WRITE8_MEMBER(nes_IN1_w);
248   DECLARE_READ8_MEMBER(nes_fds_r);
249   DECLARE_WRITE8_MEMBER(nes_fds_w);
250   DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
251   DECLARE_DRIVER_INIT(famicom);
252   virtual void machine_start();
253   virtual void machine_reset();
254   virtual void video_start();
255   virtual void palette_init();
256   UINT32 screen_update_nes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
167   // i/o handlers
257168   DECLARE_WRITE8_MEMBER(mapper6_l_w);
258169   DECLARE_WRITE8_MEMBER(mapper6_w);
259170   DECLARE_WRITE8_MEMBER(mapper8_w);
260171   DECLARE_WRITE8_MEMBER(mapper17_l_w);
261   DECLARE_WRITE8_MEMBER(nes_chr_w);
262   DECLARE_READ8_MEMBER(nes_chr_r);
263   DECLARE_WRITE8_MEMBER(nes_nt_w);
264   DECLARE_READ8_MEMBER(nes_nt_r);
265   DECLARE_WRITE8_MEMBER(nes_low_mapper_w);
266   DECLARE_READ8_MEMBER(nes_low_mapper_r);
267172   DECLARE_WRITE8_MEMBER(uxrom_w);
268173   DECLARE_WRITE8_MEMBER(uxrom_cc_w);
269174   DECLARE_WRITE8_MEMBER(un1rom_w);
r18064r18065
535440   DECLARE_READ8_MEMBER(dummy_l_r);
536441   DECLARE_READ8_MEMBER(dummy_m_r);
537442   DECLARE_READ8_MEMBER(dummy_r);   
443
444   UINT8      *m_wram;
445   UINT8      *m_battery_ram;
446   UINT8      *m_mapper_ram;
447   UINT8      *m_mapper_bram;
448   UINT32      m_mapper_ram_size;
449   UINT32      m_mapper_bram_size;
450   
451   // things below are included here for the moment, even if probably would better fit nes_state
452   // to allow compilation while progressing with the work
453
454   /* devices */
455   cpu_device        *m_maincpu;
456   ppu2c0x_device    *m_ppu;
457   device_t          *m_sound;
458   emu_timer         *m_irq_timer;
459
460   /* load-time cart variables which remain constant */
461   UINT16 m_prg_chunks;      // iNES 2.0 allows for more chunks (a recently dumped multigame cart has 256 chunks of both PRG & CHR!)
462   UINT16 m_chr_chunks;
463   UINT8 m_battery;         // if there is PRG RAM with battery backup
464   
465   /* system variables which don't change at run-time */
466   UINT16 m_pcb_id;      // for UNIF & xml
467   UINT8 m_hard_mirroring;
468};
469
470class nes_state : public nes_carts_state
471{
472public:
473   nes_state(const machine_config &mconfig, device_type type, const char *tag)
474   : nes_carts_state(mconfig, type, tag) { }
475
476   /* input_related - this part has to be cleaned up (e.g. in_2 and in_3 are not really necessary here...) */
477   nes_input m_in_0, m_in_1, m_in_2, m_in_3;
478   UINT8 m_fck_scan, m_fck_mode;
479
480   /* video-related */
481   int m_nes_vram_sprite[8]; /* Used only by mmc5 for now */
482   int m_last_frame_flip;
483
538484   void init_nes_core();
485   void pcb_handlers_setup();
486   int pcb_initialize(int idx);
487   
488   DECLARE_WRITE8_MEMBER(nes_chr_w);
489   DECLARE_READ8_MEMBER(nes_chr_r);
490   DECLARE_WRITE8_MEMBER(nes_nt_w);
491   DECLARE_READ8_MEMBER(nes_nt_r);
492   DECLARE_WRITE8_MEMBER(nes_low_mapper_w);
493   DECLARE_READ8_MEMBER(nes_low_mapper_r);
494
495   /* misc */
496   write8_delegate   m_mmc_write_low;
497   write8_delegate   m_mmc_write_mid;
498   write8_delegate   m_mmc_write;
499   read8_delegate    m_mmc_read_low;
500   read8_delegate    m_mmc_read_mid;
501   read8_delegate    m_mmc_read;
502   
503   /* devices */
504//   cpu_device        *m_maincpu;
505//   ppu2c0x_device    *m_ppu;
506//   device_t          *m_sound;
507   device_t          *m_cart;
508//   emu_timer         *m_irq_timer;
509   
510   /* misc region to be allocated at init */
511   // variables which don't change at run-time
512   UINT8      *m_rom;
513   UINT8      *m_prg;
514   UINT8      *m_vrom;
515   UINT8      *m_vram;
516   UINT8      *m_ciram; //PPU nametable RAM - external to PPU!
517   
518   
519   /* load-time cart variables which remain constant */
520//   UINT16 m_prg_chunks;      // iNES 2.0 allows for more chunks (a recently dumped multigame cart has 256 chunks of both PRG & CHR!)
521//   UINT16 m_chr_chunks;
522   UINT16 m_vram_chunks;
523   UINT8 m_trainer;
524//   UINT8 m_battery;         // if there is PRG RAM with battery backup
525   UINT32 m_battery_size;
526   UINT8 m_prg_ram;         // if there is PRG RAM with no backup
527   UINT32 m_wram_size;
528   
529   /* system variables which don't change at run-time */
530   UINT16 m_mapper;      // for iNES
531//   UINT16 m_pcb_id;      // for UNIF & xml
532   UINT8 m_four_screen_vram;
533//   UINT8 m_hard_mirroring;
534   UINT8 m_crc_hack;   // this is needed to detect different boards sharing the same Mappers (shame on .nes format)
535   UINT8 m_ines20;
536   
537   
538   /***** FDS-floppy related *****/
539
540   int     m_disk_expansion;
541
542   UINT8   m_fds_sides;
543   UINT8   *m_fds_data;   // here, we store a copy of the disk
544   UINT8   *m_fds_ram;   // here, we emulate the RAM adapter
545
546   /* Variables which can change */
547   UINT8   m_fds_motor_on;
548   UINT8   m_fds_door_closed;
549   UINT8   m_fds_current_side;
550   UINT32  m_fds_head_position;
551   UINT8   m_fds_status0;
552   UINT8   m_fds_read_mode;
553   UINT8   m_fds_write_reg;
554
555   /* these are used in the mapper 20 handlers */
556   int     m_fds_last_side;
557   int     m_fds_count;
558   DECLARE_READ8_MEMBER(nes_IN0_r);
559   DECLARE_READ8_MEMBER(nes_IN1_r);
560   DECLARE_WRITE8_MEMBER(nes_IN0_w);
561   DECLARE_WRITE8_MEMBER(nes_IN1_w);
562   DECLARE_READ8_MEMBER(nes_fds_r);
563   DECLARE_WRITE8_MEMBER(nes_fds_w);
564   DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
565   DECLARE_DRIVER_INIT(famicom);
566   virtual void machine_start();
567   virtual void machine_reset();
568   virtual void video_start();
569   virtual void palette_init();
570   UINT32 screen_update_nes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
539571};
540572
541573/*----------- defined in machine/nes.c -----------*/

Previous 199869 Revisions Next


© 1997-2024 The MAME Team