Previous 15994 Revisions Next

r14846 Tuesday 3rd April, 2012 at 11:22:43 UTC by Miodrag Milanović
Sync with MAME r15868 (no whatsnew)
[src/emu/machine]i8155.c i8155.h
[src/emu/sound]ymf271.c
[src/mame]mame.lst
[src/mame/audio]gottlieb.c
[src/mame/drivers]1945kiii.c 30test.c 39in1.c 5clown.c ace.c acefruit.c acommand.c adp.c albazc.c albazg.c aristmk4.c aristmk5.c aristmk6.c astinvad.c astrocorp.c atarisy4.c attckufo.c atvtrack.c avt.c backfire.c beaminv.c berzerk.c bestleag.c bfcobra.c bfm_sc1.c bfm_sc2.c bfm_sc4.c bfmsys85.c big10.c bingoc.c bingor.c blackt96.c blitz.c blitz68k.c bmcbowl.c bnstars.c boxer.c buster.c bwidow.c cabaret.c calorie.c cardline.c caswin.c cball.c cham24.c chanbara.c chinsan.c clayshoo.c cliffhgr.c cmmb.c cntsteer.c coinmstr.c coinmvga.c coolridr.c corona.c crystal.c cshooter.c csplayh5.c cubeqst.c cultures.c cybertnk.c cyclemb.c d9final.c dacholer.c dai3wksi.c darkhors.c dblewing.c ddayjlc.c ddealer.c deco156.c deco_ld.c deshoros.c destroyr.c dgpix.c discoboy.c diverboy.c dlair.c dmndrby.c dominob.c dorachan.c dotrikun.c dreamwld.c drtomy.c drw80pkr.c dunhuang.c dwarfd.c dynadice.c ecoinf2.c ecoinf3.c egghunt.c embargo.c enigma2.c eolith16.c ertictac.c esh.c ettrivia.c f-32.c famibox.c feversoc.c firefox.c flyball.c gal3.c galaxi.c galgame.c gei.c ggconnie.c ghosteo.c go2000.c goldngam.c goldnpkr.c good.c goodejan.c gottlieb.c gpworld.c gstream.c gticlub.c guab.c gunpey.c halleys.c highvdeo.c hitpoker.c hornet.c hotblock.c hotstuff.c hvyunit.c igs009.c igs011.c igs017.c igs_m027.c igspoker.c imolagp.c intrscti.c istellar.c jackie.c jackpool.c jalmah.c jangou.c jantotsu.c jokrwild.c jollyjgr.c jongkyo.c jpmsys5.c jubilee.c kas89.c kingdrby.c kingpin.c kinst.c koftball.c koikoi.c konamim2.c kongambl.c laserbas.c lastfght.c lgp.c limenko.c littlerb.c looping.c ltcasino.c luckgrln.c m14.c m63.c m79amb.c macs.c magic10.c magicard.c magicfly.c majorpkr.c marinedt.c mastboy.c maxaflex.c maygay1b.c maygayv1.c mayumi.c mazerbla.c meijinsn.c merit.c meritm.c mgolf.c midas.c mil4000.c miniboy7.c mirage.c mirax.c missile.c mjsister.c mlanding.c mogura.c mole.c monzagp.c mpoker.c mpu3.c multfish.c murogem.c mw18w.c mwarr.c namcos2.c namcos23.c neodrvr.c neoprint.c nexus3d.c nightgal.c nmg5.c nmk16.c nsmpoker.c nwk-tr.c nyny.c olibochu.c omegrace.c onetwo.c othello.c pachifev.c panicr.c paranoia.c pasha2.c pengadvb.c peplus.c peyper.c photon2.c pinkiri8.c pipeline.c pkscram.c poker72.c poo.c popobear.c ppmast93.c progolf.c psattack.c pturn.c pzletime.c quantum.c quizo.c quizpun2.c quizshow.c r2dtank.c r2dx_v33.c rabbit.c rbmk.c re900.c rmhaihai.c roul.c royalmah.c safarir.c sangho.c sbowling.c sbrkout.c sbugger.c segald.c sengokmj.c sfbonus.c sfkick.c shanghai.c shougi.c sigmab52.c sigmab98.c skeetsht.c skimaxx.c skyarmy.c skylncr.c sliver.c slotcarn.c sms.c sothello.c spaceg.c speglsht.c splus.c spoker.c spool99.c srmp5.c srmp6.c ssfindo.c sshot.c ssingles.c sstrangr.c statriv2.c sub.c subsino.c subsino2.c summit.c supdrapo.c superdq.c supertnk.c superwng.c suprgolf.c taitopjc.c taitotz.c tapatune.c tempest.c tgtpanic.c thayers.c tickee.c timetrv.c tmaster.c tmmjprd.c tmspoker.c tomcat.c tonton.c toratora.c tourvis.c trvmadns.c ttchamp.c tugboat.c twins.c uapce.c ultrsprt.c umipoker.c unkhorse.c vamphalf.c vcombat.c vegaeo.c videopkr.c vpoker.c vroulet.c wallc.c warpsped.c wheelfir.c wink.c witch.c wldarrow.c xtheball.c zr107.c
[src/mame/includes]neogeo.h nmk16.h
[src/mame/machine]cps2crpt.c neocrypt.c neoprot.c
[src/mame/video]nmk16.c

src/mame/mame.lst
r14845r14846
70157015kof99p         // 0251 (c) 1999 SNK
70167016ganryu         // 0252 (c) 1999 Visco
70177017garou         // 0253 (c) 1999 SNK
7018garouo         // 0253 (c) 1999 SNK
7018garouh         // 0253 (c) 1999 SNK
70197019garoup         // 0253 (c) 1999 SNK
70207020garoubl         // bootleg
70217021s1945p         // 0254 (c) 1999 Psikyo
src/mame/audio/gottlieb.c
r14845r14846
161161         }
162162
163163         mame_printf_debug("Votrax played '%s'\n", phonemes);
164         if (strcmp(phonemes, "[0] HEH3LOOW     AH1EH3I3YMTERI2NDAHN") == 0)     /* Q-Bert - Hello, I am turned on */
165            m_samples->start(0, 42);
164
165         if (strcmp(phonemes, "[0] HEH3LOOW     AH1EH3I3YMTERI2NDAHN") == 0)     /* Q-Bert & Tylz - Hello, I am turned on */
166                                m_samples->start(0, 42);
166167         else if (strcmp(phonemes, "[0]BAH1EH1Y") == 0)                       /* Q-Bert - Bye, bye */
167168            m_samples->start(0, 43);
168169         else if (strcmp(phonemes, "[0]A2YHT LEH2FTTH") == 0)                 /* Reactor - Eight left */
src/mame/machine/neoprot.c
r14845r14846
66        ssideki, fatfury2, kof98 (some versions), mslugx
77
88    SMA chip
9        kof99, garou, garouo, mslug3, kof2002
9        kof99, garou, garouh, mslug3, kof2002
1010
1111        custom banking, random number generator
1212        encryption (see machine/neocrypt.c)
r14845r14846
257257}
258258
259259
260static WRITE16_HANDLER( garouo_bankswitch_w )
260static WRITE16_HANDLER( garouh_bankswitch_w )
261261{
262262   /* thanks to Razoola and Mr K for the info */
263263   int bankaddress;
r14845r14846
428428}
429429
430430
431void garouo_install_protection( running_machine &machine )
431void garouh_install_protection( running_machine &machine )
432432{
433   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x2fffc0, 0x2fffc1, FUNC(garouo_bankswitch_w));
433   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x2fffc0, 0x2fffc1, FUNC(garouh_bankswitch_w));
434434   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x2fe446, 0x2fe447, FUNC(prot_9a37_r));
435435
436436   sma_install_random_read_handler(machine, 0x2fffcc, 0x2ffff0);
src/mame/machine/neocrypt.c
r14845r14846
2828
2929      kof98
3030        - unique early encryption
31      kof99, garou, garouo, mslug3, kof2000
31      kof99, garou, garouh, mslug3, kof2000
3232        - complex SMA chip which appears to contain part of the game rom
3333          internally and decrypts the 68k code on the board.  Also has a
3434          random number generator and  custom bankswitching
r14845r14846
10001000}
10011001
10021002
1003/* kof99, garou, garouo, mslug3 and kof2000 have and SMA chip which contains program code and decrypts the 68k roms */
1003/* kof99, garou, garouh, mslug3 and kof2000 have and SMA chip which contains program code and decrypts the 68k roms */
10041004void kof99_decrypt_68k(running_machine &machine)
10051005{
10061006   UINT16 *rom;
r14845r14846
10671067}
10681068
10691069
1070void garouo_decrypt_68k(running_machine &machine)
1070void garouh_decrypt_68k(running_machine &machine)
10711071{
10721072   UINT16 *rom;
10731073   int i,j;
src/mame/machine/cps2crpt.c
r14845r14846
973973   { "mpangj",   { 0x95f741c6,0xe547a21b }, 0x100000 },   // 0C84 347D 89A3  cmpi.l  #$347D89A3,D4
974974   { "pzloop2",  { 0xa054f812,0xc40d36b4 }, 0x400000 },   // 0C82 9A73 15F1  cmpi.l  #$9A7315F1,D2
975975   { "pzloop2j", { 0xa054f812,0xc40d36b4 }, 0x400000 },   // 0C82 9A73 15F1  cmpi.l  #$9A7315F1,D2
976   { "pzloop2jr1",{ 0xa054f812,0xc40d36b4 }, 0x400000 },   // 0C82 9A73 15F1  cmpi.l  #$9A7315F1,D2
976977   { "choko",    { 0xd3fb12c6,0x7f8e17b5 }, 0x400000 },   // 0C86 4D17 5B3C  cmpi.l  #$4D175B3C,D6
977978   { "dimahoo",  { 0x0ddb8e40,0x2817fd2b }, 0x080000 },   // BE4C B244 B6C5  cmp.w   A4,D7   cmp.w   D4,D1   cmpa.w  D5,A3
978979   { "dimahoou", { 0x6575af59,0xb0fea691 }, 0x080000 },   // BE4C B244 B6C5  cmp.w   A4,D7   cmp.w   D4,D1   cmpa.w  D5,A3
src/mame/includes/nmk16.h
r14845r14846
6767WRITE16_HANDLER( manybloc_scroll_w );
6868
6969VIDEO_START( macross );
70SCREEN_UPDATE_IND16( manybloc );
7170VIDEO_START( gunnail );
7271VIDEO_START( macross2 );
7372VIDEO_START( raphero );
7473VIDEO_START( bjtwin );
7574VIDEO_START( bioship );
7675VIDEO_START( strahl );
77SCREEN_UPDATE_IND16( bioship );
78SCREEN_UPDATE_IND16( strahl );
7976SCREEN_UPDATE_IND16( macross );
77SCREEN_UPDATE_IND16( manybloc );
78SCREEN_UPDATE_IND16( tharrier );
79SCREEN_UPDATE_IND16( tdragon2 );
8080SCREEN_UPDATE_IND16( gunnail );
81SCREEN_UPDATE_IND16( bioship );
82SCREEN_UPDATE_IND16( strahl );
8183SCREEN_UPDATE_IND16( bjtwin );
82SCREEN_UPDATE_IND16( tharrier );
83SCREEN_UPDATE_IND16( hachamf );
84SCREEN_UPDATE_IND16( tdragon );
8584SCREEN_VBLANK( nmk );
8685SCREEN_VBLANK( strahl );
8786
src/mame/includes/neogeo.h
r14845r14846
134134void neogeo_sfix_decrypt(running_machine &machine);
135135void kof99_decrypt_68k(running_machine &machine);
136136void garou_decrypt_68k(running_machine &machine);
137void garouo_decrypt_68k(running_machine &machine);
137void garouh_decrypt_68k(running_machine &machine);
138138void mslug3_decrypt_68k(running_machine &machine);
139139void kof2000_decrypt_68k(running_machine &machine);
140140void kof98_decrypt_68k(running_machine &machine);
r14845r14846
161161void mslugx_install_protection(running_machine &machine);
162162void kof99_install_protection(running_machine &machine);
163163void garou_install_protection(running_machine &machine);
164void garouo_install_protection(running_machine &machine);
164void garouh_install_protection(running_machine &machine);
165165void mslug3_install_protection(running_machine &machine);
166166void kof2000_install_protection(running_machine &machine);
167167void install_kof98_protection(running_machine &machine);
src/mame/video/nmk16.c
r14845r14846
521521  }
522522}
523523
524static void nmk16_draw_sprites2(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int *swaptbl)
524static void nmk16_draw_sprites_swap(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int *bittbl)
525525{
526526   nmk16_state *state = machine.driver_data<nmk16_state>();
527   int i, l, prio;
527   int i, prio;
528528
529  // Priority level (0x10 levels, 4 sub-levels, 0x10 sprites each)
530   for ( i = 0; i < 0x10; i++ )
531   {
532    // Sub-priority level (4 levels)
529   // Priority level (4 levels, 0x100 sprites)
533530    for ( prio = 3; prio >= 0; prio-- )
534531    {
535532      // Sprite
536      for ( l = 0; l < 0x10; l++ )
533      for ( i = 0; i < 0x100; i++ )
537534      {
538        nmk16_draw_sprite(state, machine, bitmap, cliprect, prio, state->m_spriteram_old2 + ((swaptbl[i] + l) * 8));
539      }
535         int spr = BITSWAP8(i, bittbl[0], bittbl[1], bittbl[2], bittbl[3], bittbl[4], bittbl[5], bittbl[6], bittbl[7]);
536         nmk16_draw_sprite(state, machine, bitmap, cliprect, prio, state->m_spriteram_old2 + (spr * 8));
540537    }
541538   }
542539}
543540
544static void nmk16_draw_sprites2_flipsupported(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int *swaptbl)
541static void nmk16_draw_sprites_swap_flipsupported(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int *bittbl)
545542{
546543   nmk16_state *state = machine.driver_data<nmk16_state>();
547   int i, l, prio;
544   int i, prio;
548545
549  // Priority level (0x10 levels, 4 sub-levels, 0x10 sprites each)
550   for ( i = 0; i < 0x10; i++ )
551   {
552    // Sub-priority level (4 levels)
546   // Priority level (4 levels, 0x100 sprites)
553547    for ( prio = 3; prio >= 0; prio-- )
554548    {
555549      // Sprite
556      for ( l = 0; l < 0x10; l++ )
550      for ( i = 0; i < 0x100; i++ )
557551      {
558        nmk16_draw_sprite_flipsupported(state, machine, bitmap, cliprect, prio, state->m_spriteram_old2 + ((swaptbl[i] + l) * 8));
559      }
552         int spr = BITSWAP8(i, bittbl[0], bittbl[1], bittbl[2], bittbl[3], bittbl[4], bittbl[5], bittbl[6], bittbl[7]);
553         nmk16_draw_sprite_flipsupported(state, machine, bitmap, cliprect, prio, state->m_spriteram_old2 + (spr * 16/2));
560554    }
561555   }
562556}
r14845r14846
586580   }
587581}
588582
589SCREEN_UPDATE_IND16( macross )
583/***************************************************************************
584
585
586                            Generic Screen Updates
587
588
589***************************************************************************/
590
591int nmk16_bg_spr_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
590592{
591593   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
592   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
594   state->m_bg_tilemap0->set_scrollx(0,-state->m_videoshift);
593595
594596   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
595597
596   static int macross_swaptbl[0x10] = {
597   0x00, 0x80, 0x20, 0xA0, 0x40, 0xC0, 0x60, 0xE0,
598   0x10, 0x90, 0x30, 0xB0, 0x50, 0xD0, 0x70, 0xF0,
599   };
600   nmk16_draw_sprites2(screen.machine(), bitmap,cliprect, macross_swaptbl);
601
602   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
598   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
599   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
600   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
601   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
603602   return 0;
604603}
605604
606SCREEN_UPDATE_IND16( tdragon )
605int nmk16_bg_fg_spr_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
607606{
608607   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
609//  mcu_run(screen.machine(), 1);
610
611608   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
612609
613610   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
611   state->m_fg_tilemap->draw(bitmap, cliprect, 0,0);
614612
615   // TODO: Fix this swap table; it's currently incorrect
616   static int tdragon_swaptbl[0x10] = {
617   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
618   0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
619   };
620   nmk16_draw_sprites2(screen.machine(), bitmap,cliprect, tdragon_swaptbl);
613   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
614   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
615   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
616   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
621617
622618   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
623619   return 0;
624620}
625621
626SCREEN_UPDATE_IND16( hachamf )
622int nmk16_bg_spr_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
627623{
628624   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
629//  mcu_run(screen.machine(), 0);
630
631625   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
632626
633627   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
634628
635   // TODO: Fix this swap table; it's currently incorrect
636   static int hachamf_swaptbl[0x10] = {
637   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
638   0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
639   };
640   nmk16_draw_sprites2(screen.machine(), bitmap,cliprect, hachamf_swaptbl);
641/*  nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
629   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
642630    nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
643631    nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
644    nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);*/
632   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
645633
646634   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
647635   return 0;
648636}
649637
650SCREEN_UPDATE_IND16( manybloc )
638int nmk16_bg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
651639{
652640   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
653641   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
r14845r14846
663651   return 0;
664652}
665653
666SCREEN_UPDATE_IND16( tharrier )
654int nmk16_bioshipbg_sprflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
667655{
668656   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
669   /* I think the protection device probably copies this to the regs... */
670   UINT16 tharrier_scroll = state->m_mainram[0x9f00/2];
657   UINT16 *tilerom = (UINT16 *)screen.machine().region("gfx5")->base();
658   int scrollx=-(state->m_bioship_scroll[1] + state->m_bioship_scroll[0]*256);
659   int scrolly=-(state->m_bioship_scroll[3] + state->m_bioship_scroll[2]*256);
671660
672661   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
673   state->m_bg_tilemap0->set_scrollx(0,tharrier_scroll);
662
663   if (state->m_redraw_bitmap)
664   {
665      int bank = state->m_bioship_background_bank * 0x2000;
666      int sx=0, sy=0, offs;
667      state->m_redraw_bitmap=0;
668
669      /* Draw background from tile rom */
670      for (offs = 0;offs <0x1000;offs++) {
671            UINT16 data = tilerom[offs+bank];
672            int numtile = data&0xfff;
673            int color = (data&0xf000)>>12;
674
675            drawgfx_opaque(*state->m_background_bitmap,state->m_background_bitmap->cliprect(),screen.machine().gfx[3],
676                  numtile,
677                  color,
678                  0,0,   /* no flip */
679                  16*sx,16*sy);
680
681            data = tilerom[offs+0x1000+bank];
682            numtile = data&0xfff;
683            color = (data&0xf000)>>12;
684            drawgfx_opaque(*state->m_background_bitmap,state->m_background_bitmap->cliprect(),screen.machine().gfx[3],
685                  numtile,
686                  color,
687                  0,0,   /* no flip */
688                  16*sx,(16*sy)+256);
689
690            sy++;
691            if (sy==16) {sy=0; sx++;}
692      }
693   }
694
695   copyscrollbitmap(bitmap,*state->m_background_bitmap,1,&scrollx,1,&scrolly,cliprect);
674696   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
675697
676   // TODO: Fix this swap table; it's currently incorrect
677   static int tharrier_swaptbl[0x10] = {
678   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
679   0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
680   };
681   nmk16_draw_sprites2_flipsupported(screen.machine(), bitmap,cliprect, tharrier_swaptbl);
698   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
699   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
700   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
701   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
682702
683703   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
684704   return 0;
685705}
686706
687SCREEN_UPDATE_IND16( gunnail )
707int nmk16_bg_sprswap_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8])
688708{
689709   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
690   int y1;
691   int i=16;
692   rectangle bgclip = cliprect;
710   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
693711
712   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
713
714   nmk16_draw_sprites_swap(screen.machine(), bitmap,cliprect, bittbl);
715
716   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
717   return 0;
718}
719
720int nmk16_bg_sprswapflip_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8])
721{
722   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
723   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
724
725   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
726
727   nmk16_draw_sprites_swap_flipsupported(screen.machine(), bitmap,cliprect, bittbl);
728
729   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
730   return 0;
731}
732
733int nmk16_complexbg_sprswap_tx_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bittbl[8])
734{
735   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
736   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
737
694738   // the hardware supports per-scanline X *and* Y scroll which isn't
695739   // supported by tilemaps so we have to draw the tilemap one line at a time
696   y1 = cliprect.min_y;
697
698740   if (!state->m_simple_scroll)
699741   {
742    int i=16;
743    int y1;
744    rectangle bgclip = cliprect;
745    y1 = cliprect.min_y;
700746      while (y1 <= cliprect.max_y)
701747      {
702748         int const yscroll = state->m_gunnail_scrollramy[0] + state->m_gunnail_scrollramy[y1];
r14845r14846
753799      bg_tilemap->draw(bitmap, cliprect, 0,0);
754800   }
755801
756   static int gunnail_swaptbl[0x10] = {
757   0x00, 0x80, 0x20, 0xA0, 0x40, 0xC0, 0x60, 0xE0,
758   0x10, 0x90, 0x30, 0xB0, 0x50, 0xD0, 0x70, 0xF0,
759   };
760   nmk16_draw_sprites2(screen.machine(), bitmap,cliprect, gunnail_swaptbl);
802   nmk16_draw_sprites_swap(screen.machine(), bitmap,cliprect, bittbl);
761803
762   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
763804   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
764805   return 0;
765806}
766807
767SCREEN_UPDATE_IND16( bioship )
768{
769   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
770   UINT16 *tilerom = (UINT16 *)screen.machine().region("gfx5")->base();
771   int scrollx=-(state->m_bioship_scroll[1] + state->m_bioship_scroll[0]*256);
772   int scrolly=-(state->m_bioship_scroll[3] + state->m_bioship_scroll[2]*256);
808/***************************************************************************
773809
774   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
775810
776   if (state->m_redraw_bitmap)
777   {
778      int bank = state->m_bioship_background_bank * 0x2000;
779      int sx=0, sy=0, offs;
780      state->m_redraw_bitmap=0;
811                            Screen update functions
781812
782      /* Draw background from tile rom */
783      for (offs = 0;offs <0x1000;offs++) {
784            UINT16 data = tilerom[offs+bank];
785            int numtile = data&0xfff;
786            int color = (data&0xf000)>>12;
787813
788            drawgfx_opaque(*state->m_background_bitmap,state->m_background_bitmap->cliprect(),screen.machine().gfx[3],
789                  numtile,
790                  color,
791                  0,0,   /* no flip */
792                  16*sx,16*sy);
814***************************************************************************/
793815
794            data = tilerom[offs+0x1000+bank];
795            numtile = data&0xfff;
796            color = (data&0xf000)>>12;
797            drawgfx_opaque(*state->m_background_bitmap,state->m_background_bitmap->cliprect(),screen.machine().gfx[3],
798                  numtile,
799                  color,
800                  0,0,   /* no flip */
801                  16*sx,(16*sy)+256);
816SCREEN_UPDATE_IND16( macross )
817{
818  return nmk16_bg_spr_tx_update(screen, bitmap, cliprect);
819}
802820
803            sy++;
804            if (sy==16) {sy=0; sx++;}
805      }
806   }
821SCREEN_UPDATE_IND16( manybloc )
822{
823  return nmk16_bg_sprflip_tx_update(screen, bitmap, cliprect);
824}
807825
808   copyscrollbitmap(bitmap,*state->m_background_bitmap,1,&scrollx,1,&scrolly,cliprect);
809   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
826SCREEN_UPDATE_IND16( tharrier )
827{
828   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
829   /* I think the protection device probably copies this to the regs... */
830   UINT16 tharrier_scroll = state->m_mainram[0x9f00/2];
810831
811   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
812   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
813   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
814   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
832   state->m_bg_tilemap0->set_scrollx(0,tharrier_scroll);
815833
816   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
817   return 0;
834  return nmk16_bg_sprflip_tx_update(screen, bitmap, cliprect);
818835}
819836
820SCREEN_UPDATE_IND16( strahl )
837SCREEN_UPDATE_IND16( tdragon2 )
821838{
822   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
823   state->m_tx_tilemap->set_scrollx(0,-state->m_videoshift);
839   static int bittbl[8] = {
840    4, 6, 5, 7, 3, 2, 1, 0
841   };
824842
825   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
826   state->m_fg_tilemap->draw(bitmap, cliprect, 0,0);
843  return nmk16_complexbg_sprswap_tx_update(screen, bitmap, cliprect, bittbl);
844}
827845
828   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
829   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
830   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
831   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
846SCREEN_UPDATE_IND16( gunnail )
847{
848   static int bittbl[8] = {
849    7, 6, 5, 4, 3, 2, 1, 0
850   };
832851
833   state->m_tx_tilemap->draw(bitmap, cliprect, 0,0);
834   return 0;
852  return nmk16_complexbg_sprswap_tx_update(screen, bitmap, cliprect, bittbl);
835853}
836854
837SCREEN_UPDATE_IND16( bjtwin )
855SCREEN_UPDATE_IND16( bioship )
838856{
839   nmk16_state *state = screen.machine().driver_data<nmk16_state>();
840   state->m_bg_tilemap0->set_scrollx(0,-state->m_videoshift);
857  return nmk16_bioshipbg_sprflip_tx_update(screen, bitmap, cliprect);
858}
841859
842   state->m_bg_tilemap0->draw(bitmap, cliprect, 0,0);
860SCREEN_UPDATE_IND16( strahl )
861{
862  return nmk16_bg_fg_spr_tx_update(screen, bitmap, cliprect);
863}
843864
844   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,3);
845   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,2);
846   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,1);
847   nmk16_draw_sprites(screen.machine(), bitmap,cliprect,0);
848
849   return 0;
865SCREEN_UPDATE_IND16( bjtwin )
866{
867  return nmk16_bg_spr_update(screen, bitmap, cliprect);
850868}
851869
852870SCREEN_VBLANK( nmk )
src/mame/drivers/bfcobra.c
r14845r14846
271271   struct blitter_t m_blitter;
272272   struct ramdac_t m_ramdac;
273273   struct fdc_t m_fdc;
274   DECLARE_READ8_MEMBER(ramdac_r);
275   DECLARE_WRITE8_MEMBER(ramdac_w);
276   DECLARE_READ8_MEMBER(chipset_r);
277   DECLARE_WRITE8_MEMBER(chipset_w);
278   DECLARE_WRITE8_MEMBER(rombank_w);
279   DECLARE_READ8_MEMBER(fdctrl_r);
280   DECLARE_READ8_MEMBER(fddata_r);
281   DECLARE_WRITE8_MEMBER(fdctrl_w);
282   DECLARE_READ8_MEMBER(int_latch_r);
283   DECLARE_READ8_MEMBER(meter_r);
284   DECLARE_WRITE8_MEMBER(meter_w);
285   DECLARE_READ8_MEMBER(latch_r);
286   DECLARE_WRITE8_MEMBER(latch_w);
274287};
275288
276289
r14845r14846
718731}
719732
720733
721static READ8_HANDLER( ramdac_r )
734READ8_MEMBER(bfcobra_state::ramdac_r)
722735{
723   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
724   struct ramdac_t &ramdac = state->m_ramdac;
736   struct ramdac_t &ramdac = m_ramdac;
725737   UINT8 val = 0xff;
726738
727739   switch (offset & 3)
r14845r14846
733745         if (*count == 0)
734746         {
735747            rgb_t color;
736            color = palette_get_color(space->machine(), ramdac.addr_r);
748            color = palette_get_color(machine(), ramdac.addr_r);
737749
738750            ramdac.color_r[0] = RGB_RED(color);
739751            ramdac.color_r[1] = RGB_GREEN(color);
r14845r14846
754766      }
755767      default:
756768      {
757         mame_printf_debug("Unhandled RAMDAC read (PC:%.4x)\n", cpu_get_previouspc(&space->device()));
769         mame_printf_debug("Unhandled RAMDAC read (PC:%.4x)\n", cpu_get_previouspc(&space.device()));
758770      }
759771   }
760772
761773   return val;
762774}
763775
764static WRITE8_HANDLER( ramdac_w )
776WRITE8_MEMBER(bfcobra_state::ramdac_w)
765777{
766   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
767   struct ramdac_t &ramdac = state->m_ramdac;
778   struct ramdac_t &ramdac = m_ramdac;
768779
769780   switch (offset & 3)
770781   {
r14845r14846
779790         ramdac.color_w[ramdac.count_w] = pal6bit(data);
780791         if (++ramdac.count_w == 3)
781792         {
782            palette_set_color_rgb(space->machine(), ramdac.addr_w, ramdac.color_w[0], ramdac.color_w[1], ramdac.color_w[2]);
793            palette_set_color_rgb(machine(), ramdac.addr_w, ramdac.color_w[0], ramdac.color_w[1], ramdac.color_w[2]);
783794            ramdac.count_w = 0;
784795            ramdac.addr_w++;
785796         }
r14845r14846
859870   }
860871}
861872
862static READ8_HANDLER( chipset_r )
873READ8_MEMBER(bfcobra_state::chipset_r)
863874{
864   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
865875   UINT8 val = 0xff;
866876
867877   switch(offset)
r14845r14846
870880      case 2:
871881      case 3:
872882      {
873         val = state->m_bank_data[offset];
883         val = m_bank_data[offset];
874884         break;
875885      }
876886      case 6:
877887      {
878888         /* TODO */
879         val = state->m_vblank_irq << 4;
889         val = m_vblank_irq << 4;
880890         break;
881891      }
882892      case 7:
883893      {
884         state->m_vblank_irq = 0;
894         m_vblank_irq = 0;
885895         val = 0x1;
886896
887897         /* TODO */
888         update_irqs(space->machine());
898         update_irqs(machine());
889899         break;
890900      }
891901      case 0x1C:
r14845r14846
897907      case 0x20:
898908      {
899909         /* Seems correct - used during RLE pic decoding */
900         val = state->m_blitter.dest.addr0;
910         val = m_blitter.dest.addr0;
901911         break;
902912      }
903913      case 0x22:
904914      {
905         val = 0x40 | input_port_read(space->machine(), "JOYSTICK");
915         val = 0x40 | input_port_read(machine(), "JOYSTICK");
906916         break;
907917      }
908918      default:
909919      {
910         mame_printf_debug("Flare One unknown read: 0x%.2x (PC:0x%.4x)\n", offset, cpu_get_previouspc(&space->device()));
920         mame_printf_debug("Flare One unknown read: 0x%.2x (PC:0x%.4x)\n", offset, cpu_get_previouspc(&space.device()));
911921      }
912922   }
913923
914924   return val;
915925}
916926
917static WRITE8_HANDLER( chipset_w )
927WRITE8_MEMBER(bfcobra_state::chipset_w)
918928{
919   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
920929   switch (offset)
921930   {
922931      case 0x01:
r14845r14846
924933      case 0x03:
925934      {
926935         if (data > 0x3f)
927            popmessage("%x: Unusual bank access (%x)\n", cpu_get_previouspc(&space->device()), data);
936            popmessage("%x: Unusual bank access (%x)\n", cpu_get_previouspc(&space.device()), data);
928937
929938         data &= 0x3f;
930         state->m_bank_data[offset] = data;
931         z80_bank(space->machine(), offset, data);
939         m_bank_data[offset] = data;
940         z80_bank(machine(), offset, data);
932941         break;
933942      }
934943
935944      case 0x08:
936945      {
937         state->m_flip_8 = data;
946         m_flip_8 = data;
938947         break;
939948      }
940949      case 9:
941         state->m_videomode = data;
950         m_videomode = data;
942951         break;
943952
944953      case 0x0B:
945954      {
946         state->m_h_scroll = data;
955         m_h_scroll = data;
947956         break;
948957      }
949958      case 0x0C:
950959      {
951         state->m_v_scroll = data;
960         m_v_scroll = data;
952961         break;
953962      }
954963      case 0x0E:
955964      {
956         state->m_col4bit[5] = data;
957         state->m_col3bit[5] = data;
958         state->m_col3bit[5 + 8] = data;
965         m_col4bit[5] = data;
966         m_col3bit[5] = data;
967         m_col3bit[5 + 8] = data;
959968         break;
960969      }
961970      case 0x0f:
962971      {
963         state->m_col4bit[6] = data;
964         state->m_col3bit[6] = data;
965         state->m_col3bit[6 + 8] = data;
972         m_col4bit[6] = data;
973         m_col3bit[6] = data;
974         m_col3bit[6 + 8] = data;
966975         break;
967976      }
968977      case 0x18:
969978      {
970         state->m_blitter.program.addr0 = data;
979         m_blitter.program.addr0 = data;
971980         break;
972981      }
973982      case 0x19:
974983      {
975         state->m_blitter.program.addr1 = data;
984         m_blitter.program.addr1 = data;
976985         break;
977986      }
978987      case 0x1A:
979988      {
980         state->m_blitter.program.addr2 = data;
989         m_blitter.program.addr2 = data;
981990         break;
982991      }
983992      case 0x20:
984993      {
985         state->m_blitter.command = data;
994         m_blitter.command = data;
986995
987996         if (data & CMD_RUN)
988            RunBlit(space);
997            RunBlit(&space);
989998         else
990999            mame_printf_debug("Blitter stopped by IO.\n");
9911000
r14845r14846
9931002      }
9941003      case 0x22:
9951004      {
996         state->m_flip_22 = data;
1005         m_flip_22 = data;
9971006         break;
9981007      }
9991008      default:
10001009      {
1001         mame_printf_debug("Flare One unknown write: 0x%.2x with 0x%.2x (PC:0x%.4x)\n", offset, data, cpu_get_previouspc(&space->device()));
1010         mame_printf_debug("Flare One unknown write: 0x%.2x with 0x%.2x (PC:0x%.4x)\n", offset, data, cpu_get_previouspc(&space.device()));
10021011      }
10031012   }
10041013}
r14845r14846
10241033   }
10251034}
10261035
1027static WRITE8_HANDLER( rombank_w )
1036WRITE8_MEMBER(bfcobra_state::rombank_w)
10281037{
1029   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
1030   state->m_bank_data[0] = data;
1031   z80_bank(space->machine(), 1, state->m_bank_data[1]);
1032   z80_bank(space->machine(), 2, state->m_bank_data[2]);
1033   z80_bank(space->machine(), 3, state->m_bank_data[3]);
1038   m_bank_data[0] = data;
1039   z80_bank(machine(), 1, m_bank_data[1]);
1040   z80_bank(machine(), 2, m_bank_data[2]);
1041   z80_bank(machine(), 3, m_bank_data[3]);
10341042}
10351043
10361044
r14845r14846
10881096   state->m_fdc.phase = COMMAND;
10891097}
10901098
1091static READ8_HANDLER( fdctrl_r )
1099READ8_MEMBER(bfcobra_state::fdctrl_r)
10921100{
1093   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
10941101   UINT8 val = 0;
10951102
1096   val = state->m_fdc.MSR;
1103   val = m_fdc.MSR;
10971104
10981105   return val;
10991106}
11001107
1101static READ8_HANDLER( fddata_r )
1108READ8_MEMBER(bfcobra_state::fddata_r)
11021109{
1103   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
1104   struct fdc_t &fdc = state->m_fdc;
1110   struct fdc_t &fdc = m_fdc;
11051111   #define   BPS      1024
11061112   #define SPT      10
11071113   #define BPT      1024*10
r14845r14846
11301136            }
11311137
11321138            fdc.offset = (BPT * fdc.track*2) + (fdc.side ? BPT : 0) + (BPS * (fdc.sector-1)) + fdc.byte_pos++;
1133            val = *(space->machine().region("user2")->base() + fdc.offset);
1139            val = *(machine().region("user2")->base() + fdc.offset);
11341140
11351141            /* Move on to next sector? */
11361142            if (fdc.byte_pos == 1024)
r14845r14846
11721178   return val;
11731179}
11741180
1175static WRITE8_HANDLER( fdctrl_w )
1181WRITE8_MEMBER(bfcobra_state::fdctrl_w)
11761182{
1177   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
1178   struct fdc_t &fdc = state->m_fdc;
1183   struct fdc_t &fdc = m_fdc;
11791184   switch (fdc.phase)
11801185   {
11811186      case COMMAND:
r14845r14846
13341339
13351340static ADDRESS_MAP_START( z80_io_map, AS_IO, 8, bfcobra_state )
13361341ADDRESS_MAP_GLOBAL_MASK(0xff)
1337   AM_RANGE(0x00, 0x23) AM_READWRITE_LEGACY(chipset_r, chipset_w)
1342   AM_RANGE(0x00, 0x23) AM_READWRITE(chipset_r, chipset_w)
13381343   AM_RANGE(0x24, 0x24) AM_DEVWRITE("acia6850_0", acia6850_device, control_write)
13391344   AM_RANGE(0x25, 0x25) AM_DEVWRITE("acia6850_0", acia6850_device, data_write)
13401345   AM_RANGE(0x26, 0x26) AM_DEVREAD("acia6850_0", acia6850_device, status_read)
13411346   AM_RANGE(0x27, 0x27) AM_DEVREAD("acia6850_0", acia6850_device, data_read)
1342   AM_RANGE(0x30, 0x30) AM_READ_LEGACY(fdctrl_r)
1343   AM_RANGE(0x31, 0x31) AM_READWRITE_LEGACY(fddata_r, fdctrl_w)
1344   AM_RANGE(0x40, 0x40) AM_WRITE_LEGACY(rombank_w)
1345   AM_RANGE(0x50, 0x53) AM_READWRITE_LEGACY(ramdac_r, ramdac_w)
1347   AM_RANGE(0x30, 0x30) AM_READ(fdctrl_r)
1348   AM_RANGE(0x31, 0x31) AM_READWRITE(fddata_r, fdctrl_w)
1349   AM_RANGE(0x40, 0x40) AM_WRITE(rombank_w)
1350   AM_RANGE(0x50, 0x53) AM_READWRITE(ramdac_r, ramdac_w)
13461351ADDRESS_MAP_END
13471352
13481353
r14845r14846
13681373***************************************************************************/
13691374
13701375/* TODO */
1371static READ8_HANDLER( int_latch_r )
1376READ8_MEMBER(bfcobra_state::int_latch_r)
13721377{
13731378   return 2 | 1;
13741379}
13751380
13761381/* TODO */
1377static READ8_HANDLER( meter_r )
1382READ8_MEMBER(bfcobra_state::meter_r)
13781383{
1379   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
1380   return state->m_meter_latch;
1384   return m_meter_latch;
13811385}
13821386
13831387/* TODO: This is borrowed from Scorpion 1 */
1384static WRITE8_HANDLER( meter_w )
1388WRITE8_MEMBER(bfcobra_state::meter_w)
13851389{
1386   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
13871390   int i;
1388   int  changed = state->m_meter_latch ^ data;
1391   int  changed = m_meter_latch ^ data;
13891392
1390   state->m_meter_latch = data;
1393   m_meter_latch = data;
13911394
13921395   /*
13931396        When a meter is triggered, the current drawn is sensed. If a meter
r14845r14846
13981401      if (changed & (1 << i))
13991402      {
14001403         MechMtr_update(i, data & (1 << i) );
1401         generic_pulse_irq_line(&space->device(), M6809_FIRQ_LINE, 1);
1404         generic_pulse_irq_line(&space.device(), M6809_FIRQ_LINE, 1);
14021405      }
14031406   }
14041407}
14051408
14061409/* TODO */
1407static READ8_HANDLER( latch_r )
1410READ8_MEMBER(bfcobra_state::latch_r)
14081411{
1409   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
1410   return state->m_mux_input;
1412   return m_mux_input;
14111413}
14121414
1413static WRITE8_HANDLER( latch_w )
1415WRITE8_MEMBER(bfcobra_state::latch_w)
14141416{
1415   bfcobra_state *state = space->machine().driver_data<bfcobra_state>();
14161417   /* TODO: This is borrowed from Scorpion 1 */
14171418   switch(offset)
14181419   {
14191420      case 0:
14201421      {
1421         int changed = state->m_mux_outputlatch ^ data;
1422         int changed = m_mux_outputlatch ^ data;
14221423         static const char *const port[] = { "STROBE0", "STROBE1", "STROBE2", "STROBE3", "STROBE4", "STROBE5", "STROBE6", "STROBE7" };
14231424
1424         state->m_mux_outputlatch = data;
1425         m_mux_outputlatch = data;
14251426
14261427         /* Clock has changed */
14271428         if (changed & 0x08)
r14845r14846
14301431
14311432            /* Clock is low */
14321433            if (!(data & 0x08))
1433               state->m_mux_input = input_port_read(space->machine(), port[input_strobe]);
1434               m_mux_input = input_port_read(machine(), port[input_strobe]);
14341435         }
14351436         break;
14361437      }
r14845r14846
14631464   AM_RANGE(0x0000, 0x1fff) AM_RAM   AM_SHARE("nvram")
14641465   AM_RANGE(0x2000, 0x2000) AM_RAM      // W 'B', 6F
14651466   AM_RANGE(0x2200, 0x2200) AM_RAM      // W 'F'
1466   AM_RANGE(0x2600, 0x2600) AM_READWRITE_LEGACY(meter_r, meter_w)
1467   AM_RANGE(0x2600, 0x2600) AM_READWRITE(meter_r, meter_w)
14671468   AM_RANGE(0x2800, 0x2800) AM_RAM      // W
1468   AM_RANGE(0x2A00, 0x2A02) AM_READWRITE_LEGACY(latch_r, latch_w)
1469   AM_RANGE(0x2E00, 0x2E00) AM_READ_LEGACY(int_latch_r)
1469   AM_RANGE(0x2A00, 0x2A02) AM_READWRITE(latch_r, latch_w)
1470   AM_RANGE(0x2E00, 0x2E00) AM_READ(int_latch_r)
14701471   AM_RANGE(0x3001, 0x3001) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
14711472   AM_RANGE(0x3201, 0x3201) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
14721473   AM_RANGE(0x3404, 0x3404) AM_DEVREADWRITE("acia6850_1", acia6850_device, status_read, control_write)
src/mame/drivers/sbugger.c
r14845r14846
9999
100100#include "emu.h"
101101#include "cpu/i8085/i8085.h"
102#include "machine/i8155.h"
102103#include "sound/sn76496.h"
103104#include "includes/sbugger.h"
104105
105//arbitrary
106#define NUM_INTS_FRAME 24
107106
108
109107/* memory maps */
110108
111109static ADDRESS_MAP_START( sbugger_map, AS_PROGRAM, 8, sbugger_state )
112110   AM_RANGE(0x0000, 0x37ff) AM_ROM
113111   AM_RANGE(0xc800, 0xcbff) AM_RAM_WRITE_LEGACY(sbugger_videoram_attr_w) AM_BASE(m_videoram_attr)
114112   AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE_LEGACY(sbugger_videoram_w) AM_BASE(m_videoram)
115   AM_RANGE(0xe000, 0xe0ff) AM_RAM /* sp is set to e0ff */
113   AM_RANGE(0xe000, 0xe0ff) AM_DEVREADWRITE("i8156", i8155_device, memory_r, memory_w) /* sp is set to e0ff */
116114   AM_RANGE(0xf400, 0xffff) AM_RAM
117115ADDRESS_MAP_END
118116
119117static ADDRESS_MAP_START( sbugger_io_map, AS_IO, 8, sbugger_state )
120   AM_RANGE(0xe0, 0xe0) AM_WRITENOP            // 8156 command/status reg (write c0 = command START = (start of timer)
121   AM_RANGE(0xe1, 0xe1) AM_READ_PORT("INPUTS")      // 8156 PA
122   AM_RANGE(0xe2, 0xe2) AM_READ_PORT("DSW1")      // 8156 PB
123   AM_RANGE(0xe3, 0xe3) AM_READ_PORT("DSW2")      // 8156 PC = 6 bit ! //2 bits tested af f4c6
124   AM_RANGE(0xe4, 0xe4) AM_WRITENOP            // 8156 timer reg1 (write 7f = CNT length)
125   AM_RANGE(0xe5, 0xe5) AM_WRITENOP            // 8156 timer reg2 (write c0 = timer mode - automatic reload, i.e. single pulse every time TC is reached)
126
118   AM_RANGE(0xe0, 0xe7) AM_DEVREADWRITE("i8156", i8155_device, io_r, io_w)
127119   AM_RANGE(0xe8, 0xe8) AM_DEVWRITE_LEGACY("sn76489.1", sn76496_w)
128120   AM_RANGE(0xe9, 0xe9) AM_DEVWRITE_LEGACY("sn76489.2", sn76496_w)
129121ADDRESS_MAP_END
130122
123
131124/* gfx decode */
132125
133126static const gfx_layout char16layout =
r14845r14846
147140   GFXDECODE_ENTRY( "gfx1", 0, char16layout,   0, 1  )
148141GFXDECODE_END
149142
143
150144/* input ports */
151145
152146static INPUT_PORTS_START( sbugger )
r14845r14846
209203   PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
210204INPUT_PORTS_END
211205
206
212207/* machine driver */
213208
209static WRITE_LINE_DEVICE_HANDLER(sbugger_interrupt)
210{
211   cputag_set_input_line(device->machine(), "maincpu", I8085_RST75_LINE, state ? CLEAR_LINE : ASSERT_LINE );
212}
213
214static I8156_INTERFACE(i8156_intf)
215{
216   // all ports set to input
217   DEVCB_INPUT_PORT("INPUTS"),
218   DEVCB_NULL,
219   DEVCB_INPUT_PORT("DSW1"),
220   DEVCB_NULL,
221   DEVCB_INPUT_PORT("DSW2"),
222   DEVCB_NULL,
223   DEVCB_LINE(sbugger_interrupt)
224};
225
214226static MACHINE_CONFIG_START( sbugger, sbugger_state )
215227
216228   MCFG_CPU_ADD("maincpu", I8085A, 6000000)        /* 3.00 MHz??? */
217229   MCFG_CPU_PROGRAM_MAP(sbugger_map)
218230   MCFG_CPU_IO_MAP(sbugger_io_map)
219   MCFG_CPU_PERIODIC_INT(irq3_line_hold,NUM_INTS_FRAME*60)
231   MCFG_I8156_ADD("i8156", 200000, i8156_intf)      /* freq is an approximation */
220232
221233   MCFG_GFXDECODE(sbugger)
222234
223
224235   MCFG_SCREEN_ADD("screen", RASTER)
225236   MCFG_SCREEN_REFRESH_RATE(60)
226237   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
r14845r14846
244255
245256MACHINE_CONFIG_END
246257
258
247259/* rom loading */
248260
249261ROM_START( sbugger )
r14845r14846
275287   ROM_LOAD( "spbugger.gfx", 0x0000, 0x1000, CRC(d3f345b5) SHA1(a5082ffc3043352e9b731af95770bdd62fb928bf) )
276288ROM_END
277289
278GAME( 1981, sbugger,  0,        sbugger,  sbugger,  0, ROT270, "Game-A-Tron", "Space Bugger (set 1)", GAME_NOT_WORKING )
290GAME( 1981, sbugger,  0,        sbugger,  sbugger,  0, ROT270, "Game-A-Tron", "Space Bugger (set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_COLORS )
279291GAME( 1981, sbuggera, sbugger,  sbugger,  sbugger,  0, ROT270, "Game-A-Tron", "Space Bugger (set 2)", GAME_IMPERFECT_COLORS )
src/mame/drivers/mgolf.c
r14845r14846
2727
2828   /* devices */
2929   device_t *m_maincpu;
30   DECLARE_WRITE8_MEMBER(mgolf_vram_w);
31   DECLARE_READ8_MEMBER(mgolf_wram_r);
32   DECLARE_READ8_MEMBER(mgolf_dial_r);
33   DECLARE_READ8_MEMBER(mgolf_misc_r);
34   DECLARE_WRITE8_MEMBER(mgolf_wram_w);
3035};
3136
3237
r14845r14846
3944}
4045
4146
42static WRITE8_HANDLER( mgolf_vram_w )
47WRITE8_MEMBER(mgolf_state::mgolf_vram_w)
4348{
44   mgolf_state *state = space->machine().driver_data<mgolf_state>();
45   state->m_video_ram[offset] = data;
46   state->m_bg_tilemap->mark_tile_dirty(offset);
49   m_video_ram[offset] = data;
50   m_bg_tilemap->mark_tile_dirty(offset);
4751}
4852
4953
r14845r14846
130134}
131135
132136
133static READ8_HANDLER( mgolf_wram_r )
137READ8_MEMBER(mgolf_state::mgolf_wram_r)
134138{
135   mgolf_state *state = space->machine().driver_data<mgolf_state>();
136   return state->m_video_ram[0x380 + offset];
139   return m_video_ram[0x380 + offset];
137140}
138141
139142
140static READ8_HANDLER( mgolf_dial_r )
143READ8_MEMBER(mgolf_state::mgolf_dial_r)
141144{
142   UINT8 val = input_port_read(space->machine(), "41");
145   UINT8 val = input_port_read(machine(), "41");
143146
144   if ((input_port_read(space->machine(), "DIAL") + 0x00) & 0x20)
147   if ((input_port_read(machine(), "DIAL") + 0x00) & 0x20)
145148   {
146149      val |= 0x01;
147150   }
148   if ((input_port_read(space->machine(), "DIAL") + 0x10) & 0x20)
151   if ((input_port_read(machine(), "DIAL") + 0x10) & 0x20)
149152   {
150153      val |= 0x02;
151154   }
r14845r14846
154157}
155158
156159
157static READ8_HANDLER( mgolf_misc_r )
160READ8_MEMBER(mgolf_state::mgolf_misc_r)
158161{
159   double plunger = calc_plunger_pos(space->machine()); /* see Video Pinball */
162   double plunger = calc_plunger_pos(machine()); /* see Video Pinball */
160163
161   UINT8 val = input_port_read(space->machine(), "61");
164   UINT8 val = input_port_read(machine(), "61");
162165
163166   if (plunger >= 0.000 && plunger <= 0.001)
164167   {
r14845r14846
173176}
174177
175178
176static WRITE8_HANDLER( mgolf_wram_w )
179WRITE8_MEMBER(mgolf_state::mgolf_wram_w)
177180{
178   mgolf_state *state = space->machine().driver_data<mgolf_state>();
179   state->m_video_ram[0x380 + offset] = data;
181   m_video_ram[0x380 + offset] = data;
180182}
181183
182184
r14845r14846
185187   ADDRESS_MAP_GLOBAL_MASK(0x3fff)
186188
187189   AM_RANGE(0x0040, 0x0040) AM_READ_PORT("40")
188   AM_RANGE(0x0041, 0x0041) AM_READ_LEGACY(mgolf_dial_r)
190   AM_RANGE(0x0041, 0x0041) AM_READ(mgolf_dial_r)
189191   AM_RANGE(0x0060, 0x0060) AM_READ_PORT("60")
190   AM_RANGE(0x0061, 0x0061) AM_READ_LEGACY(mgolf_misc_r)
191   AM_RANGE(0x0080, 0x00ff) AM_READ_LEGACY(mgolf_wram_r)
192   AM_RANGE(0x0180, 0x01ff) AM_READ_LEGACY(mgolf_wram_r)
192   AM_RANGE(0x0061, 0x0061) AM_READ(mgolf_misc_r)
193   AM_RANGE(0x0080, 0x00ff) AM_READ(mgolf_wram_r)
194   AM_RANGE(0x0180, 0x01ff) AM_READ(mgolf_wram_r)
193195   AM_RANGE(0x0800, 0x0bff) AM_READONLY
194196
195197   AM_RANGE(0x0000, 0x0009) AM_WRITENOP
r14845r14846
203205   AM_RANGE(0x006a, 0x006a) AM_WRITENOP
204206   AM_RANGE(0x006c, 0x006c) AM_WRITENOP
205207   AM_RANGE(0x006d, 0x006d) AM_WRITENOP
206   AM_RANGE(0x0080, 0x00ff) AM_WRITE_LEGACY(mgolf_wram_w)
207   AM_RANGE(0x0180, 0x01ff) AM_WRITE_LEGACY(mgolf_wram_w)
208   AM_RANGE(0x0800, 0x0bff) AM_WRITE_LEGACY(mgolf_vram_w) AM_BASE(m_video_ram)
208   AM_RANGE(0x0080, 0x00ff) AM_WRITE(mgolf_wram_w)
209   AM_RANGE(0x0180, 0x01ff) AM_WRITE(mgolf_wram_w)
210   AM_RANGE(0x0800, 0x0bff) AM_WRITE(mgolf_vram_w) AM_BASE(m_video_ram)
209211
210212   AM_RANGE(0x2000, 0x3fff) AM_ROM
211213ADDRESS_MAP_END
src/mame/drivers/pasha2.c
r14845r14846
9393   /* memory */
9494   UINT16       m_bitmap0[0x40000/2];
9595   UINT16       m_bitmap1[0x40000/2];
96   DECLARE_WRITE16_MEMBER(pasha2_misc_w);
97   DECLARE_WRITE16_MEMBER(pasha2_palette_w);
98   DECLARE_WRITE16_MEMBER(vbuffer_set_w);
99   DECLARE_WRITE16_MEMBER(vbuffer_clear_w);
100   DECLARE_WRITE16_MEMBER(bitmap_0_w);
101   DECLARE_WRITE16_MEMBER(bitmap_1_w);
102   DECLARE_WRITE16_MEMBER(pasha2_lamps_w);
103   DECLARE_READ16_MEMBER(pasha2_speedup_r);
96104};
97105
98106
99static WRITE16_HANDLER( pasha2_misc_w )
107WRITE16_MEMBER(pasha2_state::pasha2_misc_w)
100108{
101   pasha2_state *state = space->machine().driver_data<pasha2_state>();
102109
103110   if (offset)
104111   {
r14845r14846
106113      {
107114         int bank = data & 0xf000;
108115
109         if (bank != state->m_old_bank)
116         if (bank != m_old_bank)
110117         {
111            state->m_old_bank = bank;
118            m_old_bank = bank;
112119
113120            switch (bank)
114121            {
r14845r14846
118125               case 0xb000:
119126               case 0xc000:
120127               case 0xd000:
121                  memory_set_bankptr(space->machine(), "bank1", space->machine().region("user2")->base() + 0x400 * (bank - 0x8000)); break;
128                  memory_set_bankptr(machine(), "bank1", machine().region("user2")->base() + 0x400 * (bank - 0x8000)); break;
122129            }
123130         }
124131      }
125132   }
126133}
127134
128static WRITE16_HANDLER( pasha2_palette_w )
135WRITE16_MEMBER(pasha2_state::pasha2_palette_w)
129136{
130   pasha2_state *state = space->machine().driver_data<pasha2_state>();
131137   int color;
132138
133   COMBINE_DATA(&state->m_paletteram[offset]);
139   COMBINE_DATA(&m_paletteram[offset]);
134140
135141   offset &= 0xff;
136142
137   color = (state->m_paletteram[offset] >> 8) | (state->m_paletteram[offset + 0x100] & 0xff00);
138   palette_set_color_rgb(space->machine(), offset * 2 + 0, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
143   color = (m_paletteram[offset] >> 8) | (m_paletteram[offset + 0x100] & 0xff00);
144   palette_set_color_rgb(machine(), offset * 2 + 0, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
139145
140   color = (state->m_paletteram[offset] & 0xff) | ((state->m_paletteram[offset + 0x100] & 0xff) << 8);
141   palette_set_color_rgb(space->machine(), offset * 2 + 1, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
146   color = (m_paletteram[offset] & 0xff) | ((m_paletteram[offset + 0x100] & 0xff) << 8);
147   palette_set_color_rgb(machine(), offset * 2 + 1, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
142148}
143149
144static WRITE16_HANDLER( vbuffer_set_w )
150WRITE16_MEMBER(pasha2_state::vbuffer_set_w)
145151{
146   pasha2_state *state = space->machine().driver_data<pasha2_state>();
147   state->m_vbuffer = 1;
152   m_vbuffer = 1;
148153}
149154
150static WRITE16_HANDLER( vbuffer_clear_w )
155WRITE16_MEMBER(pasha2_state::vbuffer_clear_w)
151156{
152   pasha2_state *state = space->machine().driver_data<pasha2_state>();
153   state->m_vbuffer = 0;
157   m_vbuffer = 0;
154158}
155159
156static WRITE16_HANDLER( bitmap_0_w )
160WRITE16_MEMBER(pasha2_state::bitmap_0_w)
157161{
158   pasha2_state *state = space->machine().driver_data<pasha2_state>();
159   COMBINE_DATA(&state->m_bitmap0[offset + state->m_vbuffer * 0x20000 / 2]);
162   COMBINE_DATA(&m_bitmap0[offset + m_vbuffer * 0x20000 / 2]);
160163}
161164
162static WRITE16_HANDLER( bitmap_1_w )
165WRITE16_MEMBER(pasha2_state::bitmap_1_w)
163166{
164   pasha2_state *state = space->machine().driver_data<pasha2_state>();
165167
166168   // handle overlapping pixels without writing them
167169   switch (mem_mask)
r14845r14846
182184      break;
183185   }
184186
185   COMBINE_DATA(&state->m_bitmap1[offset + state->m_vbuffer * 0x20000 / 2]);
187   COMBINE_DATA(&m_bitmap1[offset + m_vbuffer * 0x20000 / 2]);
186188}
187189
188190static WRITE16_DEVICE_HANDLER( oki_bank_w )
r14845r14846
191193      downcast<okim6295_device *>(device)->set_bank_base((data & 1) * 0x40000);
192194}
193195
194static WRITE16_HANDLER( pasha2_lamps_w )
196WRITE16_MEMBER(pasha2_state::pasha2_lamps_w)
195197{
196198   if (data)
197199      popmessage("1P: %c%c%c 2P: %c%c%c 3P: %c%c%c",
r14845r14846
208210
209211static ADDRESS_MAP_START( pasha2_map, AS_PROGRAM, 16, pasha2_state )
210212   AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE(m_wram)
211   AM_RANGE(0x40000000, 0x4001ffff) AM_RAM_WRITE_LEGACY(bitmap_0_w)
212   AM_RANGE(0x40020000, 0x4003ffff) AM_RAM_WRITE_LEGACY(bitmap_1_w)
213   AM_RANGE(0x40000000, 0x4001ffff) AM_RAM_WRITE(bitmap_0_w)
214   AM_RANGE(0x40020000, 0x4003ffff) AM_RAM_WRITE(bitmap_1_w)
213215   AM_RANGE(0x40060000, 0x40060001) AM_WRITENOP
214216   AM_RANGE(0x40064000, 0x40064001) AM_WRITENOP
215217   AM_RANGE(0x40068000, 0x40068001) AM_WRITENOP
216218   AM_RANGE(0x4006c000, 0x4006c001) AM_WRITENOP
217   AM_RANGE(0x40070000, 0x40070001) AM_WRITE_LEGACY(vbuffer_clear_w)
218   AM_RANGE(0x40074000, 0x40074001) AM_WRITE_LEGACY(vbuffer_set_w)
219   AM_RANGE(0x40070000, 0x40070001) AM_WRITE(vbuffer_clear_w)
220   AM_RANGE(0x40074000, 0x40074001) AM_WRITE(vbuffer_set_w)
219221   AM_RANGE(0x40078000, 0x40078001) AM_WRITENOP //once at startup -> to disable the eeprom?
220222   AM_RANGE(0x80000000, 0x803fffff) AM_ROMBANK("bank1")
221   AM_RANGE(0xe0000000, 0xe00003ff) AM_RAM_WRITE_LEGACY(pasha2_palette_w) AM_BASE(m_paletteram) //tilemap? palette?
223   AM_RANGE(0xe0000000, 0xe00003ff) AM_RAM_WRITE(pasha2_palette_w) AM_BASE(m_paletteram) //tilemap? palette?
222224   AM_RANGE(0xfff80000, 0xffffffff) AM_ROM AM_REGION("user1",0)
223225ADDRESS_MAP_END
224226
225227static ADDRESS_MAP_START( pasha2_io, AS_IO, 16, pasha2_state )
226228   AM_RANGE(0x08, 0x0b) AM_READNOP //sound status?
227229   AM_RANGE(0x18, 0x1b) AM_READNOP //sound status?
228   AM_RANGE(0x20, 0x23) AM_WRITE_LEGACY(pasha2_lamps_w)
230   AM_RANGE(0x20, 0x23) AM_WRITE(pasha2_lamps_w)
229231   AM_RANGE(0x40, 0x43) AM_READ_PORT("COINS")
230232   AM_RANGE(0x60, 0x63) AM_READ_PORT("DSW")
231233   AM_RANGE(0x80, 0x83) AM_READ_PORT("INPUTS")
232234   AM_RANGE(0xa0, 0xa3) AM_WRITENOP //soundlatch?
233   AM_RANGE(0xc0, 0xc3) AM_WRITE_LEGACY(pasha2_misc_w)
235   AM_RANGE(0xc0, 0xc3) AM_WRITE(pasha2_misc_w)
234236   AM_RANGE(0xe2, 0xe3) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff)
235237   AM_RANGE(0xe6, 0xe7) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff)
236238   AM_RANGE(0xe8, 0xeb) AM_DEVWRITE_LEGACY("oki1", oki_bank_w)
r14845r14846
458460   ROM_LOAD( "pp2.um53",     0x00000, 0x80000, CRC(8a29ad03) SHA1(3e9b0c86d8e3bb0b7691f68ad45431f6f9e8edbd) )
459461ROM_END
460462
461static READ16_HANDLER( pasha2_speedup_r )
463READ16_MEMBER(pasha2_state::pasha2_speedup_r)
462464{
463   pasha2_state *state = space->machine().driver_data<pasha2_state>();
464465
465   if(cpu_get_pc(&space->device()) == 0x8302)
466      device_spin_until_interrupt(&space->device());
466   if(cpu_get_pc(&space.device()) == 0x8302)
467      device_spin_until_interrupt(&space.device());
467468
468   return state->m_wram[(0x95744 / 2) + offset];
469   return m_wram[(0x95744 / 2) + offset];
469470}
470471
471472static DRIVER_INIT( pasha2 )
472473{
473   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x95744, 0x95747, FUNC(pasha2_speedup_r) );
474   pasha2_state *state = machine.driver_data<pasha2_state>();
475   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x95744, 0x95747, read16_delegate(FUNC(pasha2_state::pasha2_speedup_r), state));
474476
475477   memory_set_bankptr(machine, "bank1", machine.region("user2")->base());
476478}
src/mame/drivers/coinmstr.c
r14845r14846
4141   UINT8 *m_attr_ram3;
4242   tilemap_t *m_bg_tilemap;
4343   UINT8 m_question_adr[4];
44   DECLARE_WRITE8_MEMBER(quizmstr_bg_w);
45   DECLARE_WRITE8_MEMBER(quizmstr_attr1_w);
46   DECLARE_WRITE8_MEMBER(quizmstr_attr2_w);
47   DECLARE_WRITE8_MEMBER(quizmstr_attr3_w);
48   DECLARE_READ8_MEMBER(question_r);
49   DECLARE_WRITE8_MEMBER(question_w);
50   DECLARE_READ8_MEMBER(ff_r);
4451};
4552
4653
47static WRITE8_HANDLER( quizmstr_bg_w )
54WRITE8_MEMBER(coinmstr_state::quizmstr_bg_w)
4855{
49   coinmstr_state *state = space->machine().driver_data<coinmstr_state>();
50   UINT8 *videoram = state->m_videoram;
56   UINT8 *videoram = m_videoram;
5157   videoram[offset] = data;
5258
5359   if(offset >= 0x0240)
54      state->m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
60      m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
5561}
5662
5763
r14845r14846
8894}
8995
9096
91static WRITE8_HANDLER( quizmstr_attr1_w )
97WRITE8_MEMBER(coinmstr_state::quizmstr_attr1_w)
9298{
93   coinmstr_state *state = space->machine().driver_data<coinmstr_state>();
94   state->m_attr_ram1[offset] = data;
99   m_attr_ram1[offset] = data;
95100
96101   if(offset >= 0x0240)
97102   {
98103      // the later games also use attr3 for something..
99      UINT32   paldata = (state->m_attr_ram1[offset] & 0x7f) | ((state->m_attr_ram2[offset] & 0x7f) << 7);
100      state->m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
104      UINT32   paldata = (m_attr_ram1[offset] & 0x7f) | ((m_attr_ram2[offset] & 0x7f) << 7);
105      m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
101106
102      coinmstr_set_pal(space->machine(), paldata, offset - 0x240);
107      coinmstr_set_pal(machine(), paldata, offset - 0x240);
103108
104109   }
105110}
106111
107static WRITE8_HANDLER( quizmstr_attr2_w )
112WRITE8_MEMBER(coinmstr_state::quizmstr_attr2_w)
108113{
109   coinmstr_state *state = space->machine().driver_data<coinmstr_state>();
110   state->m_attr_ram2[offset] = data;
114   m_attr_ram2[offset] = data;
111115
112116   if(offset >= 0x0240)
113117   {
114118      // the later games also use attr3 for something..
115      UINT32   paldata = (state->m_attr_ram1[offset] & 0x7f) | ((state->m_attr_ram2[offset] & 0x7f) << 7);
116      state->m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
119      UINT32   paldata = (m_attr_ram1[offset] & 0x7f) | ((m_attr_ram2[offset] & 0x7f) << 7);
120      m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
117121
118      coinmstr_set_pal(space->machine(), paldata, offset - 0x240);
122      coinmstr_set_pal(machine(), paldata, offset - 0x240);
119123
120124   }
121125}
122126
123static WRITE8_HANDLER( quizmstr_attr3_w )
127WRITE8_MEMBER(coinmstr_state::quizmstr_attr3_w)
124128{
125   coinmstr_state *state = space->machine().driver_data<coinmstr_state>();
126   state->m_attr_ram3[offset] = data;
129   m_attr_ram3[offset] = data;
127130
128131   if(offset >= 0x0240)
129      state->m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
132      m_bg_tilemap->mark_tile_dirty(offset - 0x0240);
130133
131134}
132135
133136
134static READ8_HANDLER( question_r )
137READ8_MEMBER(coinmstr_state::question_r)
135138{
136   coinmstr_state *state = space->machine().driver_data<coinmstr_state>();
137139   int address;
138   UINT8 *questions = space->machine().region("user1")->base();
140   UINT8 *questions = machine().region("user1")->base();
139141
140   switch(state->m_question_adr[2])
142   switch(m_question_adr[2])
141143   {
142      case 0x38: address = 0x00000; break; // state->m_question_adr[3] == 7
143      case 0x39: address = 0x08000; break; // state->m_question_adr[3] == 7
144      case 0x3a: address = 0x10000; break; // state->m_question_adr[3] == 7
145      case 0x3b: address = 0x18000; break; // state->m_question_adr[3] == 7
146      case 0x3c: address = 0x20000; break; // state->m_question_adr[3] == 7
147      case 0x3d: address = 0x28000; break; // state->m_question_adr[3] == 7
148      case 0x3e: address = 0x30000; break; // state->m_question_adr[3] == 7
149      case 0x07: address = 0x38000; break; // state->m_question_adr[3] == 7
150      case 0x0f: address = 0x40000; break; // state->m_question_adr[3] == 7
151      case 0x17: address = 0x48000; break; // state->m_question_adr[3] == 7
152      case 0x1f: address = 0x50000; break; // state->m_question_adr[3] == 7
153      case 0x27: address = 0x58000; break; // state->m_question_adr[3] == 7
154      case 0x2f: address = 0x60000; break; // state->m_question_adr[3] == 7
155      case 0x37: address = 0x68000; break; // state->m_question_adr[3] == 7
156      case 0x3f: address = 0x70000 + state->m_question_adr[3] * 0x8000; break;
144      case 0x38: address = 0x00000; break; // m_question_adr[3] == 7
145      case 0x39: address = 0x08000; break; // m_question_adr[3] == 7
146      case 0x3a: address = 0x10000; break; // m_question_adr[3] == 7
147      case 0x3b: address = 0x18000; break; // m_question_adr[3] == 7
148      case 0x3c: address = 0x20000; break; // m_question_adr[3] == 7
149      case 0x3d: address = 0x28000; break; // m_question_adr[3] == 7
150      case 0x3e: address = 0x30000; break; // m_question_adr[3] == 7
151      case 0x07: address = 0x38000; break; // m_question_adr[3] == 7
152      case 0x0f: address = 0x40000; break; // m_question_adr[3] == 7
153      case 0x17: address = 0x48000; break; // m_question_adr[3] == 7
154      case 0x1f: address = 0x50000; break; // m_question_adr[3] == 7
155      case 0x27: address = 0x58000; break; // m_question_adr[3] == 7
156      case 0x2f: address = 0x60000; break; // m_question_adr[3] == 7
157      case 0x37: address = 0x68000; break; // m_question_adr[3] == 7
158      case 0x3f: address = 0x70000 + m_question_adr[3] * 0x8000; break;
157159
158160      default:
159161         address = 0;
160         logerror("unknown question rom # = %02X\n",state->m_question_adr[2]);
162         logerror("unknown question rom # = %02X\n",m_question_adr[2]);
161163   }
162164
163   if(state->m_question_adr[3] == 6 || state->m_question_adr[3] > 7)
164      logerror("question_adr[3] = %02X\n",state->m_question_adr[3]);
165   if(m_question_adr[3] == 6 || m_question_adr[3] > 7)
166      logerror("question_adr[3] = %02X\n",m_question_adr[3]);
165167
166168/*
167169    in these offsets they set 0x80... why?
168170
169    if( (state->m_question_adr[0] & 0x5f) == 0x00 ||
170        (state->m_question_adr[0] & 0x5f) == 0x01 ||
171        (state->m_question_adr[0] & 0x5f) == 0x0f ||
172        (state->m_question_adr[0] & 0x5f) == 0x56 )
171    if( (m_question_adr[0] & 0x5f) == 0x00 ||
172        (m_question_adr[0] & 0x5f) == 0x01 ||
173        (m_question_adr[0] & 0x5f) == 0x0f ||
174        (m_question_adr[0] & 0x5f) == 0x56 )
173175*/
174176
175177
176178//  don't know...
177//  address |= ((state->m_question_adr[0] & 0x7f) << 8) | state->m_question_adr[1];
178   address |= (state->m_question_adr[1] << 7) | (state->m_question_adr[0] & 0x7f);
179//  address |= ((m_question_adr[0] & 0x7f) << 8) | m_question_adr[1];
180   address |= (m_question_adr[1] << 7) | (m_question_adr[0] & 0x7f);
179181
180182   return questions[address];
181183}
182184
183static WRITE8_HANDLER( question_w )
185WRITE8_MEMBER(coinmstr_state::question_w)
184186{
185   coinmstr_state *state = space->machine().driver_data<coinmstr_state>();
186   if(data != state->m_question_adr[offset])
187   if(data != m_question_adr[offset])
187188   {
188189      logerror("offset = %d data = %02X\n",offset,data);
189190   }
190191
191   state->m_question_adr[offset] = data;
192   m_question_adr[offset] = data;
192193}
193194
194static READ8_HANDLER( ff_r )
195READ8_MEMBER(coinmstr_state::ff_r)
195196{
196197   return 0xff;
197198}
r14845r14846
201202static ADDRESS_MAP_START( coinmstr_map, AS_PROGRAM, 8, coinmstr_state )
202203   AM_RANGE(0x0000, 0xbfff) AM_ROM
203204   AM_RANGE(0xc000, 0xdfff) AM_RAM
204   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE_LEGACY(quizmstr_bg_w) AM_BASE(m_videoram)
205   AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE_LEGACY(quizmstr_attr1_w) AM_BASE(m_attr_ram1)
206   AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE_LEGACY(quizmstr_attr2_w) AM_BASE(m_attr_ram2)
207   AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE_LEGACY(quizmstr_attr3_w) AM_BASE(m_attr_ram3)
205   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(quizmstr_bg_w) AM_BASE(m_videoram)
206   AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(quizmstr_attr1_w) AM_BASE(m_attr_ram1)
207   AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(quizmstr_attr2_w) AM_BASE(m_attr_ram2)
208   AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(quizmstr_attr3_w) AM_BASE(m_attr_ram3)
208209ADDRESS_MAP_END
209210
210211// Different I/O mappping for every game
r14845r14846
212213static ADDRESS_MAP_START( quizmstr_io_map, AS_IO, 8, coinmstr_state )
213214   ADDRESS_MAP_UNMAP_HIGH
214215   ADDRESS_MAP_GLOBAL_MASK(0xff)
215   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(question_r)
216   AM_RANGE(0x00, 0x03) AM_WRITE_LEGACY(question_w)
216   AM_RANGE(0x00, 0x00) AM_READ(question_r)
217   AM_RANGE(0x00, 0x03) AM_WRITE(question_w)
217218   AM_RANGE(0x40, 0x41) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
218219   AM_RANGE(0x41, 0x41) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
219220   AM_RANGE(0x48, 0x4b) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
r14845r14846
228229
229230static ADDRESS_MAP_START( trailblz_io_map, AS_IO, 8, coinmstr_state )
230231   ADDRESS_MAP_GLOBAL_MASK(0xff)
231   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(question_r)
232   AM_RANGE(0x00, 0x03) AM_WRITE_LEGACY(question_w)
232   AM_RANGE(0x00, 0x00) AM_READ(question_r)
233   AM_RANGE(0x00, 0x03) AM_WRITE(question_w)
233234   AM_RANGE(0x40, 0x40) AM_DEVWRITE("crtc", mc6845_device, address_w)
234235   AM_RANGE(0x41, 0x41) AM_DEVWRITE("crtc", mc6845_device, register_w)
235236   AM_RANGE(0x48, 0x49) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
r14845r14846
243244static ADDRESS_MAP_START( supnudg2_io_map, AS_IO, 8, coinmstr_state )
244245   ADDRESS_MAP_UNMAP_HIGH
245246   ADDRESS_MAP_GLOBAL_MASK(0xff)
246   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(question_r)
247   AM_RANGE(0x00, 0x03) AM_WRITE_LEGACY(question_w)
247   AM_RANGE(0x00, 0x00) AM_READ(question_r)
248   AM_RANGE(0x00, 0x03) AM_WRITE(question_w)
248249   AM_RANGE(0x40, 0x41) AM_READNOP
249250   AM_RANGE(0x40, 0x43) AM_WRITENOP
250251   AM_RANGE(0x43, 0x43) AM_READNOP
r14845r14846
271272   AM_RANGE(0x58, 0x5b) AM_DEVREADWRITE("pia0", pia6821_device, read, write) /* confirmed */
272273   AM_RANGE(0x68, 0x6b) AM_DEVREADWRITE("pia1", pia6821_device, read, write) /* confirmed */
273274   AM_RANGE(0x78, 0x7b) AM_DEVREADWRITE("pia2", pia6821_device, read, write) /* confirmed */
274   AM_RANGE(0xc0, 0xc1) AM_READ_LEGACY(ff_r)   /* needed to boot */
275   AM_RANGE(0xc0, 0xc1) AM_READ(ff_r)   /* needed to boot */
275276ADDRESS_MAP_END
276277
277278
src/mame/drivers/magicard.c
r14845r14846
184184   UINT16 *m_scc68070_dma_ch2_regs;
185185   UINT16 *m_scc68070_mmu_regs;
186186   struct { int r,g,b,offs,offs_internal; } m_pal;
187   DECLARE_READ16_MEMBER(test_r);
188   DECLARE_WRITE16_MEMBER(paletteram_io_w);
189   DECLARE_READ16_MEMBER(philips_66470_r);
190   DECLARE_WRITE16_MEMBER(philips_66470_w);
191   DECLARE_READ16_MEMBER(scc68070_ext_irqc_r);
192   DECLARE_WRITE16_MEMBER(scc68070_ext_irqc_w);
193   DECLARE_READ16_MEMBER(scc68070_iic_r);
194   DECLARE_WRITE16_MEMBER(scc68070_iic_w);
195   DECLARE_READ16_MEMBER(scc68070_uart_r);
196   DECLARE_WRITE16_MEMBER(scc68070_uart_w);
197   DECLARE_READ16_MEMBER(scc68070_timer_r);
198   DECLARE_WRITE16_MEMBER(scc68070_timer_w);
199   DECLARE_READ16_MEMBER(scc68070_int_irqc_r);
200   DECLARE_WRITE16_MEMBER(scc68070_int_irqc_w);
201   DECLARE_READ16_MEMBER(scc68070_dma_ch1_r);
202   DECLARE_WRITE16_MEMBER(scc68070_dma_ch1_w);
203   DECLARE_READ16_MEMBER(scc68070_dma_ch2_r);
204   DECLARE_WRITE16_MEMBER(scc68070_dma_ch2_w);
205   DECLARE_READ16_MEMBER(scc68070_mmu_r);
206   DECLARE_WRITE16_MEMBER(scc68070_mmu_w);
187207};
188208
189209
r14845r14846
455475*      R/W Handlers      *
456476*************************/
457477
458static READ16_HANDLER( test_r )
478READ16_MEMBER(magicard_state::test_r)
459479{
460   return space->machine().rand();
480   return machine().rand();
461481}
462482
463static WRITE16_HANDLER( paletteram_io_w )
483WRITE16_MEMBER(magicard_state::paletteram_io_w)
464484{
465   magicard_state *state = space->machine().driver_data<magicard_state>();
466485   switch(offset*2)
467486   {
468487      case 0:
469         state->m_pal.offs = data;
470         state->m_pal.offs_internal = 0;
488         m_pal.offs = data;
489         m_pal.offs_internal = 0;
471490         break;
472491      case 4:
473492         break;
474493      case 2:
475         switch(state->m_pal.offs_internal)
494         switch(m_pal.offs_internal)
476495         {
477496            case 0:
478               state->m_pal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
479               state->m_pal.offs_internal++;
497               m_pal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
498               m_pal.offs_internal++;
480499               break;
481500            case 1:
482               state->m_pal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
483               state->m_pal.offs_internal++;
501               m_pal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
502               m_pal.offs_internal++;
484503               break;
485504            case 2:
486               state->m_pal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
487               palette_set_color(space->machine(), state->m_pal.offs, MAKE_RGB(state->m_pal.r, state->m_pal.g, state->m_pal.b));
488               state->m_pal.offs_internal = 0;
489               state->m_pal.offs++;
505               m_pal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
506               palette_set_color(machine(), m_pal.offs, MAKE_RGB(m_pal.r, m_pal.g, m_pal.b));
507               m_pal.offs_internal = 0;
508               m_pal.offs++;
490509               break;
491510         }
492511
r14845r14846
494513   }
495514}
496515
497static READ16_HANDLER( philips_66470_r )
516READ16_MEMBER(magicard_state::philips_66470_r)
498517{
499   magicard_state *state = space->machine().driver_data<magicard_state>();
500518   switch(offset)
501519   {
502520//      case 0/2:
503//          return space->machine().rand(); //TODO
521//          return machine().rand(); //TODO
504522   }
505523
506524   //printf("[%04x]\n",offset*2);
507525
508526
509   return state->m_pcab_vregs[offset];
527   return m_pcab_vregs[offset];
510528}
511529
512static WRITE16_HANDLER( philips_66470_w )
530WRITE16_MEMBER(magicard_state::philips_66470_w)
513531{
514   magicard_state *state = space->machine().driver_data<magicard_state>();
515   COMBINE_DATA(&state->m_pcab_vregs[offset]);
532   COMBINE_DATA(&m_pcab_vregs[offset]);
516533
517534//  if(offset == 0x10/2)
518535//  {
519      //printf("%04x %04x %04x\n",data,state->m_pcab_vregs[0x12/2],state->m_pcab_vregs[0x14/2]);
520      //state->m_pcab_vregs[0x12/2] = state->m_pcab_vregs[0x10/2];
536      //printf("%04x %04x %04x\n",data,m_pcab_vregs[0x12/2],m_pcab_vregs[0x14/2]);
537      //m_pcab_vregs[0x12/2] = m_pcab_vregs[0x10/2];
521538//  }
522539}
523540
524541/* scc68070 specific stuff (to be moved) */
525542
526static READ16_HANDLER( scc68070_ext_irqc_r )
543READ16_MEMBER(magicard_state::scc68070_ext_irqc_r)
527544{
528   magicard_state *state = space->machine().driver_data<magicard_state>();
529   return state->m_scc68070_ext_irqc_regs[offset];
545   return m_scc68070_ext_irqc_regs[offset];
530546}
531547
532static WRITE16_HANDLER( scc68070_ext_irqc_w )
548WRITE16_MEMBER(magicard_state::scc68070_ext_irqc_w)
533549{
534   magicard_state *state = space->machine().driver_data<magicard_state>();
535   state->m_scc68070_ext_irqc_regs[offset] = data;
550   m_scc68070_ext_irqc_regs[offset] = data;
536551}
537552
538static READ16_HANDLER( scc68070_iic_r )
553READ16_MEMBER(magicard_state::scc68070_iic_r)
539554{
540   magicard_state *state = space->machine().driver_data<magicard_state>();
541555   //printf("%04x\n",offset*2);
542556
543557   switch(offset)
544558   {
545      case 0x04/2: return state->m_scc68070_iic_regs[offset] & 0xef; //iic status register, bit 4 = pending irq
559      case 0x04/2: return m_scc68070_iic_regs[offset] & 0xef; //iic status register, bit 4 = pending irq
546560   }
547561
548   return state->m_scc68070_iic_regs[offset];
562   return m_scc68070_iic_regs[offset];
549563}
550564
551static WRITE16_HANDLER( scc68070_iic_w )
565WRITE16_MEMBER(magicard_state::scc68070_iic_w)
552566{
553   magicard_state *state = space->machine().driver_data<magicard_state>();
554   state->m_scc68070_iic_regs[offset] = data;
567   m_scc68070_iic_regs[offset] = data;
555568}
556569
557static READ16_HANDLER( scc68070_uart_r )
570READ16_MEMBER(magicard_state::scc68070_uart_r)
558571{
559   magicard_state *state = space->machine().driver_data<magicard_state>();
560572   //printf("%02x\n",offset*2);
561573
562574   switch(offset)
563575   {
564      case 0x02/2: return space->machine().rand(); //uart mode register
576      case 0x02/2: return machine().rand(); //uart mode register
565577   }
566578
567   return state->m_scc68070_uart_regs[offset];
579   return m_scc68070_uart_regs[offset];
568580}
569581
570static WRITE16_HANDLER( scc68070_uart_w )
582WRITE16_MEMBER(magicard_state::scc68070_uart_w)
571583{
572   magicard_state *state = space->machine().driver_data<magicard_state>();
573   state->m_scc68070_uart_regs[offset] = data;
584   m_scc68070_uart_regs[offset] = data;
574585}
575586
576static READ16_HANDLER( scc68070_timer_r )
587READ16_MEMBER(magicard_state::scc68070_timer_r)
577588{
578   magicard_state *state = space->machine().driver_data<magicard_state>();
579   return state->m_scc68070_timer_regs[offset];
589   return m_scc68070_timer_regs[offset];
580590}
581591
582static WRITE16_HANDLER( scc68070_timer_w )
592WRITE16_MEMBER(magicard_state::scc68070_timer_w)
583593{
584   magicard_state *state = space->machine().driver_data<magicard_state>();
585   state->m_scc68070_timer_regs[offset] = data;
594   m_scc68070_timer_regs[offset] = data;
586595}
587596
588static READ16_HANDLER( scc68070_int_irqc_r )
597READ16_MEMBER(magicard_state::scc68070_int_irqc_r)
589598{
590   magicard_state *state = space->machine().driver_data<magicard_state>();
591   return state->m_scc68070_int_irqc_regs[offset];
599   return m_scc68070_int_irqc_regs[offset];
592600}
593601
594static WRITE16_HANDLER( scc68070_int_irqc_w )
602WRITE16_MEMBER(magicard_state::scc68070_int_irqc_w)
595603{
596   magicard_state *state = space->machine().driver_data<magicard_state>();
597   state->m_scc68070_int_irqc_regs[offset] = data;
604   m_scc68070_int_irqc_regs[offset] = data;
598605}
599606
600static READ16_HANDLER( scc68070_dma_ch1_r )
607READ16_MEMBER(magicard_state::scc68070_dma_ch1_r)
601608{
602   magicard_state *state = space->machine().driver_data<magicard_state>();
603   return state->m_scc68070_dma_ch1_regs[offset];
609   return m_scc68070_dma_ch1_regs[offset];
604610}
605611
606static WRITE16_HANDLER( scc68070_dma_ch1_w )
612WRITE16_MEMBER(magicard_state::scc68070_dma_ch1_w)
607613{
608   magicard_state *state = space->machine().driver_data<magicard_state>();
609   state->m_scc68070_dma_ch1_regs[offset] = data;
614   m_scc68070_dma_ch1_regs[offset] = data;
610615}
611616
612static READ16_HANDLER( scc68070_dma_ch2_r )
617READ16_MEMBER(magicard_state::scc68070_dma_ch2_r)
613618{
614   magicard_state *state = space->machine().driver_data<magicard_state>();
615   return state->m_scc68070_dma_ch2_regs[offset];
619   return m_scc68070_dma_ch2_regs[offset];
616620}
617621
618static WRITE16_HANDLER( scc68070_dma_ch2_w )
622WRITE16_MEMBER(magicard_state::scc68070_dma_ch2_w)
619623{
620   magicard_state *state = space->machine().driver_data<magicard_state>();
621   state->m_scc68070_dma_ch2_regs[offset] = data;
624   m_scc68070_dma_ch2_regs[offset] = data;
622625}
623626
624static READ16_HANDLER( scc68070_mmu_r )
627READ16_MEMBER(magicard_state::scc68070_mmu_r)
625628{
626   magicard_state *state = space->machine().driver_data<magicard_state>();
627   return state->m_scc68070_mmu_regs[offset];
629   return m_scc68070_mmu_regs[offset];
628630}
629631
630static WRITE16_HANDLER( scc68070_mmu_w )
632WRITE16_MEMBER(magicard_state::scc68070_mmu_w)
631633{
632   magicard_state *state = space->machine().driver_data<magicard_state>();
633   state->m_scc68070_mmu_regs[offset] = data;
634   m_scc68070_mmu_regs[offset] = data;
634635
635636   switch(offset)
636637   {
r14845r14846
651652   AM_RANGE(0x00000000, 0x0017ffff) AM_MIRROR(0x7fe00000) AM_RAM AM_BASE(m_magicram) /*only 0-7ffff accessed in Magic Card*/
652653   AM_RANGE(0x00180000, 0x001ffbff) AM_MIRROR(0x7fe00000) AM_RAM AM_REGION("maincpu", 0)
653654   /* 001ffc00-001ffdff System I/O */
654   AM_RANGE(0x001ffc00, 0x001ffc01) AM_MIRROR(0x7fe00000) AM_READ_LEGACY(test_r)
655   AM_RANGE(0x001ffc40, 0x001ffc41) AM_MIRROR(0x7fe00000) AM_READ_LEGACY(test_r)
656   AM_RANGE(0x001ffd00, 0x001ffd05) AM_MIRROR(0x7fe00000) AM_WRITE_LEGACY(paletteram_io_w) //RAMDAC
655   AM_RANGE(0x001ffc00, 0x001ffc01) AM_MIRROR(0x7fe00000) AM_READ(test_r)
656   AM_RANGE(0x001ffc40, 0x001ffc41) AM_MIRROR(0x7fe00000) AM_READ(test_r)
657   AM_RANGE(0x001ffd00, 0x001ffd05) AM_MIRROR(0x7fe00000) AM_WRITE(paletteram_io_w) //RAMDAC
657658   /*not the right sound chip,unknown type,it should be an ADPCM with 8 channels.*/
658659   AM_RANGE(0x001ffd40, 0x001ffd43) AM_MIRROR(0x7fe00000) AM_DEVWRITE8_LEGACY("ymsnd", ym2413_w, 0x00ff)
659   AM_RANGE(0x001ffd80, 0x001ffd81) AM_MIRROR(0x7fe00000) AM_READ_LEGACY(test_r)
660   AM_RANGE(0x001ffd80, 0x001ffd81) AM_MIRROR(0x7fe00000) AM_READ(test_r)
660661   AM_RANGE(0x001ffd80, 0x001ffd81) AM_MIRROR(0x7fe00000) AM_WRITENOP //?
661662   AM_RANGE(0x001fff80, 0x001fffbf) AM_MIRROR(0x7fe00000) AM_RAM //DRAM I/O, not accessed by this game, CD buffer?
662   AM_RANGE(0x001fffe0, 0x001fffff) AM_MIRROR(0x7fe00000) AM_READWRITE_LEGACY(philips_66470_r,philips_66470_w) AM_BASE(m_pcab_vregs) //video registers
663   AM_RANGE(0x80001000, 0x8000100f) AM_READWRITE_LEGACY(scc68070_ext_irqc_r,scc68070_ext_irqc_w) AM_BASE(m_scc68070_ext_irqc_regs) //lir
664   AM_RANGE(0x80002000, 0x8000200f) AM_READWRITE_LEGACY(scc68070_iic_r,scc68070_iic_w) AM_BASE(m_scc68070_iic_regs) //i2c
665   AM_RANGE(0x80002010, 0x8000201f) AM_READWRITE_LEGACY(scc68070_uart_r,scc68070_uart_w) AM_BASE(m_scc68070_uart_regs)
666   AM_RANGE(0x80002020, 0x8000202f) AM_READWRITE_LEGACY(scc68070_timer_r,scc68070_timer_w) AM_BASE(m_scc68070_timer_regs)
667   AM_RANGE(0x80002040, 0x8000204f) AM_READWRITE_LEGACY(scc68070_int_irqc_r,scc68070_int_irqc_w) AM_BASE(m_scc68070_int_irqc_regs)
668   AM_RANGE(0x80004000, 0x8000403f) AM_READWRITE_LEGACY(scc68070_dma_ch1_r,scc68070_dma_ch1_w) AM_BASE(m_scc68070_dma_ch1_regs)
669   AM_RANGE(0x80004040, 0x8000407f) AM_READWRITE_LEGACY(scc68070_dma_ch2_r,scc68070_dma_ch2_w) AM_BASE(m_scc68070_dma_ch2_regs)
670   AM_RANGE(0x80008000, 0x8000807f) AM_READWRITE_LEGACY(scc68070_mmu_r,scc68070_mmu_w) AM_BASE(m_scc68070_mmu_regs)
663   AM_RANGE(0x001fffe0, 0x001fffff) AM_MIRROR(0x7fe00000) AM_READWRITE(philips_66470_r,philips_66470_w) AM_BASE(m_pcab_vregs) //video registers
664   AM_RANGE(0x80001000, 0x8000100f) AM_READWRITE(scc68070_ext_irqc_r,scc68070_ext_irqc_w) AM_BASE(m_scc68070_ext_irqc_regs) //lir
665   AM_RANGE(0x80002000, 0x8000200f) AM_READWRITE(scc68070_iic_r,scc68070_iic_w) AM_BASE(m_scc68070_iic_regs) //i2c
666   AM_RANGE(0x80002010, 0x8000201f) AM_READWRITE(scc68070_uart_r,scc68070_uart_w) AM_BASE(m_scc68070_uart_regs)
667   AM_RANGE(0x80002020, 0x8000202f) AM_READWRITE(scc68070_timer_r,scc68070_timer_w) AM_BASE(m_scc68070_timer_regs)
668   AM_RANGE(0x80002040, 0x8000204f) AM_READWRITE(scc68070_int_irqc_r,scc68070_int_irqc_w) AM_BASE(m_scc68070_int_irqc_regs)
669   AM_RANGE(0x80004000, 0x8000403f) AM_READWRITE(scc68070_dma_ch1_r,scc68070_dma_ch1_w) AM_BASE(m_scc68070_dma_ch1_regs)
670   AM_RANGE(0x80004040, 0x8000407f) AM_READWRITE(scc68070_dma_ch2_r,scc68070_dma_ch2_w) AM_BASE(m_scc68070_dma_ch2_regs)
671   AM_RANGE(0x80008000, 0x8000807f) AM_READWRITE(scc68070_mmu_r,scc68070_mmu_w) AM_BASE(m_scc68070_mmu_regs)
671672ADDRESS_MAP_END
672673
673674
src/mame/drivers/bfm_sc1.c
r14845r14846
128128   UINT8 m_codec_data[256];
129129
130130   int m_defaultbank;
131   DECLARE_WRITE8_MEMBER(bankswitch_w);
132   DECLARE_READ8_MEMBER(irqlatch_r);
133   DECLARE_WRITE8_MEMBER(reel12_w);
134   DECLARE_WRITE8_MEMBER(reel34_w);
135   DECLARE_WRITE8_MEMBER(reel56_w);
136   DECLARE_WRITE8_MEMBER(mmtr_w);
137   DECLARE_READ8_MEMBER(mmtr_r);
138   DECLARE_READ8_MEMBER(dipcoin_r);
139   DECLARE_WRITE8_MEMBER(vfd_w);
140   DECLARE_READ8_MEMBER(mux1latch_r);
141   DECLARE_READ8_MEMBER(mux1datlo_r);
142   DECLARE_READ8_MEMBER(mux1dathi_r);
143   DECLARE_WRITE8_MEMBER(mux1latch_w);
144   DECLARE_WRITE8_MEMBER(mux1datlo_w);
145   DECLARE_WRITE8_MEMBER(mux1dathi_w);
146   DECLARE_READ8_MEMBER(mux2latch_r);
147   DECLARE_READ8_MEMBER(mux2datlo_r);
148   DECLARE_READ8_MEMBER(mux2dathi_r);
149   DECLARE_WRITE8_MEMBER(mux2latch_w);
150   DECLARE_WRITE8_MEMBER(mux2datlo_w);
151   DECLARE_WRITE8_MEMBER(mux2dathi_w);
152   DECLARE_WRITE8_MEMBER(aciactrl_w);
153   DECLARE_WRITE8_MEMBER(aciadata_w);
154   DECLARE_READ8_MEMBER(aciastat_r);
155   DECLARE_READ8_MEMBER(aciadata_r);
156   DECLARE_WRITE8_MEMBER(triac_w);
157   DECLARE_READ8_MEMBER(triac_r);
158   DECLARE_WRITE8_MEMBER(vid_uart_tx_w);
159   DECLARE_WRITE8_MEMBER(vid_uart_ctrl_w);
160   DECLARE_READ8_MEMBER(vid_uart_rx_r);
161   DECLARE_READ8_MEMBER(vid_uart_ctrl_r);
131162};
132163
133164#define VFD_RESET  0x20
r14845r14846
158189#endif
159190///////////////////////////////////////////////////////////////////////////
160191
161static WRITE8_HANDLER( bankswitch_w )
192WRITE8_MEMBER(bfm_sc1_state::bankswitch_w)
162193{
163194//  printf("bankswitch %02x\n", data);
164   memory_set_bank(space->machine(),"bank1",data & 0x03);
195   memory_set_bank(machine(),"bank1",data & 0x03);
165196}
166197
167198///////////////////////////////////////////////////////////////////////////
r14845r14846
182213
183214///////////////////////////////////////////////////////////////////////////
184215
185static READ8_HANDLER( irqlatch_r )
216READ8_MEMBER(bfm_sc1_state::irqlatch_r)
186217{
187   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
188   int result = state->m_irq_status | 0x02;
218   int result = m_irq_status | 0x02;
189219
190   state->m_irq_status = 0;
220   m_irq_status = 0;
191221
192222   return result;
193223}
194224
195225///////////////////////////////////////////////////////////////////////////
196226
197static WRITE8_HANDLER( reel12_w )
227WRITE8_MEMBER(bfm_sc1_state::reel12_w)
198228{
199   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
200   if ( state->m_locked & 0x01 )
229   if ( m_locked & 0x01 )
201230   {   // hardware is still locked,
202      if ( data == 0x46 ) state->m_locked &= ~0x01;
231      if ( data == 0x46 ) m_locked &= ~0x01;
203232   }
204233   else
205234   {
206      if ( stepper_update(0, (data>>4)&0x0f) ) state->m_reel_changed |= 0x01;
207      if ( stepper_update(1, data&0x0f   ) ) state->m_reel_changed |= 0x02;
235      if ( stepper_update(0, (data>>4)&0x0f) ) m_reel_changed |= 0x01;
236      if ( stepper_update(1, data&0x0f   ) ) m_reel_changed |= 0x02;
208237
209      if ( stepper_optic_state(0) ) state->m_optic_pattern |=  0x01;
210      else                          state->m_optic_pattern &= ~0x01;
211      if ( stepper_optic_state(1) ) state->m_optic_pattern |=  0x02;
212      else                          state->m_optic_pattern &= ~0x02;
238      if ( stepper_optic_state(0) ) m_optic_pattern |=  0x01;
239      else                          m_optic_pattern &= ~0x01;
240      if ( stepper_optic_state(1) ) m_optic_pattern |=  0x02;
241      else                          m_optic_pattern &= ~0x02;
213242   }
214243   awp_draw_reel(0);
215244   awp_draw_reel(1);
r14845r14846
217246
218247///////////////////////////////////////////////////////////////////////////
219248
220static WRITE8_HANDLER( reel34_w )
249WRITE8_MEMBER(bfm_sc1_state::reel34_w)
221250{
222   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
223   if ( state->m_locked & 0x02 )
251   if ( m_locked & 0x02 )
224252   {   // hardware is still locked,
225      if ( data == 0x42 ) state->m_locked &= ~0x02;
253      if ( data == 0x42 ) m_locked &= ~0x02;
226254   }
227255   else
228256   {
229      if ( stepper_update(2, (data>>4)&0x0f) ) state->m_reel_changed |= 0x04;
230      if ( stepper_update(3, data&0x0f   ) ) state->m_reel_changed |= 0x08;
257      if ( stepper_update(2, (data>>4)&0x0f) ) m_reel_changed |= 0x04;
258      if ( stepper_update(3, data&0x0f   ) ) m_reel_changed |= 0x08;
231259
232      if ( stepper_optic_state(2) ) state->m_optic_pattern |=  0x04;
233      else                          state->m_optic_pattern &= ~0x04;
234      if ( stepper_optic_state(3) ) state->m_optic_pattern |=  0x08;
235      else                          state->m_optic_pattern &= ~0x08;
260      if ( stepper_optic_state(2) ) m_optic_pattern |=  0x04;
261      else                          m_optic_pattern &= ~0x04;
262      if ( stepper_optic_state(3) ) m_optic_pattern |=  0x08;
263      else                          m_optic_pattern &= ~0x08;
236264   }
237265   awp_draw_reel(2);
238266   awp_draw_reel(3);
r14845r14846
240268
241269///////////////////////////////////////////////////////////////////////////
242270
243static WRITE8_HANDLER( reel56_w )
271WRITE8_MEMBER(bfm_sc1_state::reel56_w)
244272{
245   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
246   if ( stepper_update(4, (data>>4)&0x0f) ) state->m_reel_changed |= 0x10;
247   if ( stepper_update(5, data&0x0f   ) ) state->m_reel_changed |= 0x20;
273   if ( stepper_update(4, (data>>4)&0x0f) ) m_reel_changed |= 0x10;
274   if ( stepper_update(5, data&0x0f   ) ) m_reel_changed |= 0x20;
248275
249   if ( stepper_optic_state(4) ) state->m_optic_pattern |=  0x10;
250   else                          state->m_optic_pattern &= ~0x10;
251   if ( stepper_optic_state(5) ) state->m_optic_pattern |=  0x20;
252   else                          state->m_optic_pattern &= ~0x20;
276   if ( stepper_optic_state(4) ) m_optic_pattern |=  0x10;
277   else                          m_optic_pattern &= ~0x10;
278   if ( stepper_optic_state(5) ) m_optic_pattern |=  0x20;
279   else                          m_optic_pattern &= ~0x20;
253280   awp_draw_reel(5);
254281   awp_draw_reel(6);
255282}
r14845r14846
258285// mechanical meters //////////////////////////////////////////////////////
259286///////////////////////////////////////////////////////////////////////////
260287
261static WRITE8_HANDLER( mmtr_w )
288WRITE8_MEMBER(bfm_sc1_state::mmtr_w)
262289{
263   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
264290   int i;
265   if ( state->m_locked & 0x04 )
291   if ( m_locked & 0x04 )
266292   {   // hardware is still locked,
267      state->m_locked &= ~0x04;
293      m_locked &= ~0x04;
268294   }
269295   else
270296   {
271      int  changed = state->m_mmtr_latch ^ data;
297      int  changed = m_mmtr_latch ^ data;
272298
273      state->m_mmtr_latch = data;
299      m_mmtr_latch = data;
274300
275301      for (i=0; i<8; i++)
276302      {
277303         if ( changed & (1 << i) )
278304         {
279305            MechMtr_update(i, data & (1 << i) );
280            generic_pulse_irq_line(space->machine().device("maincpu"), M6809_FIRQ_LINE, 1);
306            generic_pulse_irq_line(machine().device("maincpu"), M6809_FIRQ_LINE, 1);
281307         }
282308      }
283309   }
r14845r14846
285311
286312///////////////////////////////////////////////////////////////////////////
287313
288static READ8_HANDLER( mmtr_r )
314READ8_MEMBER(bfm_sc1_state::mmtr_r)
289315{
290   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
291   return state->m_mmtr_latch;
316   return m_mmtr_latch;
292317}
293318
294319///////////////////////////////////////////////////////////////////////////
295320
296static READ8_HANDLER( dipcoin_r )
321READ8_MEMBER(bfm_sc1_state::dipcoin_r)
297322{
298   return input_port_read(space->machine(),"STROBE0") & 0x1F;
323   return input_port_read(machine(),"STROBE0") & 0x1F;
299324}
300325
301326///////////////////////////////////////////////////////////////////////////
r14845r14846
307332
308333///////////////////////////////////////////////////////////////////////////
309334
310static WRITE8_HANDLER( vfd_w )
335WRITE8_MEMBER(bfm_sc1_state::vfd_w)
311336{
312   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
313   int changed = state->m_vfd_latch ^ data;
337   int changed = m_vfd_latch ^ data;
314338
315   state->m_vfd_latch = data;
339   m_vfd_latch = data;
316340
317341   if ( changed )
318342   {
r14845r14846
369393
370394/////////////////////////////////////////////////////////////////////////////////////
371395
372static READ8_HANDLER( mux1latch_r )
396READ8_MEMBER(bfm_sc1_state::mux1latch_r)
373397{
374   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
375   return state->m_mux1_input;
398   return m_mux1_input;
376399}
377400
378401/////////////////////////////////////////////////////////////////////////////////////
379402
380static READ8_HANDLER( mux1datlo_r )
403READ8_MEMBER(bfm_sc1_state::mux1datlo_r)
381404{
382405   return 0;
383406}
384407
385408/////////////////////////////////////////////////////////////////////////////////////
386409
387static READ8_HANDLER( mux1dathi_r )
410READ8_MEMBER(bfm_sc1_state::mux1dathi_r)
388411{
389412   return 0;
390413}
391414
392415/////////////////////////////////////////////////////////////////////////////////////
393416
394static WRITE8_HANDLER( mux1latch_w )
417WRITE8_MEMBER(bfm_sc1_state::mux1latch_w)
395418{
396   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
397   int changed = state->m_mux1_outputlatch ^ data;
419   int changed = m_mux1_outputlatch ^ data;
398420   static const char *const portnames[] = { "STROBE0", "STROBE1", "STROBE2", "STROBE3", "STROBE4", "STROBE5", "STROBE6", "STROBE7" };
399   state->m_mux1_outputlatch = data;
421   m_mux1_outputlatch = data;
400422
401423   if ( changed & 0x08 )
402424   { // clock changed
r14845r14846
412434
413435         for ( i = 0; i < 8; i++ )
414436         {
415            output_set_lamp_value(BFM_strcnv[offset  ], (state->m_mux1_datalo & pattern?1:0) );
416            output_set_lamp_value(BFM_strcnv[offset+8], (state->m_mux1_datahi & pattern?1:0) );
437            output_set_lamp_value(BFM_strcnv[offset  ], (m_mux1_datalo & pattern?1:0) );
438            output_set_lamp_value(BFM_strcnv[offset+8], (m_mux1_datahi & pattern?1:0) );
417439            pattern<<=1;
418440            offset++;
419441         }
r14845r14846
422444
423445      if ( !(data & 0x08) )
424446      {
425         state->m_sc1_Inputs[ input_strobe ] = input_port_read(space->machine(),portnames[input_strobe]);
447         m_sc1_Inputs[ input_strobe ] = input_port_read(machine(),portnames[input_strobe]);
426448
427         state->m_mux1_input = state->m_sc1_Inputs[ input_strobe ];
449         m_mux1_input = m_sc1_Inputs[ input_strobe ];
428450      }
429451   }
430452}
431453
432454/////////////////////////////////////////////////////////////////////////////////////
433455
434static WRITE8_HANDLER( mux1datlo_w )
456WRITE8_MEMBER(bfm_sc1_state::mux1datlo_w)
435457{
436   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
437   state->m_mux1_datalo = data;
458   m_mux1_datalo = data;
438459}
439460
440461/////////////////////////////////////////////////////////////////////////////////////
441462
442static WRITE8_HANDLER( mux1dathi_w )
463WRITE8_MEMBER(bfm_sc1_state::mux1dathi_w)
443464{
444   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
445   state->m_mux1_datahi = data;
465   m_mux1_datahi = data;
446466}
447467
448468/////////////////////////////////////////////////////////////////////////////////////
449469
450static READ8_HANDLER( mux2latch_r )
470READ8_MEMBER(bfm_sc1_state::mux2latch_r)
451471{
452   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
453   return state->m_mux2_input;
472   return m_mux2_input;
454473}
455474
456475/////////////////////////////////////////////////////////////////////////////////////
457476
458static READ8_HANDLER( mux2datlo_r )
477READ8_MEMBER(bfm_sc1_state::mux2datlo_r)
459478{
460479   return 0;
461480}
462481
463482/////////////////////////////////////////////////////////////////////////////////////
464483
465static READ8_HANDLER( mux2dathi_r )
484READ8_MEMBER(bfm_sc1_state::mux2dathi_r)
466485{
467486   return 0;
468487}
469488
470489/////////////////////////////////////////////////////////////////////////////////////
471490
472static WRITE8_HANDLER( mux2latch_w )
491WRITE8_MEMBER(bfm_sc1_state::mux2latch_w)
473492{
474   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
475   int changed = state->m_mux2_outputlatch ^ data;
493   int changed = m_mux2_outputlatch ^ data;
476494
477   state->m_mux2_outputlatch = data;
495   m_mux2_outputlatch = data;
478496
479497   if ( changed & 0x08 )
480498   { // clock changed
r14845r14846
489507
490508         for ( i = 0; i < 8; i++ )
491509         {
492            output_set_lamp_value(BFM_strcnv[offset  ], (state->m_mux2_datalo & pattern?1:0) );
493            output_set_lamp_value(BFM_strcnv[offset+8], (state->m_mux2_datahi & pattern?1:0) );
510            output_set_lamp_value(BFM_strcnv[offset  ], (m_mux2_datalo & pattern?1:0) );
511            output_set_lamp_value(BFM_strcnv[offset+8], (m_mux2_datahi & pattern?1:0) );
494512            pattern<<=1;
495513            offset++;
496514         }
r14845r14846
498516
499517      if ( !(data & 0x08) )
500518      {
501         state->m_mux2_input = 0x3F ^ state->m_optic_pattern;
519         m_mux2_input = 0x3F ^ m_optic_pattern;
502520      }
503521   }
504522}
505523
506524/////////////////////////////////////////////////////////////////////////////////////
507525
508static WRITE8_HANDLER( mux2datlo_w )
526WRITE8_MEMBER(bfm_sc1_state::mux2datlo_w)
509527{
510   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
511   state->m_mux2_datalo = data;
528   m_mux2_datalo = data;
512529}
513530
514531/////////////////////////////////////////////////////////////////////////////////////
515532
516static WRITE8_HANDLER( mux2dathi_w )
533WRITE8_MEMBER(bfm_sc1_state::mux2dathi_w)
517534{
518   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
519   state->m_mux2_datahi = data;
535   m_mux2_datahi = data;
520536}
521537
522538/////////////////////////////////////////////////////////////////////////////////////
523539// serial port //////////////////////////////////////////////////////////////////////
524540/////////////////////////////////////////////////////////////////////////////////////
525541
526static WRITE8_HANDLER( aciactrl_w )
542WRITE8_MEMBER(bfm_sc1_state::aciactrl_w)
527543{
528544}
529545
530546/////////////////////////////////////////////////////////////////////////////////////
531547
532static WRITE8_HANDLER( aciadata_w )
548WRITE8_MEMBER(bfm_sc1_state::aciadata_w)
533549{
534550}
535551
536552/////////////////////////////////////////////////////////////////////////////////////
537553
538static READ8_HANDLER( aciastat_r )
554READ8_MEMBER(bfm_sc1_state::aciastat_r)
539555{
540   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
541   return state->m_acia_status;
556   return m_acia_status;
542557}
543558
544559/////////////////////////////////////////////////////////////////////////////////////
545560
546static READ8_HANDLER( aciadata_r )
561READ8_MEMBER(bfm_sc1_state::aciadata_r)
547562{
548563   return 0;
549564}
r14845r14846
552567// payslide triacs //////////////////////////////////////////////////////////////////
553568/////////////////////////////////////////////////////////////////////////////////////
554569
555static WRITE8_HANDLER( triac_w )
570WRITE8_MEMBER(bfm_sc1_state::triac_w)
556571{
557   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
558   state->m_triac_latch = data;
572   m_triac_latch = data;
559573}
560574
561575/////////////////////////////////////////////////////////////////////////////////////
562576
563static READ8_HANDLER( triac_r )
577READ8_MEMBER(bfm_sc1_state::triac_r)
564578{
565   bfm_sc1_state *state = space->machine().driver_data<bfm_sc1_state>();
566   return state->m_triac_latch;
579   return m_triac_latch;
567580}
568581
569582/////////////////////////////////////////////////////////////////////////////////////
r14845r14846
584597
585598/////////////////////////////////////////////////////////////////////////////////////
586599
587static WRITE8_HANDLER( vid_uart_tx_w )
600WRITE8_MEMBER(bfm_sc1_state::vid_uart_tx_w)
588601{
589602   adder2_send(data);
590   cputag_set_input_line(space->machine(), "adder2", M6809_IRQ_LINE, ASSERT_LINE );//HOLD_LINE);// trigger IRQ
603   cputag_set_input_line(machine(), "adder2", M6809_IRQ_LINE, ASSERT_LINE );//HOLD_LINE);// trigger IRQ
591604}
592605
593606///////////////////////////////////////////////////////////////////////////
594607
595static WRITE8_HANDLER( vid_uart_ctrl_w )
608WRITE8_MEMBER(bfm_sc1_state::vid_uart_ctrl_w)
596609{
597610}
598611
599612///////////////////////////////////////////////////////////////////////////
600613
601static READ8_HANDLER( vid_uart_rx_r )
614READ8_MEMBER(bfm_sc1_state::vid_uart_rx_r)
602615{
603616   return adder2_receive();
604617}
605618
606619///////////////////////////////////////////////////////////////////////////
607620
608static READ8_HANDLER( vid_uart_ctrl_r )
621READ8_MEMBER(bfm_sc1_state::vid_uart_ctrl_r)
609622{
610623   return adder2_status();
611624}
r14845r14846
669682static ADDRESS_MAP_START( sc1_base, AS_PROGRAM, 8, bfm_sc1_state )
670683
671684   AM_RANGE(0x0000, 0x1FFF) AM_RAM AM_SHARE("nvram") //8k RAM
672   AM_RANGE(0x2000, 0x21FF) AM_WRITE_LEGACY(reel34_w)            // reel 2+3 latch
673   AM_RANGE(0x2200, 0x23FF) AM_WRITE_LEGACY(reel12_w)            // reel 1+2 latch
674   AM_RANGE(0x2400, 0x25FF) AM_WRITE_LEGACY(vfd_w)            // vfd latch
685   AM_RANGE(0x2000, 0x21FF) AM_WRITE(reel34_w)            // reel 2+3 latch
686   AM_RANGE(0x2200, 0x23FF) AM_WRITE(reel12_w)            // reel 1+2 latch
687   AM_RANGE(0x2400, 0x25FF) AM_WRITE(vfd_w)            // vfd latch
675688
676   AM_RANGE(0x2600, 0x27FF) AM_READWRITE_LEGACY(mmtr_r,mmtr_w)   // mechanical meters
677   AM_RANGE(0x2800, 0x2800) AM_READWRITE_LEGACY(triac_r,triac_w)   // payslide triacs
689   AM_RANGE(0x2600, 0x27FF) AM_READWRITE(mmtr_r,mmtr_w)   // mechanical meters
690   AM_RANGE(0x2800, 0x2800) AM_READWRITE(triac_r,triac_w)   // payslide triacs
678691
679   AM_RANGE(0x2A00, 0x2A00) AM_READWRITE_LEGACY(mux1latch_r,mux1latch_w) // mux1
680   AM_RANGE(0x2A01, 0x2A01) AM_READWRITE_LEGACY(mux1datlo_r,mux1datlo_w)
681   AM_RANGE(0x2A02, 0x2A02) AM_READWRITE_LEGACY(mux1dathi_r,mux1dathi_w)
692   AM_RANGE(0x2A00, 0x2A00) AM_READWRITE(mux1latch_r,mux1latch_w) // mux1
693   AM_RANGE(0x2A01, 0x2A01) AM_READWRITE(mux1datlo_r,mux1datlo_w)
694   AM_RANGE(0x2A02, 0x2A02) AM_READWRITE(mux1dathi_r,mux1dathi_w)
682695
683   AM_RANGE(0x2E00, 0x2E00) AM_READ_LEGACY(irqlatch_r)         // irq latch
696   AM_RANGE(0x2E00, 0x2E00) AM_READ(irqlatch_r)         // irq latch
684697
685698   AM_RANGE(0x3001, 0x3001) AM_READ_LEGACY(soundlatch_r)
686699   AM_RANGE(0x3001, 0x3001) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
687700   AM_RANGE(0x3101, 0x3201) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
688701
689   AM_RANGE(0x3406, 0x3406) AM_READWRITE_LEGACY(aciastat_r,aciactrl_w)  // MC6850 status register
690   AM_RANGE(0x3407, 0x3407) AM_READWRITE_LEGACY(aciadata_r,aciadata_w)  // MC6850 data register
702   AM_RANGE(0x3406, 0x3406) AM_READWRITE(aciastat_r,aciactrl_w)  // MC6850 status register
703   AM_RANGE(0x3407, 0x3407) AM_READWRITE(aciadata_r,aciadata_w)  // MC6850 data register
691704
692   AM_RANGE(0x3408, 0x3408) AM_READWRITE_LEGACY(mux2latch_r,mux2latch_w) // mux2
693   AM_RANGE(0x3409, 0x3409) AM_READWRITE_LEGACY(mux2datlo_r,mux2datlo_w)
694   AM_RANGE(0x340A, 0x340A) AM_READWRITE_LEGACY(mux2dathi_r,mux2dathi_w)
705   AM_RANGE(0x3408, 0x3408) AM_READWRITE(mux2latch_r,mux2latch_w) // mux2
706   AM_RANGE(0x3409, 0x3409) AM_READWRITE(mux2datlo_r,mux2datlo_w)
707   AM_RANGE(0x340A, 0x340A) AM_READWRITE(mux2dathi_r,mux2dathi_w)
695708
696   AM_RANGE(0x3600, 0x3600) AM_WRITE_LEGACY(bankswitch_w)       // write bank
697   AM_RANGE(0x3800, 0x39FF) AM_WRITE_LEGACY(reel56_w)            // reel 5+6 latch
709   AM_RANGE(0x3600, 0x3600) AM_WRITE(bankswitch_w)       // write bank
710   AM_RANGE(0x3800, 0x39FF) AM_WRITE(reel56_w)            // reel 5+6 latch
698711
699712   AM_RANGE(0x4000, 0x5FFF) AM_ROM                     // 8k  ROM
700713   AM_RANGE(0x6000, 0x7FFF) AM_ROMBANK("bank1")               // 8k  paged ROM (4 pages)
r14845r14846
709722static ADDRESS_MAP_START( sc1_adder2, AS_PROGRAM, 8, bfm_sc1_state )
710723   AM_IMPORT_FROM( sc1_base )
711724
712   AM_RANGE(0x3E00, 0x3E00) AM_READWRITE_LEGACY(vid_uart_ctrl_r,vid_uart_ctrl_w)   // video uart control reg read
713   AM_RANGE(0x3E01, 0x3E01) AM_READWRITE_LEGACY(vid_uart_rx_r,vid_uart_tx_w)      // video uart receive  reg
725   AM_RANGE(0x3E00, 0x3E00) AM_READWRITE(vid_uart_ctrl_r,vid_uart_ctrl_w)   // video uart control reg read
726   AM_RANGE(0x3E01, 0x3E01) AM_READWRITE(vid_uart_rx_r,vid_uart_tx_w)      // video uart receive  reg
714727ADDRESS_MAP_END
715728
716729
r14845r14846
721734static ADDRESS_MAP_START( sc1_viper, AS_PROGRAM, 8, bfm_sc1_state )
722735   AM_IMPORT_FROM( sc1_base )
723736
724   AM_RANGE(0x3404, 0x3404) AM_READ_LEGACY(dipcoin_r ) // coin input on gamecard
737   AM_RANGE(0x3404, 0x3404) AM_READ(dipcoin_r ) // coin input on gamecard
725738   AM_RANGE(0x3801, 0x3801) AM_DEVREAD_LEGACY("upd", nec_r)
726739   AM_RANGE(0x3800, 0x39FF) AM_DEVWRITE_LEGACY("upd", nec_latch_w)
727740ADDRESS_MAP_END
src/mame/drivers/murogem.c
r14845r14846
117117      : driver_device(mconfig, type, tag) { }
118118
119119   UINT8 *m_videoram;
120   DECLARE_WRITE8_MEMBER(outport_w);
120121};
121122
122123
123static WRITE8_HANDLER( outport_w )
124WRITE8_MEMBER(murogem_state::outport_w)
124125{
125126/*
126127   It's a Delta-Sigma DAC (1-bit/Bitstream)
r14845r14846
129130    7654 3210
130131    ---- x---   Sound DAC.
131132*/
132   dac_data_w(space->machine().device("dac"), data & 0x08);
133   dac_data_w(machine().device("dac"), data & 0x08);
133134}
134135
135136
r14845r14846
139140   AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("crtc", mc6845_device, register_w)
140141   AM_RANGE(0x5000, 0x5000) AM_READ_PORT("IN0")
141142   AM_RANGE(0x5800, 0x5800) AM_READ_PORT("IN1")
142   AM_RANGE(0x7000, 0x7000) AM_WRITE_LEGACY(outport_w)   /* output port */
143   AM_RANGE(0x7000, 0x7000) AM_WRITE(outport_w)   /* output port */
143144   AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE(m_videoram)
144145   AM_RANGE(0xf000, 0xffff) AM_ROM
145146ADDRESS_MAP_END
src/mame/drivers/cntsteer.c
r14845r14846
6262   device_t *m_maincpu;
6363   device_t *m_audiocpu;
6464   device_t *m_subcpu;
65   DECLARE_WRITE8_MEMBER(zerotrgt_vregs_w);
66   DECLARE_WRITE8_MEMBER(cntsteer_vregs_w);
67   DECLARE_WRITE8_MEMBER(cntsteer_foreground_vram_w);
68   DECLARE_WRITE8_MEMBER(cntsteer_foreground_attr_w);
69   DECLARE_WRITE8_MEMBER(cntsteer_background_w);
70   DECLARE_WRITE8_MEMBER(gekitsui_sub_irq_ack);
71   DECLARE_WRITE8_MEMBER(cntsteer_sound_w);
72   DECLARE_WRITE8_MEMBER(zerotrgt_ctrl_w);
73   DECLARE_WRITE8_MEMBER(cntsteer_sub_irq_w);
74   DECLARE_WRITE8_MEMBER(cntsteer_sub_nmi_w);
75   DECLARE_WRITE8_MEMBER(cntsteer_main_irq_w);
76   DECLARE_READ8_MEMBER(cntsteer_adx_r);
77   DECLARE_WRITE8_MEMBER(nmimask_w);
6578};
6679
6780
r14845r14846
365378      ---- ---x rotation sign (landscape should be turning right (0) == / , turning left (1) == \)
366379[4] = xxxx xxxx rotation factor?
367380*/
368static WRITE8_HANDLER(zerotrgt_vregs_w)
381WRITE8_MEMBER(cntsteer_state::zerotrgt_vregs_w)
369382{
370   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
371383//  static UINT8 test[5];
372384
373385//  test[offset] = data;
r14845r14846
375387
376388   switch (offset)
377389   {
378      case 0:   state->m_scrolly = data; break;
379      case 1:   state->m_scrollx = data; break;
380      case 2:   state->m_bg_bank = (data & 0x30) << 4;
381            state->m_bg_color_bank = (data & 7);
382            state->m_disable_roz = (data & 0x40);
383            state->m_bg_tilemap->mark_all_dirty();
390      case 0:   m_scrolly = data; break;
391      case 1:   m_scrollx = data; break;
392      case 2:   m_bg_bank = (data & 0x30) << 4;
393            m_bg_color_bank = (data & 7);
394            m_disable_roz = (data & 0x40);
395            m_bg_tilemap->mark_all_dirty();
384396            break;
385      case 3:   state->m_rotation_sign = (data & 1);
386            flip_screen_set(space->machine(), !(data & 4));
387            state->m_scrolly_hi = (data & 0x30) << 4;
388            state->m_scrollx_hi = (data & 0xc0) << 2;
397      case 3:   m_rotation_sign = (data & 1);
398            flip_screen_set(machine(), !(data & 4));
399            m_scrolly_hi = (data & 0x30) << 4;
400            m_scrollx_hi = (data & 0xc0) << 2;
389401            break;
390      case 4:   state->m_rotation_x = data; break;
402      case 4:   m_rotation_x = data; break;
391403   }
392404}
393405
394static WRITE8_HANDLER(cntsteer_vregs_w)
406WRITE8_MEMBER(cntsteer_state::cntsteer_vregs_w)
395407{
396   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
397408//  static UINT8 test[5];
398409
399410//  test[offset] = data;
r14845r14846
401412
402413   switch(offset)
403414   {
404      case 0:   state->m_scrolly = data; break;
405      case 1:   state->m_scrollx = data; break;
406      case 2:   state->m_bg_bank = (data & 0x01) << 8;
407            state->m_bg_color_bank = (data & 6) >> 1;
408            state->m_bg_tilemap->mark_all_dirty();
415      case 0:   m_scrolly = data; break;
416      case 1:   m_scrollx = data; break;
417      case 2:   m_bg_bank = (data & 0x01) << 8;
418            m_bg_color_bank = (data & 6) >> 1;
419            m_bg_tilemap->mark_all_dirty();
409420            break;
410      case 3:   state->m_rotation_sign = (data & 7);
411            state->m_disable_roz = (~data & 0x08);
412            state->m_scrolly_hi = (data & 0x30) << 4;
413            state->m_scrollx_hi = (data & 0xc0) << 2;
421      case 3:   m_rotation_sign = (data & 7);
422            m_disable_roz = (~data & 0x08);
423            m_scrolly_hi = (data & 0x30) << 4;
424            m_scrollx_hi = (data & 0xc0) << 2;
414425            break;
415      case 4:   state->m_rotation_x = data; break;
426      case 4:   m_rotation_x = data; break;
416427   }
417428}
418429
419static WRITE8_HANDLER( cntsteer_foreground_vram_w )
430WRITE8_MEMBER(cntsteer_state::cntsteer_foreground_vram_w)
420431{
421   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
422   state->m_videoram[offset] = data;
423   state->m_fg_tilemap->mark_tile_dirty(offset);
432   m_videoram[offset] = data;
433   m_fg_tilemap->mark_tile_dirty(offset);
424434}
425435
426static WRITE8_HANDLER( cntsteer_foreground_attr_w )
436WRITE8_MEMBER(cntsteer_state::cntsteer_foreground_attr_w)
427437{
428   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
429   state->m_colorram[offset] = data;
430   state->m_fg_tilemap->mark_tile_dirty(offset);
438   m_colorram[offset] = data;
439   m_fg_tilemap->mark_tile_dirty(offset);
431440}
432441
433static WRITE8_HANDLER( cntsteer_background_w )
442WRITE8_MEMBER(cntsteer_state::cntsteer_background_w)
434443{
435   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
436   state->m_videoram2[offset] = data;
437   state->m_bg_tilemap->mark_tile_dirty(offset);
444   m_videoram2[offset] = data;
445   m_bg_tilemap->mark_tile_dirty(offset);
438446}
439447
440448/*************************************
r14845r14846
443451 *
444452 *************************************/
445453
446static WRITE8_HANDLER( gekitsui_sub_irq_ack )
454WRITE8_MEMBER(cntsteer_state::gekitsui_sub_irq_ack)
447455{
448   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
449   device_set_input_line(state->m_subcpu, M6809_IRQ_LINE, CLEAR_LINE);
456   device_set_input_line(m_subcpu, M6809_IRQ_LINE, CLEAR_LINE);
450457}
451458
452static WRITE8_HANDLER( cntsteer_sound_w )
459WRITE8_MEMBER(cntsteer_state::cntsteer_sound_w)
453460{
454   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
455461   soundlatch_w(space, 0, data);
456   device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
462   device_set_input_line(m_audiocpu, 0, HOLD_LINE);
457463}
458464
459static WRITE8_HANDLER( zerotrgt_ctrl_w )
465WRITE8_MEMBER(cntsteer_state::zerotrgt_ctrl_w)
460466{
461   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
462467   /*TODO: check this.*/
463   logerror("CTRL: %04x: %04x: %04x\n", cpu_get_pc(&space->device()), offset, data);
464//  if (offset == 0) device_set_input_line(state->m_subcpu, INPUT_LINE_RESET, ASSERT_LINE);
468   logerror("CTRL: %04x: %04x: %04x\n", cpu_get_pc(&space.device()), offset, data);
469//  if (offset == 0) device_set_input_line(m_subcpu, INPUT_LINE_RESET, ASSERT_LINE);
465470
466471   // Wrong - bits 0 & 1 used on this
467   if (offset == 1) device_set_input_line(state->m_subcpu, M6809_IRQ_LINE, ASSERT_LINE);
468//  if (offset == 2) device_set_input_line(state->m_subcpu, INPUT_LINE_RESET, CLEAR_LINE);
472   if (offset == 1) device_set_input_line(m_subcpu, M6809_IRQ_LINE, ASSERT_LINE);
473//  if (offset == 2) device_set_input_line(m_subcpu, INPUT_LINE_RESET, CLEAR_LINE);
469474}
470475
471static WRITE8_HANDLER( cntsteer_sub_irq_w )
476WRITE8_MEMBER(cntsteer_state::cntsteer_sub_irq_w)
472477{
473   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
474   device_set_input_line(state->m_subcpu, M6809_IRQ_LINE, ASSERT_LINE);
478   device_set_input_line(m_subcpu, M6809_IRQ_LINE, ASSERT_LINE);
475479//  printf("%02x IRQ\n", data);
476480}
477481
478static WRITE8_HANDLER( cntsteer_sub_nmi_w )
482WRITE8_MEMBER(cntsteer_state::cntsteer_sub_nmi_w)
479483{
480484//  if (data)
481//  device_set_input_line(state->m_subcpu, INPUT_LINE_NMI, PULSE_LINE);
485//  device_set_input_line(m_subcpu, INPUT_LINE_NMI, PULSE_LINE);
482486//  popmessage("%02x", data);
483487}
484488
485static WRITE8_HANDLER( cntsteer_main_irq_w )
489WRITE8_MEMBER(cntsteer_state::cntsteer_main_irq_w)
486490{
487   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
488   device_set_input_line(state->m_maincpu, M6809_IRQ_LINE, HOLD_LINE);
491   device_set_input_line(m_maincpu, M6809_IRQ_LINE, HOLD_LINE);
489492}
490493
491494/* Convert weird input handling with MAME standards.*/
492static READ8_HANDLER( cntsteer_adx_r )
495READ8_MEMBER(cntsteer_state::cntsteer_adx_r)
493496{
494497   UINT8 res = 0, adx_val;
495   adx_val = input_port_read(space->machine(), "AN_STEERING");
498   adx_val = input_port_read(machine(), "AN_STEERING");
496499
497500   if (adx_val >= 0x70 && adx_val <= 0x90)
498501      res = 0xff;
r14845r14846
528531   AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("share1")
529532   AM_RANGE(0x1000, 0x11ff) AM_RAM AM_BASE(m_spriteram)
530533   AM_RANGE(0x1200, 0x1fff) AM_RAM
531   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE_LEGACY(cntsteer_foreground_vram_w) AM_BASE(m_videoram)
532   AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE_LEGACY(cntsteer_foreground_attr_w) AM_BASE(m_colorram)
533   AM_RANGE(0x3000, 0x3003) AM_WRITE_LEGACY(zerotrgt_ctrl_w)
534   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(cntsteer_foreground_vram_w) AM_BASE(m_videoram)
535   AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE(cntsteer_foreground_attr_w) AM_BASE(m_colorram)
536   AM_RANGE(0x3000, 0x3003) AM_WRITE(zerotrgt_ctrl_w)
534537   AM_RANGE(0x8000, 0xffff) AM_ROM
535538ADDRESS_MAP_END
536539
537540static ADDRESS_MAP_START( gekitsui_cpu2_map, AS_PROGRAM, 8, cntsteer_state )
538541   AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("share1")
539   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE_LEGACY(cntsteer_background_w) AM_BASE(m_videoram2)
542   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(cntsteer_background_w) AM_BASE(m_videoram2)
540543   AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW0")
541544   AM_RANGE(0x3001, 0x3001) AM_READ_PORT("P2")
542545   AM_RANGE(0x3002, 0x3002) AM_READ_PORT("P1")
543546   AM_RANGE(0x3003, 0x3003) AM_READ_PORT("COINS")
544   AM_RANGE(0x3000, 0x3004) AM_WRITE_LEGACY(zerotrgt_vregs_w)
545   AM_RANGE(0x3005, 0x3005) AM_WRITE_LEGACY(gekitsui_sub_irq_ack)
546   AM_RANGE(0x3007, 0x3007) AM_WRITE_LEGACY(cntsteer_sound_w)
547   AM_RANGE(0x3000, 0x3004) AM_WRITE(zerotrgt_vregs_w)
548   AM_RANGE(0x3005, 0x3005) AM_WRITE(gekitsui_sub_irq_ack)
549   AM_RANGE(0x3007, 0x3007) AM_WRITE(cntsteer_sound_w)
547550   AM_RANGE(0x4000, 0xffff) AM_ROM
548551ADDRESS_MAP_END
549552
550553static ADDRESS_MAP_START( cntsteer_cpu1_map, AS_PROGRAM, 8, cntsteer_state )
551554   AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("share1")
552555   AM_RANGE(0x1000, 0x11ff) AM_RAM AM_BASE(m_spriteram)
553   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE_LEGACY(cntsteer_foreground_vram_w) AM_BASE(m_videoram)
554   AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE_LEGACY(cntsteer_foreground_attr_w) AM_BASE(m_colorram)
555   AM_RANGE(0x3000, 0x3000) AM_WRITE_LEGACY(cntsteer_sub_nmi_w)
556   AM_RANGE(0x3001, 0x3001) AM_WRITE_LEGACY(cntsteer_sub_irq_w)
556   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(cntsteer_foreground_vram_w) AM_BASE(m_videoram)
557   AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE(cntsteer_foreground_attr_w) AM_BASE(m_colorram)
558   AM_RANGE(0x3000, 0x3000) AM_WRITE(cntsteer_sub_nmi_w)
559   AM_RANGE(0x3001, 0x3001) AM_WRITE(cntsteer_sub_irq_w)
557560   AM_RANGE(0x8000, 0xffff) AM_ROM
558561ADDRESS_MAP_END
559562
560563static ADDRESS_MAP_START( cntsteer_cpu2_map, AS_PROGRAM, 8, cntsteer_state )
561564   AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("share1")
562   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE_LEGACY(cntsteer_background_w) AM_BASE(m_videoram2) AM_SHARE("share3")
563   AM_RANGE(0x2000, 0x2fff) AM_RAM_WRITE_LEGACY(cntsteer_background_w) AM_SHARE("share3")
565   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(cntsteer_background_w) AM_BASE(m_videoram2) AM_SHARE("share3")
566   AM_RANGE(0x2000, 0x2fff) AM_RAM_WRITE(cntsteer_background_w) AM_SHARE("share3")
564567   AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW0")
565   AM_RANGE(0x3001, 0x3001) AM_READ_LEGACY(cntsteer_adx_r)
568   AM_RANGE(0x3001, 0x3001) AM_READ(cntsteer_adx_r)
566569   AM_RANGE(0x3002, 0x3002) AM_READ_PORT("P1")
567570   AM_RANGE(0x3003, 0x3003) AM_READ_PORT("COINS")
568   AM_RANGE(0x3000, 0x3004) AM_WRITE_LEGACY(cntsteer_vregs_w)
569   AM_RANGE(0x3005, 0x3005) AM_WRITE_LEGACY(gekitsui_sub_irq_ack)
570   AM_RANGE(0x3006, 0x3006) AM_WRITE_LEGACY(cntsteer_main_irq_w)
571   AM_RANGE(0x3007, 0x3007) AM_WRITE_LEGACY(cntsteer_sound_w)
571   AM_RANGE(0x3000, 0x3004) AM_WRITE(cntsteer_vregs_w)
572   AM_RANGE(0x3005, 0x3005) AM_WRITE(gekitsui_sub_irq_ack)
573   AM_RANGE(0x3006, 0x3006) AM_WRITE(cntsteer_main_irq_w)
574   AM_RANGE(0x3007, 0x3007) AM_WRITE(cntsteer_sound_w)
572575   AM_RANGE(0x3007, 0x3007) AM_READNOP //m6809 bug.
573576   AM_RANGE(0x4000, 0xffff) AM_ROM
574577ADDRESS_MAP_END
575578
576579/***************************************************************************/
577580
578static WRITE8_HANDLER( nmimask_w )
581WRITE8_MEMBER(cntsteer_state::nmimask_w)
579582{
580   cntsteer_state *state = space->machine().driver_data<cntsteer_state>();
581   state->m_nmimask = data & 0x80;
583   m_nmimask = data & 0x80;
582584}
583585
584586static INTERRUPT_GEN ( sound_interrupt )
r14845r14846
596598   AM_RANGE(0x6000, 0x6000) AM_DEVWRITE_LEGACY("ay2", ay8910_data_w)
597599   AM_RANGE(0x8000, 0x8000) AM_DEVWRITE_LEGACY("ay2", ay8910_address_w)
598600   AM_RANGE(0xa000, 0xa000) AM_READ_LEGACY(soundlatch_r)
599   AM_RANGE(0xd000, 0xd000) AM_WRITE_LEGACY(nmimask_w)
601   AM_RANGE(0xd000, 0xd000) AM_WRITE(nmimask_w)
600602   AM_RANGE(0xe000, 0xffff) AM_ROM
601603ADDRESS_MAP_END
602604
src/mame/drivers/csplayh5.c
r14845r14846
4040
4141   required_device<cpu_device> m_maincpu;
4242   required_device<v9958_device> m_v9958;
43   DECLARE_READ16_MEMBER(csplayh5_mux_r);
44   DECLARE_WRITE16_MEMBER(csplayh5_mux_w);
45   DECLARE_WRITE16_MEMBER(csplayh5_sound_w);
46   DECLARE_READ16_MEMBER(test_r);
47   DECLARE_READ8_MEMBER(csplayh5_sound_r);
48   DECLARE_WRITE8_MEMBER(csplayh5_soundclr_w);
49   DECLARE_READ8_MEMBER(tmpz84c011_pio_r);
50   DECLARE_WRITE8_MEMBER(tmpz84c011_pio_w);
51   DECLARE_READ8_MEMBER(tmpz84c011_0_pa_r);
52   DECLARE_READ8_MEMBER(tmpz84c011_0_pb_r);
53   DECLARE_READ8_MEMBER(tmpz84c011_0_pc_r);
54   DECLARE_READ8_MEMBER(tmpz84c011_0_pd_r);
55   DECLARE_READ8_MEMBER(tmpz84c011_0_pe_r);
56   DECLARE_WRITE8_MEMBER(tmpz84c011_0_pa_w);
57   DECLARE_WRITE8_MEMBER(tmpz84c011_0_pb_w);
58   DECLARE_WRITE8_MEMBER(tmpz84c011_0_pc_w);
59   DECLARE_WRITE8_MEMBER(tmpz84c011_0_pd_w);
60   DECLARE_WRITE8_MEMBER(tmpz84c011_0_pe_w);
61   DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pa_r);
62   DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pb_r);
63   DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pc_r);
64   DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pd_r);
65   DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pe_r);
66   DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pa_w);
67   DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pb_w);
68   DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pc_w);
69   DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pd_w);
70   DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pe_w);
4371};
4472
4573
r14845r14846
6088       interrupts seem to be fired quite randomly */
6189}
6290
63static READ16_HANDLER( csplayh5_mux_r )
91READ16_MEMBER(csplayh5_state::csplayh5_mux_r)
6492{
65   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
66   switch(state->m_mux_data)
93   switch(m_mux_data)
6794   {
68      case 0x01: return input_port_read(space->machine(), "KEY0");
69      case 0x02: return input_port_read(space->machine(), "KEY1");
70      case 0x04: return input_port_read(space->machine(), "KEY2");
71      case 0x08: return input_port_read(space->machine(), "KEY3");
72      case 0x10: return input_port_read(space->machine(), "KEY4");
95      case 0x01: return input_port_read(machine(), "KEY0");
96      case 0x02: return input_port_read(machine(), "KEY1");
97      case 0x04: return input_port_read(machine(), "KEY2");
98      case 0x08: return input_port_read(machine(), "KEY3");
99      case 0x10: return input_port_read(machine(), "KEY4");
73100   }
74101
75102   return 0xffff;
76103}
77104
78static WRITE16_HANDLER( csplayh5_mux_w )
105WRITE16_MEMBER(csplayh5_state::csplayh5_mux_w)
79106{
80   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
81   state->m_mux_data = (~data & 0x1f);
107   m_mux_data = (~data & 0x1f);
82108}
83109
84static WRITE16_HANDLER( csplayh5_sound_w )
110WRITE16_MEMBER(csplayh5_state::csplayh5_sound_w)
85111{
86112   soundlatch_w(space, 0, ((data >> 8) & 0xff));
87113}
r14845r14846
90116static ADDRESS_MAP_START( csplayh5_map, AS_PROGRAM, 16, csplayh5_state )
91117   AM_RANGE(0x000000, 0x03ffff) AM_ROM
92118
93   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("DSW") AM_WRITE_LEGACY(csplayh5_sound_w)
94   AM_RANGE(0x200200, 0x200201) AM_READWRITE_LEGACY(csplayh5_mux_r,csplayh5_mux_w)
119   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("DSW") AM_WRITE(csplayh5_sound_w)
120   AM_RANGE(0x200200, 0x200201) AM_READWRITE(csplayh5_mux_r,csplayh5_mux_w)
95121   AM_RANGE(0x200400, 0x200401) AM_READ_PORT("SYSTEM")
96122
97123   AM_RANGE(0x200600, 0x200607) AM_DEVREADWRITE8("v9958", v9958_device, read, write, 0x00ff)
r14845r14846
104130ADDRESS_MAP_END
105131
106132#if USE_H8
107static READ16_HANDLER( test_r )
133READ16_MEMBER(csplayh5_state::test_r)
108134{
109   return space->machine().rand();
135   return machine().rand();
110136}
111137
112138static ADDRESS_MAP_START( csplayh5_sub_map, AS_PROGRAM, 16, csplayh5_state )
113139   AM_RANGE(0x000000, 0x01ffff) AM_ROM
114140
115   AM_RANGE(0x04002a, 0x04002b) AM_READ_LEGACY(test_r)
116   AM_RANGE(0x040036, 0x040037) AM_READ_LEGACY(test_r)
141   AM_RANGE(0x04002a, 0x04002b) AM_READ(test_r)
142   AM_RANGE(0x040036, 0x040037) AM_READ(test_r)
117143
118144   AM_RANGE(0x078000, 0x07ffff) AM_RAM AM_SHARE("nvram")
119145   AM_RANGE(0x080000, 0x0fffff) AM_RAM
r14845r14846
146172   memory_set_bankptr(machine, "bank1", &SNDROM[0x08000 + (0x8000 * (data & 0x03))]);
147173}
148174
149static READ8_HANDLER( csplayh5_sound_r )
175READ8_MEMBER(csplayh5_state::csplayh5_sound_r)
150176{
151177   return soundlatch_r(space, 0);
152178}
153179
154static WRITE8_HANDLER( csplayh5_soundclr_w )
180WRITE8_MEMBER(csplayh5_state::csplayh5_soundclr_w)
155181{
156182   soundlatch_clear_w(space, 0, 0);
157183}
158184
159static READ8_HANDLER( tmpz84c011_pio_r )
185READ8_MEMBER(csplayh5_state::tmpz84c011_pio_r)
160186{
161187   int portdata;
162188
r14845r14846
179205         break;
180206
181207      default:
182         logerror("%s: TMPZ84C011_PIO Unknown Port Read %02X\n", space->machine().describe_context(), offset);
208         logerror("%s: TMPZ84C011_PIO Unknown Port Read %02X\n", machine().describe_context(), offset);
183209         portdata = 0xff;
184210         break;
185211   }
r14845r14846
187213   return portdata;
188214}
189215
190static WRITE8_HANDLER( tmpz84c011_pio_w)
216WRITE8_MEMBER(csplayh5_state::tmpz84c011_pio_w)
191217{
192218   switch (offset)
193219   {
194220      case 0:         /* PA_0 */
195         csplayh5_soundbank_w(space->machine(), data & 0x03);
221         csplayh5_soundbank_w(machine(), data & 0x03);
196222         break;
197223      case 1:         /* PB_0 */
198         DAC_WRITE(space->machine().device("dac2"), 0, data);
224         DAC_WRITE(machine().device("dac2"), 0, data);
199225         break;
200226      case 2:         /* PC_0 */
201         DAC_WRITE(space->machine().device("dac1"), 0, data);
227         DAC_WRITE(machine().device("dac1"), 0, data);
202228         break;
203229      case 3:         /* PD_0 */
204230         break;
r14845r14846
207233         break;
208234
209235      default:
210         logerror("%s: TMPZ84C011_PIO Unknown Port Write %02X, %02X\n", space->machine().describe_context(), offset, data);
236         logerror("%s: TMPZ84C011_PIO Unknown Port Write %02X, %02X\n", machine().describe_context(), offset, data);
211237         break;
212238   }
213239}
214240
215241
216242/* CPU interface */
217static READ8_HANDLER( tmpz84c011_0_pa_r )
243READ8_MEMBER(csplayh5_state::tmpz84c011_0_pa_r)
218244{
219   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
220   return (tmpz84c011_pio_r(space,0) & ~state->m_pio_dir[0]) | (state->m_pio_latch[0] & state->m_pio_dir[0]);
245   return (tmpz84c011_pio_r(space,0) & ~m_pio_dir[0]) | (m_pio_latch[0] & m_pio_dir[0]);
221246}
222247
223static READ8_HANDLER( tmpz84c011_0_pb_r )
248READ8_MEMBER(csplayh5_state::tmpz84c011_0_pb_r)
224249{
225   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
226   return (tmpz84c011_pio_r(space,1) & ~state->m_pio_dir[1]) | (state->m_pio_latch[1] & state->m_pio_dir[1]);
250   return (tmpz84c011_pio_r(space,1) & ~m_pio_dir[1]) | (m_pio_latch[1] & m_pio_dir[1]);
227251}
228252
229static READ8_HANDLER( tmpz84c011_0_pc_r )
253READ8_MEMBER(csplayh5_state::tmpz84c011_0_pc_r)
230254{
231   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
232   return (tmpz84c011_pio_r(space,2) & ~state->m_pio_dir[2]) | (state->m_pio_latch[2] & state->m_pio_dir[2]);
255   return (tmpz84c011_pio_r(space,2) & ~m_pio_dir[2]) | (m_pio_latch[2] & m_pio_dir[2]);
233256}
234257
235static READ8_HANDLER( tmpz84c011_0_pd_r )
258READ8_MEMBER(csplayh5_state::tmpz84c011_0_pd_r)
236259{
237   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
238   return (tmpz84c011_pio_r(space,3) & ~state->m_pio_dir[3]) | (state->m_pio_latch[3] & state->m_pio_dir[3]);
260   return (tmpz84c011_pio_r(space,3) & ~m_pio_dir[3]) | (m_pio_latch[3] & m_pio_dir[3]);
239261}
240262
241static READ8_HANDLER( tmpz84c011_0_pe_r )
263READ8_MEMBER(csplayh5_state::tmpz84c011_0_pe_r)
242264{
243   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
244   return (tmpz84c011_pio_r(space,4) & ~state->m_pio_dir[4]) | (state->m_pio_latch[4] & state->m_pio_dir[4]);
265   return (tmpz84c011_pio_r(space,4) & ~m_pio_dir[4]) | (m_pio_latch[4] & m_pio_dir[4]);
245266}
246267
247static WRITE8_HANDLER( tmpz84c011_0_pa_w )
268WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pa_w)
248269{
249   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
250   state->m_pio_latch[0] = data;
270   m_pio_latch[0] = data;
251271   tmpz84c011_pio_w(space, 0, data);
252272}
253273
254static WRITE8_HANDLER( tmpz84c011_0_pb_w )
274WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pb_w)
255275{
256   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
257   state->m_pio_latch[1] = data;
276   m_pio_latch[1] = data;
258277   tmpz84c011_pio_w(space, 1, data);
259278}
260279
261static WRITE8_HANDLER( tmpz84c011_0_pc_w )
280WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pc_w)
262281{
263   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
264   state->m_pio_latch[2] = data;
282   m_pio_latch[2] = data;
265283   tmpz84c011_pio_w(space, 2, data);
266284}
267285
268static WRITE8_HANDLER( tmpz84c011_0_pd_w )
286WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pd_w)
269287{
270   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
271   state->m_pio_latch[3] = data;
288   m_pio_latch[3] = data;
272289   tmpz84c011_pio_w(space, 3, data);
273290}
274291
275static WRITE8_HANDLER( tmpz84c011_0_pe_w )
292WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pe_w)
276293{
277   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
278   state->m_pio_latch[4] = data;
294   m_pio_latch[4] = data;
279295   tmpz84c011_pio_w(space, 4, data);
280296}
281297
282298
283static READ8_HANDLER( tmpz84c011_0_dir_pa_r )
299READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pa_r)
284300{
285   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
286   return state->m_pio_dir[0];
301   return m_pio_dir[0];
287302}
288303
289static READ8_HANDLER( tmpz84c011_0_dir_pb_r )
304READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pb_r)
290305{
291   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
292   return state->m_pio_dir[1];
306   return m_pio_dir[1];
293307}
294308
295static READ8_HANDLER( tmpz84c011_0_dir_pc_r )
309READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pc_r)
296310{
297   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
298   return state->m_pio_dir[2];
311   return m_pio_dir[2];
299312}
300313
301static READ8_HANDLER( tmpz84c011_0_dir_pd_r )
314READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pd_r)
302315{
303   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
304   return state->m_pio_dir[3];
316   return m_pio_dir[3];
305317}
306318
307static READ8_HANDLER( tmpz84c011_0_dir_pe_r )
319READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pe_r)
308320{
309   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
310   return state->m_pio_dir[4];
321   return m_pio_dir[4];
311322}
312323
313324
314static WRITE8_HANDLER( tmpz84c011_0_dir_pa_w )
325WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pa_w)
315326{
316   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
317   state->m_pio_dir[0] = data;
327   m_pio_dir[0] = data;
318328}
319329
320static WRITE8_HANDLER( tmpz84c011_0_dir_pb_w )
330WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pb_w)
321331{
322   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
323   state->m_pio_dir[1] = data;
332   m_pio_dir[1] = data;
324333}
325334
326static WRITE8_HANDLER( tmpz84c011_0_dir_pc_w )
335WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pc_w)
327336{
328   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
329   state->m_pio_dir[2] = data;
337   m_pio_dir[2] = data;
330338}
331339
332static WRITE8_HANDLER( tmpz84c011_0_dir_pd_w )
340WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pd_w)
333341{
334   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
335   state->m_pio_dir[3] = data;
342   m_pio_dir[3] = data;
336343}
337344
338static WRITE8_HANDLER( tmpz84c011_0_dir_pe_w )
345WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pe_w)
339346{
340   csplayh5_state *state = space->machine().driver_data<csplayh5_state>();
341   state->m_pio_dir[4] = data;
347   m_pio_dir[4] = data;
342348}
343349
344350
r14845r14846
351357static ADDRESS_MAP_START( csplayh5_sound_io_map, AS_IO, 8, csplayh5_state )
352358   ADDRESS_MAP_GLOBAL_MASK(0xff)
353359   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("ctc", z80ctc_r, z80ctc_w)
354   AM_RANGE(0x50, 0x50) AM_READWRITE_LEGACY(tmpz84c011_0_pa_r, tmpz84c011_0_pa_w)
355   AM_RANGE(0x51, 0x51) AM_READWRITE_LEGACY(tmpz84c011_0_pb_r, tmpz84c011_0_pb_w)
356   AM_RANGE(0x52, 0x52) AM_READWRITE_LEGACY(tmpz84c011_0_pc_r, tmpz84c011_0_pc_w)
357   AM_RANGE(0x30, 0x30) AM_READWRITE_LEGACY(tmpz84c011_0_pd_r, tmpz84c011_0_pd_w)
358   AM_RANGE(0x40, 0x40) AM_READWRITE_LEGACY(tmpz84c011_0_pe_r, tmpz84c011_0_pe_w)
359   AM_RANGE(0x54, 0x54) AM_READWRITE_LEGACY(tmpz84c011_0_dir_pa_r, tmpz84c011_0_dir_pa_w)
360   AM_RANGE(0x55, 0x55) AM_READWRITE_LEGACY(tmpz84c011_0_dir_pb_r, tmpz84c011_0_dir_pb_w)
361   AM_RANGE(0x56, 0x56) AM_READWRITE_LEGACY(tmpz84c011_0_dir_pc_r, tmpz84c011_0_dir_pc_w)
362   AM_RANGE(0x34, 0x34) AM_READWRITE_LEGACY(tmpz84c011_0_dir_pd_r, tmpz84c011_0_dir_pd_w)
363   AM_RANGE(0x44, 0x44) AM_READWRITE_LEGACY(tmpz84c011_0_dir_pe_r, tmpz84c011_0_dir_pe_w)
360   AM_RANGE(0x50, 0x50) AM_READWRITE(tmpz84c011_0_pa_r, tmpz84c011_0_pa_w)
361   AM_RANGE(0x51, 0x51) AM_READWRITE(tmpz84c011_0_pb_r, tmpz84c011_0_pb_w)
362   AM_RANGE(0x52, 0x52) AM_READWRITE(tmpz84c011_0_pc_r, tmpz84c011_0_pc_w)
363   AM_RANGE(0x30, 0x30) AM_READWRITE(tmpz84c011_0_pd_r, tmpz84c011_0_pd_w)
364   AM_RANGE(0x40, 0x40) AM_READWRITE(tmpz84c011_0_pe_r, tmpz84c011_0_pe_w)
365   AM_RANGE(0x54, 0x54) AM_READWRITE(tmpz84c011_0_dir_pa_r, tmpz84c011_0_dir_pa_w)
366   AM_RANGE(0x55, 0x55) AM_READWRITE(tmpz84c011_0_dir_pb_r, tmpz84c011_0_dir_pb_w)
367   AM_RANGE(0x56, 0x56) AM_READWRITE(tmpz84c011_0_dir_pc_r, tmpz84c011_0_dir_pc_w)
368   AM_RANGE(0x34, 0x34) AM_READWRITE(tmpz84c011_0_dir_pd_r, tmpz84c011_0_dir_pd_w)
369   AM_RANGE(0x44, 0x44) AM_READWRITE(tmpz84c011_0_dir_pe_r, tmpz84c011_0_dir_pe_w)
364370   AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w)
365371ADDRESS_MAP_END
366372
r14845r14846
576582   for (i = 0; i < 5; i++)
577583   {
578584      state->m_pio_dir[i] = state->m_pio_latch[i] = 0;
579      tmpz84c011_pio_w(space, i, 0);
585      state->tmpz84c011_pio_w(*space, i, 0);
580586   }
581587}
582588
src/mame/drivers/nexus3d.c
r14845r14846
3838
3939   UINT8* m_flash_region;
4040
41   DECLARE_READ32_MEMBER(nexus3d_unk_r);
42//   DECLARE_READ32_MEMBER(nexus3d_unk2_r);
43//   DECLARE_READ32_MEMBER(nexus3d_unk3_r);
44//   DECLARE_WRITE32_MEMBER(nexus3d_unk2_w);
45//   DECLARE_WRITE32_MEMBER(nexus3d_unk3_w);
4146};
4247
4348
r14845r14846
120125
121126}
122127
123static READ32_HANDLER( nexus3d_unk_r )
128READ32_MEMBER(nexus3d_state::nexus3d_unk_r)
124129{
125   return space->machine().rand() ^ (space->machine().rand() << 16);
130   return machine().rand() ^ (machine().rand() << 16);
126131}
127132
128//static READ32_HANDLER( nexus3d_unk2_r )
133//READ32_MEMBER(nexus3d_state::nexus3d_unk2_r)
129134//{
130//  return 0x00000000;//space->machine().rand() ^ (space->machine().rand() << 16);
135//  return 0x00000000;//machine().rand() ^ (machine().rand() << 16);
131136//}
132137//
133//static READ32_HANDLER( nexus3d_unk3_r )
138//READ32_MEMBER(nexus3d_state::nexus3d_unk3_r)
134139//{
135//  return 0x00000000;//space->machine().rand() ^ (space->machine().rand() << 16);
140//  return 0x00000000;//machine().rand() ^ (machine().rand() << 16);
136141//}
137142//
138//static WRITE32_HANDLER( nexus3d_unk2_w )
143//WRITE32_MEMBER(nexus3d_state::nexus3d_unk2_w)
139144//{
140145//
141146//}
142147//
143//static WRITE32_HANDLER( nexus3d_unk3_w )
148//WRITE32_MEMBER(nexus3d_state::nexus3d_unk3_w)
144149//{
145150//
146151//}
r14845r14846
156161   AM_RANGE(0x9C000018, 0x9C00001b) AM_WRITE8_LEGACY(n3d_flash_addr_w, 0xffffffff)
157162
158163   // lots of accesses in this range
159//  AM_RANGE(0xC0000F44, 0xC0000F47) AM_READWRITE_LEGACY(nexus3d_unk2_r, nexus3d_unk2_w ) // often
160//  AM_RANGE(0xC0000F4C, 0xC0000F4f) AM_READWRITE_LEGACY(nexus3d_unk3_r, nexus3d_unk3_w ) // often
164//  AM_RANGE(0xC0000F44, 0xC0000F47) AM_READWRITE(nexus3d_unk2_r, nexus3d_unk2_w ) // often
165//  AM_RANGE(0xC0000F4C, 0xC0000F4f) AM_READWRITE(nexus3d_unk3_r, nexus3d_unk3_w ) // often
161166
162   AM_RANGE(0xE0000014, 0xE0000017) AM_READ_LEGACY(nexus3d_unk_r ) // sits waiting for this
167   AM_RANGE(0xE0000014, 0xE0000017) AM_READ(nexus3d_unk_r ) // sits waiting for this
163168
164169
165170ADDRESS_MAP_END
src/mame/drivers/skeetsht.c
r14845r14846
3030   UINT16 m_lastdatar;
3131   device_t *m_ay;
3232   device_t *m_tms;
33   DECLARE_READ16_MEMBER(ramdac_r);
34   DECLARE_WRITE16_MEMBER(ramdac_w);
35   DECLARE_WRITE8_MEMBER(tms_w);
36   DECLARE_READ8_MEMBER(tms_r);
37   DECLARE_READ8_MEMBER(hc11_porta_r);
38   DECLARE_WRITE8_MEMBER(hc11_porta_w);
39   DECLARE_WRITE8_MEMBER(ay8910_w);
3340};
3441
3542
r14845r14846
7582   }
7683}
7784
78static READ16_HANDLER( ramdac_r )
85READ16_MEMBER(skeetsht_state::ramdac_r)
7986{
8087   offset = (offset >> 12) & ~4;
8188
8289   if (offset & 8)
8390      offset = (offset & ~8) | 4;
8491
85   return tlc34076_r(space->machine().device("tlc34076"), offset);
92   return tlc34076_r(machine().device("tlc34076"), offset);
8693}
8794
88static WRITE16_HANDLER( ramdac_w )
95WRITE16_MEMBER(skeetsht_state::ramdac_w)
8996{
9097   offset = (offset >> 12) & ~4;
9198
9299   if (offset & 8)
93100      offset = (offset & ~8) | 4;
94101
95   tlc34076_w(space->machine().device("tlc34076"), offset, data);
102   tlc34076_w(machine().device("tlc34076"), offset, data);
96103}
97104
98105
r14845r14846
108115}
109116
110117
111static WRITE8_HANDLER( tms_w )
118WRITE8_MEMBER(skeetsht_state::tms_w)
112119{
113   skeetsht_state *state = space->machine().driver_data<skeetsht_state>();
114120
115121   if ((offset & 1) == 0)
116      state->m_lastdataw = data;
122      m_lastdataw = data;
117123   else
118      tms34010_host_w(state->m_tms, offset >> 1, (state->m_lastdataw << 8) | data);
124      tms34010_host_w(m_tms, offset >> 1, (m_lastdataw << 8) | data);
119125}
120126
121static READ8_HANDLER( tms_r )
127READ8_MEMBER(skeetsht_state::tms_r)
122128{
123   skeetsht_state *state = space->machine().driver_data<skeetsht_state>();
124129
125130   if ((offset & 1) == 0)
126      state->m_lastdatar = tms34010_host_r(state->m_tms, offset >> 1);
131      m_lastdatar = tms34010_host_r(m_tms, offset >> 1);
127132
128   return state->m_lastdatar >> ((offset & 1) ? 0 : 8);
133   return m_lastdatar >> ((offset & 1) ? 0 : 8);
129134}
130135
131136
r14845r14846
135140 *
136141 *************************************/
137142
138static READ8_HANDLER( hc11_porta_r )
143READ8_MEMBER(skeetsht_state::hc11_porta_r)
139144{
140   skeetsht_state *state = space->machine().driver_data<skeetsht_state>();
141145
142   return state->m_porta_latch;
146   return m_porta_latch;
143147}
144148
145static WRITE8_HANDLER( hc11_porta_w )
149WRITE8_MEMBER(skeetsht_state::hc11_porta_w)
146150{
147   skeetsht_state *state = space->machine().driver_data<skeetsht_state>();
148151
149   if (!(data & 0x8) && (state->m_porta_latch & 8))
150      state->m_ay_sel = state->m_porta_latch & 0x10;
152   if (!(data & 0x8) && (m_porta_latch & 8))
153      m_ay_sel = m_porta_latch & 0x10;
151154
152   state->m_porta_latch = data;
155   m_porta_latch = data;
153156}
154157
155static WRITE8_HANDLER( ay8910_w )
158WRITE8_MEMBER(skeetsht_state::ay8910_w)
156159{
157   skeetsht_state *state = space->machine().driver_data<skeetsht_state>();
158160
159   if (state->m_ay_sel)
160      ay8910_data_w(state->m_ay, 0, data);
161   if (m_ay_sel)
162      ay8910_data_w(m_ay, 0, data);
161163   else
162      ay8910_address_w(state->m_ay, 0, data);
164      ay8910_address_w(m_ay, 0, data);
163165}
164166
165167
r14845r14846
170172 *************************************/
171173
172174static ADDRESS_MAP_START( hc11_pgm_map, AS_PROGRAM, 8, skeetsht_state )
173   AM_RANGE(0x2800, 0x2807) AM_READWRITE_LEGACY(tms_r, tms_w)
174   AM_RANGE(0x1800, 0x1800) AM_WRITE_LEGACY(ay8910_w)
175   AM_RANGE(0x2800, 0x2807) AM_READWRITE(tms_r, tms_w)
176   AM_RANGE(0x1800, 0x1800) AM_WRITE(ay8910_w)
175177   AM_RANGE(0xb600, 0xbdff) AM_RAM //internal EEPROM
176178   AM_RANGE(0x0000, 0xffff) AM_ROM AM_REGION("68hc11", 0)
177179ADDRESS_MAP_END
178180
179181static ADDRESS_MAP_START( hc11_io_map, AS_IO, 8, skeetsht_state )
180   AM_RANGE(MC68HC11_IO_PORTA, MC68HC11_IO_PORTA) AM_READWRITE_LEGACY(hc11_porta_r, hc11_porta_w)
182   AM_RANGE(MC68HC11_IO_PORTA, MC68HC11_IO_PORTA) AM_READWRITE(hc11_porta_r, hc11_porta_w)
181183ADDRESS_MAP_END
182184
183185
r14845r14846
190192static ADDRESS_MAP_START( tms_program_map, AS_PROGRAM, 16, skeetsht_state )
191193   AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w)
192194   AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(m_tms_vram)
193   AM_RANGE(0x00440000, 0x004fffff) AM_READWRITE_LEGACY(ramdac_r, ramdac_w)
195   AM_RANGE(0x00440000, 0x004fffff) AM_READWRITE(ramdac_r, ramdac_w)
194196   AM_RANGE(0xff800000, 0xffbfffff) AM_ROM AM_MIRROR(0x00400000) AM_REGION("tms", 0)
195197ADDRESS_MAP_END
196198
src/mame/drivers/dblewing.c
r14845r14846
7575   device_t *m_maincpu;
7676   device_t *m_audiocpu;
7777   device_t *m_deco_tilegen1;
78   DECLARE_READ16_MEMBER(dblewing_prot_r);
79   DECLARE_WRITE16_MEMBER(dblewing_prot_w);
80   DECLARE_READ8_MEMBER(irq_latch_r);
7881};
7982
8083UINT16 dblwings_pri_callback(UINT16 x)
r14845r14846
120123 we need to log the PC of each read/write and check to
121124 see if the code makes any of them move obvious
122125*/
123static READ16_HANDLER ( dblewing_prot_r )
126READ16_MEMBER(dblewing_state::dblewing_prot_r)
124127{
125   dblewing_state *state = space->machine().driver_data<dblewing_state>();
126128
127129   switch (offset * 2)
128130   {
129      case 0x16a: return state->m_boss_move;          // boss 1 movement
130      case 0x6d6: return state->m_boss_move;          // boss 1 2nd pilot
131      case 0x748: return state->m_boss_move;          // boss 1 3rd pilot
131      case 0x16a: return m_boss_move;          // boss 1 movement
132      case 0x6d6: return m_boss_move;          // boss 1 2nd pilot
133      case 0x748: return m_boss_move;          // boss 1 3rd pilot
132134
133135      case 0x566: return 0x0009;           // boss BGM,might be a variable one (read->write to the sound latch)
134      case 0x1ea: return state->m_boss_shoot_type;    // boss 1 shoot type
135      case 0x596: return state->m_boss_3_data;         // boss 3 appearing
136      case 0x692:   return state->m_boss_4_data;
137      case 0x6b0: return state->m_boss_5_data;
138      case 0x51e: return state->m_boss_5sx_data;
139      case 0x784: return state->m_boss_6_data;
136      case 0x1ea: return m_boss_shoot_type;    // boss 1 shoot type
137      case 0x596: return m_boss_3_data;         // boss 3 appearing
138      case 0x692:   return m_boss_4_data;
139      case 0x6b0: return m_boss_5_data;
140      case 0x51e: return m_boss_5sx_data;
141      case 0x784: return m_boss_6_data;
140142
141143      case 0x330: return 0; // controls bonuses such as shoot type,bombs etc.
142      case 0x1d4: return state->m_70c_data;  //controls restart points
144      case 0x1d4: return m_70c_data;  //controls restart points
143145
144      case 0x0ac: return (input_port_read(space->machine(), "DSW") & 0x40) << 4;//flip screen
145      case 0x4b0: return state->m_608_data;//coinage
146      case 0x0ac: return (input_port_read(machine(), "DSW") & 0x40) << 4;//flip screen
147      case 0x4b0: return m_608_data;//coinage
146148      case 0x068:
147149      {
148         switch (input_port_read(space->machine(), "DSW") & 0x0300) //I don't know how to relationate this...
150         switch (input_port_read(machine(), "DSW") & 0x0300) //I don't know how to relationate this...
149151         {
150152            case 0x0000: return 0x000;//0
151153            case 0x0100: return 0x060;//3
r14845r14846
153155            case 0x0300: return 0x160;//b
154156         }
155157      }
156      case 0x094: return state->m_104_data;// p1 inputs select screen  OK
157      case 0x24c: return state->m_008_data;//read DSW (mirror for coinage/territory)
158      case 0x298: return input_port_read(space->machine(), "SYSTEM");//vblank
159      case 0x476: return input_port_read(space->machine(), "SYSTEM");//mirror for coins
160      case 0x506: return input_port_read(space->machine(), "DSW");
161      case 0x5d8: return state->m_406_data;
162      case 0x2b4: return input_port_read(space->machine(), "P1_P2");
163      case 0x1a8: return (input_port_read(space->machine(), "DSW") & 0x4000) >> 12;//allow continue
164      case 0x3ec: return state->m_70c_data; //score entry
165      case 0x246: return state->m_580_data; // these three controls "perfect bonus" I suppose...
166      case 0x52e: return state->m_580_data;
167      case 0x532: return state->m_580_data;
158      case 0x094: return m_104_data;// p1 inputs select screen  OK
159      case 0x24c: return m_008_data;//read DSW (mirror for coinage/territory)
160      case 0x298: return input_port_read(machine(), "SYSTEM");//vblank
161      case 0x476: return input_port_read(machine(), "SYSTEM");//mirror for coins
162      case 0x506: return input_port_read(machine(), "DSW");
163      case 0x5d8: return m_406_data;
164      case 0x2b4: return input_port_read(machine(), "P1_P2");
165      case 0x1a8: return (input_port_read(machine(), "DSW") & 0x4000) >> 12;//allow continue
166      case 0x3ec: return m_70c_data; //score entry
167      case 0x246: return m_580_data; // these three controls "perfect bonus" I suppose...
168      case 0x52e: return m_580_data;
169      case 0x532: return m_580_data;
168170   }
169171
170//  printf("dblewing prot r %08x, %04x, %04x\n", cpu_get_pc(&space->device()), offset * 2, mem_mask);
172//  printf("dblewing prot r %08x, %04x, %04x\n", cpu_get_pc(&space.device()), offset * 2, mem_mask);
171173
172   if ((offset*2) == 0x0f8) return 0; // state->m_080_data;
174   if ((offset*2) == 0x0f8) return 0; // m_080_data;
173175   if ((offset*2) == 0x104) return 0;
174176   if ((offset*2) == 0x10e) return 0;
175   if ((offset*2) == 0x206) return 0; // state->m_70c_data;
177   if ((offset*2) == 0x206) return 0; // m_70c_data;
176178   if ((offset*2) == 0x25c) return 0;
177179   if ((offset*2) == 0x284) return 0; // 3rd player 2nd boss
178180   if ((offset*2) == 0x432) return 0; // boss on water level?
179181   if ((offset*2) == 0x54a) return 0; // 3rd player 2nd boss
180182   if ((offset*2) == 0x786) return 0;
181183
182   mame_printf_debug("dblewing prot r %08x, %04x, %04x\n", cpu_get_pc(&space->device()), offset * 2, mem_mask);
184   mame_printf_debug("dblewing prot r %08x, %04x, %04x\n", cpu_get_pc(&space.device()), offset * 2, mem_mask);
183185
184   return 0;//space->machine().rand();
186   return 0;//machine().rand();
185187}
186188
187static WRITE16_HANDLER( dblewing_prot_w )
189WRITE16_MEMBER(dblewing_state::dblewing_prot_w)
188190{
189   dblewing_state *state = space->machine().driver_data<dblewing_state>();
190191
191192//  if (offset * 2 != 0x380)
192//  printf("dblewing prot w %08x, %04x, %04x %04x\n", cpu_get_pc(&space->device()), offset * 2, mem_mask, data);
193//  printf("dblewing prot w %08x, %04x, %04x %04x\n", cpu_get_pc(&space.device()), offset * 2, mem_mask, data);
193194
194195   switch (offset * 2)
195196   {
196197      case 0x088:
197         state->m_088_data = data;
198         if(state->m_088_data == 0)          { state->m_boss_4_data = 0;    }
199         else if(state->m_088_data & 0x8000) { state->m_boss_4_data = 0x50; }
200         else                                { state->m_boss_4_data = 0x40; }
198         m_088_data = data;
199         if(m_088_data == 0)          { m_boss_4_data = 0;    }
200         else if(m_088_data & 0x8000) { m_boss_4_data = 0x50; }
201         else                                { m_boss_4_data = 0x40; }
201202
202203         return;
203204
204205      case 0x104:
205         state->m_104_data = data;
206         m_104_data = data;
206207         return; // p1 inputs select screen  OK
207208
208209      case 0x18a:
209         state->m_18a_data = data;
210         switch (state->m_18a_data)
210         m_18a_data = data;
211         switch (m_18a_data)
211212         {
212            case 0x6b94: state->m_boss_5_data = 0x10; break; //initialize
213            case 0x7c68: state->m_boss_5_data = 0x60; break; //go up
214            case 0xfb1d: state->m_boss_5_data = 0x50; break;
215            case 0x977c: state->m_boss_5_data = 0x50; break;
216            case 0x8a49: state->m_boss_5_data = 0x60; break;
213            case 0x6b94: m_boss_5_data = 0x10; break; //initialize
214            case 0x7c68: m_boss_5_data = 0x60; break; //go up
215            case 0xfb1d: m_boss_5_data = 0x50; break;
216            case 0x977c: m_boss_5_data = 0x50; break;
217            case 0x8a49: m_boss_5_data = 0x60; break;
217218         }
218219         return;
219220      case 0x200:
220         state->m_200_data = data;
221         switch (state->m_200_data)
221         m_200_data = data;
222         switch (m_200_data)
222223         {
223            case 0x5a19: state->m_boss_move = 1; break;
224            case 0x3b28: state->m_boss_move = 2; break;
225            case 0x1d4d: state->m_boss_move = 1; break;
224            case 0x5a19: m_boss_move = 1; break;
225            case 0x3b28: m_boss_move = 2; break;
226            case 0x1d4d: m_boss_move = 1; break;
226227         }
227         //popmessage("%04x",state->m_200_data);
228         //popmessage("%04x",m_200_data);
228229         return;
229230      case 0x280:
230         state->m_280_data = data;
231         switch (state->m_280_data)
231         m_280_data = data;
232         switch (m_280_data)
232233         {
233            case 0x6b94: state->m_boss_5sx_data = 0x10; break;
234            case 0x7519: state->m_boss_5sx_data = 0x60; break;
235            case 0xfc68: state->m_boss_5sx_data = 0x50; break;
236            case 0x02dd: state->m_boss_5sx_data = 0x50; break;
237            case 0x613c: state->m_boss_5sx_data = 0x50; break;
234            case 0x6b94: m_boss_5sx_data = 0x10; break;
235            case 0x7519: m_boss_5sx_data = 0x60; break;
236            case 0xfc68: m_boss_5sx_data = 0x50; break;
237            case 0x02dd: m_boss_5sx_data = 0x50; break;
238            case 0x613c: m_boss_5sx_data = 0x50; break;
238239         }
239         //printf("%04x\n",state->m_280_data);
240         //printf("%04x\n",m_280_data);
240241         return;
241242      case 0x380: // sound write
242243         soundlatch_w(space, 0, data & 0xff);
243         state->m_sound_irq |= 0x02;
244         device_set_input_line(state->m_audiocpu, 0, (state->m_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
244         m_sound_irq |= 0x02;
245         device_set_input_line(m_audiocpu, 0, (m_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
245246         return;
246247      case 0x384:
247         state->m_384_data = data;
248         switch(state->m_384_data)
248         m_384_data = data;
249         switch(m_384_data)
249250         {
250            case 0xaa41: state->m_boss_6_data = 1; break;
251            case 0x5a97: state->m_boss_6_data = 2; break;
252            case 0xbac5: state->m_boss_6_data = 3; break;
253            case 0x0afb: state->m_boss_6_data = 4; break;
254            case 0x6a99: state->m_boss_6_data = 5; break;
255            case 0xda8f: state->m_boss_6_data = 6; break;
251            case 0xaa41: m_boss_6_data = 1; break;
252            case 0x5a97: m_boss_6_data = 2; break;
253            case 0xbac5: m_boss_6_data = 3; break;
254            case 0x0afb: m_boss_6_data = 4; break;
255            case 0x6a99: m_boss_6_data = 5; break;
256            case 0xda8f: m_boss_6_data = 6; break;
256257         }
257258         return;
258259      case 0x38e:
259         state->m_38e_data = data;
260         switch(state->m_38e_data)
260         m_38e_data = data;
261         switch(m_38e_data)
261262         {
262            case 0x6c13: state->m_boss_shoot_type = 3; break;
263            case 0xc311: state->m_boss_shoot_type = 0; break;
264            case 0x1593: state->m_boss_shoot_type = 1; break;
265            case 0xf9db: state->m_boss_shoot_type = 2; break;
266            case 0xf742: state->m_boss_shoot_type = 3; break;
263            case 0x6c13: m_boss_shoot_type = 3; break;
264            case 0xc311: m_boss_shoot_type = 0; break;
265            case 0x1593: m_boss_shoot_type = 1; break;
266            case 0xf9db: m_boss_shoot_type = 2; break;
267            case 0xf742: m_boss_shoot_type = 3; break;
267268
268            case 0xeff5: state->m_boss_move = 1; break;
269            case 0xd2f1: state->m_boss_move = 2; break;
270            //default:   printf("%04x\n",state->m_38e_data); break;
271            //case 0xe65a: state->m_boss_shoot_type = 0; break;
269            case 0xeff5: m_boss_move = 1; break;
270            case 0xd2f1: m_boss_move = 2; break;
271            //default:   printf("%04x\n",m_38e_data); break;
272            //case 0xe65a: m_boss_shoot_type = 0; break;
272273         }
273274         return;
274275      case 0x58c: // 3rd player 1st level
275         state->m_58c_data = data;
276         if(state->m_58c_data == 0)     { state->m_boss_move = 5; }
277         else                           { state->m_boss_move = 2; }
276         m_58c_data = data;
277         if(m_58c_data == 0)     { m_boss_move = 5; }
278         else                           { m_boss_move = 2; }
278279
279280         return;
280281      case 0x60a:
281         state->m_60a_data = data;
282         if(state->m_60a_data & 0x8000) { state->m_boss_3_data = 2; }
283         else                           { state->m_boss_3_data = 9; }
282         m_60a_data = data;
283         if(m_60a_data & 0x8000) { m_boss_3_data = 2; }
284         else                           { m_boss_3_data = 9; }
284285
285286         return;
286287      case 0x580:
287         state->m_580_data = data;
288         m_580_data = data;
288289         return;
289290      case 0x406:
290         state->m_406_data = data;
291         m_406_data = data;
291292         return;  // p2 inputs select screen  OK
292293   }
293294
294//  printf("dblewing prot w %08x, %04x, %04x %04x\n", cpu_get_pc(&space->device()), offset * 2, mem_mask, data);
295//  printf("dblewing prot w %08x, %04x, %04x %04x\n", cpu_get_pc(&space.device()), offset * 2, mem_mask, data);
295296
296   if ((offset * 2) == 0x008) { state->m_008_data = data; return; }
297   if ((offset * 2) == 0x080) { state->m_080_data = data; return; } // p3 3rd boss?
298   if ((offset * 2) == 0x28c) { state->m_28c_data = data; return; }
299   if ((offset * 2) == 0x408) { state->m_408_data = data; return; } // 3rd player 1st level?
300   if ((offset * 2) == 0x40e) { state->m_40e_data = data; return; } // 3rd player 2nd level?
301   if ((offset * 2) == 0x608) { state->m_608_data = data; return; }
302   if ((offset * 2) == 0x70c) { state->m_70c_data = data; return; }
303   if ((offset * 2) == 0x78a) { state->m_78a_data = data; return; }
304   if ((offset * 2) == 0x788) { state->m_788_data = data; return; }
297   if ((offset * 2) == 0x008) { m_008_data = data; return; }
298   if ((offset * 2) == 0x080) { m_080_data = data; return; } // p3 3rd boss?
299   if ((offset * 2) == 0x28c) { m_28c_data = data; return; }
300   if ((offset * 2) == 0x408) { m_408_data = data; return; } // 3rd player 1st level?
301   if ((offset * 2) == 0x40e) { m_40e_data = data; return; } // 3rd player 2nd level?
302   if ((offset * 2) == 0x608) { m_608_data = data; return; }
303   if ((offset * 2) == 0x70c) { m_70c_data = data; return; }
304   if ((offset * 2) == 0x78a) { m_78a_data = data; return; }
305   if ((offset * 2) == 0x788) { m_788_data = data; return; }
305306}
306307
307308static ADDRESS_MAP_START( dblewing_map, AS_PROGRAM, 16, dblewing_state )
r14845r14846
321322//  AM_RANGE(0x280330, 0x280331) AM_READNOP               // sound?
322323//  AM_RANGE(0x280380, 0x280381) AM_WRITENOP              // sound
323324
324   AM_RANGE(0x280000, 0x2807ff) AM_READWRITE_LEGACY(dblewing_prot_r, dblewing_prot_w)
325   AM_RANGE(0x280000, 0x2807ff) AM_READWRITE(dblewing_prot_r, dblewing_prot_w)
325326
326327
327328   AM_RANGE(0x284000, 0x284001) AM_RAM
r14845r14846
332333   AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM
333334ADDRESS_MAP_END
334335
335static READ8_HANDLER(irq_latch_r)
336READ8_MEMBER(dblewing_state::irq_latch_r)
336337{
337   dblewing_state *state = space->machine().driver_data<dblewing_state>();
338338
339339   /* bit 1 of dblewing_sound_irq specifies IRQ command writes */
340   state->m_sound_irq &= ~0x02;
341   device_set_input_line(state->m_audiocpu, 0, (state->m_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
342   return state->m_sound_irq;
340   m_sound_irq &= ~0x02;
341   device_set_input_line(m_audiocpu, 0, (m_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
342   return m_sound_irq;
343343}
344344
345345static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, dblewing_state )
r14845r14846
348348   AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_status_port_r,ym2151_w)
349349   AM_RANGE(0xb000, 0xb000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
350350   AM_RANGE(0xc000, 0xc000) AM_READ_LEGACY(soundlatch_r)
351   AM_RANGE(0xd000, 0xd000) AM_READ_LEGACY(irq_latch_r) //timing? sound latch?
351   AM_RANGE(0xd000, 0xd000) AM_READ(irq_latch_r) //timing? sound latch?
352352   AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
353353ADDRESS_MAP_END
354354
src/mame/drivers/shougi.c
r14845r14846
9898   //UINT8 *m_cpu_sharedram;
9999   //UINT8 m_cpu_sharedram_control_val;
100100   int m_r;
101   DECLARE_WRITE8_MEMBER(cpu_sharedram_sub_w);
102   DECLARE_WRITE8_MEMBER(cpu_sharedram_main_w);
103   DECLARE_READ8_MEMBER(cpu_sharedram_r);
104   DECLARE_WRITE8_MEMBER(cpu_shared_ctrl_sub_w);
105   DECLARE_WRITE8_MEMBER(cpu_shared_ctrl_main_w);
106   DECLARE_WRITE8_MEMBER(shougi_watchdog_reset_w);
107   DECLARE_WRITE8_MEMBER(shougi_mcu_halt_off_w);
108   DECLARE_WRITE8_MEMBER(shougi_mcu_halt_on_w);
109   DECLARE_WRITE8_MEMBER(nmi_disable_and_clear_line_w);
110   DECLARE_WRITE8_MEMBER(nmi_enable_w);
111   DECLARE_READ8_MEMBER(dummy_r);
101112};
102113
103114
r14845r14846
194205//to do:
195206// add separate sharedram/r/w() for both CPUs and use control value to verify access
196207
197static WRITE8_HANDLER ( cpu_sharedram_sub_w )
208WRITE8_MEMBER(shougi_state::cpu_sharedram_sub_w)
198209{
199210   if (cpu_sharedram_control_val!=0) logerror("sub CPU access to shared RAM when access set for main cpu\n");
200211   cpu_sharedram[offset] = data;
201212}
202213
203static WRITE8_HANDLER ( cpu_sharedram_main_w )
214WRITE8_MEMBER(shougi_state::cpu_sharedram_main_w)
204215{
205216   if (cpu_sharedram_control_val!=1) logerror("main CPU access to shared RAM when access set for sub cpu\n");
206217   cpu_sharedram[offset] = data;
207218}
208219
209static READ8_HANDLER ( cpu_sharedram_r )
220READ8_MEMBER(shougi_state::cpu_sharedram_r)
210221{
211222   return cpu_sharedram[offset];
212223}
213224
214225#endif
215226
216static WRITE8_HANDLER ( cpu_shared_ctrl_sub_w )
227WRITE8_MEMBER(shougi_state::cpu_shared_ctrl_sub_w)
217228{
218229   //cpu_sharedram_control_val = 0;
219230   //logerror("cpu_sharedram_ctrl=SUB");
220231}
221232
222static WRITE8_HANDLER ( cpu_shared_ctrl_main_w )
233WRITE8_MEMBER(shougi_state::cpu_shared_ctrl_main_w)
223234{
224235   //cpu_sharedram_control_val = 1;
225236   //logerror("cpu_sharedram_ctrl=MAIN");
226237}
227238
228static WRITE8_HANDLER( shougi_watchdog_reset_w )
239WRITE8_MEMBER(shougi_state::shougi_watchdog_reset_w)
229240{
230241   watchdog_reset_w(space,0,data);
231242}
232243
233static WRITE8_HANDLER( shougi_mcu_halt_off_w )
244WRITE8_MEMBER(shougi_state::shougi_mcu_halt_off_w)
234245{
235246   /* logerror("mcu HALT OFF"); */
236   cputag_set_input_line(space->machine(), "mcu", INPUT_LINE_HALT, CLEAR_LINE);
247   cputag_set_input_line(machine(), "mcu", INPUT_LINE_HALT, CLEAR_LINE);
237248}
238249
239static WRITE8_HANDLER( shougi_mcu_halt_on_w )
250WRITE8_MEMBER(shougi_state::shougi_mcu_halt_on_w)
240251{
241252   /* logerror("mcu HALT ON"); */
242   cputag_set_input_line(space->machine(), "mcu", INPUT_LINE_HALT,ASSERT_LINE);
253   cputag_set_input_line(machine(), "mcu", INPUT_LINE_HALT,ASSERT_LINE);
243254}
244255
245256
246static WRITE8_HANDLER( nmi_disable_and_clear_line_w )
257WRITE8_MEMBER(shougi_state::nmi_disable_and_clear_line_w)
247258{
248   shougi_state *state = space->machine().driver_data<shougi_state>();
249259
250   state->m_nmi_enabled = 0; /* disable NMIs */
260   m_nmi_enabled = 0; /* disable NMIs */
251261
252262   /* NMI lines are tied together on both CPUs and connected to the LS74 /Q output */
253   cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
254   cputag_set_input_line(space->machine(), "sub", INPUT_LINE_NMI, CLEAR_LINE);
263   cputag_set_input_line(machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
264   cputag_set_input_line(machine(), "sub", INPUT_LINE_NMI, CLEAR_LINE);
255265}
256266
257static WRITE8_HANDLER( nmi_enable_w )
267WRITE8_MEMBER(shougi_state::nmi_enable_w)
258268{
259   shougi_state *state = space->machine().driver_data<shougi_state>();
260269
261   state->m_nmi_enabled = 1; /* enable NMIs */
270   m_nmi_enabled = 1; /* enable NMIs */
262271}
263272
264273static INTERRUPT_GEN( shougi_vblank_nmi )
r14845r14846
279288   AM_RANGE(0x4000, 0x43ff) AM_RAM      /* 2114 x 2 (0x400 x 4bit each) */
280289
281290   /* 4800-480f connected to the 74LS259, A3 is data line so 4800-4807 write 0, and 4808-480f write 1 */
282   AM_RANGE(0x4800, 0x4800) AM_READ_PORT("DSW") AM_WRITE_LEGACY(cpu_shared_ctrl_sub_w)
283   AM_RANGE(0x4801, 0x4801) AM_WRITE_LEGACY(nmi_disable_and_clear_line_w)
291   AM_RANGE(0x4800, 0x4800) AM_READ_PORT("DSW") AM_WRITE(cpu_shared_ctrl_sub_w)
292   AM_RANGE(0x4801, 0x4801) AM_WRITE(nmi_disable_and_clear_line_w)
284293   AM_RANGE(0x4802, 0x4802) AM_NOP
285294   AM_RANGE(0x4803, 0x4803) AM_NOP
286   AM_RANGE(0x4804, 0x4804) AM_WRITE_LEGACY(shougi_mcu_halt_off_w)
295   AM_RANGE(0x4804, 0x4804) AM_WRITE(shougi_mcu_halt_off_w)
287296   AM_RANGE(0x4807, 0x4807) AM_WRITENOP   //?????? connected to +5v via resistor
288   AM_RANGE(0x4808, 0x4808) AM_WRITE_LEGACY(cpu_shared_ctrl_main_w)
289   AM_RANGE(0x4809, 0x4809) AM_WRITE_LEGACY(nmi_enable_w)
297   AM_RANGE(0x4808, 0x4808) AM_WRITE(cpu_shared_ctrl_main_w)
298   AM_RANGE(0x4809, 0x4809) AM_WRITE(nmi_enable_w)
290299   AM_RANGE(0x480a, 0x480a) AM_NOP
291300   AM_RANGE(0x480b, 0x480b) AM_NOP
292   AM_RANGE(0x480c, 0x480c) AM_WRITE_LEGACY(shougi_mcu_halt_on_w)
301   AM_RANGE(0x480c, 0x480c) AM_WRITE(shougi_mcu_halt_on_w)
293302   AM_RANGE(0x480f, 0x480f) AM_NOP
294303
295304   AM_RANGE(0x5000, 0x5000) AM_READ_PORT("P1")
296   AM_RANGE(0x5800, 0x5800) AM_READ_PORT("P2") AM_WRITE_LEGACY(shougi_watchdog_reset_w)   /* game won't boot if watchdog doesn't work */
305   AM_RANGE(0x5800, 0x5800) AM_READ_PORT("P2") AM_WRITE(shougi_watchdog_reset_w)   /* game won't boot if watchdog doesn't work */
297306   AM_RANGE(0x6000, 0x6000) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
298307   AM_RANGE(0x6800, 0x6800) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
299308   AM_RANGE(0x7000, 0x73ff) AM_RAM AM_SHARE("share1") /* 2114 x 2 (0x400 x 4bit each) */
r14845r14846
303312ADDRESS_MAP_END
304313
305314/* sub */
306static READ8_HANDLER ( dummy_r )
315READ8_MEMBER(shougi_state::dummy_r)
307316{
308   shougi_state *state = space->machine().driver_data<shougi_state>();
309   state->m_r ^= 1;
317   m_r ^= 1;
310318
311   if(state->m_r)
319   if(m_r)
312320      return 0xff;
313321   else
314322      return 0;
r14845r14846
316324
317325static ADDRESS_MAP_START( readport_sub, AS_IO, 8, shougi_state )
318326   ADDRESS_MAP_GLOBAL_MASK( 0x00ff )
319   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(dummy_r)
327   AM_RANGE(0x00, 0x00) AM_READ(dummy_r)
320328ADDRESS_MAP_END
321329
322330static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, shougi_state )
src/mame/drivers/hornet.c
r14845r14846
339339   UINT16 m_gn680_latch;
340340   UINT16 m_gn680_ret0;
341341   UINT16 m_gn680_ret1;
342   DECLARE_READ32_MEMBER(hornet_k037122_sram_r);
343   DECLARE_WRITE32_MEMBER(hornet_k037122_sram_w);
344   DECLARE_READ32_MEMBER(hornet_k037122_char_r);
345   DECLARE_WRITE32_MEMBER(hornet_k037122_char_w);
346   DECLARE_READ32_MEMBER(hornet_k037122_reg_r);
347   DECLARE_WRITE32_MEMBER(hornet_k037122_reg_w);
348   DECLARE_READ8_MEMBER(sysreg_r);
349   DECLARE_WRITE8_MEMBER(sysreg_w);
350   DECLARE_WRITE32_MEMBER(comm1_w);
351   DECLARE_WRITE32_MEMBER(comm_rombank_w);
352   DECLARE_READ32_MEMBER(comm0_unk_r);
353   DECLARE_READ32_MEMBER(gun_r);
354   DECLARE_WRITE32_MEMBER(gun_w);
355   DECLARE_WRITE16_MEMBER(gn680_sysctrl);
356   DECLARE_READ16_MEMBER(gn680_latch_r);
357   DECLARE_WRITE16_MEMBER(gn680_latch_w);
358   DECLARE_READ32_MEMBER(dsp_dataram0_r);
359   DECLARE_WRITE32_MEMBER(dsp_dataram0_w);
360   DECLARE_READ32_MEMBER(dsp_dataram1_r);
361   DECLARE_WRITE32_MEMBER(dsp_dataram1_w);
342362};
343363
344364
345365
346366
347static READ32_HANDLER( hornet_k037122_sram_r )
367READ32_MEMBER(hornet_state::hornet_k037122_sram_r)
348368{
349   device_t *k037122 = space->machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
369   device_t *k037122 = machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
350370   return k037122_sram_r(k037122, offset, mem_mask);
351371}
352372
353static WRITE32_HANDLER( hornet_k037122_sram_w )
373WRITE32_MEMBER(hornet_state::hornet_k037122_sram_w)
354374{
355   device_t *k037122 = space->machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
375   device_t *k037122 = machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
356376   k037122_sram_w(k037122, offset, data, mem_mask);
357377}
358378
359379
360static READ32_HANDLER( hornet_k037122_char_r )
380READ32_MEMBER(hornet_state::hornet_k037122_char_r)
361381{
362   device_t *k037122 = space->machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
382   device_t *k037122 = machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
363383   return k037122_char_r(k037122, offset, mem_mask);
364384}
365385
366static WRITE32_HANDLER( hornet_k037122_char_w )
386WRITE32_MEMBER(hornet_state::hornet_k037122_char_w)
367387{
368   device_t *k037122 = space->machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
388   device_t *k037122 = machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
369389   k037122_char_w(k037122, offset, data, mem_mask);
370390}
371391
372static READ32_HANDLER( hornet_k037122_reg_r )
392READ32_MEMBER(hornet_state::hornet_k037122_reg_r)
373393{
374   device_t *k037122 = space->machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
394   device_t *k037122 = machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
375395   return k037122_reg_r(k037122, offset, mem_mask);
376396}
377397
378static WRITE32_HANDLER( hornet_k037122_reg_w )
398WRITE32_MEMBER(hornet_state::hornet_k037122_reg_w)
379399{
380   device_t *k037122 = space->machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
400   device_t *k037122 = machine().device(get_cgboard_id() ? "k037122_2" : "k037122_1");
381401   k037122_reg_w(k037122, offset, data, mem_mask);
382402}
383403
r14845r14846
435455
436456/*****************************************************************************/
437457
438static READ8_HANDLER( sysreg_r )
458READ8_MEMBER(hornet_state::sysreg_r)
439459{
440460   UINT8 r = 0;
441461   static const char *const portnames[] = { "IN0", "IN1", "IN2" };
442   device_t *adc12138 = space->machine().device("adc12138");
443   eeprom_device *eeprom = space->machine().device<eeprom_device>("eeprom");
462   device_t *adc12138 = machine().device("adc12138");
463   eeprom_device *eeprom = machine().device<eeprom_device>("eeprom");
444464
445465   switch (offset)
446466   {
447467      case 0:   /* I/O port 0 */
448468      case 1:   /* I/O port 1 */
449469      case 2:   /* I/O port 2 */
450         r = input_port_read(space->machine(), portnames[offset]);
470         r = input_port_read(machine(), portnames[offset]);
451471         break;
452472
453473      case 3:   /* I/O port 3 */
r14845r14846
465485         break;
466486
467487      case 4:   /* I/O port 4 - DIP switches */
468         r = input_port_read(space->machine(), "DSW");
488         r = input_port_read(machine(), "DSW");
469489         break;
470490   }
471491   return r;
472492}
473493
474static WRITE8_HANDLER( sysreg_w )
494WRITE8_MEMBER(hornet_state::sysreg_w)
475495{
476   hornet_state *state = space->machine().driver_data<hornet_state>();
477   device_t *adc12138 = space->machine().device("adc12138");
496   device_t *adc12138 = machine().device("adc12138");
478497
479498   switch (offset)
480499   {
481500      case 0:   /* LED Register 0 */
482         state->m_led_reg0 = data;
501         m_led_reg0 = data;
483502         break;
484503
485504      case 1:   /* LED Register 1 */
486         state->m_led_reg1 = data;
505         m_led_reg1 = data;
487506         break;
488507
489508      case 2: /* Parallel data register */
r14845r14846
501520                0x02 = LAMP1
502521                0x01 = LAMP0
503522            */
504         input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
523         input_port_write(machine(), "EEPROMOUT", data, 0xff);
505524         mame_printf_debug("System register 0 = %02X\n", data);
506525         break;
507526
r14845r14846
521540         adc1213x_di_w(adc12138, 0, (data >> 1) & 0x1);
522541         adc1213x_sclk_w(adc12138, 0, data & 0x1);
523542
524         cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
543         cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
525544         mame_printf_debug("System register 1 = %02X\n", data);
526545         break;
527546
r14845r14846
544563                0x80 = WDTCLK
545564            */
546565         if (data & 0x80)
547            watchdog_reset(space->machine());
566            watchdog_reset(machine());
548567         break;
549568
550569      case 7:   /* CG Control Register */
r14845r14846
556575                0x01 = EXRGB
557576            */
558577         if (data & 0x80)
559            cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
578            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
560579         if (data & 0x40)
561            cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
580            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
562581         set_cgboard_id((data >> 4) & 3);
563582         break;
564583   }
r14845r14846
566585
567586/*****************************************************************************/
568587
569static WRITE32_HANDLER( comm1_w )
588WRITE32_MEMBER(hornet_state::comm1_w)
570589{
571590   printf("comm1_w: %08X, %08X, %08X\n", offset, data, mem_mask);
572591}
573592
574static WRITE32_HANDLER( comm_rombank_w )
593WRITE32_MEMBER(hornet_state::comm_rombank_w)
575594{
576595   int bank = data >> 24;
577   UINT8 *usr3 = space->machine().region("user3")->base();
596   UINT8 *usr3 = machine().region("user3")->base();
578597   if (usr3 != NULL)
579      memory_set_bank(space->machine(), "bank1", bank & 0x7f);
598      memory_set_bank(machine(), "bank1", bank & 0x7f);
580599}
581600
582static READ32_HANDLER( comm0_unk_r )
601READ32_MEMBER(hornet_state::comm0_unk_r)
583602{
584603//  printf("comm0_unk_r: %08X, %08X\n", offset, mem_mask);
585604   return 0xffffffff;
586605}
587606
588607
589static READ32_HANDLER(gun_r)
608READ32_MEMBER(hornet_state::gun_r)
590609{
591   hornet_state *state = space->machine().driver_data<hornet_state>();
592   return state->m_gn680_ret0<<16 | state->m_gn680_ret1;
610   return m_gn680_ret0<<16 | m_gn680_ret1;
593611}
594612
595static WRITE32_HANDLER(gun_w)
613WRITE32_MEMBER(hornet_state::gun_w)
596614{
597   hornet_state *state = space->machine().driver_data<hornet_state>();
598615   if (mem_mask == 0xffff0000)
599616   {
600      state->m_gn680_latch = data>>16;
601      cputag_set_input_line(space->machine(), "gn680", M68K_IRQ_6, HOLD_LINE);
617      m_gn680_latch = data>>16;
618      cputag_set_input_line(machine(), "gn680", M68K_IRQ_6, HOLD_LINE);
602619   }
603620}
604621
r14845r14846
606623
607624static ADDRESS_MAP_START( hornet_map, AS_PROGRAM, 32, hornet_state )
608625   AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(m_workram)      /* Work RAM */
609   AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE_LEGACY(hornet_k037122_reg_r, hornet_k037122_reg_w)
610   AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE_LEGACY(hornet_k037122_sram_r, hornet_k037122_sram_w)
611   AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE_LEGACY(hornet_k037122_char_r, hornet_k037122_char_w)
612   AM_RANGE(0x74080000, 0x7408000f) AM_READWRITE_LEGACY(gun_r, gun_w)
626   AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE(hornet_k037122_reg_r, hornet_k037122_reg_w)
627   AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE(hornet_k037122_sram_r, hornet_k037122_sram_w)
628   AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE(hornet_k037122_char_r, hornet_k037122_char_w)
629   AM_RANGE(0x74080000, 0x7408000f) AM_READWRITE(gun_r, gun_w)
613630   AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE_LEGACY(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc)
614631   AM_RANGE(0x780c0000, 0x780c0003) AM_READWRITE_LEGACY(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc)
615   AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ8_LEGACY(sysreg_r, 0xffffffff)
616   AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE8_LEGACY(sysreg_w, 0xffffffff)
632   AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ8(sysreg_r, 0xffffffff)
633   AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE8(sysreg_w, 0xffffffff)
617634   AM_RANGE(0x7d020000, 0x7d021fff) AM_DEVREADWRITE8_LEGACY("m48t58", timekeeper_r, timekeeper_w, 0xffffffff)   /* M48T58Y RTC/NVRAM */
618635   AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREADWRITE_LEGACY("k056800", k056800_host_r, k056800_host_w)
619636   AM_RANGE(0x7d042000, 0x7d043fff) AM_RAM            /* COMM BOARD 0 */
620   AM_RANGE(0x7d044000, 0x7d044007) AM_READ_LEGACY(comm0_unk_r)
621   AM_RANGE(0x7d048000, 0x7d048003) AM_WRITE_LEGACY(comm1_w)
622   AM_RANGE(0x7d04a000, 0x7d04a003) AM_WRITE_LEGACY(comm_rombank_w)
637   AM_RANGE(0x7d044000, 0x7d044007) AM_READ(comm0_unk_r)
638   AM_RANGE(0x7d048000, 0x7d048003) AM_WRITE(comm1_w)
639   AM_RANGE(0x7d04a000, 0x7d04a003) AM_WRITE(comm_rombank_w)
623640   AM_RANGE(0x7d050000, 0x7d05ffff) AM_ROMBANK("bank1")      /* COMM BOARD 1 */
624641   AM_RANGE(0x7e000000, 0x7e7fffff) AM_ROM AM_REGION("user2", 0)      /* Data ROM */
625642   AM_RANGE(0x7f000000, 0x7f3fffff) AM_ROM AM_SHARE("share2")
r14845r14846
641658
642659/*****************************************************************************/
643660
644static WRITE16_HANDLER(gn680_sysctrl)
661WRITE16_MEMBER(hornet_state::gn680_sysctrl)
645662{
646663   // bit 15 = watchdog toggle
647664   // lower 4 bits = LEDs?
648665}
649666
650static READ16_HANDLER(gn680_latch_r)
667READ16_MEMBER(hornet_state::gn680_latch_r)
651668{
652   hornet_state *state = space->machine().driver_data<hornet_state>();
653   cputag_set_input_line(space->machine(), "gn680", M68K_IRQ_6, CLEAR_LINE);
669   cputag_set_input_line(machine(), "gn680", M68K_IRQ_6, CLEAR_LINE);
654670
655   return state->m_gn680_latch;
671   return m_gn680_latch;
656672}
657673
658static WRITE16_HANDLER(gn680_latch_w)
674WRITE16_MEMBER(hornet_state::gn680_latch_w)
659675{
660   hornet_state *state = space->machine().driver_data<hornet_state>();
661676   if (offset)
662677   {
663      state->m_gn680_ret1 = data;
678      m_gn680_ret1 = data;
664679   }
665680   else
666681   {
667      state->m_gn680_ret0 = data;
682      m_gn680_ret0 = data;
668683   }
669684}
670685
r14845r14846
674689static ADDRESS_MAP_START( gn680_memmap, AS_PROGRAM, 16, hornet_state )
675690   AM_RANGE(0x000000, 0x01ffff) AM_ROM
676691   AM_RANGE(0x200000, 0x203fff) AM_RAM
677   AM_RANGE(0x300000, 0x300001) AM_WRITE_LEGACY(gn680_sysctrl)
692   AM_RANGE(0x300000, 0x300001) AM_WRITE(gn680_sysctrl)
678693   AM_RANGE(0x314000, 0x317fff) AM_RAM
679   AM_RANGE(0x400000, 0x400003) AM_READWRITE_LEGACY(gn680_latch_r, gn680_latch_w)
694   AM_RANGE(0x400000, 0x400003) AM_READWRITE(gn680_latch_r, gn680_latch_w)
680695   AM_RANGE(0x400008, 0x400009) AM_WRITENOP   // writes 0001 00fe each time IRQ 6 triggers
681696ADDRESS_MAP_END
682697
683698/*****************************************************************************/
684699
685static READ32_HANDLER( dsp_dataram0_r )
700READ32_MEMBER(hornet_state::dsp_dataram0_r)
686701{
687   hornet_state *state = space->machine().driver_data<hornet_state>();
688   return state->m_sharc_dataram[0][offset] & 0xffff;
702   return m_sharc_dataram[0][offset] & 0xffff;
689703}
690704
691static WRITE32_HANDLER( dsp_dataram0_w )
705WRITE32_MEMBER(hornet_state::dsp_dataram0_w)
692706{
693   hornet_state *state = space->machine().driver_data<hornet_state>();
694   state->m_sharc_dataram[0][offset] = data;
707   m_sharc_dataram[0][offset] = data;
695708}
696709
697static READ32_HANDLER( dsp_dataram1_r )
710READ32_MEMBER(hornet_state::dsp_dataram1_r)
698711{
699   hornet_state *state = space->machine().driver_data<hornet_state>();
700   return state->m_sharc_dataram[1][offset] & 0xffff;
712   return m_sharc_dataram[1][offset] & 0xffff;
701713}
702714
703static WRITE32_HANDLER( dsp_dataram1_w )
715WRITE32_MEMBER(hornet_state::dsp_dataram1_w)
704716{
705   hornet_state *state = space->machine().driver_data<hornet_state>();
706   state->m_sharc_dataram[1][offset] = data;
717   m_sharc_dataram[1][offset] = data;
707718}
708719
709720static ADDRESS_MAP_START( sharc0_map, AS_DATA, 32, hornet_state )
710721   AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
711   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE_LEGACY(dsp_dataram0_r, dsp_dataram0_w) AM_BASE(m_sharc_dataram[0])
722   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram0_r, dsp_dataram0_w) AM_BASE(m_sharc_dataram[0])
712723   AM_RANGE(0x1400000, 0x14fffff) AM_RAM
713724   AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo0", voodoo_r, voodoo_w)
714725   AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
r14845r14846
718729
719730static ADDRESS_MAP_START( sharc1_map, AS_DATA, 32, hornet_state )
720731   AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_1_shared_sharc_r, cgboard_1_shared_sharc_w)
721   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE_LEGACY(dsp_dataram1_r, dsp_dataram1_w) AM_BASE(m_sharc_dataram[1])
732   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram1_r, dsp_dataram1_w) AM_BASE(m_sharc_dataram[1])
722733   AM_RANGE(0x1400000, 0x14fffff) AM_RAM
723734   AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo1", voodoo_r, voodoo_w)
724735   AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_1_comm_sharc_r, cgboard_1_comm_sharc_w)
src/mame/drivers/hotstuff.c
r14845r14846
1515   {
1616      UINT8 index;
1717   }m_ioboard;
18   DECLARE_READ8_MEMBER(ioboard_status_r);
19   DECLARE_READ8_MEMBER(ioboard_unk_r);
20   DECLARE_WRITE8_MEMBER(ioboard_data_w);
21   DECLARE_WRITE8_MEMBER(ioboard_reg_w);
1822};
1923
2024
r14845r14846
6771}
6872
6973/* TODO: identify this ... */
70static READ8_HANDLER( ioboard_status_r )
74READ8_MEMBER(hotstuff_state::ioboard_status_r)
7175{
72   hotstuff_state *state = space->machine().driver_data<hotstuff_state>();
7376   UINT8 res;
7477
7578   printf("STATUS R\n");
7679
77   switch(state->m_ioboard.index)
80   switch(m_ioboard.index)
7881   {
7982      case 0x0c: res = 0x80|0x10; break;
80      default: res = 0; break;//space->machine().rand(); break;
83      default: res = 0; break;//machine().rand(); break;
8184   }
8285
8386   return res;
8487}
8588
86static READ8_HANDLER( ioboard_unk_r )
89READ8_MEMBER(hotstuff_state::ioboard_unk_r)
8790{
8891   printf("UNK R\n");
8992
9093   return 0xff;
9194}
9295
93static WRITE8_HANDLER( ioboard_data_w )
96WRITE8_MEMBER(hotstuff_state::ioboard_data_w)
9497{
9598   printf("DATA %02x\n",data);
9699}
97100
98static WRITE8_HANDLER( ioboard_reg_w )
101WRITE8_MEMBER(hotstuff_state::ioboard_reg_w)
99102{
100   hotstuff_state *state = space->machine().driver_data<hotstuff_state>();
101103
102   state->m_ioboard.index = data;
104   m_ioboard.index = data;
103105   printf("REG %02x\n",data);
104106}
105107
r14845r14846
109111
110112   AM_RANGE(0x400000, 0x40ffff) AM_RAM
111113
112   AM_RANGE(0x680000, 0x680001) AM_READWRITE8_LEGACY(ioboard_status_r,ioboard_data_w,0xff00)
113   AM_RANGE(0x680000, 0x680001) AM_READWRITE8_LEGACY(ioboard_unk_r,ioboard_reg_w,0x00ff)
114   AM_RANGE(0x680000, 0x680001) AM_READWRITE8(ioboard_status_r,ioboard_data_w,0xff00)
115   AM_RANGE(0x680000, 0x680001) AM_READWRITE8(ioboard_unk_r,ioboard_reg_w,0x00ff)
114116
115117   AM_RANGE(0x980000, 0x9bffff) AM_RAM AM_BASE(m_bitmapram)
116118ADDRESS_MAP_END
src/mame/drivers/discoboy.c
r14845r14846
6868   UINT8    m_ram_3[0x1000];
6969   UINT8    m_ram_4[0x1000];
7070   UINT8    m_ram_att[0x800];
71   DECLARE_WRITE8_MEMBER(rambank_select_w);
72   DECLARE_WRITE8_MEMBER(discoboy_port_00_w);
73   DECLARE_WRITE8_MEMBER(discoboy_port_01_w);
74   DECLARE_WRITE8_MEMBER(discoboy_port_03_w);
75   DECLARE_WRITE8_MEMBER(discoboy_port_06_w);
76   DECLARE_WRITE8_MEMBER(rambank_w);
77   DECLARE_READ8_MEMBER(rambank_r);
78   DECLARE_READ8_MEMBER(rambank2_r);
79   DECLARE_WRITE8_MEMBER(rambank2_w);
80   DECLARE_READ8_MEMBER(discoboy_ram_att_r);
81   DECLARE_WRITE8_MEMBER(discoboy_ram_att_w);
82   DECLARE_READ8_MEMBER(discoboy_port_06_r);
83   DECLARE_WRITE8_MEMBER(yunsung8_adpcm_w);
7184};
7285
7386
r14845r14846
192205}
193206#endif
194207
195static WRITE8_HANDLER( rambank_select_w )
208WRITE8_MEMBER(discoboy_state::rambank_select_w)
196209{
197   discoboy_state *state = space->machine().driver_data<discoboy_state>();
198   state->m_ram_bank = data;
210   m_ram_bank = data;
199211   if (data &= 0x83) logerror("rambank_select_w !!!!!");
200212}
201213
202static WRITE8_HANDLER( discoboy_port_00_w )
214WRITE8_MEMBER(discoboy_state::discoboy_port_00_w)
203215{
204   discoboy_state *state = space->machine().driver_data<discoboy_state>();
205216   if (data & 0xfe) logerror("unk discoboy_port_00_w %02x\n",data);
206   state->m_port_00 = data;
217   m_port_00 = data;
207218}
208219
209static WRITE8_HANDLER( discoboy_port_01_w )
220WRITE8_MEMBER(discoboy_state::discoboy_port_01_w)
210221{
211   discoboy_state *state = space->machine().driver_data<discoboy_state>();
212222
213223   // 00 10 20 30 during gameplay  1,2,3 other times?? title screen bit 0x40 toggle
214224   //printf("unk discoboy_port_01_w %02x\n",data);
215225   // discoboy gfxbank
216   state->m_gfxbank = data & 0xf0;
226   m_gfxbank = data & 0xf0;
217227
218   memory_set_bank(space->machine(), "bank1", data & 0x07);
228   memory_set_bank(machine(), "bank1", data & 0x07);
219229}
220230
221static WRITE8_HANDLER( discoboy_port_03_w ) // sfx? (to sound cpu)
231WRITE8_MEMBER(discoboy_state::discoboy_port_03_w)// sfx? (to sound cpu)
222232{
223   discoboy_state *state = space->machine().driver_data<discoboy_state>();
224233   //  printf("unk discoboy_port_03_w %02x\n", data);
225   //  device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, HOLD_LINE);
234   //  device_set_input_line(m_audiocpu, INPUT_LINE_NMI, HOLD_LINE);
226235   soundlatch_w(space, 0, data);
227   device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
236   device_set_input_line(m_audiocpu, 0, HOLD_LINE);
228237}
229238
230static WRITE8_HANDLER( discoboy_port_06_w )
239WRITE8_MEMBER(discoboy_state::discoboy_port_06_w)
231240{
232241   //printf("unk discoboy_port_06_w %02x\n",data);
233242   if (data != 0) logerror("port 06!!!! %02x\n",data);
234243}
235244
236245
237static WRITE8_HANDLER( rambank_w )
246WRITE8_MEMBER(discoboy_state::rambank_w)
238247{
239   discoboy_state *state = space->machine().driver_data<discoboy_state>();
240248
241   if (state->m_ram_bank & 0x20)
242      state->m_ram_2[offset] = data;
249   if (m_ram_bank & 0x20)
250      m_ram_2[offset] = data;
243251   else
244      state->m_ram_1[offset] = data;
252      m_ram_1[offset] = data;
245253}
246254
247static READ8_HANDLER( rambank_r )
255READ8_MEMBER(discoboy_state::rambank_r)
248256{
249   discoboy_state *state = space->machine().driver_data<discoboy_state>();
250257
251   if (state->m_ram_bank & 0x20)
252      return state->m_ram_2[offset];
258   if (m_ram_bank & 0x20)
259      return m_ram_2[offset];
253260   else
254      return state->m_ram_1[offset];
261      return m_ram_1[offset];
255262}
256263
257static READ8_HANDLER( rambank2_r )
264READ8_MEMBER(discoboy_state::rambank2_r)
258265{
259   discoboy_state *state = space->machine().driver_data<discoboy_state>();
260266
261   if (state->m_port_00 == 0x00)
262      return state->m_ram_3[offset];
263   else if (state->m_port_00 == 0x01)
264      return state->m_ram_4[offset];
267   if (m_port_00 == 0x00)
268      return m_ram_3[offset];
269   else if (m_port_00 == 0x01)
270      return m_ram_4[offset];
265271   else
266272      printf("unk rb2_r\n");
267273
268   return space->machine().rand();
274   return machine().rand();
269275}
270276
271static WRITE8_HANDLER( rambank2_w )
277WRITE8_MEMBER(discoboy_state::rambank2_w)
272278{
273   discoboy_state *state = space->machine().driver_data<discoboy_state>();
274279
275   if (state->m_port_00 == 0x00)
276      state->m_ram_3[offset] = data;
277   else if (state->m_port_00 == 0x01)
278      state->m_ram_4[offset] = data;
280   if (m_port_00 == 0x00)
281      m_ram_3[offset] = data;
282   else if (m_port_00 == 0x01)
283      m_ram_4[offset] = data;
279284   else
280285      printf("unk rb2_w\n");
281286}
282287
283static READ8_HANDLER( discoboy_ram_att_r )
288READ8_MEMBER(discoboy_state::discoboy_ram_att_r)
284289{
285   discoboy_state *state = space->machine().driver_data<discoboy_state>();
286   return state->m_ram_att[offset];
290   return m_ram_att[offset];
287291}
288292
289static WRITE8_HANDLER( discoboy_ram_att_w )
293WRITE8_MEMBER(discoboy_state::discoboy_ram_att_w)
290294{
291   discoboy_state *state = space->machine().driver_data<discoboy_state>();
292   state->m_ram_att[offset] = data;
295   m_ram_att[offset] = data;
293296}
294297
295298static ADDRESS_MAP_START( discoboy_map, AS_PROGRAM, 8, discoboy_state )
296299   AM_RANGE(0x0000, 0x7fff) AM_ROM
297300   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
298   AM_RANGE(0xc000, 0xc7ff) AM_READWRITE_LEGACY(rambank_r, rambank_w)
299   AM_RANGE(0xc800, 0xcfff) AM_READWRITE_LEGACY(discoboy_ram_att_r, discoboy_ram_att_w)
300   AM_RANGE(0xd000, 0xdfff) AM_READWRITE_LEGACY(rambank2_r, rambank2_w)
301   AM_RANGE(0xc000, 0xc7ff) AM_READWRITE(rambank_r, rambank_w)
302   AM_RANGE(0xc800, 0xcfff) AM_READWRITE(discoboy_ram_att_r, discoboy_ram_att_w)
303   AM_RANGE(0xd000, 0xdfff) AM_READWRITE(rambank2_r, rambank2_w)
301304   AM_RANGE(0xe000, 0xefff) AM_RAM
302305   AM_RANGE(0xf000, 0xffff) AM_RAM
303306ADDRESS_MAP_END
304307
305308
306static READ8_HANDLER( discoboy_port_06_r )
309READ8_MEMBER(discoboy_state::discoboy_port_06_r)
307310{
308311   return 0x00;
309312}
310313
311314static ADDRESS_MAP_START( io_map, AS_IO, 8, discoboy_state )
312315   ADDRESS_MAP_GLOBAL_MASK(0xff)
313   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSWA") AM_WRITE_LEGACY(discoboy_port_00_w)
314   AM_RANGE(0x01, 0x01) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(discoboy_port_01_w)
316   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSWA") AM_WRITE(discoboy_port_00_w)
317   AM_RANGE(0x01, 0x01) AM_READ_PORT("SYSTEM") AM_WRITE(discoboy_port_01_w)
315318   AM_RANGE(0x02, 0x02) AM_READ_PORT("P1")
316   AM_RANGE(0x03, 0x03) AM_READ_PORT("P2") AM_WRITE_LEGACY(discoboy_port_03_w)
319   AM_RANGE(0x03, 0x03) AM_READ_PORT("P2") AM_WRITE(discoboy_port_03_w)
317320   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSWB")
318   AM_RANGE(0x06, 0x06) AM_READWRITE_LEGACY(discoboy_port_06_r, discoboy_port_06_w) // ???
319   AM_RANGE(0x07, 0x07) AM_WRITE_LEGACY(rambank_select_w) // 0x20 is palette bank bit.. others?
321   AM_RANGE(0x06, 0x06) AM_READWRITE(discoboy_port_06_r, discoboy_port_06_w) // ???
322   AM_RANGE(0x07, 0x07) AM_WRITE(rambank_select_w) // 0x20 is palette bank bit.. others?
320323ADDRESS_MAP_END
321324
322325/* Sound */
r14845r14846
332335      logerror("%s: Bank %02X\n", device->machine().describe_context(), data);
333336}
334337
335static WRITE8_HANDLER( yunsung8_adpcm_w )
338WRITE8_MEMBER(discoboy_state::yunsung8_adpcm_w)
336339{
337   discoboy_state *state = space->machine().driver_data<discoboy_state>();
338340
339341   /* Swap the nibbles */
340   state->m_adpcm = ((data & 0xf) << 4) | ((data >> 4) & 0xf);
342   m_adpcm = ((data & 0xf) << 4) | ((data >> 4) & 0xf);
341343}
342344
343345static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, discoboy_state )
344346   AM_RANGE(0x0000, 0x7fff) AM_ROM
345347   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("sndbank")
346348   AM_RANGE(0xe000, 0xe000) AM_DEVWRITE_LEGACY("msm",yunsung8_sound_bankswitch_w)
347   AM_RANGE(0xe400, 0xe400) AM_WRITE_LEGACY(yunsung8_adpcm_w)
349   AM_RANGE(0xe400, 0xe400) AM_WRITE(yunsung8_adpcm_w)
348350   AM_RANGE(0xec00, 0xec01) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w)
349351   AM_RANGE(0xf000, 0xf7ff) AM_RAM
350352   AM_RANGE(0xf800, 0xf800) AM_READ_LEGACY(soundlatch_r)
src/mame/drivers/summit.c
r14845r14846
2727
2828   UINT8 *m_vram;
2929   UINT8 *m_attr;
30   DECLARE_WRITE8_MEMBER(out_w);
3031};
3132
3233
r14845r14846
5657   return 0;
5758}
5859
59static WRITE8_HANDLER( out_w )
60WRITE8_MEMBER(summit_state::out_w)
6061{
61
6262}
6363
6464
r14845r14846
6969   AM_RANGE(0x2800, 0x2bff) AM_RAM AM_BASE(m_vram)
7070
7171   AM_RANGE(0x3800, 0x3800) AM_READ_PORT("IN0")
72//  AM_RANGE(0x3880, 0x3880) AM_WRITE_LEGACY(out_w)
73   AM_RANGE(0x3900, 0x3900) AM_READ_PORT("IN1") AM_WRITE_LEGACY(out_w) // lamps
74//  AM_RANGE(0x3980, 0x3980) AM_WRITE_LEGACY(out_w)
75   AM_RANGE(0x3a00, 0x3a00) AM_READ_PORT("IN2") //AM_WRITE_LEGACY(out_w)
72//  AM_RANGE(0x3880, 0x3880) AM_WRITE(out_w)
73   AM_RANGE(0x3900, 0x3900) AM_READ_PORT("IN1") AM_WRITE(out_w) // lamps
74//  AM_RANGE(0x3980, 0x3980) AM_WRITE(out_w)
75   AM_RANGE(0x3a00, 0x3a00) AM_READ_PORT("IN2") //AM_WRITE(out_w)
7676   AM_RANGE(0x3b00, 0x3b00) AM_READ_PORT("IN3")
7777
7878   AM_RANGE(0x7000, 0x71ff) AM_RAM
src/mame/drivers/skimaxx.c
r14845r14846
5858   UINT32 m_blitter_src_y;
5959   UINT32 m_blitter_src_dy;
6060   UINT32 *m_fpga_ctrl;
61   DECLARE_WRITE32_MEMBER(skimaxx_blitter_w);
62   DECLARE_READ32_MEMBER(skimaxx_blitter_r);
63   DECLARE_WRITE32_MEMBER(m68k_tms_w);
64   DECLARE_READ32_MEMBER(m68k_tms_r);
65   DECLARE_WRITE32_MEMBER(skimaxx_fpga_ctrl_w);
66   DECLARE_READ32_MEMBER(unk_r);
67   DECLARE_READ32_MEMBER(skimaxx_unk1_r);
68   DECLARE_WRITE32_MEMBER(skimaxx_unk1_w);
69   DECLARE_WRITE32_MEMBER(skimaxx_sub_ctrl_w);
70   DECLARE_READ32_MEMBER(skimaxx_analog_r);
6171};
6272
6373
r14845r14846
6878 *************************************/
6979
7080// Set up blit parameters
71static WRITE32_HANDLER( skimaxx_blitter_w )
81WRITE32_MEMBER(skimaxx_state::skimaxx_blitter_w)
7282{
73   skimaxx_state *state = space->machine().driver_data<skimaxx_state>();
74   UINT32 newdata = COMBINE_DATA( &state->m_blitter_regs[offset] );
83   UINT32 newdata = COMBINE_DATA( &m_blitter_regs[offset] );
7584
7685   switch (offset)
7786   {
7887      case 0:
79         state->m_blitter_src_dy = (newdata & 0x7fff) - (newdata & 0x8000);
88         m_blitter_src_dy = (newdata & 0x7fff) - (newdata & 0x8000);
8089         break;
8190
8291      case 1:
83         state->m_blitter_src_x = (newdata & 0x1ff) << 8;
84         state->m_blitter_src_y = (newdata >> 9) << 8;
92         m_blitter_src_x = (newdata & 0x1ff) << 8;
93         m_blitter_src_y = (newdata >> 9) << 8;
8594         break;
8695
8796      case 2:
8897         if (ACCESSING_BITS_16_31)
89            state->m_blitter_src_dx = (newdata >> 16) & 0xffff;
98            m_blitter_src_dx = (newdata >> 16) & 0xffff;
9099         if (ACCESSING_BITS_0_15)
91            state->m_blitter_src_dx = newdata & 0xffff;
100            m_blitter_src_dx = newdata & 0xffff;
92101
93         state->m_blitter_src_dx = (state->m_blitter_src_dx & 0x7fff) - (state->m_blitter_src_dx & 0x8000);
102         m_blitter_src_dx = (m_blitter_src_dx & 0x7fff) - (m_blitter_src_dx & 0x8000);
94103         break;
95104
96105      case 3:
r14845r14846
100109}
101110
102111// A read by the 68030 from this area blits one pixel to the back buffer (at the same offset)
103static READ32_HANDLER( skimaxx_blitter_r )
112READ32_MEMBER(skimaxx_state::skimaxx_blitter_r)
104113{
105   skimaxx_state *state = space->machine().driver_data<skimaxx_state>();
106   UINT32 penaddr = ((state->m_blitter_src_x >> 8) & 0x1ff) + ((state->m_blitter_src_y >> 8) << 9);
107   UINT16 *src = state->m_blitter_gfx + (penaddr % state->m_blitter_gfx_len);
108   UINT32 *dst = state->m_bg_buffer_back + offset;
114   UINT32 penaddr = ((m_blitter_src_x >> 8) & 0x1ff) + ((m_blitter_src_y >> 8) << 9);
115   UINT16 *src = m_blitter_gfx + (penaddr % m_blitter_gfx_len);
116   UINT32 *dst = m_bg_buffer_back + offset;
109117
110118   UINT16 pen = (*src) & 0x7fff;
111119
r14845r14846
117125         *dst = (*dst & 0xffff0000) | pen;
118126   }
119127
120   state->m_blitter_src_x = (state->m_blitter_src_x & 0x10000) | ((state->m_blitter_src_x + state->m_blitter_src_dx) & 0xffff);
121   state->m_blitter_src_y = (state->m_blitter_src_y & 0xffff0000) | ((state->m_blitter_src_y + state->m_blitter_src_dy) & 0xffff);
128   m_blitter_src_x = (m_blitter_src_x & 0x10000) | ((m_blitter_src_x + m_blitter_src_dx) & 0xffff);
129   m_blitter_src_y = (m_blitter_src_y & 0xffff0000) | ((m_blitter_src_y + m_blitter_src_dy) & 0xffff);
122130
123131   return 0;
124132}
r14845r14846
216224 *
217225 *************************************/
218226
219static WRITE32_HANDLER( m68k_tms_w )
227WRITE32_MEMBER(skimaxx_state::m68k_tms_w)
220228{
221   tms34010_host_w(space->machine().device("tms"), offset, data);
229   tms34010_host_w(machine().device("tms"), offset, data);
222230}
223231
224static READ32_HANDLER( m68k_tms_r )
232READ32_MEMBER(skimaxx_state::m68k_tms_r)
225233{
226   return tms34010_host_r(space->machine().device("tms"), offset);
234   return tms34010_host_r(machine().device("tms"), offset);
227235}
228236
229237
r14845r14846
242250  bit 0: bit banging data
243251*/
244252
245static WRITE32_HANDLER( skimaxx_fpga_ctrl_w )
253WRITE32_MEMBER(skimaxx_state::skimaxx_fpga_ctrl_w)
246254{
247   skimaxx_state *state = space->machine().driver_data<skimaxx_state>();
248   UINT32 newdata = COMBINE_DATA( state->m_fpga_ctrl );
255   UINT32 newdata = COMBINE_DATA( m_fpga_ctrl );
249256
250257   if (ACCESSING_BITS_0_7)
251258   {
252259      // double buffering
253260      UINT8 bank_bg_buffer = (newdata & 0x40) ? 1 : 0;
254261
255      state->m_bg_buffer_back  = state->m_bg_buffer + 0x400 * 0x100 * sizeof(UINT16) / sizeof(UINT32) * bank_bg_buffer;
256      state->m_bg_buffer_front = state->m_bg_buffer + 0x400 * 0x100 * sizeof(UINT16) / sizeof(UINT32) * (1 - bank_bg_buffer);
262      m_bg_buffer_back  = m_bg_buffer + 0x400 * 0x100 * sizeof(UINT16) / sizeof(UINT32) * bank_bg_buffer;
263      m_bg_buffer_front = m_bg_buffer + 0x400 * 0x100 * sizeof(UINT16) / sizeof(UINT32) * (1 - bank_bg_buffer);
257264
258      memory_set_bank(space->machine(), "bank1", bank_bg_buffer);
265      memory_set_bank(machine(), "bank1", bank_bg_buffer);
259266   }
260267}
261268
262269// 0x2000004c: bit 7, bit 0
263static READ32_HANDLER( unk_r )
270READ32_MEMBER(skimaxx_state::unk_r)
264271{
265   skimaxx_state *state = space->machine().driver_data<skimaxx_state>();
266   return (*state->m_fpga_ctrl & 0x20) ? 0x80 : 0x00;
272   return (*m_fpga_ctrl & 0x20) ? 0x80 : 0x00;
267273}
268274
269275// 0x20000023
270static READ32_HANDLER( skimaxx_unk1_r )
276READ32_MEMBER(skimaxx_state::skimaxx_unk1_r)
271277{
272278   return 0x80;
273279}
274280
275static WRITE32_HANDLER( skimaxx_unk1_w )
281WRITE32_MEMBER(skimaxx_state::skimaxx_unk1_w)
276282{
277283}
278284
279static WRITE32_HANDLER( skimaxx_sub_ctrl_w )
285WRITE32_MEMBER(skimaxx_state::skimaxx_sub_ctrl_w)
280286{
281287   // 7e/7f at the start. 3f/7f, related to reads from 1018xxxx
282288   if (ACCESSING_BITS_0_7)
283289   {
284      device_t *subcpu = space->machine().device("subcpu");
290      device_t *subcpu = machine().device("subcpu");
285291
286292      device_set_input_line(subcpu, INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
287293      device_set_input_line(subcpu, INPUT_LINE_HALT,  (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
r14845r14846
297303    ..
298304    1f      left max
299305*/
300static READ32_HANDLER( skimaxx_analog_r )
306READ32_MEMBER(skimaxx_state::skimaxx_analog_r)
301307{
302   return BITSWAP8(input_port_read(space->machine(), offset ? "Y" : "X"), 0,1,2,3,4,5,6,7);
308   return BITSWAP8(input_port_read(machine(), offset ? "Y" : "X"), 0,1,2,3,4,5,6,7);
303309}
304310
305311/*************************************
r14845r14846
310316
311317static ADDRESS_MAP_START( 68030_1_map, AS_PROGRAM, 32, skimaxx_state )
312318   AM_RANGE(0x00000000, 0x001fffff) AM_ROM
313   AM_RANGE(0x10000000, 0x10000003) AM_WRITE_LEGACY(skimaxx_sub_ctrl_w )
314   AM_RANGE(0x10100000, 0x1010000f) AM_READWRITE_LEGACY(m68k_tms_r, m68k_tms_w)//AM_NOP
319   AM_RANGE(0x10000000, 0x10000003) AM_WRITE(skimaxx_sub_ctrl_w )
320   AM_RANGE(0x10100000, 0x1010000f) AM_READWRITE(m68k_tms_r, m68k_tms_w)//AM_NOP
315321//  AM_RANGE(0x10180000, 0x10187fff) AM_RAM AM_SHARE("share1")
316322   AM_RANGE(0x10180000, 0x1018ffff) AM_RAM AM_SHARE("share1")   // above 10188000 accessed at level end (game bug?)
317323   AM_RANGE(0x20000000, 0x20000003) AM_READNOP   // watchdog_r?
r14845r14846
321327   AM_RANGE(0x20000018, 0x2000001b) AM_DEVREADWRITE8("oki3", okim6295_device, read, write, 0x00ff)   // right
322328   AM_RANGE(0x2000001c, 0x2000001f) AM_DEVREADWRITE8("oki4", okim6295_device, read, write, 0x00ff)   // right
323329
324   AM_RANGE(0x20000020, 0x20000023) AM_READ_LEGACY(skimaxx_unk1_r )   // units linking?
325   AM_RANGE(0x20000024, 0x20000027) AM_WRITE_LEGACY(skimaxx_unk1_w )   // ""
330   AM_RANGE(0x20000020, 0x20000023) AM_READ(skimaxx_unk1_r )   // units linking?
331   AM_RANGE(0x20000024, 0x20000027) AM_WRITE(skimaxx_unk1_w )   // ""
326332
327333   AM_RANGE(0x20000040, 0x20000043) AM_RAM   // write
328334   AM_RANGE(0x20000044, 0x20000047) AM_READ_PORT( "DSW" )
329335   AM_RANGE(0x20000048, 0x2000004b) AM_READ_PORT( "COIN" )
330   AM_RANGE(0x2000004c, 0x2000004f) AM_READ_LEGACY(unk_r)   // bit 7, bit 0
336   AM_RANGE(0x2000004c, 0x2000004f) AM_READ(unk_r)   // bit 7, bit 0
331337
332   AM_RANGE(0x20000050, 0x20000057) AM_READ_LEGACY(skimaxx_analog_r ) AM_WRITENOP   // read (0-1f), write motor?
338   AM_RANGE(0x20000050, 0x20000057) AM_READ(skimaxx_analog_r ) AM_WRITENOP   // read (0-1f), write motor?
333339
334340   AM_RANGE(0xfffc0000, 0xffffffff) AM_RAM AM_MIRROR(0x00020000)
335341ADDRESS_MAP_END
r14845r14846
344350static ADDRESS_MAP_START( 68030_2_map, AS_PROGRAM, 32, skimaxx_state )
345351   AM_RANGE(0x00000000, 0x003fffff) AM_ROM
346352
347   AM_RANGE(0x20000000, 0x2007ffff) AM_READ_LEGACY(skimaxx_blitter_r )   // do blit
348   AM_RANGE(0x30000000, 0x3000000f) AM_WRITE_LEGACY(skimaxx_blitter_w ) AM_BASE(m_blitter_regs )
353   AM_RANGE(0x20000000, 0x2007ffff) AM_READ(skimaxx_blitter_r )   // do blit
354   AM_RANGE(0x30000000, 0x3000000f) AM_WRITE(skimaxx_blitter_w ) AM_BASE(m_blitter_regs )
349355
350   AM_RANGE(0x40000000, 0x40000003) AM_WRITE_LEGACY(skimaxx_fpga_ctrl_w ) AM_BASE(m_fpga_ctrl )
356   AM_RANGE(0x40000000, 0x40000003) AM_WRITE(skimaxx_fpga_ctrl_w ) AM_BASE(m_fpga_ctrl )
351357
352358   AM_RANGE(0x50000000, 0x5007ffff) AM_RAMBANK("bank1")   // background ram allocated here at video_start (skimaxx_bg_buffer_back/front)
353359//  AM_RANGE(0xfffc0000, 0xfffc7fff) AM_RAM AM_SHARE("share1")
src/mame/drivers/mwarr.c
r14845r14846
7575   int m_which;
7676
7777   UINT16 m_sprites_buffer[0x800];
78   DECLARE_WRITE16_MEMBER(bg_videoram_w);
79   DECLARE_WRITE16_MEMBER(mlow_videoram_w);
80   DECLARE_WRITE16_MEMBER(mhigh_videoram_w);
81   DECLARE_WRITE16_MEMBER(tx_videoram_w);
82   DECLARE_WRITE16_MEMBER(sprites_commands_w);
83   DECLARE_WRITE16_MEMBER(mwarr_brightness_w);
7884};
7985
8086
r14845r14846
8490 *
8591 *************************************/
8692
87static WRITE16_HANDLER( bg_videoram_w )
93WRITE16_MEMBER(mwarr_state::bg_videoram_w)
8894{
89   mwarr_state *state = space->machine().driver_data<mwarr_state>();
9095
91   COMBINE_DATA(&state->m_bg_videoram[offset]);
92   state->m_bg_tilemap->mark_tile_dirty(offset);
96   COMBINE_DATA(&m_bg_videoram[offset]);
97   m_bg_tilemap->mark_tile_dirty(offset);
9398}
9499
95static WRITE16_HANDLER( mlow_videoram_w )
100WRITE16_MEMBER(mwarr_state::mlow_videoram_w)
96101{
97   mwarr_state *state = space->machine().driver_data<mwarr_state>();
98102
99   COMBINE_DATA(&state->m_mlow_videoram[offset]);
100   state->m_mlow_tilemap->mark_tile_dirty(offset);
103   COMBINE_DATA(&m_mlow_videoram[offset]);
104   m_mlow_tilemap->mark_tile_dirty(offset);
101105}
102106
103static WRITE16_HANDLER( mhigh_videoram_w )
107WRITE16_MEMBER(mwarr_state::mhigh_videoram_w)
104108{
105   mwarr_state *state = space->machine().driver_data<mwarr_state>();
106109
107   COMBINE_DATA(&state->m_mhigh_videoram[offset]);
108   state->m_mhigh_tilemap->mark_tile_dirty(offset);
110   COMBINE_DATA(&m_mhigh_videoram[offset]);
111   m_mhigh_tilemap->mark_tile_dirty(offset);
109112}
110113
111static WRITE16_HANDLER( tx_videoram_w )
114WRITE16_MEMBER(mwarr_state::tx_videoram_w)
112115{
113   mwarr_state *state = space->machine().driver_data<mwarr_state>();
114116
115   COMBINE_DATA(&state->m_tx_videoram[offset]);
116   state->m_tx_tilemap->mark_tile_dirty(offset);
117   COMBINE_DATA(&m_tx_videoram[offset]);
118   m_tx_tilemap->mark_tile_dirty(offset);
117119}
118120
119121static WRITE16_DEVICE_HANDLER( oki1_bank_w )
r14845r14846
121123   downcast<okim6295_device *>(device)->set_bank_base(0x40000 * (data & 3));
122124}
123125
124static WRITE16_HANDLER( sprites_commands_w )
126WRITE16_MEMBER(mwarr_state::sprites_commands_w)
125127{
126   mwarr_state *state = space->machine().driver_data<mwarr_state>();
127128
128   if (state->m_which)
129   if (m_which)
129130   {
130131      int i;
131132
r14845r14846
135136         /* clear sprites on screen */
136137         for (i = 0; i < 0x800; i++)
137138         {
138            state->m_sprites_buffer[i] = 0;
139            m_sprites_buffer[i] = 0;
139140         }
140         state->m_which = 0;
141         m_which = 0;
141142         break;
142143
143144      default:
r14845r14846
146147         /* refresh sprites on screen */
147148         for (i = 0; i < 0x800; i++)
148149         {
149            state->m_sprites_buffer[i] = state->m_spriteram[i];
150            m_sprites_buffer[i] = m_spriteram[i];
150151         }
151152         break;
152153
r14845r14846
156157      }
157158   }
158159
159   state->m_which ^= 1;
160   m_which ^= 1;
160161}
161162
162static WRITE16_HANDLER( mwarr_brightness_w )
163WRITE16_MEMBER(mwarr_state::mwarr_brightness_w)
163164{
164   mwarr_state *state = space->machine().driver_data<mwarr_state>();
165165   int i;
166166   double brightness;
167167
168   COMBINE_DATA(&state->m_mwarr_ram[0x14 / 2]);
168   COMBINE_DATA(&m_mwarr_ram[0x14 / 2]);
169169
170170   brightness = (double)(data & 0xff);
171171   for (i = 0; i < 0x800; i++)
172172   {
173      palette_set_pen_contrast(space->machine(), i, brightness/255);
173      palette_set_pen_contrast(machine(), i, brightness/255);
174174   }
175175}
176176
r14845r14846
183183
184184static ADDRESS_MAP_START( mwarr_map, AS_PROGRAM, 16, mwarr_state )
185185   AM_RANGE(0x000000, 0x0fffff) AM_ROM
186   AM_RANGE(0x100000, 0x1007ff) AM_RAM_WRITE_LEGACY(bg_videoram_w) AM_BASE(m_bg_videoram)
187   AM_RANGE(0x100800, 0x100fff) AM_RAM_WRITE_LEGACY(mlow_videoram_w) AM_BASE(m_mlow_videoram)
188   AM_RANGE(0x101000, 0x1017ff) AM_RAM_WRITE_LEGACY(mhigh_videoram_w) AM_BASE(m_mhigh_videoram)
189   AM_RANGE(0x101800, 0x1027ff) AM_RAM_WRITE_LEGACY(tx_videoram_w) AM_BASE(m_tx_videoram)
186   AM_RANGE(0x100000, 0x1007ff) AM_RAM_WRITE(bg_videoram_w) AM_BASE(m_bg_videoram)
187   AM_RANGE(0x100800, 0x100fff) AM_RAM_WRITE(mlow_videoram_w) AM_BASE(m_mlow_videoram)
188   AM_RANGE(0x101000, 0x1017ff) AM_RAM_WRITE(mhigh_videoram_w) AM_BASE(m_mhigh_videoram)
189   AM_RANGE(0x101800, 0x1027ff) AM_RAM_WRITE(tx_videoram_w) AM_BASE(m_tx_videoram)
190190   AM_RANGE(0x103000, 0x1033ff) AM_RAM AM_BASE(m_bg_scrollram)
191191   AM_RANGE(0x103400, 0x1037ff) AM_RAM AM_BASE(m_mlow_scrollram)
192192   AM_RANGE(0x103800, 0x103bff) AM_RAM AM_BASE(m_mhigh_scrollram)
r14845r14846
197197   AM_RANGE(0x110002, 0x110003) AM_READ_PORT("SYSTEM")
198198   AM_RANGE(0x110004, 0x110005) AM_READ_PORT("DSW")
199199   AM_RANGE(0x110010, 0x110011) AM_DEVWRITE_LEGACY("oki2", oki1_bank_w)
200   AM_RANGE(0x110014, 0x110015) AM_WRITE_LEGACY(mwarr_brightness_w)
201   AM_RANGE(0x110016, 0x110017) AM_WRITE_LEGACY(sprites_commands_w)
200   AM_RANGE(0x110014, 0x110015) AM_WRITE(mwarr_brightness_w)
201   AM_RANGE(0x110016, 0x110017) AM_WRITE(sprites_commands_w)
202202   AM_RANGE(0x110000, 0x11ffff) AM_RAM AM_BASE(m_mwarr_ram)
203203   AM_RANGE(0x180000, 0x180001) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff)
204204   AM_RANGE(0x190000, 0x190001) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff)
src/mame/drivers/vroulet.c
r14845r14846
5151   UINT8 *m_videoram;
5252   UINT8 *m_colorram;
5353   tilemap_t *m_bg_tilemap;
54   DECLARE_WRITE8_MEMBER(vroulet_paletteram_w);
55   DECLARE_WRITE8_MEMBER(vroulet_videoram_w);
56   DECLARE_WRITE8_MEMBER(vroulet_colorram_w);
5457};
5558
5659
5760/* video */
5861
5962
60static WRITE8_HANDLER(vroulet_paletteram_w)
63WRITE8_MEMBER(vroulet_state::vroulet_paletteram_w)
6164{
6265   /*
6366     paletteram_xxxxBBBBGGGGRRRR_be_w
r14845r14846
6568    */
6669
6770   int i,j,a,b;
68   space->machine().generic.paletteram.u8[offset]=data;
71   machine().generic.paletteram.u8[offset]=data;
6972   for(i=0;i<32;i++)
7073   {
7174      for(j=0;j<16;j++)
7275      {
73         a=space->machine().generic.paletteram.u8[((i*8+j)*2)&0xff ];
74         b=space->machine().generic.paletteram.u8[((i*8+j)*2+1)&0xff ];
75         palette_set_color_rgb(space->machine(),i*16+j,pal4bit(b),pal4bit(b>>4),pal4bit(a));
76         a=machine().generic.paletteram.u8[((i*8+j)*2)&0xff ];
77         b=machine().generic.paletteram.u8[((i*8+j)*2+1)&0xff ];
78         palette_set_color_rgb(machine(),i*16+j,pal4bit(b),pal4bit(b>>4),pal4bit(a));
7679      }
7780   }
7881}
7982
80static WRITE8_HANDLER( vroulet_videoram_w )
83WRITE8_MEMBER(vroulet_state::vroulet_videoram_w)
8184{
82   vroulet_state *state = space->machine().driver_data<vroulet_state>();
83   state->m_videoram[offset] = data;
84   state->m_bg_tilemap->mark_tile_dirty(offset);
85   m_videoram[offset] = data;
86   m_bg_tilemap->mark_tile_dirty(offset);
8587}
8688
87static WRITE8_HANDLER( vroulet_colorram_w )
89WRITE8_MEMBER(vroulet_state::vroulet_colorram_w)
8890{
89   vroulet_state *state = space->machine().driver_data<vroulet_state>();
90   state->m_colorram[offset] = data;
91   state->m_bg_tilemap->mark_tile_dirty(offset);
91   m_colorram[offset] = data;
92   m_bg_tilemap->mark_tile_dirty(offset);
9293}
9394
9495static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
123124   AM_RANGE(0x0000, 0x5fff) AM_ROM
124125   AM_RANGE(0x6000, 0x67ff) AM_RAM AM_SHARE("nvram")
125126   AM_RANGE(0x8000, 0x8000) AM_NOP
126   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE_LEGACY(vroulet_videoram_w) AM_BASE(m_videoram)
127   AM_RANGE(0x9400, 0x97ff) AM_RAM_WRITE_LEGACY(vroulet_colorram_w) AM_BASE(m_colorram)
127   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(vroulet_videoram_w) AM_BASE(m_videoram)
128   AM_RANGE(0x9400, 0x97ff) AM_RAM_WRITE(vroulet_colorram_w) AM_BASE(m_colorram)
128129   AM_RANGE(0xa000, 0xa001) AM_RAM AM_BASE(m_ball)
129   AM_RANGE(0xb000, 0xb0ff) AM_WRITE_LEGACY(vroulet_paletteram_w) AM_BASE_GENERIC(paletteram)
130   AM_RANGE(0xb000, 0xb0ff) AM_WRITE(vroulet_paletteram_w) AM_BASE_GENERIC(paletteram)
130131   AM_RANGE(0xc000, 0xc000) AM_NOP
131132ADDRESS_MAP_END
132133
src/mame/drivers/coinmvga.c
r14845r14846
227227
228228   UINT16 *m_vram;
229229   struct { int r,g,b,offs,offs_internal; } m_bgpal, m_fgpal;
230   DECLARE_WRITE8_MEMBER(debug_w);
231   DECLARE_WRITE16_MEMBER(ramdac_bg_w);
232   DECLARE_WRITE16_MEMBER(ramdac_fg_w);
233   DECLARE_READ16_MEMBER(test_r);
230234};
231235
232236
r14845r14846
276280*  Read / Write Handlers  *
277281**************************/
278282
279//static WRITE8_HANDLER( debug_w )
283//WRITE8_MEMBER(coinmvga_state::debug_w)
280284//{
281285//  popmessage("written : %02X", data);
282286//}
283287
284static WRITE16_HANDLER( ramdac_bg_w )
288WRITE16_MEMBER(coinmvga_state::ramdac_bg_w)
285289{
286   coinmvga_state *state = space->machine().driver_data<coinmvga_state>();
287290   if(ACCESSING_BITS_8_15)
288291   {
289      state->m_bgpal.offs = data >> 8;
290      state->m_bgpal.offs_internal = 0;
292      m_bgpal.offs = data >> 8;
293      m_bgpal.offs_internal = 0;
291294   }
292295   else //if(mem_mask == 0x00ff)
293296   {
294      switch(state->m_bgpal.offs_internal)
297      switch(m_bgpal.offs_internal)
295298      {
296299         case 0:
297            state->m_bgpal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
298            state->m_bgpal.offs_internal++;
300            m_bgpal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
301            m_bgpal.offs_internal++;
299302            break;
300303         case 1:
301            state->m_bgpal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
302            state->m_bgpal.offs_internal++;
304            m_bgpal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
305            m_bgpal.offs_internal++;
303306            break;
304307         case 2:
305            state->m_bgpal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
306            palette_set_color(space->machine(), state->m_bgpal.offs, MAKE_RGB(state->m_bgpal.r, state->m_bgpal.g, state->m_bgpal.b));
307            state->m_bgpal.offs_internal = 0;
308            state->m_bgpal.offs++;
308            m_bgpal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
309            palette_set_color(machine(), m_bgpal.offs, MAKE_RGB(m_bgpal.r, m_bgpal.g, m_bgpal.b));
310            m_bgpal.offs_internal = 0;
311            m_bgpal.offs++;
309312            break;
310313      }
311314   }
312315}
313316
314317
315static WRITE16_HANDLER( ramdac_fg_w )
318WRITE16_MEMBER(coinmvga_state::ramdac_fg_w)
316319{
317   coinmvga_state *state = space->machine().driver_data<coinmvga_state>();
318320   if(ACCESSING_BITS_8_15)
319321   {
320      state->m_fgpal.offs = data >> 8;
321      state->m_fgpal.offs_internal = 0;
322      m_fgpal.offs = data >> 8;
323      m_fgpal.offs_internal = 0;
322324   }
323325   else
324326   {
325      switch(state->m_fgpal.offs_internal)
327      switch(m_fgpal.offs_internal)
326328      {
327329         case 0:
328            state->m_fgpal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
329            state->m_fgpal.offs_internal++;
330            m_fgpal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
331            m_fgpal.offs_internal++;
330332            break;
331333         case 1:
332            state->m_fgpal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
333            state->m_fgpal.offs_internal++;
334            m_fgpal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
335            m_fgpal.offs_internal++;
334336            break;
335337         case 2:
336            state->m_fgpal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
337            palette_set_color(space->machine(), 0x100+state->m_fgpal.offs, MAKE_RGB(state->m_fgpal.r, state->m_fgpal.g, state->m_fgpal.b));
338            state->m_fgpal.offs_internal = 0;
339            state->m_fgpal.offs++;
338            m_fgpal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
339            palette_set_color(machine(), 0x100+m_fgpal.offs, MAKE_RGB(m_fgpal.r, m_fgpal.g, m_fgpal.b));
340            m_fgpal.offs_internal = 0;
341            m_fgpal.offs++;
340342            break;
341343      }
342344   }
343345}
344346
345347/*
346static READ16_HANDLER( test_r )
348READ16_MEMBER(coinmvga_state::test_r)
347349{
348    return space->machine().rand();
350    return machine().rand();
349351}*/
350352
351353/*************************
r14845r14846
359361//  AM_RANGE(0x0a0000, 0x0fffff) AM_RAM
360362//  AM_RANGE(0x100000, 0x1fffff) AM_RAM //colorama
361363   AM_RANGE(0x210000, 0x21ffff) AM_RAM AM_BASE(m_vram)
362//  AM_RANGE(0x40746e, 0x40746f) AM_READ_LEGACY(test_r) AM_WRITENOP //touch screen related, colorama
363//  AM_RANGE(0x403afa, 0x403afb) AM_READ_LEGACY(test_r) AM_WRITENOP //touch screen related, cmrltv75
364//  AM_RANGE(0x40746e, 0x40746f) AM_READ(test_r) AM_WRITENOP //touch screen related, colorama
365//  AM_RANGE(0x403afa, 0x403afb) AM_READ(test_r) AM_WRITENOP //touch screen related, cmrltv75
364366   AM_RANGE(0x400000, 0x40ffff) AM_RAM
365367
366   AM_RANGE(0x600000, 0x600001) AM_WRITE_LEGACY(ramdac_bg_w)
367   AM_RANGE(0x600004, 0x600005) AM_WRITE_LEGACY(ramdac_fg_w)
368   AM_RANGE(0x600000, 0x600001) AM_WRITE(ramdac_bg_w)
369   AM_RANGE(0x600004, 0x600005) AM_WRITE(ramdac_fg_w)
368370   AM_RANGE(0x600008, 0x600009) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0xffff)
369371   AM_RANGE(0x610000, 0x61000f) AM_RAM //touch screen i/o
370372
src/mame/drivers/twins.c
r14845r14846
6262   UINT16 *m_videoram;
6363   UINT16 *m_pal;
6464   UINT16 m_paloff;
65   DECLARE_READ16_MEMBER(twins_port4_r);
66   DECLARE_WRITE16_MEMBER(twins_port4_w);
67   DECLARE_WRITE16_MEMBER(port6_pal0_w);
68   DECLARE_WRITE16_MEMBER(porte_paloff0_w);
69   DECLARE_WRITE16_MEMBER(twinsa_port4_w);
70   DECLARE_READ16_MEMBER(twinsa_unk_r);
6571};
6672
6773
6874
6975/* port 4 is eeprom */
70static READ16_HANDLER( twins_port4_r )
76READ16_MEMBER(twins_state::twins_port4_r)
7177{
7278   return 0xffff;
7379}
7480
75static WRITE16_HANDLER( twins_port4_w )
81WRITE16_MEMBER(twins_state::twins_port4_w)
7682{
7783}
7884
79static WRITE16_HANDLER( port6_pal0_w )
85WRITE16_MEMBER(twins_state::port6_pal0_w)
8086{
81   twins_state *state = space->machine().driver_data<twins_state>();
82   COMBINE_DATA(&state->m_pal[state->m_paloff]);
83   state->m_paloff = (state->m_paloff + 1) & 0xff;
87   COMBINE_DATA(&m_pal[m_paloff]);
88   m_paloff = (m_paloff + 1) & 0xff;
8489}
8590
8691/* ??? weird ..*/
87static WRITE16_HANDLER( porte_paloff0_w )
92WRITE16_MEMBER(twins_state::porte_paloff0_w)
8893{
89   twins_state *state = space->machine().driver_data<twins_state>();
90   state->m_paloff = 0;
94   m_paloff = 0;
9195}
9296
9397static ADDRESS_MAP_START( twins_map, AS_PROGRAM, 16, twins_state )
r14845r14846
99103static ADDRESS_MAP_START( twins_io, AS_IO, 16, twins_state )
100104   AM_RANGE(0x0000, 0x0003) AM_DEVWRITE8_LEGACY("aysnd", ay8910_address_data_w, 0x00ff)
101105   AM_RANGE(0x0002, 0x0003) AM_DEVREAD8_LEGACY("aysnd", ay8910_r, 0x00ff)
102   AM_RANGE(0x0004, 0x0005) AM_READWRITE_LEGACY(twins_port4_r, twins_port4_w)
103   AM_RANGE(0x0006, 0x0007) AM_WRITE_LEGACY(port6_pal0_w)
104   AM_RANGE(0x000e, 0x000f) AM_WRITE_LEGACY(porte_paloff0_w)
106   AM_RANGE(0x0004, 0x0005) AM_READWRITE(twins_port4_r, twins_port4_w)
107   AM_RANGE(0x0006, 0x0007) AM_WRITE(port6_pal0_w)
108   AM_RANGE(0x000e, 0x000f) AM_WRITE(porte_paloff0_w)
105109ADDRESS_MAP_END
106110
107111static VIDEO_START(twins)
r14845r14846
247251   return 0;
248252}
249253
250static WRITE16_HANDLER( twinsa_port4_w )
254WRITE16_MEMBER(twins_state::twinsa_port4_w)
251255{
252   twins_state *state = space->machine().driver_data<twins_state>();
253   state->m_pal[state->m_paloff&0xfff] = data;
254   state->m_paloff++;
255//  printf("paloff %04x\n",state->m_paloff);
256   m_pal[m_paloff&0xfff] = data;
257   m_paloff++;
258//  printf("paloff %04x\n",m_paloff);
256259}
257260
258static READ16_HANDLER( twinsa_unk_r )
261READ16_MEMBER(twins_state::twinsa_unk_r)
259262{
260263   return 0xffff;
261264}
262265
263266static ADDRESS_MAP_START( twinsa_io, AS_IO, 16, twins_state )
264   AM_RANGE(0x0000, 0x0001) AM_READWRITE_LEGACY(twinsa_unk_r, porte_paloff0_w)
265   AM_RANGE(0x0002, 0x0003) AM_WRITE_LEGACY(porte_paloff0_w)
266   AM_RANGE(0x0004, 0x0005) AM_WRITE_LEGACY(twinsa_port4_w) // palette on this set
267   AM_RANGE(0x0000, 0x0001) AM_READWRITE(twinsa_unk_r, porte_paloff0_w)
268   AM_RANGE(0x0002, 0x0003) AM_WRITE(porte_paloff0_w)
269   AM_RANGE(0x0004, 0x0005) AM_WRITE(twinsa_port4_w) // palette on this set
267270   AM_RANGE(0x0008, 0x0009) AM_DEVWRITE8_LEGACY("aysnd", ay8910_address_w, 0x00ff)
268271   AM_RANGE(0x0010, 0x0011) AM_DEVREADWRITE8_LEGACY("aysnd", ay8910_r, ay8910_data_w, 0x00ff)
269   AM_RANGE(0x0018, 0x0019) AM_READ_LEGACY(twins_port4_r) AM_WRITE_LEGACY(twins_port4_w)
272   AM_RANGE(0x0018, 0x0019) AM_READ(twins_port4_r) AM_WRITE(twins_port4_w)
270273ADDRESS_MAP_END
271274
272275
src/mame/drivers/cultures.c
r14845r14846
3939   int      m_bg1_bank;
4040   int      m_bg2_bank;
4141   int      m_old_bank;
42   DECLARE_WRITE8_MEMBER(cpu_bankswitch_w);
43   DECLARE_WRITE8_MEMBER(bg0_videoram_w);
44   DECLARE_WRITE8_MEMBER(misc_w);
45   DECLARE_WRITE8_MEMBER(bg_bank_w);
4246};
4347
4448
r14845r14846
115119   return 0;
116120}
117121
118static WRITE8_HANDLER( cpu_bankswitch_w )
122WRITE8_MEMBER(cultures_state::cpu_bankswitch_w)
119123{
120   cultures_state *state = space->machine().driver_data<cultures_state>();
121   memory_set_bank(space->machine(), "bank1", data & 0x0f);
122   state->m_video_bank = ~data & 0x20;
124   memory_set_bank(machine(), "bank1", data & 0x0f);
125   m_video_bank = ~data & 0x20;
123126}
124127
125static WRITE8_HANDLER( bg0_videoram_w )
128WRITE8_MEMBER(cultures_state::bg0_videoram_w)
126129{
127   cultures_state *state = space->machine().driver_data<cultures_state>();
128   if (state->m_video_bank == 0)
130   if (m_video_bank == 0)
129131   {
130132      int r, g, b, datax;
131      state->m_paletteram[offset] = data;
133      m_paletteram[offset] = data;
132134      offset >>= 1;
133      datax = state->m_paletteram[offset * 2] + 256 * state->m_paletteram[offset * 2 + 1];
135      datax = m_paletteram[offset * 2] + 256 * m_paletteram[offset * 2 + 1];
134136
135137      r = ((datax >> 7) & 0x1e) | ((datax & 0x4000) ? 0x1 : 0);
136138      g = ((datax >> 3) & 0x1e) | ((datax & 0x2000) ? 0x1 : 0);
137139      b = ((datax << 1) & 0x1e) | ((datax & 0x1000) ? 0x1 : 0);
138140
139      palette_set_color_rgb(space->machine(), offset, pal5bit(r), pal5bit(g), pal5bit(b));
141      palette_set_color_rgb(machine(), offset, pal5bit(r), pal5bit(g), pal5bit(b));
140142   }
141143   else
142144   {
143      state->m_bg0_videoram[offset] = data;
144      state->m_bg0_tilemap->mark_tile_dirty(offset >> 1);
145      m_bg0_videoram[offset] = data;
146      m_bg0_tilemap->mark_tile_dirty(offset >> 1);
145147   }
146148}
147149
148static WRITE8_HANDLER( misc_w )
150WRITE8_MEMBER(cultures_state::misc_w)
149151{
150   cultures_state *state = space->machine().driver_data<cultures_state>();
151152   int new_bank = data & 0xf;
152153
153   if (state->m_old_bank != new_bank)
154   if (m_old_bank != new_bank)
154155   {
155156      // oki banking
156      UINT8 *src = space->machine().region("oki")->base() + 0x40000 + 0x20000 * new_bank;
157      UINT8 *dst = space->machine().region("oki")->base() + 0x20000;
157      UINT8 *src = machine().region("oki")->base() + 0x40000 + 0x20000 * new_bank;
158      UINT8 *dst = machine().region("oki")->base() + 0x20000;
158159      memcpy(dst, src, 0x20000);
159160
160      state->m_old_bank = new_bank;
161      m_old_bank = new_bank;
161162   }
162163
163   state->m_irq_enable = data & 0x80;
164   m_irq_enable = data & 0x80;
164165}
165166
166static WRITE8_HANDLER( bg_bank_w )
167WRITE8_MEMBER(cultures_state::bg_bank_w)
167168{
168   cultures_state *state = space->machine().driver_data<cultures_state>();
169   if (state->m_bg1_bank != (data & 3))
169   if (m_bg1_bank != (data & 3))
170170   {
171      state->m_bg1_bank = data & 3;
172      state->m_bg1_tilemap->mark_all_dirty();
171      m_bg1_bank = data & 3;
172      m_bg1_tilemap->mark_all_dirty();
173173   }
174174
175   if (state->m_bg2_bank != ((data & 0xc) >> 2))
175   if (m_bg2_bank != ((data & 0xc) >> 2))
176176   {
177      state->m_bg2_bank = (data & 0xc) >> 2;
178      state->m_bg2_tilemap->mark_all_dirty();
177      m_bg2_bank = (data & 0xc) >> 2;
178      m_bg2_tilemap->mark_all_dirty();
179179   }
180   coin_counter_w(space->machine(), 0, data & 0x10);
180   coin_counter_w(machine(), 0, data & 0x10);
181181}
182182
183183static ADDRESS_MAP_START( cultures_map, AS_PROGRAM, 8, cultures_state )
184184   AM_RANGE(0x0000, 0x3fff) AM_ROM
185185   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
186   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE_LEGACY(bg0_videoram_w) AM_BASE(m_bg0_videoram)
186   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE(bg0_videoram_w) AM_BASE(m_bg0_videoram)
187187   AM_RANGE(0xc000, 0xdfff) AM_RAM
188188   AM_RANGE(0xf000, 0xffff) AM_RAM
189189ADDRESS_MAP_END
r14845r14846
198198   AM_RANGE(0x50, 0x53) AM_RAM AM_BASE(m_bg1_regs_y)
199199   AM_RANGE(0x60, 0x63) AM_RAM AM_BASE(m_bg2_regs_x)
200200   AM_RANGE(0x70, 0x73) AM_RAM AM_BASE(m_bg2_regs_y)
201   AM_RANGE(0x80, 0x80) AM_WRITE_LEGACY(cpu_bankswitch_w)
202   AM_RANGE(0x90, 0x90) AM_WRITE_LEGACY(misc_w)
203   AM_RANGE(0xa0, 0xa0) AM_WRITE_LEGACY(bg_bank_w)
201   AM_RANGE(0x80, 0x80) AM_WRITE(cpu_bankswitch_w)
202   AM_RANGE(0x90, 0x90) AM_WRITE(misc_w)
203   AM_RANGE(0xa0, 0xa0) AM_WRITE(bg_bank_w)
204204   AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
205205   AM_RANGE(0xd0, 0xd0) AM_READ_PORT("SW1_A")
206206   AM_RANGE(0xd1, 0xd1) AM_READ_PORT("SW1_B")
src/mame/drivers/5clown.c
r14845r14846
466466   UINT8 *m_colorram;
467467   tilemap_t *m_bg_tilemap;
468468   int m_mux_data;
469   DECLARE_WRITE8_MEMBER(fclown_videoram_w);
470   DECLARE_WRITE8_MEMBER(fclown_colorram_w);
471   DECLARE_WRITE8_MEMBER(cpu_c048_w);
472   DECLARE_WRITE8_MEMBER(cpu_d800_w);
473   DECLARE_READ8_MEMBER(snd_e06_r);
474   DECLARE_WRITE8_MEMBER(snd_800_w);
475   DECLARE_WRITE8_MEMBER(snd_a02_w);
469476};
470477
471478
r14845r14846
477484
478485
479486
480static WRITE8_HANDLER( fclown_videoram_w )
487WRITE8_MEMBER(_5clown_state::fclown_videoram_w)
481488{
482   _5clown_state *state = space->machine().driver_data<_5clown_state>();
483   state->m_videoram[offset] = data;
484   state->m_bg_tilemap->mark_tile_dirty(offset);
489   m_videoram[offset] = data;
490   m_bg_tilemap->mark_tile_dirty(offset);
485491}
486492
487static WRITE8_HANDLER( fclown_colorram_w )
493WRITE8_MEMBER(_5clown_state::fclown_colorram_w)
488494{
489   _5clown_state *state = space->machine().driver_data<_5clown_state>();
490   state->m_colorram[offset] = data;
491   state->m_bg_tilemap->mark_tile_dirty(offset);
495   m_colorram[offset] = data;
496   m_bg_tilemap->mark_tile_dirty(offset);
492497}
493498
494499
r14845r14846
653658/**********************************/
654659
655660
656static WRITE8_HANDLER( cpu_c048_w)
661WRITE8_MEMBER(_5clown_state::cpu_c048_w)
657662{
658663   logerror("Main: Write to $C048: %02X\n", data);
659664}
660665
661static WRITE8_HANDLER( cpu_d800_w )
666WRITE8_MEMBER(_5clown_state::cpu_d800_w)
662667{
663   _5clown_state *state = space->machine().driver_data<_5clown_state>();
664668   logerror("Main: Write to $D800: %02x\n", data);
665   state->m_main_latch_d800 = data;
669   m_main_latch_d800 = data;
666670}
667671
668672
r14845r14846
681685*  SOUND  R/W Handlers        *
682686******************************/
683687
684static READ8_HANDLER( snd_e06_r )
688READ8_MEMBER(_5clown_state::snd_e06_r)
685689{
686   _5clown_state *state = space->machine().driver_data<_5clown_state>();
687690   logerror("Sound: Read from $0E06 \n");
688   return state->m_main_latch_d800;
691   return m_main_latch_d800;
689692}
690693
691static WRITE8_HANDLER( snd_800_w )
694WRITE8_MEMBER(_5clown_state::snd_800_w)
692695{
693   _5clown_state *state = space->machine().driver_data<_5clown_state>();
694   state->m_snd_latch_0800 = data;
696   m_snd_latch_0800 = data;
695697
696   if (state->m_snd_latch_0a02 == 0xc0)
698   if (m_snd_latch_0a02 == 0xc0)
697699   {
698      state->m_ay8910_addr = state->m_snd_latch_0800;
700      m_ay8910_addr = m_snd_latch_0800;
699701   }
700702
701   if (state->m_snd_latch_0a02 == 0x00)
703   if (m_snd_latch_0a02 == 0x00)
702704   {
703      fclown_ay8910_w( state->m_ay8910, state->m_ay8910_addr, state->m_snd_latch_0800);
705      fclown_ay8910_w( m_ay8910, m_ay8910_addr, m_snd_latch_0800);
704706   }
705707}
706708
707static WRITE8_HANDLER( snd_a02_w )
709WRITE8_MEMBER(_5clown_state::snd_a02_w)
708710{
709   _5clown_state *state = space->machine().driver_data<_5clown_state>();
710   state->m_snd_latch_0a02 = data & 0xff;
711   logerror("Sound: Write to $0A02: %02x\n", state->m_snd_latch_0a02);
711   m_snd_latch_0a02 = data & 0xff;
712   logerror("Sound: Write to $0A02: %02x\n", m_snd_latch_0a02);
712713}
713714
714715
r14845r14846
722723   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
723724   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
724725   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
725   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(fclown_videoram_w) AM_BASE(m_videoram)   /* Init'ed at $2042 */
726   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(fclown_colorram_w) AM_BASE(m_colorram)   /* Init'ed at $2054 */
726   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(fclown_videoram_w) AM_BASE(m_videoram)   /* Init'ed at $2042 */
727   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(fclown_colorram_w) AM_BASE(m_colorram)   /* Init'ed at $2054 */
727728   AM_RANGE(0x2000, 0x7fff) AM_ROM               /* ROM space */
728729
729   AM_RANGE(0xc048, 0xc048) AM_WRITE_LEGACY(cpu_c048_w )
730   AM_RANGE(0xd800, 0xd800) AM_WRITE_LEGACY(cpu_d800_w )
730   AM_RANGE(0xc048, 0xc048) AM_WRITE(cpu_c048_w )
731   AM_RANGE(0xd800, 0xd800) AM_WRITE(cpu_d800_w )
731732
732733   AM_RANGE(0xc400, 0xc400) AM_READ_PORT("SW1")   /* DIP Switches bank */
733734   AM_RANGE(0xcc00, 0xcc00) AM_READ_PORT("SW2")   /* DIP Switches bank */
r14845r14846
793794
794795static ADDRESS_MAP_START( fcaudio_map, AS_PROGRAM, 8, _5clown_state )
795796   AM_RANGE(0x0000, 0x07ff) AM_RAM
796   AM_RANGE(0x0800, 0x0800) AM_WRITE_LEGACY(snd_800_w)
797   AM_RANGE(0x0a02, 0x0a02) AM_WRITE_LEGACY(snd_a02_w)
797   AM_RANGE(0x0800, 0x0800) AM_WRITE(snd_800_w)
798   AM_RANGE(0x0a02, 0x0a02) AM_WRITE(snd_a02_w)
798799   AM_RANGE(0x0c04, 0x0c04) AM_DEVWRITE("oki6295", okim6295_device, write)
799800   AM_RANGE(0x0c06, 0x0c06) AM_DEVREAD("oki6295", okim6295_device, read)
800   AM_RANGE(0x0e06, 0x0e06) AM_READ_LEGACY(snd_e06_r)
801   AM_RANGE(0x0e06, 0x0e06) AM_READ(snd_e06_r)
801802   AM_RANGE(0xe000, 0xffff) AM_ROM               /* ROM space */
802803ADDRESS_MAP_END
803804
src/mame/drivers/tgtpanic.c
r14845r14846
2121
2222   UINT8 *m_ram;
2323   UINT8 m_color;
24   DECLARE_WRITE8_MEMBER(color_w);
2425};
2526
2627
r14845r14846
6667   return 0;
6768}
6869
69static WRITE8_HANDLER( color_w )
70WRITE8_MEMBER(tgtpanic_state::color_w)
7071{
71   tgtpanic_state *state = space->machine().driver_data<tgtpanic_state>();
72   space->machine().primary_screen->update_partial(space->machine().primary_screen->vpos());
73   state->m_color = data;
72   machine().primary_screen->update_partial(machine().primary_screen->vpos());
73   m_color = data;
7474}
7575
7676
r14845r14846
8787
8888static ADDRESS_MAP_START( io_map, AS_IO, 8, tgtpanic_state )
8989   ADDRESS_MAP_GLOBAL_MASK(0xff)
90   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE_LEGACY(color_w)
90   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE(color_w)
9191   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1")
9292ADDRESS_MAP_END
9393
src/mame/drivers/drw80pkr.c
r14845r14846
5050   UINT8 m_pkr_io_ram[0x100];
5151   UINT16 m_video_ram[0x0400];
5252   UINT8 m_color_ram[0x0400];
53   DECLARE_WRITE8_MEMBER(t0_w);
54   DECLARE_WRITE8_MEMBER(t1_w);
55   DECLARE_WRITE8_MEMBER(p0_w);
56   DECLARE_WRITE8_MEMBER(p1_w);
57   DECLARE_WRITE8_MEMBER(p2_w);
58   DECLARE_WRITE8_MEMBER(prog_w);
59   DECLARE_WRITE8_MEMBER(bus_w);
60   DECLARE_WRITE8_MEMBER(drw80pkr_io_w);
61   DECLARE_READ8_MEMBER(t0_r);
62   DECLARE_READ8_MEMBER(t1_r);
63   DECLARE_READ8_MEMBER(p0_r);
64   DECLARE_READ8_MEMBER(p1_r);
65   DECLARE_READ8_MEMBER(p2_r);
66   DECLARE_READ8_MEMBER(bus_r);
67   DECLARE_READ8_MEMBER(drw80pkr_io_r);
5368};
5469
5570
r14845r14846
6782* Write Handlers *
6883******************/
6984
70static WRITE8_HANDLER( t0_w )
85WRITE8_MEMBER(drw80pkr_state::t0_w)
7186{
72   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
73   state->m_t0 = data;
87   m_t0 = data;
7488}
7589
76static WRITE8_HANDLER( t1_w )
90WRITE8_MEMBER(drw80pkr_state::t1_w)
7791{
78   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
79   state->m_t1 = data;
92   m_t1 = data;
8093}
8194
82static WRITE8_HANDLER( p0_w )
95WRITE8_MEMBER(drw80pkr_state::p0_w)
8396{
84   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
85   state->m_p0 = data;
97   m_p0 = data;
8698}
8799
88static WRITE8_HANDLER( p1_w )
100WRITE8_MEMBER(drw80pkr_state::p1_w)
89101{
90   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
91   state->m_p1 = data;
102   m_p1 = data;
92103}
93104
94static WRITE8_HANDLER( p2_w )
105WRITE8_MEMBER(drw80pkr_state::p2_w)
95106{
96   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
97   state->m_p2 = data;
107   m_p2 = data;
98108}
99109
100static WRITE8_HANDLER( prog_w )
110WRITE8_MEMBER(drw80pkr_state::prog_w)
101111{
102   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
103   state->m_prog = data;
112   m_prog = data;
104113
105114   // Bankswitch Program Memory
106   if (state->m_prog == 0x01)
115   if (m_prog == 0x01)
107116   {
108      state->m_active_bank = state->m_active_bank ^ 0x01;
117      m_active_bank = m_active_bank ^ 0x01;
109118
110      memory_set_bank(space->machine(), "bank1", state->m_active_bank);
119      memory_set_bank(machine(), "bank1", m_active_bank);
111120   }
112121}
113122
114static WRITE8_HANDLER( bus_w )
123WRITE8_MEMBER(drw80pkr_state::bus_w)
115124{
116   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
117   state->m_bus = data;
125   m_bus = data;
118126}
119127
120static WRITE8_HANDLER( drw80pkr_io_w )
128WRITE8_MEMBER(drw80pkr_state::drw80pkr_io_w)
121129{
122   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
123130   UINT16 n_offs;
124131
125   if (state->m_p2 == 0x3f || state->m_p2 == 0x7f)
132   if (m_p2 == 0x3f || m_p2 == 0x7f)
126133   {
127      n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
134      n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
128135
129      if (state->m_p2 == 0x3f)
136      if (m_p2 == 0x3f)
130137      {
131         state->m_video_ram[n_offs] = data; // low address
138         m_video_ram[n_offs] = data; // low address
132139      } else {
133         state->m_color_ram[n_offs] = data & 0x0f; // color palette
134         state->m_video_ram[n_offs] += ((data & 0xf0) << 4 ); // high address
140         m_color_ram[n_offs] = data & 0x0f; // color palette
141         m_video_ram[n_offs] += ((data & 0xf0) << 4 ); // high address
135142      }
136143
137      state->m_bg_tilemap->mark_tile_dirty(n_offs);
144      m_bg_tilemap->mark_tile_dirty(n_offs);
138145   }
139146
140   if (state->m_p2 == 0xc7)
147   if (m_p2 == 0xc7)
141148   {
142149      // CRTC Register
143150      // R0 = 0x1f(31)    Horizontal Total
r14845r14846
161168      // R13 = 0x00       Display Start Address (Low)
162169   }
163170
164   if (state->m_p2 == 0xd7)
171   if (m_p2 == 0xd7)
165172   {
166173      // CRTC Address
167174   }
168175
169   if (state->m_p2 == 0xfb) {
170      state->m_pkr_io_ram[offset] = data;
176   if (m_p2 == 0xfb) {
177      m_pkr_io_ram[offset] = data;
171178   }
172179
173   if (state->m_p2 == 0xff)
180   if (m_p2 == 0xff)
174181   {
175      if (state->m_p1 == 0xdf)
182      if (m_p1 == 0xdf)
176183      {
177         state->m_attract_mode = data; // Latch this for use in input reads (0x01 = attract mode, 0x00 = game in progress)
184         m_attract_mode = data; // Latch this for use in input reads (0x01 = attract mode, 0x00 = game in progress)
178185      }
179186
180      if (state->m_p1 == 0xdb || state->m_p1 == 0xef || state->m_p1 == 0xf7 || state->m_p1 == 0xfb)
187      if (m_p1 == 0xdb || m_p1 == 0xef || m_p1 == 0xf7 || m_p1 == 0xfb)
181188      {
182189         // unknown, most likely lamps, meters, hopper etc.
183190      }
184191
185192      // ay8910 control port
186      if (state->m_p1 == 0xfc)
187         ay8910_address_w(space->machine().device("aysnd"), 0, data);
193      if (m_p1 == 0xfc)
194         ay8910_address_w(machine().device("aysnd"), 0, data);
188195
189196      // ay8910_write_port_0_w
190      if (state->m_p1 == 0xfe)
191         ay8910_data_w(space->machine().device("aysnd"), 0, data);
197      if (m_p1 == 0xfe)
198         ay8910_data_w(machine().device("aysnd"), 0, data);
192199   }
193200}
194201
r14845r14846
196203* Read Handlers *
197204****************/
198205
199static READ8_HANDLER( t0_r )
206READ8_MEMBER(drw80pkr_state::t0_r)
200207{
201   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
202    return state->m_t0;
208    return m_t0;
203209}
204210
205static READ8_HANDLER( t1_r )
211READ8_MEMBER(drw80pkr_state::t1_r)
206212{
207   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
208    return state->m_t1;
213    return m_t1;
209214}
210215
211static READ8_HANDLER( p0_r )
216READ8_MEMBER(drw80pkr_state::p0_r)
212217{
213   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
214    return state->m_p0;
218    return m_p0;
215219}
216220
217static READ8_HANDLER( p1_r )
221READ8_MEMBER(drw80pkr_state::p1_r)
218222{
219   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
220    return state->m_p1;
223    return m_p1;
221224}
222225
223static READ8_HANDLER( p2_r )
226READ8_MEMBER(drw80pkr_state::p2_r)
224227{
225   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
226    return state->m_p2;
228    return m_p2;
227229}
228230
229static READ8_HANDLER( bus_r )
231READ8_MEMBER(drw80pkr_state::bus_r)
230232{
231   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
232    return state->m_bus;
233    return m_bus;
233234}
234235
235static READ8_HANDLER( drw80pkr_io_r )
236READ8_MEMBER(drw80pkr_state::drw80pkr_io_r)
236237{
237   drw80pkr_state *state = space->machine().driver_data<drw80pkr_state>();
238238   UINT8 ret;
239239   UINT16 kbdin;
240240
241241   ret = 0x00;
242242
243   if (state->m_p2 == 0x3b)
243   if (m_p2 == 0x3b)
244244   {
245245      // unknown
246246   }
247247
248   if (state->m_p2 == 0x7b)
248   if (m_p2 == 0x7b)
249249   {
250      ret = state->m_pkr_io_ram[offset];
250      ret = m_pkr_io_ram[offset];
251251   }
252252
253   if (state->m_p2 == 0xf7)
253   if (m_p2 == 0xf7)
254254   {
255255      // unknown
256256   }
257257
258   if (state->m_p2 == 0xfb)
258   if (m_p2 == 0xfb)
259259   {
260      ret = state->m_pkr_io_ram[offset];
260      ret = m_pkr_io_ram[offset];
261261   }
262262
263   if (state->m_p2 == 0xff)
263   if (m_p2 == 0xff)
264264   {
265      if (state->m_p1 == 0x5f || state->m_p1 == 0x9f || state->m_p1 == 0xdb)
265      if (m_p1 == 0x5f || m_p1 == 0x9f || m_p1 == 0xdb)
266266      {
267267         // unknown
268268      }
269269
270      if (state->m_p1 == 0xfe)
270      if (m_p1 == 0xfe)
271271      {
272272         // Dip switches tied to sound chip
273273         //
r14845r14846
280280         ret = 0x77; // double-up with credit payout
281281      }
282282
283      if ((state->m_attract_mode == 0x01 && state->m_p1 == 0xef) || state->m_p1 == 0xf7)
283      if ((m_attract_mode == 0x01 && m_p1 == 0xef) || m_p1 == 0xf7)
284284      {
285285
286286         // TODO: Get Input Port Values
287         kbdin = ((input_port_read(space->machine(), "IN1") & 0xaf ) << 8) + input_port_read(space->machine(), "IN0");
287         kbdin = ((input_port_read(machine(), "IN1") & 0xaf ) << 8) + input_port_read(machine(), "IN0");
288288
289289         switch (kbdin)
290290         {
r14845r14846
417417ADDRESS_MAP_END
418418
419419static ADDRESS_MAP_START( drw80pkr_io_map, AS_IO, 8, drw80pkr_state )
420   AM_RANGE(0x00, 0xff) AM_READWRITE_LEGACY(drw80pkr_io_r, drw80pkr_io_w)
421   AM_RANGE(MCS48_PORT_T0,   MCS48_PORT_T0) AM_READWRITE_LEGACY(t0_r, t0_w)
422   AM_RANGE(MCS48_PORT_T1,   MCS48_PORT_T1) AM_READWRITE_LEGACY(t1_r, t1_w)
423   AM_RANGE(MCS48_PORT_P0,   MCS48_PORT_P0) AM_READWRITE_LEGACY(p0_r, p0_w)
424   AM_RANGE(MCS48_PORT_P1,   MCS48_PORT_P1) AM_READWRITE_LEGACY(p1_r, p1_w)
425   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2) AM_READWRITE_LEGACY(p2_r, p2_w)
426   AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_RAM_WRITE_LEGACY(prog_w)
427    AM_RANGE(MCS48_PORT_BUS,  MCS48_PORT_BUS) AM_READWRITE_LEGACY(bus_r, bus_w)
420   AM_RANGE(0x00, 0xff) AM_READWRITE(drw80pkr_io_r, drw80pkr_io_w)
421   AM_RANGE(MCS48_PORT_T0,   MCS48_PORT_T0) AM_READWRITE(t0_r, t0_w)
422   AM_RANGE(MCS48_PORT_T1,   MCS48_PORT_T1) AM_READWRITE(t1_r, t1_w)
423   AM_RANGE(MCS48_PORT_P0,   MCS48_PORT_P0) AM_READWRITE(p0_r, p0_w)
424   AM_RANGE(MCS48_PORT_P1,   MCS48_PORT_P1) AM_READWRITE(p1_r, p1_w)
425   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2) AM_READWRITE(p2_r, p2_w)
426   AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_RAM_WRITE(prog_w)
427    AM_RANGE(MCS48_PORT_BUS,  MCS48_PORT_BUS) AM_READWRITE(bus_r, bus_w)
428428ADDRESS_MAP_END
429429
430430/*************************
src/mame/drivers/superdq.c
r14845r14846
4141   UINT8 *m_videoram;
4242   tilemap_t *m_tilemap;
4343   int m_color_bank;
44   DECLARE_WRITE8_MEMBER(superdq_videoram_w);
45   DECLARE_WRITE8_MEMBER(superdq_io_w);
46   DECLARE_READ8_MEMBER(superdq_ld_r);
47   DECLARE_WRITE8_MEMBER(superdq_ld_w);
4448};
4549
4650static TILE_GET_INFO( get_tile_info )
r14845r14846
139143   device_set_input_line(device, 0, ASSERT_LINE);
140144}
141145
142static WRITE8_HANDLER( superdq_videoram_w )
146WRITE8_MEMBER(superdq_state::superdq_videoram_w)
143147{
144   superdq_state *state = space->machine().driver_data<superdq_state>();
145148
146   state->m_videoram[offset] = data;
147   state->m_tilemap->mark_tile_dirty(offset);
149   m_videoram[offset] = data;
150   m_tilemap->mark_tile_dirty(offset);
148151}
149152
150static WRITE8_HANDLER( superdq_io_w )
153WRITE8_MEMBER(superdq_state::superdq_io_w)
151154{
152   superdq_state *state = space->machine().driver_data<superdq_state>();
153155   int          i;
154156   static const UINT8 black_color_entries[] = {7,15,16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
155157
156158   if ( data & 0x40 ) /* bit 6 = irqack */
157      cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
159      cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
158160
159   coin_counter_w( space->machine(), 0, data & 0x08 );
160   coin_counter_w( space->machine(), 1, data & 0x04 );
161   coin_counter_w( machine(), 0, data & 0x08 );
162   coin_counter_w( machine(), 1, data & 0x04 );
161163
162   state->m_color_bank = ( data & 2 ) ? 1 : 0;
164   m_color_bank = ( data & 2 ) ? 1 : 0;
163165
164166   for( i = 0; i < ARRAY_LENGTH( black_color_entries ); i++ )
165167   {
166168      int index = black_color_entries[i];
167169      if (data & 0x80)
168         palette_set_color(space->machine(), index, palette_get_color(space->machine(), index) & MAKE_ARGB(0,255,255,255));
170         palette_set_color(machine(), index, palette_get_color(machine(), index) & MAKE_ARGB(0,255,255,255));
169171      else
170         palette_set_color(space->machine(), index, palette_get_color(space->machine(), index) | MAKE_ARGB(255,0,0,0));
172         palette_set_color(machine(), index, palette_get_color(machine(), index) | MAKE_ARGB(255,0,0,0));
171173   }
172174
173175   /*
r14845r14846
177179    */
178180}
179181
180static READ8_HANDLER( superdq_ld_r )
182READ8_MEMBER(superdq_state::superdq_ld_r)
181183{
182   superdq_state *state = space->machine().driver_data<superdq_state>();
183184
184   return state->m_ld_in_latch;
185   return m_ld_in_latch;
185186}
186187
187static WRITE8_HANDLER( superdq_ld_w )
188WRITE8_MEMBER(superdq_state::superdq_ld_w)
188189{
189   superdq_state *state = space->machine().driver_data<superdq_state>();
190190
191   state->m_ld_out_latch = data;
191   m_ld_out_latch = data;
192192}
193193
194194
r14845r14846
202202static ADDRESS_MAP_START( superdq_map, AS_PROGRAM, 8, superdq_state )
203203   AM_RANGE(0x0000, 0x3fff) AM_ROM
204204   AM_RANGE(0x4000, 0x47ff) AM_RAM
205   AM_RANGE(0x5c00, 0x5fff) AM_RAM_WRITE_LEGACY(superdq_videoram_w) AM_BASE(m_videoram)
205   AM_RANGE(0x5c00, 0x5fff) AM_RAM_WRITE(superdq_videoram_w) AM_BASE(m_videoram)
206206ADDRESS_MAP_END
207207
208208static ADDRESS_MAP_START( superdq_io, AS_IO, 8, superdq_state )
209209   ADDRESS_MAP_GLOBAL_MASK(0xff)
210   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE_LEGACY(superdq_ld_w)
210   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE(superdq_ld_w)
211211   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1")
212212   AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW1")
213213   AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW2")
214   AM_RANGE(0x04, 0x04) AM_READ_LEGACY(superdq_ld_r) AM_DEVWRITE_LEGACY("snsnd", sn76496_w)
215   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(superdq_io_w)
214   AM_RANGE(0x04, 0x04) AM_READ(superdq_ld_r) AM_DEVWRITE_LEGACY("snsnd", sn76496_w)
215   AM_RANGE(0x08, 0x08) AM_WRITE(superdq_io_w)
216216   AM_RANGE(0x0c, 0x0d) AM_NOP /* HD46505S */
217217ADDRESS_MAP_END
218218
src/mame/drivers/bestleag.c
r14845r14846
3838   tilemap_t *m_fg_tilemap;
3939   UINT16 *m_spriteram;
4040   size_t m_spriteram_size;
41   DECLARE_WRITE16_MEMBER(bestleag_txram_w);
42   DECLARE_WRITE16_MEMBER(bestleag_bgram_w);
43   DECLARE_WRITE16_MEMBER(bestleag_fgram_w);
4144};
4245
4346
r14845r14846
197200   return 0;
198201}
199202
200static WRITE16_HANDLER( bestleag_txram_w )
203WRITE16_MEMBER(bestleag_state::bestleag_txram_w)
201204{
202   bestleag_state *state = space->machine().driver_data<bestleag_state>();
203   state->m_txram[offset] = data;
204   state->m_tx_tilemap->mark_tile_dirty(offset);
205   m_txram[offset] = data;
206   m_tx_tilemap->mark_tile_dirty(offset);
205207}
206208
207static WRITE16_HANDLER( bestleag_bgram_w )
209WRITE16_MEMBER(bestleag_state::bestleag_bgram_w)
208210{
209   bestleag_state *state = space->machine().driver_data<bestleag_state>();
210   state->m_bgram[offset] = data;
211   state->m_bg_tilemap->mark_tile_dirty(offset);
211   m_bgram[offset] = data;
212   m_bg_tilemap->mark_tile_dirty(offset);
212213}
213214
214static WRITE16_HANDLER( bestleag_fgram_w )
215WRITE16_MEMBER(bestleag_state::bestleag_fgram_w)
215216{
216   bestleag_state *state = space->machine().driver_data<bestleag_state>();
217   state->m_fgram[offset] = data;
218   state->m_fg_tilemap->mark_tile_dirty(offset);
217   m_fgram[offset] = data;
218   m_fg_tilemap->mark_tile_dirty(offset);
219219}
220220
221221static WRITE16_DEVICE_HANDLER( oki_bank_w )
r14845r14846
230230static ADDRESS_MAP_START( bestleag_map, AS_PROGRAM, 16, bestleag_state )
231231   AM_RANGE(0x000000, 0x03ffff) AM_ROM
232232   AM_RANGE(0x0d2000, 0x0d3fff) AM_NOP // left over from the original game (only read / written in memory test)
233   AM_RANGE(0x0e0000, 0x0e3fff) AM_RAM_WRITE_LEGACY(bestleag_bgram_w) AM_BASE(m_bgram)
234   AM_RANGE(0x0e8000, 0x0ebfff) AM_RAM_WRITE_LEGACY(bestleag_fgram_w) AM_BASE(m_fgram)
235   AM_RANGE(0x0f0000, 0x0f3fff) AM_RAM_WRITE_LEGACY(bestleag_txram_w) AM_BASE(m_txram)
233   AM_RANGE(0x0e0000, 0x0e3fff) AM_RAM_WRITE(bestleag_bgram_w) AM_BASE(m_bgram)
234   AM_RANGE(0x0e8000, 0x0ebfff) AM_RAM_WRITE(bestleag_fgram_w) AM_BASE(m_fgram)
235   AM_RANGE(0x0f0000, 0x0f3fff) AM_RAM_WRITE(bestleag_txram_w) AM_BASE(m_txram)
236236   AM_RANGE(0x0f8000, 0x0f800b) AM_RAM AM_BASE(m_vregs)
237237   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
238238   AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
src/mame/drivers/tomcat.c
r14845r14846
4747   UINT8 m_nvram[0x800];
4848   int m_dsp_BIO;
4949   int m_dsp_idle;
50   DECLARE_WRITE16_MEMBER(tomcat_adcon_w);
51   DECLARE_READ16_MEMBER(tomcat_adcread_r);
52   DECLARE_READ16_MEMBER(tomcat_inputs_r);
53   DECLARE_WRITE16_MEMBER(tomcat_led1on_w);
54   DECLARE_WRITE16_MEMBER(tomcat_led2on_w);
55   DECLARE_WRITE16_MEMBER(tomcat_led2off_w);
56   DECLARE_WRITE16_MEMBER(tomcat_led1off_w);
57   DECLARE_WRITE16_MEMBER(tomcat_lnkmodel_w);
58   DECLARE_WRITE16_MEMBER(tomcat_errl_w);
59   DECLARE_WRITE16_MEMBER(tomcat_errh_w);
60   DECLARE_WRITE16_MEMBER(tomcat_ackl_w);
61   DECLARE_WRITE16_MEMBER(tomcat_ackh_w);
62   DECLARE_WRITE16_MEMBER(tomcat_lnkmodeh_w);
63   DECLARE_WRITE16_MEMBER(tomcat_txbuffl_w);
64   DECLARE_WRITE16_MEMBER(tomcat_txbuffh_w);
65   DECLARE_WRITE16_MEMBER(tomcat_sndresl_w);
66   DECLARE_WRITE16_MEMBER(tomcat_sndresh_w);
67   DECLARE_WRITE16_MEMBER(tomcat_mresl_w);
68   DECLARE_WRITE16_MEMBER(tomcat_mresh_w);
69   DECLARE_WRITE16_MEMBER(tomcat_irqclr_w);
70   DECLARE_READ16_MEMBER(tomcat_inputs2_r);
71   DECLARE_READ16_MEMBER(tomcat_320bio_r);
72   DECLARE_READ16_MEMBER(dsp_BIO_r);
73   DECLARE_READ16_MEMBER(tomcat_shared_ram_r);
74   DECLARE_WRITE16_MEMBER(tomcat_shared_ram_w);
75   DECLARE_READ8_MEMBER(tomcat_nvram_r);
76   DECLARE_WRITE8_MEMBER(tomcat_nvram_w);
77   DECLARE_WRITE8_MEMBER(soundlatches_w);
5078};
5179
5280
5381
54static WRITE16_HANDLER(tomcat_adcon_w)
82WRITE16_MEMBER(tomcat_state::tomcat_adcon_w)
5583{
56   tomcat_state *state = space->machine().driver_data<tomcat_state>();
57   state->m_control_num = data;
84   m_control_num = data;
5885}
5986
60static READ16_HANDLER(tomcat_adcread_r)
87READ16_MEMBER(tomcat_state::tomcat_adcread_r)
6188{
62   tomcat_state *state = space->machine().driver_data<tomcat_state>();
63   switch( state->m_control_num )
89   switch( m_control_num )
6490   {
65   case 0: return input_port_read(space->machine(), "STICKY");
66   case 1: return input_port_read(space->machine(), "STICKX");
91   case 0: return input_port_read(machine(), "STICKY");
92   case 1: return input_port_read(machine(), "STICKX");
6793   default: return 0x7f7f;
6894   }
6995}
7096
71static READ16_HANDLER(tomcat_inputs_r)
97READ16_MEMBER(tomcat_state::tomcat_inputs_r)
7298{
7399   UINT16 result = 0;
74100   if (ACCESSING_BITS_8_15)
75      result |= input_port_read(space->machine(), "IN0") << 8;
101      result |= input_port_read(machine(), "IN0") << 8;
76102
77103   return result;
78104}
79105
80static WRITE16_HANDLER(tomcat_led1on_w)
106WRITE16_MEMBER(tomcat_state::tomcat_led1on_w)
81107{
82   set_led_status(space->machine(), 1, 1);
108   set_led_status(machine(), 1, 1);
83109}
84110
85static WRITE16_HANDLER(tomcat_led2on_w)
111WRITE16_MEMBER(tomcat_state::tomcat_led2on_w)
86112{
87   set_led_status(space->machine(), 2, 1);
113   set_led_status(machine(), 2, 1);
88114}
89115
90static WRITE16_HANDLER(tomcat_led2off_w)
116WRITE16_MEMBER(tomcat_state::tomcat_led2off_w)
91117{
92   set_led_status(space->machine(), 2, 0);
118   set_led_status(machine(), 2, 0);
93119}
94120
95static WRITE16_HANDLER(tomcat_led1off_w)
121WRITE16_MEMBER(tomcat_state::tomcat_led1off_w)
96122{
97   set_led_status(space->machine(), 1, 0);
123   set_led_status(machine(), 1, 0);
98124}
99125
100static WRITE16_HANDLER(tomcat_lnkmodel_w)
126WRITE16_MEMBER(tomcat_state::tomcat_lnkmodel_w)
101127{
102128   // Link Mode Low (address strobe)
103129   // Master does not respond to Interrupts
104130}
105131
106static WRITE16_HANDLER(tomcat_errl_w)
132WRITE16_MEMBER(tomcat_state::tomcat_errl_w)
107133{
108134   // Link Error Flag Low (address strobe)
109135}
110136
111static WRITE16_HANDLER(tomcat_errh_w)
137WRITE16_MEMBER(tomcat_state::tomcat_errh_w)
112138{
113139   // Link Error Flag High (address strobe)
114140}
115141
116static WRITE16_HANDLER(tomcat_ackl_w)
142WRITE16_MEMBER(tomcat_state::tomcat_ackl_w)
117143{
118144   // Link ACK Flag Low (address strobe)
119145}
120146
121static WRITE16_HANDLER(tomcat_ackh_w)
147WRITE16_MEMBER(tomcat_state::tomcat_ackh_w)
122148{
123149   // Link ACK Flag High (address strobe)
124150}
125151
126static WRITE16_HANDLER(tomcat_lnkmodeh_w)
152WRITE16_MEMBER(tomcat_state::tomcat_lnkmodeh_w)
127153{
128154   // Link Mode high (address strobe)
129155}
130156
131static WRITE16_HANDLER(tomcat_txbuffl_w)
157WRITE16_MEMBER(tomcat_state::tomcat_txbuffl_w)
132158{
133159   // Link Buffer Control (address strobe)
134160}
135161
136static WRITE16_HANDLER(tomcat_txbuffh_w)
162WRITE16_MEMBER(tomcat_state::tomcat_txbuffh_w)
137163{
138164   // Link Buffer Control high (address strobe)
139165   // Turn off TX (Link) Buffer
140166}
141167
142static WRITE16_HANDLER(tomcat_sndresl_w)
168WRITE16_MEMBER(tomcat_state::tomcat_sndresl_w)
143169{
144170   // Sound Reset Low       (Address Strobe)
145171   // Reset Sound System
146172}
147173
148static WRITE16_HANDLER(tomcat_sndresh_w)
174WRITE16_MEMBER(tomcat_state::tomcat_sndresh_w)
149175{
150176   // Sound Reset high      (Address Strobe)
151177   // Release reset of sound system
152178}
153179
154static WRITE16_HANDLER(tomcat_mresl_w)
180WRITE16_MEMBER(tomcat_state::tomcat_mresl_w)
155181{
156182   // 320 Reset Low         (Address Strobe)
157183   // Reset TMS320
158   device_set_input_line(space->machine().device("dsp"), INPUT_LINE_RESET, ASSERT_LINE);
184   device_set_input_line(machine().device("dsp"), INPUT_LINE_RESET, ASSERT_LINE);
159185}
160186
161static WRITE16_HANDLER(tomcat_mresh_w)
187WRITE16_MEMBER(tomcat_state::tomcat_mresh_w)
162188{
163   tomcat_state *state = space->machine().driver_data<tomcat_state>();
164189   // 320 Reset high        (Address Strobe)
165190   // Release reset of TMS320
166   state->m_dsp_BIO = 0;
167   device_set_input_line(space->machine().device("dsp"), INPUT_LINE_RESET, CLEAR_LINE);
191   m_dsp_BIO = 0;
192   device_set_input_line(machine().device("dsp"), INPUT_LINE_RESET, CLEAR_LINE);
168193}
169194
170static WRITE16_HANDLER(tomcat_irqclr_w)
195WRITE16_MEMBER(tomcat_state::tomcat_irqclr_w)
171196{
172197   // Clear IRQ Latch          (Address Strobe)
173   cputag_set_input_line(space->machine(), "maincpu", 1, CLEAR_LINE);
198   cputag_set_input_line(machine(), "maincpu", 1, CLEAR_LINE);
174199}
175200
176static READ16_HANDLER(tomcat_inputs2_r)
201READ16_MEMBER(tomcat_state::tomcat_inputs2_r)
177202{
178   tomcat_state *state = space->machine().driver_data<tomcat_state>();
179203/*
180204*       D15 LNKFLAG     (Game Link)
181205*       D14 PC3        "    "
r14845r14846
186210*       D9  /IDLE*      (TMS320 System)
187211*       D8
188212*/
189   return state->m_dsp_idle ? 0 : (1 << 9);
213   return m_dsp_idle ? 0 : (1 << 9);
190214}
191215
192static READ16_HANDLER(tomcat_320bio_r)
216READ16_MEMBER(tomcat_state::tomcat_320bio_r)
193217{
194   tomcat_state *state = space->machine().driver_data<tomcat_state>();
195   state->m_dsp_BIO = 1;
196   space->machine().device<cpu_device>("maincpu")->suspend(SUSPEND_REASON_SPIN, 1);
218   m_dsp_BIO = 1;
219   machine().device<cpu_device>("maincpu")->suspend(SUSPEND_REASON_SPIN, 1);
197220   return 0;
198221}
199222
200static READ16_HANDLER(dsp_BIO_r)
223READ16_MEMBER(tomcat_state::dsp_BIO_r)
201224{
202   tomcat_state *state = space->machine().driver_data<tomcat_state>();
203   if ( cpu_get_pc(&space->device()) == 0x0001 )
225   if ( cpu_get_pc(&space.device()) == 0x0001 )
204226   {
205      if ( state->m_dsp_idle == 0 )
227      if ( m_dsp_idle == 0 )
206228      {
207         state->m_dsp_idle = 1;
208         state->m_dsp_BIO = 0;
229         m_dsp_idle = 1;
230         m_dsp_BIO = 0;
209231      }
210      return !state->m_dsp_BIO;
232      return !m_dsp_BIO;
211233   }
212   else if ( cpu_get_pc(&space->device()) == 0x0003 )
234   else if ( cpu_get_pc(&space.device()) == 0x0003 )
213235   {
214      if ( state->m_dsp_BIO == 1 )
236      if ( m_dsp_BIO == 1 )
215237      {
216         state->m_dsp_idle = 0;
217         state->m_dsp_BIO = 0;
218         space->machine().device<cpu_device>("maincpu")->resume(SUSPEND_REASON_SPIN );
238         m_dsp_idle = 0;
239         m_dsp_BIO = 0;
240         machine().device<cpu_device>("maincpu")->resume(SUSPEND_REASON_SPIN );
219241         return 0;
220242      }
221243      else
r14845r14846
226248   }
227249   else
228250   {
229      return !state->m_dsp_BIO;
251      return !m_dsp_BIO;
230252   }
231253}
232254
233static READ16_HANDLER(tomcat_shared_ram_r)
255READ16_MEMBER(tomcat_state::tomcat_shared_ram_r)
234256{
235   tomcat_state *state = space->machine().driver_data<tomcat_state>();
236   return state->m_shared_ram[offset];
257   return m_shared_ram[offset];
237258}
238259
239static WRITE16_HANDLER(tomcat_shared_ram_w)
260WRITE16_MEMBER(tomcat_state::tomcat_shared_ram_w)
240261{
241   tomcat_state *state = space->machine().driver_data<tomcat_state>();
242   COMBINE_DATA(&state->m_shared_ram[offset]);
262   COMBINE_DATA(&m_shared_ram[offset]);
243263}
244264
245static READ8_HANDLER(tomcat_nvram_r)
265READ8_MEMBER(tomcat_state::tomcat_nvram_r)
246266{
247   tomcat_state *state = space->machine().driver_data<tomcat_state>();
248   return state->m_nvram[offset];
267   return m_nvram[offset];
249268}
250269
251static WRITE8_HANDLER(tomcat_nvram_w)
270WRITE8_MEMBER(tomcat_state::tomcat_nvram_w)
252271{
253   tomcat_state *state = space->machine().driver_data<tomcat_state>();
254   state->m_nvram[offset] = data;
272   m_nvram[offset] = data;
255273}
256274
257275static ADDRESS_MAP_START( tomcat_map, AS_PROGRAM, 16, tomcat_state )
258276   AM_RANGE(0x000000, 0x00ffff) AM_ROM
259   AM_RANGE(0x402000, 0x402001) AM_READ_LEGACY(tomcat_adcread_r) AM_WRITE_LEGACY(tomcat_adcon_w)
260   AM_RANGE(0x404000, 0x404001) AM_READ_LEGACY(tomcat_inputs_r) AM_WRITE_LEGACY(avgdvg_go_word_w)
277   AM_RANGE(0x402000, 0x402001) AM_READ(tomcat_adcread_r) AM_WRITE(tomcat_adcon_w)
278   AM_RANGE(0x404000, 0x404001) AM_READ(tomcat_inputs_r) AM_WRITE_LEGACY(avgdvg_go_word_w)
261279   AM_RANGE(0x406000, 0x406001) AM_WRITE_LEGACY(avgdvg_reset_word_w)
262   AM_RANGE(0x408000, 0x408001) AM_READWRITE_LEGACY(tomcat_inputs2_r, watchdog_reset16_w)
263   AM_RANGE(0x40a000, 0x40a001) AM_READWRITE_LEGACY(tomcat_320bio_r, tomcat_irqclr_w)
264   AM_RANGE(0x40e000, 0x40e001) AM_WRITE_LEGACY(tomcat_led1on_w)
265   AM_RANGE(0x40e002, 0x40e003) AM_WRITE_LEGACY(tomcat_led2on_w)
266   AM_RANGE(0x40e004, 0x40e005) AM_WRITE_LEGACY(tomcat_mresl_w)
267   AM_RANGE(0x40e006, 0x40e007) AM_WRITE_LEGACY(tomcat_sndresl_w)
268   AM_RANGE(0x40e008, 0x40e009) AM_WRITE_LEGACY(tomcat_lnkmodel_w)
269   AM_RANGE(0x40e00a, 0x40e00b) AM_WRITE_LEGACY(tomcat_errl_w)
270   AM_RANGE(0x40e00c, 0x40e00d) AM_WRITE_LEGACY(tomcat_ackl_w)
271   AM_RANGE(0x40e00e, 0x40e00f) AM_WRITE_LEGACY(tomcat_txbuffl_w)
272   AM_RANGE(0x40e010, 0x40e011) AM_WRITE_LEGACY(tomcat_led1off_w)
273   AM_RANGE(0x40e012, 0x40e013) AM_WRITE_LEGACY(tomcat_led2off_w)
274   AM_RANGE(0x40e014, 0x40e015) AM_WRITE_LEGACY(tomcat_mresh_w)
275   AM_RANGE(0x40e016, 0x40e017) AM_WRITE_LEGACY(tomcat_sndresh_w)
276   AM_RANGE(0x40e018, 0x40e019) AM_WRITE_LEGACY(tomcat_lnkmodeh_w)
277   AM_RANGE(0x40e01a, 0x40e01b) AM_WRITE_LEGACY(tomcat_errh_w)
278   AM_RANGE(0x40e01c, 0x40e01d) AM_WRITE_LEGACY(tomcat_ackh_w)
279   AM_RANGE(0x40e01e, 0x40e01f) AM_WRITE_LEGACY(tomcat_txbuffh_w)
280   AM_RANGE(0x408000, 0x408001) AM_READWRITE(tomcat_inputs2_r, watchdog_reset16_w)
281   AM_RANGE(0x40a000, 0x40a001) AM_READWRITE(tomcat_320bio_r, tomcat_irqclr_w)
282   AM_RANGE(0x40e000, 0x40e001) AM_WRITE(tomcat_led1on_w)
283   AM_RANGE(0x40e002, 0x40e003) AM_WRITE(tomcat_led2on_w)
284   AM_RANGE(0x40e004, 0x40e005) AM_WRITE(tomcat_mresl_w)
285   AM_RANGE(0x40e006, 0x40e007) AM_WRITE(tomcat_sndresl_w)
286   AM_RANGE(0x40e008, 0x40e009) AM_WRITE(tomcat_lnkmodel_w)
287   AM_RANGE(0x40e00a, 0x40e00b) AM_WRITE(tomcat_errl_w)
288   AM_RANGE(0x40e00c, 0x40e00d) AM_WRITE(tomcat_ackl_w)
289   AM_RANGE(0x40e00e, 0x40e00f) AM_WRITE(tomcat_txbuffl_w)
290   AM_RANGE(0x40e010, 0x40e011) AM_WRITE(tomcat_led1off_w)
291   AM_RANGE(0x40e012, 0x40e013) AM_WRITE(tomcat_led2off_w)
292   AM_RANGE(0x40e014, 0x40e015) AM_WRITE(tomcat_mresh_w)
293   AM_RANGE(0x40e016, 0x40e017) AM_WRITE(tomcat_sndresh_w)
294   AM_RANGE(0x40e018, 0x40e019) AM_WRITE(tomcat_lnkmodeh_w)
295   AM_RANGE(0x40e01a, 0x40e01b) AM_WRITE(tomcat_errh_w)
296   AM_RANGE(0x40e01c, 0x40e01d) AM_WRITE(tomcat_ackh_w)
297   AM_RANGE(0x40e01e, 0x40e01f) AM_WRITE(tomcat_txbuffh_w)
280298   AM_RANGE(0x800000, 0x803fff) AM_RAM AM_BASE_LEGACY((UINT16**)&avgdvg_vectorram) AM_SIZE_LEGACY(&avgdvg_vectorram_size)
281   AM_RANGE(0xffa000, 0xffbfff) AM_READWRITE_LEGACY(tomcat_shared_ram_r, tomcat_shared_ram_w)
299   AM_RANGE(0xffa000, 0xffbfff) AM_READWRITE(tomcat_shared_ram_r, tomcat_shared_ram_w)
282300   AM_RANGE(0xffc000, 0xffcfff) AM_RAM
283301   AM_RANGE(0xffd000, 0xffdfff) AM_DEVREADWRITE8_LEGACY("m48t02", timekeeper_r, timekeeper_w, 0xff00)
284   AM_RANGE(0xffd000, 0xffdfff) AM_READWRITE8_LEGACY(tomcat_nvram_r, tomcat_nvram_w, 0x00ff)
302   AM_RANGE(0xffd000, 0xffdfff) AM_READWRITE8(tomcat_nvram_r, tomcat_nvram_w, 0x00ff)
285303ADDRESS_MAP_END
286304
287305static ADDRESS_MAP_START( dsp_map, AS_PROGRAM, 16, tomcat_state )
r14845r14846
289307ADDRESS_MAP_END
290308
291309static ADDRESS_MAP_START( dsp_io_map, AS_IO, 16, tomcat_state )
292   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(dsp_BIO_r)
310   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(dsp_BIO_r)
293311ADDRESS_MAP_END
294312
295static WRITE8_HANDLER(soundlatches_w)
313WRITE8_MEMBER(tomcat_state::soundlatches_w)
296314{
297315   switch(offset)
298316   {
r14845r14846
309327static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tomcat_state )
310328   AM_RANGE(0x0000, 0x1fff) AM_RAM
311329   AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
312   AM_RANGE(0x3000, 0x30df) AM_WRITE_LEGACY(soundlatches_w)
330   AM_RANGE(0x3000, 0x30df) AM_WRITE(soundlatches_w)
313331   AM_RANGE(0x30e0, 0x30e0) AM_NOP // COINRD Inputs: D7 = Coin L, D6 = Coin R, D5 = SOUNDFLAG
314332   AM_RANGE(0x5000, 0x507f) AM_RAM   // 6532 ram
315333   AM_RANGE(0x5080, 0x509f) AM_DEVREADWRITE_LEGACY("riot", riot6532_r, riot6532_w)
src/mame/drivers/xtheball.c
r14845r14846
2323   UINT16 *m_vram_bg;
2424   UINT16 *m_vram_fg;
2525   UINT8 m_bitvals[32];
26   DECLARE_WRITE16_MEMBER(bit_controls_w);
27   DECLARE_READ16_MEMBER(analogx_r);
28   DECLARE_READ16_MEMBER(analogy_watchdog_r);
2629};
2730
2831
r14845r14846
115118 *
116119 *************************************/
117120
118static WRITE16_HANDLER( bit_controls_w )
121WRITE16_MEMBER(xtheball_state::bit_controls_w)
119122{
120   xtheball_state *state = space->machine().driver_data<xtheball_state>();
121   UINT8 *bitvals = state->m_bitvals;
123   UINT8 *bitvals = m_bitvals;
122124   if (ACCESSING_BITS_0_7)
123125   {
124126      if (bitvals[offset] != (data & 1))
125127      {
126         logerror("%08x:bit_controls_w(%x,%d)\n", cpu_get_pc(&space->device()), offset, data & 1);
128         logerror("%08x:bit_controls_w(%x,%d)\n", cpu_get_pc(&space.device()), offset, data & 1);
127129
128130         switch (offset)
129131         {
130132            case 7:
131               ticket_dispenser_w(space->machine().device("ticket"), 0, data << 7);
133               ticket_dispenser_w(machine().device("ticket"), 0, data << 7);
132134               break;
133135
134136            case 8:
135               set_led_status(space->machine(), 0, data & 1);
137               set_led_status(machine(), 0, data & 1);
136138               break;
137139         }
138140      }
r14845r14846
185187 *
186188 *************************************/
187189
188static READ16_HANDLER( analogx_r )
190READ16_MEMBER(xtheball_state::analogx_r)
189191{
190   return (input_port_read(space->machine(), "ANALOGX") << 8) | 0x00ff;
192   return (input_port_read(machine(), "ANALOGX") << 8) | 0x00ff;
191193}
192194
193195
194static READ16_HANDLER( analogy_watchdog_r )
196READ16_MEMBER(xtheball_state::analogy_watchdog_r)
195197{
196198   /* doubles as a watchdog address */
197199   watchdog_reset_w(space,0,0);
198   return (input_port_read(space->machine(), "ANALOGY") << 8) | 0x00ff;
200   return (input_port_read(machine(), "ANALOGY") << 8) | 0x00ff;
199201}
200202
201203
r14845r14846
211213   AM_RANGE(0x01000000, 0x010fffff) AM_RAM AM_BASE(m_vram_bg)
212214   AM_RANGE(0x02000000, 0x020fffff) AM_RAM AM_BASE(m_vram_fg)
213215   AM_RANGE(0x03000000, 0x030000ff) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff)
214   AM_RANGE(0x03040000, 0x030401ff) AM_WRITE_LEGACY(bit_controls_w)
216   AM_RANGE(0x03040000, 0x030401ff) AM_WRITE(bit_controls_w)
215217   AM_RANGE(0x03040080, 0x0304008f) AM_READ_PORT("DSW")
216   AM_RANGE(0x03040100, 0x0304010f) AM_READ_LEGACY(analogx_r)
218   AM_RANGE(0x03040100, 0x0304010f) AM_READ(analogx_r)
217219   AM_RANGE(0x03040110, 0x0304011f) AM_READ_PORT("COIN1")
218220   AM_RANGE(0x03040130, 0x0304013f) AM_READ_PORT("SERVICE2")
219221   AM_RANGE(0x03040140, 0x0304014f) AM_READ_PORT("COIN3")
220222   AM_RANGE(0x03040150, 0x0304015f) AM_READ_PORT("BUTTON1")
221223   AM_RANGE(0x03040160, 0x0304016f) AM_READ_PORT("SERVICE")
222224   AM_RANGE(0x03040170, 0x0304017f) AM_READ_PORT("SERVICE1")
223   AM_RANGE(0x03040180, 0x0304018f) AM_READ_LEGACY(analogy_watchdog_r)
225   AM_RANGE(0x03040180, 0x0304018f) AM_READ(analogy_watchdog_r)
224226   AM_RANGE(0x03060000, 0x0306000f) AM_DEVWRITE8_LEGACY("dac", dac_w, 0xff00)
225227   AM_RANGE(0x04000000, 0x057fffff) AM_ROM AM_REGION("user2", 0)
226228   AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w)
src/mame/drivers/maxaflex.c
r14845r14846
4040   UINT8 m_tdr;
4141   UINT8 m_tcr;
4242   timer_device *m_mcu_timer;
43   DECLARE_READ8_MEMBER(mcu_portA_r);
44   DECLARE_WRITE8_MEMBER(mcu_portA_w);
45   DECLARE_READ8_MEMBER(mcu_portB_r);
46   DECLARE_WRITE8_MEMBER(mcu_portB_w);
47   DECLARE_READ8_MEMBER(mcu_portC_r);
48   DECLARE_WRITE8_MEMBER(mcu_portC_w);
49   DECLARE_READ8_MEMBER(mcu_ddr_r);
50   DECLARE_WRITE8_MEMBER(mcu_portA_ddr_w);
51   DECLARE_WRITE8_MEMBER(mcu_portB_ddr_w);
52   DECLARE_WRITE8_MEMBER(mcu_portC_ddr_w);
53   DECLARE_READ8_MEMBER(mcu_tdr_r);
54   DECLARE_WRITE8_MEMBER(mcu_tdr_w);
55   DECLARE_READ8_MEMBER(mcu_tcr_r);
56   DECLARE_WRITE8_MEMBER(mcu_tcr_w);
4357};
4458
4559
r14845r14846
5872    7   (out) AUDIO
5973*/
6074
61static READ8_HANDLER( mcu_portA_r )
75READ8_MEMBER(maxaflex_state::mcu_portA_r)
6276{
63   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
64   state->m_portA_in = input_port_read(space->machine(), "dsw") | (input_port_read(space->machine(), "coin") << 4) | (input_port_read(space->machine(), "console") << 5);
65   return (state->m_portA_in & ~state->m_ddrA) | (state->m_portA_out & state->m_ddrA);
77   m_portA_in = input_port_read(machine(), "dsw") | (input_port_read(machine(), "coin") << 4) | (input_port_read(machine(), "console") << 5);
78   return (m_portA_in & ~m_ddrA) | (m_portA_out & m_ddrA);
6679}
6780
68static WRITE8_HANDLER( mcu_portA_w )
81WRITE8_MEMBER(maxaflex_state::mcu_portA_w)
6982{
70   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
71   state->m_portA_out = data;
72   speaker_level_w(space->machine().device("speaker"), data >> 7);
83   m_portA_out = data;
84   speaker_level_w(machine().device("speaker"), data >> 7);
7385}
7486
7587/* Port B:
r14845r14846
8395    7   (out)   TOFF - enables/disables user controls
8496*/
8597
86static READ8_HANDLER( mcu_portB_r )
98READ8_MEMBER(maxaflex_state::mcu_portB_r)
8799{
88   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
89   return (state->m_portB_in & ~state->m_ddrB) | (state->m_portB_out & state->m_ddrB);
100   return (m_portB_in & ~m_ddrB) | (m_portB_out & m_ddrB);
90101}
91102
92static WRITE8_HANDLER( mcu_portB_w )
103WRITE8_MEMBER(maxaflex_state::mcu_portB_w)
93104{
94   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
95   UINT8 diff = data ^ state->m_portB_out;
96   state->m_portB_out = data;
105   UINT8 diff = data ^ m_portB_out;
106   m_portB_out = data;
97107
98108   /* clear coin interrupt */
99109   if (data & 0x04)
100      cputag_set_input_line(space->machine(), "mcu", M6805_IRQ_LINE, CLEAR_LINE );
110      cputag_set_input_line(machine(), "mcu", M6805_IRQ_LINE, CLEAR_LINE );
101111
102112   /* AUDMUTE */
103   space->machine().sound().system_enable((data >> 5) & 1);
113   machine().sound().system_enable((data >> 5) & 1);
104114
105115   /* RES600 */
106116   if (diff & 0x10)
107      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
117      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
108118
109119   /* latch for lamps */
110120   if ((diff & 0x40) && !(data & 0x40))
111121   {
112      output_set_lamp_value(0, (state->m_portC_out >> 0) & 1);
113      output_set_lamp_value(1, (state->m_portC_out >> 1) & 1);
114      output_set_lamp_value(2, (state->m_portC_out >> 2) & 1);
115      output_set_lamp_value(3, (state->m_portC_out >> 3) & 1);
122      output_set_lamp_value(0, (m_portC_out >> 0) & 1);
123      output_set_lamp_value(1, (m_portC_out >> 1) & 1);
124      output_set_lamp_value(2, (m_portC_out >> 2) & 1);
125      output_set_lamp_value(3, (m_portC_out >> 3) & 1);
116126   }
117127}
118128
r14845r14846
122132    2   (out)   lamp START
123133    3   (out)   lamp OVER */
124134
125static READ8_HANDLER( mcu_portC_r )
135READ8_MEMBER(maxaflex_state::mcu_portC_r)
126136{
127   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
128   return (state->m_portC_in & ~state->m_ddrC) | (state->m_portC_out & state->m_ddrC);
137   return (m_portC_in & ~m_ddrC) | (m_portC_out & m_ddrC);
129138}
130139
131static WRITE8_HANDLER( mcu_portC_w )
140WRITE8_MEMBER(maxaflex_state::mcu_portC_w)
132141{
133   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
134142   /* uses a 7447A, which is equivalent to an LS47/48 */
135143   static const UINT8 ls48_map[16] =
136144      { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 };
137145
138   state->m_portC_out = data & 0x0f;
146   m_portC_out = data & 0x0f;
139147
140148   /* displays */
141   switch( state->m_portB_out & 0x3 )
149   switch( m_portB_out & 0x3 )
142150   {
143      case 0x0: output_set_digit_value(0, ls48_map[state->m_portC_out]); break;
144      case 0x1: output_set_digit_value(1, ls48_map[state->m_portC_out]); break;
145      case 0x2: output_set_digit_value(2, ls48_map[state->m_portC_out]); break;
151      case 0x0: output_set_digit_value(0, ls48_map[m_portC_out]); break;
152      case 0x1: output_set_digit_value(1, ls48_map[m_portC_out]); break;
153      case 0x2: output_set_digit_value(2, ls48_map[m_portC_out]); break;
146154      case 0x3: break;
147155   }
148156}
149157
150static READ8_HANDLER( mcu_ddr_r )
158READ8_MEMBER(maxaflex_state::mcu_ddr_r)
151159{
152160   return 0xff;
153161}
154162
155static WRITE8_HANDLER( mcu_portA_ddr_w )
163WRITE8_MEMBER(maxaflex_state::mcu_portA_ddr_w)
156164{
157   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
158   state->m_ddrA = data;
165   m_ddrA = data;
159166}
160167
161static WRITE8_HANDLER( mcu_portB_ddr_w )
168WRITE8_MEMBER(maxaflex_state::mcu_portB_ddr_w)
162169{
163   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
164   state->m_ddrB = data;
170   m_ddrB = data;
165171}
166172
167static WRITE8_HANDLER( mcu_portC_ddr_w )
173WRITE8_MEMBER(maxaflex_state::mcu_portC_ddr_w)
168174{
169   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
170   state->m_ddrC = data;
175   m_ddrC = data;
171176}
172177
173178static TIMER_DEVICE_CALLBACK( mcu_timer_proc )
r14845r14846
184189}
185190
186191/* Timer Data Reg */
187static READ8_HANDLER( mcu_tdr_r )
192READ8_MEMBER(maxaflex_state::mcu_tdr_r)
188193{
189   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
190   return state->m_tdr;
194   return m_tdr;
191195}
192196
193static WRITE8_HANDLER( mcu_tdr_w )
197WRITE8_MEMBER(maxaflex_state::mcu_tdr_w)
194198{
195   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
196   state->m_tdr = data;
199   m_tdr = data;
197200}
198201
199202/* Timer control reg */
200static READ8_HANDLER( mcu_tcr_r )
203READ8_MEMBER(maxaflex_state::mcu_tcr_r)
201204{
202   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
203   return state->m_tcr & ~0x08;
205   return m_tcr & ~0x08;
204206}
205207
206static WRITE8_HANDLER( mcu_tcr_w )
208WRITE8_MEMBER(maxaflex_state::mcu_tcr_w)
207209{
208   maxaflex_state *state = space->machine().driver_data<maxaflex_state>();
209   state->m_tcr = data;
210   if ( (state->m_tcr & 0x40) == 0 )
210   m_tcr = data;
211   if ( (m_tcr & 0x40) == 0 )
211212   {
212213      int divider;
213214      attotime period;
214215
215      if ( !(state->m_tcr & 0x20) )
216      if ( !(m_tcr & 0x20) )
216217      {
217218         /* internal clock / 4*/
218219         divider = 4;
r14845r14846
223224         divider = 1;
224225      }
225226
226      if ( state->m_tcr & 0x07 )
227      if ( m_tcr & 0x07 )
227228      {
228229         /* use prescaler */
229         divider = divider * (1 << (state->m_tcr & 0x7));
230         divider = divider * (1 << (m_tcr & 0x7));
230231      }
231232
232233      period = attotime::from_hz(3579545) * divider;
233      state->m_mcu_timer->adjust(period, 0, period);
234      m_mcu_timer->adjust(period, 0, period);
234235   }
235236}
236237
r14845r14846
282283
283284static ADDRESS_MAP_START( mcu_mem, AS_PROGRAM, 8, maxaflex_state )
284285   ADDRESS_MAP_GLOBAL_MASK(0x7ff)
285   AM_RANGE(0x0000, 0x0000) AM_READ_LEGACY(mcu_portA_r ) AM_WRITE_LEGACY(mcu_portA_w )
286   AM_RANGE(0x0001, 0x0001) AM_READ_LEGACY(mcu_portB_r ) AM_WRITE_LEGACY(mcu_portB_w )
287   AM_RANGE(0x0002, 0x0002) AM_READ_LEGACY(mcu_portC_r ) AM_WRITE_LEGACY(mcu_portC_w )
288   AM_RANGE(0x0004, 0x0004) AM_READ_LEGACY(mcu_ddr_r ) AM_WRITE_LEGACY(mcu_portA_ddr_w )
289   AM_RANGE(0x0005, 0x0005) AM_READ_LEGACY(mcu_ddr_r ) AM_WRITE_LEGACY(mcu_portB_ddr_w )
290   AM_RANGE(0x0006, 0x0006) AM_READ_LEGACY(mcu_ddr_r ) AM_WRITE_LEGACY(mcu_portC_ddr_w )
291   AM_RANGE(0x0008, 0x0008) AM_READ_LEGACY(mcu_tdr_r ) AM_WRITE_LEGACY(mcu_tdr_w )
292   AM_RANGE(0x0009, 0x0009) AM_READ_LEGACY(mcu_tcr_r ) AM_WRITE_LEGACY(mcu_tcr_w )
286   AM_RANGE(0x0000, 0x0000) AM_READ(mcu_portA_r ) AM_WRITE(mcu_portA_w )
287   AM_RANGE(0x0001, 0x0001) AM_READ(mcu_portB_r ) AM_WRITE(mcu_portB_w )
288   AM_RANGE(0x0002, 0x0002) AM_READ(mcu_portC_r ) AM_WRITE(mcu_portC_w )
289   AM_RANGE(0x0004, 0x0004) AM_READ(mcu_ddr_r ) AM_WRITE(mcu_portA_ddr_w )
290   AM_RANGE(0x0005, 0x0005) AM_READ(mcu_ddr_r ) AM_WRITE(mcu_portB_ddr_w )
291   AM_RANGE(0x0006, 0x0006) AM_READ(mcu_ddr_r ) AM_WRITE(mcu_portC_ddr_w )
292   AM_RANGE(0x0008, 0x0008) AM_READ(mcu_tdr_r ) AM_WRITE(mcu_tdr_w )
293   AM_RANGE(0x0009, 0x0009) AM_READ(mcu_tcr_r ) AM_WRITE(mcu_tcr_w )
293294   AM_RANGE(0x0010, 0x007f) AM_RAM
294295   AM_RANGE(0x0080, 0x07ff) AM_ROM
295296ADDRESS_MAP_END
src/mame/drivers/atvtrack.c
r14845r14846
7272   atvtrack_state(const machine_config &mconfig, device_type type, const char *tag)
7373      : driver_device(mconfig, type, tag) { }
7474
75   DECLARE_READ64_MEMBER(area1_r);
76   DECLARE_WRITE64_MEMBER(area1_w);
77   DECLARE_READ64_MEMBER(area2_r);
78   DECLARE_WRITE64_MEMBER(area2_w);
79   DECLARE_READ64_MEMBER(area3_r);
80   DECLARE_WRITE64_MEMBER(area3_w);
81   DECLARE_READ64_MEMBER(area4_r);
82   DECLARE_WRITE64_MEMBER(area4_w);
83   DECLARE_READ64_MEMBER(ioport_r);
84   DECLARE_WRITE64_MEMBER(ioport_w);
7585};
7686
7787static void logbinary(UINT32 data,int high=31,int low=0)
r14845r14846
104114   return 0;
105115}
106116
107static READ64_HANDLER( area1_r )
117READ64_MEMBER(atvtrack_state::area1_r)
108118{
109119   UINT32 addr;
110120
r14845r14846
117127   return -1;
118128}
119129
120static WRITE64_HANDLER( area1_w )
130WRITE64_MEMBER(atvtrack_state::area1_w)
121131{
122132   UINT32 addr, dat; //, old;
123133
r14845r14846
127137   area1_data[addr] = dat;
128138   if (addr == (0x00020000-0x00020000)/4) {
129139      if (data & 4) {
130         device_execute_interface *exec = dynamic_cast<device_execute_interface *>(space->machine().device("subcpu"));
140         device_execute_interface *exec = dynamic_cast<device_execute_interface *>(machine().device("subcpu"));
131141         exec->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
132142      }
133143   }
r14845r14846
136146   logerror("\n");
137147}
138148
139static READ64_HANDLER( area2_r )
149READ64_MEMBER(atvtrack_state::area2_r)
140150{
141151   UINT32 addr, dat;
142152   int c;
r14845r14846
159169   return 0;
160170}
161171
162static WRITE64_HANDLER( area2_w )
172WRITE64_MEMBER(atvtrack_state::area2_w)
163173{
164174//  UINT32 addr, dat;
165175
r14845r14846
171181//      ;
172182}
173183
174static READ64_HANDLER( area3_r )
184READ64_MEMBER(atvtrack_state::area3_r)
175185{
176186//  UINT32 addr, dat;
177187
r14845r14846
184194   return 0;
185195}
186196
187static WRITE64_HANDLER( area3_w )
197WRITE64_MEMBER(atvtrack_state::area3_w)
188198{
189199   UINT32 addr; //, dat;
190200   int c;
r14845r14846
217227      ;
218228}
219229
220static READ64_HANDLER( area4_r )
230READ64_MEMBER(atvtrack_state::area4_r)
221231{
222232//  UINT32 addr, dat;
223233
r14845r14846
230240   return 0;
231241}
232242
233static WRITE64_HANDLER( area4_w )
243WRITE64_MEMBER(atvtrack_state::area4_w)
234244{
235245   UINT32 addr; //, dat;
236246   int c;
r14845r14846
253263      ;
254264}
255265
256static READ64_HANDLER( ioport_r )
266READ64_MEMBER(atvtrack_state::ioport_r)
257267{
258268   if (offset == SH4_IOPORT_16/8) {
259269      // much simplified way
260      if (strcmp(space->device().tag(), ":maincpu") == 0)
270      if (strcmp(space.device().tag(), ":maincpu") == 0)
261271#ifndef SPECIALMODE
262272         return -1; // normal
263273#else
r14845r14846
269279   return 0;
270280}
271281
272static WRITE64_HANDLER( ioport_w )
282WRITE64_MEMBER(atvtrack_state::ioport_w)
273283{
274284#ifdef SPECIALMODE
275285   UINT64 d;
r14845r14846
293303      else
294304         d=0x11223344;
295305      if (cnt == 0)
296         sh4_dma_data(space->cpu,&dm);
306         sh4_dma_data(cpu,&dm);
297307      else
298         sh4_dma_data(space->cpu,&dm);
308         sh4_dma_data(cpu,&dm);
299309      cnt++;
300310   }
301311#endif
r14845r14846
343353
344354static ADDRESS_MAP_START( atvtrack_main_map, AS_PROGRAM, 64, atvtrack_state )
345355   AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem")
346   AM_RANGE(0x00020000, 0x00020007) AM_READWRITE_LEGACY(area1_r, area1_w)
347   AM_RANGE(0x14000000, 0x14000007) AM_READWRITE_LEGACY(area2_r, area2_w) // data
348   AM_RANGE(0x14100000, 0x14100007) AM_READWRITE_LEGACY(area3_r, area3_w) // command
349   AM_RANGE(0x14200000, 0x14200007) AM_READWRITE_LEGACY(area4_r, area4_w) // address
356   AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(area1_r, area1_w)
357   AM_RANGE(0x14000000, 0x14000007) AM_READWRITE(area2_r, area2_w) // data
358   AM_RANGE(0x14100000, 0x14100007) AM_READWRITE(area3_r, area3_w) // command
359   AM_RANGE(0x14200000, 0x14200007) AM_READWRITE(area4_r, area4_w) // address
350360   AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM
351361ADDRESS_MAP_END
352362
353363static ADDRESS_MAP_START( atvtrack_main_port, AS_IO, 64, atvtrack_state )
354   AM_RANGE(0x00, 0x1f) AM_READWRITE_LEGACY(ioport_r, ioport_w)
364   AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w)
355365ADDRESS_MAP_END
356366
357367static ADDRESS_MAP_START( atvtrack_sub_map, AS_PROGRAM, 64, atvtrack_state )
r14845r14846
360370ADDRESS_MAP_END
361371
362372static ADDRESS_MAP_START( atvtrack_sub_port, AS_IO, 64, atvtrack_state )
363   /*AM_RANGE(0x00, 0x1f) AM_READWRITE_LEGACY(ioport_r, ioport_w) */
373   /*AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w) */
364374ADDRESS_MAP_END
365375
366376
src/mame/drivers/cybertnk.c
r14845r14846
183183   int m_test_y;
184184   int m_start_offs;
185185   int m_color_pen;
186   DECLARE_WRITE16_MEMBER(tx_vram_w);
187   DECLARE_READ16_MEMBER(io_r);
188   DECLARE_WRITE16_MEMBER(io_w);
189   DECLARE_READ8_MEMBER(soundport_r);
186190};
187191
188192
189#define LOG_UNKNOWN_WRITE logerror("unknown io write CPU '%s':%08x  0x%08x 0x%04x & 0x%04x\n", space->device().tag(), cpu_get_pc(&space->device()), offset*2, data, mem_mask);
193#define LOG_UNKNOWN_WRITE logerror("unknown io write CPU '%s':%08x  0x%08x 0x%04x & 0x%04x\n", space.device().tag(), cpu_get_pc(&space.device()), offset*2, data, mem_mask);
190194
191195static TILE_GET_INFO( get_tx_tile_info )
192196{
r14845r14846
510514static SCREEN_UPDATE_IND16( cybertnk_right ) { return update_screen(screen, bitmap, cliprect, -256); }
511515
512516
513static WRITE16_HANDLER( tx_vram_w )
517WRITE16_MEMBER(cybertnk_state::tx_vram_w)
514518{
515   cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
516   COMBINE_DATA(&state->m_tx_vram[offset]);
517   state->m_tx_tilemap->mark_tile_dirty(offset);
519   COMBINE_DATA(&m_tx_vram[offset]);
520   m_tx_tilemap->mark_tile_dirty(offset);
518521}
519522
520static READ16_HANDLER( io_r )
523READ16_MEMBER(cybertnk_state::io_r)
521524{
522   cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
523525   switch( offset )
524526   {
525527      case 2/2:
526         return input_port_read(space->machine(), "DSW1");
528         return input_port_read(machine(), "DSW1");
527529
528530      // 0x00110007 is controller device select
529531      // 0x001100D5 is controller data
530532      // 0x00110004 low is controller data ready
531533      case 4/2:
532         switch( (state->m_io_ram[6/2]) & 0xff )
534         switch( (m_io_ram[6/2]) & 0xff )
533535         {
534536            case 0:
535               state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "TRAVERSE");
537               m_io_ram[0xd4/2] = input_port_read(machine(), "TRAVERSE");
536538               break;
537539
538540            case 0x20:
539               state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "ELEVATE");
541               m_io_ram[0xd4/2] = input_port_read(machine(), "ELEVATE");
540542               break;
541543
542544            case 0x40:
543               state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "ACCEL");
545               m_io_ram[0xd4/2] = input_port_read(machine(), "ACCEL");
544546               break;
545547
546548            case 0x42:
r14845r14846
548550               // controller return value is stored in $42(a6)
549551               // but I don't see it referenced again.
550552               //popmessage("unknown controller device 0x42");
551               state->m_io_ram[0xd4/2] = 0;
553               m_io_ram[0xd4/2] = 0;
552554               break;
553555
554556            case 0x60:
555               state->m_io_ram[0xd4/2] = input_port_read(space->machine(), "HANDLE");
557               m_io_ram[0xd4/2] = input_port_read(machine(), "HANDLE");
556558               break;
557559
558560            //default:
r14845r14846
561563         return 0;
562564
563565      case 6/2:
564         return input_port_read(space->machine(), "IN0"); // high half
566         return input_port_read(machine(), "IN0"); // high half
565567
566568      case 8/2:
567         return input_port_read(space->machine(), "IN0"); // low half
569         return input_port_read(machine(), "IN0"); // low half
568570
569571      case 0xa/2:
570         return input_port_read(space->machine(), "DSW2");
572         return input_port_read(machine(), "DSW2");
571573
572574      case 0xd4/2:
573         return state->m_io_ram[offset]; // controller data
575         return m_io_ram[offset]; // controller data
574576
575577      default:
576578      {
577579         //popmessage("unknown io read 0x%08x", offset);
578         return state->m_io_ram[offset];
580         return m_io_ram[offset];
579581      }
580582   }
581583}
582584
583static WRITE16_HANDLER( io_w )
585WRITE16_MEMBER(cybertnk_state::io_w)
584586{
585   cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
586   COMBINE_DATA(&state->m_io_ram[offset]);
587   COMBINE_DATA(&m_io_ram[offset]);
587588
588589   switch( offset )
589590   {
590591      case 0/2:
591592         // sound data
592593         if (ACCESSING_BITS_0_7)
593            cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
594            cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
594595         else
595596            LOG_UNKNOWN_WRITE
596597         break;
r14845r14846
644645      case 0x80/2:
645646      case 0x82/2:
646647      case 0x84/2:
647         popmessage("%02x %02x %02x %02x %02x %02x %02x",state->m_io_ram[0x40/2],state->m_io_ram[0x42/2],state->m_io_ram[0x44/2],state->m_io_ram[0x46/2],state->m_io_ram[0x48/2],state->m_io_ram[0x4a/2],state->m_io_ram[0x4c/2]);
648         popmessage("%02x %02x %02x %02x %02x %02x %02x",m_io_ram[0x40/2],m_io_ram[0x42/2],m_io_ram[0x44/2],m_io_ram[0x46/2],m_io_ram[0x48/2],m_io_ram[0x4a/2],m_io_ram[0x4c/2]);
648649         break;
649650
650651      default:
r14845r14846
653654   }
654655}
655656
656static READ8_HANDLER( soundport_r )
657READ8_MEMBER(cybertnk_state::soundport_r)
657658{
658   cybertnk_state *state = space->machine().driver_data<cybertnk_state>();
659   return state->m_io_ram[0] & 0xff;
659   return m_io_ram[0] & 0xff;
660660}
661661
662662static ADDRESS_MAP_START( master_mem, AS_PROGRAM, 16, cybertnk_state )
663663   AM_RANGE(0x000000, 0x03ffff) AM_ROM
664664   AM_RANGE(0x080000, 0x087fff) AM_RAM /*Work RAM*/
665665   AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_BASE(m_spr_ram) // non-tile based sprite ram
666   AM_RANGE(0x0c0000, 0x0c1fff) AM_RAM_WRITE_LEGACY(tx_vram_w) AM_BASE(m_tx_vram)
666   AM_RANGE(0x0c0000, 0x0c1fff) AM_RAM_WRITE(tx_vram_w) AM_BASE(m_tx_vram)
667667   AM_RANGE(0x0c4000, 0x0c5fff) AM_RAM AM_BASE(m_bg_vram)
668668   AM_RANGE(0x0c8000, 0x0c9fff) AM_RAM AM_BASE(m_fg_vram)
669669   AM_RANGE(0x0e0000, 0x0e0fff) AM_RAM AM_SHARE("sharedram")
670670   AM_RANGE(0x100000, 0x107fff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
671   AM_RANGE(0x110000, 0x1101ff) AM_READWRITE_LEGACY(io_r,io_w) AM_BASE(m_io_ram)
671   AM_RANGE(0x110000, 0x1101ff) AM_READWRITE(io_r,io_w) AM_BASE(m_io_ram)
672672ADDRESS_MAP_END
673673
674674static ADDRESS_MAP_START( slave_mem, AS_PROGRAM, 16, cybertnk_state )
r14845r14846
682682static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 8, cybertnk_state )
683683   AM_RANGE(0x0000, 0x7fff ) AM_ROM
684684   AM_RANGE(0x8000, 0x9fff ) AM_RAM
685   AM_RANGE(0xa001, 0xa001 ) AM_READ_LEGACY(soundport_r)
685   AM_RANGE(0xa001, 0xa001 ) AM_READ(soundport_r)
686686   AM_RANGE(0xa005, 0xa006 ) AM_NOP
687687   AM_RANGE(0xa000, 0xa001 ) AM_DEVREADWRITE_LEGACY("ym1", y8950_r, y8950_w)
688688   AM_RANGE(0xc000, 0xc001 ) AM_DEVREADWRITE_LEGACY("ym2", y8950_r, y8950_w)
src/mame/drivers/big10.c
r14845r14846
7272
7373   required_device<v9938_device> m_v9938;
7474   UINT8 m_mux_data;
75   DECLARE_READ8_MEMBER(mux_r);
7576};
7677
7778
r14845r14846
114115   state->m_mux_data = ~data;
115116}
116117
117static READ8_HANDLER( mux_r )
118READ8_MEMBER(big10_state::mux_r)
118119{
119   big10_state *state = space->machine().driver_data<big10_state>();
120   switch(state->m_mux_data)
120   switch(m_mux_data)
121121   {
122      case 1: return input_port_read(space->machine(), "IN1");
123      case 2: return input_port_read(space->machine(), "IN2");
124      case 4: return input_port_read(space->machine(), "IN3");
122      case 1: return input_port_read(machine(), "IN1");
123      case 2: return input_port_read(machine(), "IN2");
124      case 4: return input_port_read(machine(), "IN3");
125125   }
126126
127   return state->m_mux_data;
127   return m_mux_data;
128128}
129129
130130
r14845r14846
140140
141141static ADDRESS_MAP_START( main_io, AS_IO, 8, big10_state )
142142   ADDRESS_MAP_GLOBAL_MASK(0xff)
143   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(mux_r)         /* present in test mode */
143   AM_RANGE(0x00, 0x00) AM_READ(mux_r)         /* present in test mode */
144144   AM_RANGE(0x02, 0x02) AM_READ_PORT("SYSTEM")   /* coins and service */
145145   AM_RANGE(0x98, 0x9b) AM_DEVREADWRITE("v9938", v9938_device, read, write)
146146   AM_RANGE(0xa0, 0xa1) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
src/mame/drivers/pipeline.c
r14845r14846
8787   UINT8 m_toMCU;
8888   UINT8 m_fromMCU;
8989   UINT8 m_ddrA;
90   DECLARE_WRITE8_MEMBER(vram2_w);
91   DECLARE_WRITE8_MEMBER(vram1_w);
92   DECLARE_WRITE8_MEMBER(mcu_portA_w);
93   DECLARE_READ8_MEMBER(mcu_portA_r);
94   DECLARE_WRITE8_MEMBER(mcu_ddrA_w);
9095};
9196
9297
r14845r14846
139144   state->m_vidctrl=data;
140145}
141146
142static WRITE8_HANDLER(vram2_w)
147WRITE8_MEMBER(pipeline_state::vram2_w)
143148{
144   pipeline_state *state = space->machine().driver_data<pipeline_state>();
145   if(!(state->m_vidctrl&1))
149   if(!(m_vidctrl&1))
146150   {
147      state->m_tilemap1->mark_tile_dirty(offset&0x7ff);
148      state->m_vram2[offset]=data;
151      m_tilemap1->mark_tile_dirty(offset&0x7ff);
152      m_vram2[offset]=data;
149153   }
150154   else
151155   {
152       state->m_palram[offset]=data;
156       m_palram[offset]=data;
153157       if(offset<0x300)
154158       {
155159         offset&=0xff;
156         palette_set_color_rgb(space->machine(), offset, pal6bit(state->m_palram[offset]), pal6bit(state->m_palram[offset+0x100]), pal6bit(state->m_palram[offset+0x200]));
160         palette_set_color_rgb(machine(), offset, pal6bit(m_palram[offset]), pal6bit(m_palram[offset+0x100]), pal6bit(m_palram[offset+0x200]));
157161       }
158162   }
159163}
160164
161static WRITE8_HANDLER(vram1_w)
165WRITE8_MEMBER(pipeline_state::vram1_w)
162166{
163   pipeline_state *state = space->machine().driver_data<pipeline_state>();
164   state->m_tilemap2->mark_tile_dirty(offset&0x7ff);
165   state->m_vram1[offset]=data;
167   m_tilemap2->mark_tile_dirty(offset&0x7ff);
168   m_vram1[offset]=data;
166169}
167170
168171static READ8_DEVICE_HANDLER(protection_r)
r14845r14846
186189static ADDRESS_MAP_START( cpu0_mem, AS_PROGRAM, 8, pipeline_state )
187190   AM_RANGE(0x0000, 0x7fff) AM_ROM
188191   AM_RANGE(0x8000, 0x87ff) AM_RAM
189   AM_RANGE(0x8800, 0x97ff) AM_RAM_WRITE_LEGACY(vram1_w) AM_BASE(m_vram1)
190   AM_RANGE(0x9800, 0xa7ff) AM_RAM_WRITE_LEGACY(vram2_w) AM_BASE(m_vram2)
192   AM_RANGE(0x8800, 0x97ff) AM_RAM_WRITE(vram1_w) AM_BASE(m_vram1)
193   AM_RANGE(0x9800, 0xa7ff) AM_RAM_WRITE(vram2_w) AM_BASE(m_vram2)
191194   AM_RANGE(0xb800, 0xb803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
192195   AM_RANGE(0xb810, 0xb813) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
193196   AM_RANGE(0xb830, 0xb830) AM_NOP
r14845r14846
206209   AM_RANGE(0x06, 0x07) AM_NOP
207210ADDRESS_MAP_END
208211
209static WRITE8_HANDLER(mcu_portA_w)
212WRITE8_MEMBER(pipeline_state::mcu_portA_w)
210213{
211   pipeline_state *state = space->machine().driver_data<pipeline_state>();
212   state->m_fromMCU=data;
214   m_fromMCU=data;
213215}
214216
215static READ8_HANDLER(mcu_portA_r)
217READ8_MEMBER(pipeline_state::mcu_portA_r)
216218{
217   pipeline_state *state = space->machine().driver_data<pipeline_state>();
218   return (state->m_fromMCU&state->m_ddrA)|(state->m_toMCU& ~state->m_ddrA);
219   return (m_fromMCU&m_ddrA)|(m_toMCU& ~m_ddrA);
219220}
220221
221static WRITE8_HANDLER(mcu_ddrA_w)
222WRITE8_MEMBER(pipeline_state::mcu_ddrA_w)
222223{
223   pipeline_state *state = space->machine().driver_data<pipeline_state>();
224   state->m_ddrA=data;
224   m_ddrA=data;
225225}
226226
227227static ADDRESS_MAP_START( mcu_mem, AS_PROGRAM, 8, pipeline_state )
228   AM_RANGE(0x0000, 0x0000) AM_READ_LEGACY(mcu_portA_r) AM_WRITE_LEGACY(mcu_portA_w)
229   AM_RANGE(0x0004, 0x0004) AM_WRITE_LEGACY(mcu_ddrA_w)
228   AM_RANGE(0x0000, 0x0000) AM_READ(mcu_portA_r) AM_WRITE(mcu_portA_w)
229   AM_RANGE(0x0004, 0x0004) AM_WRITE(mcu_ddrA_w)
230230   AM_RANGE(0x0010, 0x007f) AM_RAM
231231   AM_RANGE(0x0080, 0x0fff) AM_ROM
232232ADDRESS_MAP_END
src/mame/drivers/pinkiri8.c
r14845r14846
5454   UINT8 m_prot_read_index;
5555   UINT8 m_prot_char[6];
5656   UINT8 m_prot_index;
57   DECLARE_WRITE8_MEMBER(output_regs_w);
58   DECLARE_WRITE8_MEMBER(pinkiri8_vram_w);
59   DECLARE_WRITE8_MEMBER(mux_w);
60   DECLARE_READ8_MEMBER(mux_p2_r);
61   DECLARE_READ8_MEMBER(mux_p1_r);
62   DECLARE_READ8_MEMBER(ronjan_prot_r);
63   DECLARE_WRITE8_MEMBER(ronjan_prot_w);
64   DECLARE_READ8_MEMBER(ronjan_prot_status_r);
65   DECLARE_READ8_MEMBER(ronjan_patched_prot_r);
5766};
5867
5968
r14845r14846
381390   AM_RANGE(0x10000, 0x1ffff) AM_ROM
382391ADDRESS_MAP_END
383392
384static WRITE8_HANDLER( output_regs_w )
393WRITE8_MEMBER(pinkiri8_state::output_regs_w)
385394{
386395   if(data & 0x40)
387      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
396      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
388397   //data & 0x80 is probably NMI mask
389398}
390399
391400
392401#define LOG_VRAM 0
393402
394static WRITE8_HANDLER( pinkiri8_vram_w )
403WRITE8_MEMBER(pinkiri8_state::pinkiri8_vram_w)
395404{
396   pinkiri8_state *state = space->machine().driver_data<pinkiri8_state>();
397405   switch(offset)
398406   {
399407      case 0:
400         state->m_vram_addr = (data << 0)  | (state->m_vram_addr&0xffff00);
401         if (LOG_VRAM) printf("\n prev writes was %04x\n\naddress set to %04x -\n", state->m_prev_writes, state->m_vram_addr );
402         state->m_prev_writes = 0;
408         m_vram_addr = (data << 0)  | (m_vram_addr&0xffff00);
409         if (LOG_VRAM) printf("\n prev writes was %04x\n\naddress set to %04x -\n", m_prev_writes, m_vram_addr );
410         m_prev_writes = 0;
403411         break;
404412
405413      case 1:
406         state->m_vram_addr = (data << 8)  | (state->m_vram_addr & 0xff00ff);
407         if (LOG_VRAM)printf("\naddress set to %04x\n", state->m_vram_addr);
414         m_vram_addr = (data << 8)  | (m_vram_addr & 0xff00ff);
415         if (LOG_VRAM)printf("\naddress set to %04x\n", m_vram_addr);
408416         break;
409417
410418      case 2:
411         state->m_vram_addr = (data << 16) | (state->m_vram_addr & 0x00ffff);
412         if (LOG_VRAM)printf("\naddress set to %04x\n", state->m_vram_addr);
419         m_vram_addr = (data << 16) | (m_vram_addr & 0x00ffff);
420         if (LOG_VRAM)printf("\naddress set to %04x\n", m_vram_addr);
413421         break;
414422
415423      case 3:
416424
417         address_space *vdp_space = space->machine().device<janshi_vdp_device>("janshivdp")->space();
425         address_space *vdp_space = machine().device<janshi_vdp_device>("janshivdp")->space();
418426
419427         if (LOG_VRAM) printf("%02x ", data);
420         state->m_prev_writes++;
421         state->m_vram_addr++;
428         m_prev_writes++;
429         m_vram_addr++;
422430
423         vdp_space->write_byte(state->m_vram_addr, data);
431         vdp_space->write_byte(m_vram_addr, data);
424432         break;
425433   }
426434}
427435
428436
429static WRITE8_HANDLER( mux_w )
437WRITE8_MEMBER(pinkiri8_state::mux_w)
430438{
431   pinkiri8_state *state = space->machine().driver_data<pinkiri8_state>();
432   state->m_mux_data = data;
439   m_mux_data = data;
433440}
434441
435static READ8_HANDLER( mux_p2_r )
442READ8_MEMBER(pinkiri8_state::mux_p2_r)
436443{
437   pinkiri8_state *state = space->machine().driver_data<pinkiri8_state>();
438   switch(state->m_mux_data)
444   switch(m_mux_data)
439445   {
440      case 0x01: return input_port_read(space->machine(), "PL2_01");
441      case 0x02: return input_port_read(space->machine(), "PL2_02");
442      case 0x04: return input_port_read(space->machine(), "PL2_03");
443      case 0x08: return input_port_read(space->machine(), "PL2_04");
444      case 0x10: return input_port_read(space->machine(), "PL2_05");
446      case 0x01: return input_port_read(machine(), "PL2_01");
447      case 0x02: return input_port_read(machine(), "PL2_02");
448      case 0x04: return input_port_read(machine(), "PL2_03");
449      case 0x08: return input_port_read(machine(), "PL2_04");
450      case 0x10: return input_port_read(machine(), "PL2_05");
445451   }
446452
447453   return 0xff;
448454}
449455
450static READ8_HANDLER( mux_p1_r )
456READ8_MEMBER(pinkiri8_state::mux_p1_r)
451457{
452   pinkiri8_state *state = space->machine().driver_data<pinkiri8_state>();
453   switch(state->m_mux_data)
458   switch(m_mux_data)
454459   {
455      case 0x01: return input_port_read(space->machine(), "PL1_01");
456      case 0x02: return input_port_read(space->machine(), "PL1_02");
457      case 0x04: return input_port_read(space->machine(), "PL1_03");
458      case 0x08: return input_port_read(space->machine(), "PL1_04");
459      case 0x10: return input_port_read(space->machine(), "PL1_05");
460      case 0x01: return input_port_read(machine(), "PL1_01");
461      case 0x02: return input_port_read(machine(), "PL1_02");
462      case 0x04: return input_port_read(machine(), "PL1_03");
463      case 0x08: return input_port_read(machine(), "PL1_04");
464      case 0x10: return input_port_read(machine(), "PL1_05");
460465   }
461466
462467   return 0xff;
r14845r14846
465470static ADDRESS_MAP_START( pinkiri8_io, AS_IO, 8, pinkiri8_state )
466471   ADDRESS_MAP_GLOBAL_MASK(0xff)
467472   AM_RANGE(0x00, 0x3f) AM_RAM //Z180 internal I/O
468   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(output_regs_w)
469   AM_RANGE(0x80, 0x83) AM_WRITE_LEGACY(pinkiri8_vram_w)
473   AM_RANGE(0x60, 0x60) AM_WRITE(output_regs_w)
474   AM_RANGE(0x80, 0x83) AM_WRITE(pinkiri8_vram_w)
470475
471476   AM_RANGE(0xa0, 0xa0) AM_DEVREADWRITE("oki", okim6295_device, read, write) //correct?
472   AM_RANGE(0xb0, 0xb0) AM_WRITE_LEGACY(mux_w) //mux
473   AM_RANGE(0xb0, 0xb0) AM_READ_LEGACY(mux_p2_r) // mux inputs
474   AM_RANGE(0xb1, 0xb1) AM_READ_LEGACY(mux_p1_r) // mux inputs
477   AM_RANGE(0xb0, 0xb0) AM_WRITE(mux_w) //mux
478   AM_RANGE(0xb0, 0xb0) AM_READ(mux_p2_r) // mux inputs
479   AM_RANGE(0xb1, 0xb1) AM_READ(mux_p1_r) // mux inputs
475480   AM_RANGE(0xb2, 0xb2) AM_READ_PORT("SYSTEM")
476481   AM_RANGE(0xf8, 0xf8) AM_READ_PORT("DSW1")
477482   AM_RANGE(0xf9, 0xf9) AM_READ_PORT("DSW2")
r14845r14846
11731178ROM_END
11741179
11751180
1176static READ8_HANDLER( ronjan_prot_r )
1181READ8_MEMBER(pinkiri8_state::ronjan_prot_r)
11771182{
1178   pinkiri8_state *state = space->machine().driver_data<pinkiri8_state>();
11791183   static const char wing_str[6] = { 'W', 'I', 'N', 'G', '8', '9' };
11801184
1181   state->m_prot_read_index++;
1185   m_prot_read_index++;
11821186
1183   if(state->m_prot_read_index & 1)
1187   if(m_prot_read_index & 1)
11841188      return 0xff; //value is discarded
11851189
1186   return wing_str[(state->m_prot_read_index >> 1)-1];
1190   return wing_str[(m_prot_read_index >> 1)-1];
11871191}
11881192
1189static WRITE8_HANDLER( ronjan_prot_w )
1193WRITE8_MEMBER(pinkiri8_state::ronjan_prot_w)
11901194{
1191   pinkiri8_state *state = space->machine().driver_data<pinkiri8_state>();
11921195
11931196   if(data == 0)
11941197   {
1195      state->m_prot_index = 0;
1198      m_prot_index = 0;
11961199   }
11971200   else
11981201   {
1199      state->m_prot_char[state->m_prot_index] = data;
1200      state->m_prot_index++;
1202      m_prot_char[m_prot_index] = data;
1203      m_prot_index++;
12011204
1202      if(state->m_prot_char[0] == 'E' && state->m_prot_char[1] == 'R' && state->m_prot_char[2] == 'R' && state->m_prot_char[3] == 'O' && state->m_prot_char[4] == 'R')
1203         state->m_prot_read_index = 0;
1205      if(m_prot_char[0] == 'E' && m_prot_char[1] == 'R' && m_prot_char[2] == 'R' && m_prot_char[3] == 'O' && m_prot_char[4] == 'R')
1206         m_prot_read_index = 0;
12041207   }
12051208}
12061209
1207static READ8_HANDLER( ronjan_prot_status_r )
1210READ8_MEMBER(pinkiri8_state::ronjan_prot_status_r)
12081211{
12091212   return 0; //bit 0 seems a protection status bit
12101213}
12111214
1212static READ8_HANDLER( ronjan_patched_prot_r )
1215READ8_MEMBER(pinkiri8_state::ronjan_patched_prot_r)
12131216{
12141217   return 0; //value is read then discarded
12151218}
12161219
12171220static DRIVER_INIT( ronjan )
12181221{
1219   machine.device("maincpu")->memory().space(AS_IO)->install_legacy_readwrite_handler(0x90, 0x90, FUNC(ronjan_prot_r), FUNC(ronjan_prot_w));
1220   machine.device("maincpu")->memory().space(AS_IO)->install_legacy_read_handler(0x66, 0x66, FUNC(ronjan_prot_status_r));
1221   machine.device("maincpu")->memory().space(AS_IO)->install_legacy_read_handler(0x9f, 0x9f, FUNC(ronjan_patched_prot_r));
1222   pinkiri8_state *state = machine.driver_data<pinkiri8_state>();
1223   machine.device("maincpu")->memory().space(AS_IO)->install_readwrite_handler(0x90, 0x90, read8_delegate(FUNC(pinkiri8_state::ronjan_prot_r), state), write8_delegate(FUNC(pinkiri8_state::ronjan_prot_w), state));
1224   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x66, 0x66, read8_delegate(FUNC(pinkiri8_state::ronjan_prot_status_r), state));
1225   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x9f, 0x9f, read8_delegate(FUNC(pinkiri8_state::ronjan_patched_prot_r), state));
12221226}
12231227
12241228GAME( 1992,  janshi,    0,   pinkiri8, janshi,    0,      ROT0, "Eagle",         "Janshi",          GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
src/mame/drivers/chanbara.c
r14845r14846
7474
7575   /* devices */
7676   device_t *m_maincpu;
77   DECLARE_WRITE8_MEMBER(chanbara_videoram_w);
78   DECLARE_WRITE8_MEMBER(chanbara_colorram_w);
79   DECLARE_WRITE8_MEMBER(chanbara_videoram2_w);
80   DECLARE_WRITE8_MEMBER(chanbara_colorram2_w);
7781};
7882
7983
r14845r14846
9195   }
9296}
9397
94static WRITE8_HANDLER( chanbara_videoram_w )
98WRITE8_MEMBER(chanbara_state::chanbara_videoram_w)
9599{
96   chanbara_state *state = space->machine().driver_data<chanbara_state>();
97100
98   state->m_videoram[offset] = data;
99   state->m_bg_tilemap->mark_tile_dirty(offset);
101   m_videoram[offset] = data;
102   m_bg_tilemap->mark_tile_dirty(offset);
100103}
101104
102static WRITE8_HANDLER( chanbara_colorram_w )
105WRITE8_MEMBER(chanbara_state::chanbara_colorram_w)
103106{
104   chanbara_state *state = space->machine().driver_data<chanbara_state>();
105107
106   state->m_colorram[offset] = data;
107   state->m_bg_tilemap->mark_tile_dirty(offset);
108   m_colorram[offset] = data;
109   m_bg_tilemap->mark_tile_dirty(offset);
108110}
109111
110static WRITE8_HANDLER( chanbara_videoram2_w )
112WRITE8_MEMBER(chanbara_state::chanbara_videoram2_w)
111113{
112   chanbara_state *state = space->machine().driver_data<chanbara_state>();
113114
114   state->m_videoram2[offset] = data;
115   state->m_bg2_tilemap->mark_tile_dirty(offset);
115   m_videoram2[offset] = data;
116   m_bg2_tilemap->mark_tile_dirty(offset);
116117}
117118
118static WRITE8_HANDLER( chanbara_colorram2_w )
119WRITE8_MEMBER(chanbara_state::chanbara_colorram2_w)
119120{
120   chanbara_state *state = space->machine().driver_data<chanbara_state>();
121121
122   state->m_colorram2[offset] = data;
123   state->m_bg2_tilemap->mark_tile_dirty(offset);
122   m_colorram2[offset] = data;
123   m_bg2_tilemap->mark_tile_dirty(offset);
124124}
125125
126126
r14845r14846
209209
210210static ADDRESS_MAP_START( chanbara_map, AS_PROGRAM, 8, chanbara_state )
211211   AM_RANGE(0x0000, 0x07ff) AM_RAM
212   AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE_LEGACY(chanbara_videoram_w) AM_BASE(m_videoram)
213   AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE_LEGACY(chanbara_colorram_w) AM_BASE(m_colorram)
212   AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(chanbara_videoram_w) AM_BASE(m_videoram)
213   AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(chanbara_colorram_w) AM_BASE(m_colorram)
214214   AM_RANGE(0x1000, 0x10ff) AM_RAM AM_BASE(m_spriteram)
215   AM_RANGE(0x1800, 0x19ff) AM_RAM_WRITE_LEGACY(chanbara_videoram2_w) AM_BASE(m_videoram2)
216   AM_RANGE(0x1a00, 0x1bff) AM_RAM_WRITE_LEGACY(chanbara_colorram2_w) AM_BASE(m_colorram2)
215   AM_RANGE(0x1800, 0x19ff) AM_RAM_WRITE(chanbara_videoram2_w) AM_BASE(m_videoram2)
216   AM_RANGE(0x1a00, 0x1bff) AM_RAM_WRITE(chanbara_colorram2_w) AM_BASE(m_colorram2)
217217   AM_RANGE(0x2000, 0x2000) AM_READ_PORT("DSW1")
218218   AM_RANGE(0x2001, 0x2001) AM_READ_PORT("SYSTEM")
219219   AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2")
src/mame/drivers/m14.c
r14845r14846
7070
7171   /* devices */
7272   device_t *m_maincpu;
73   DECLARE_WRITE8_MEMBER(m14_vram_w);
74   DECLARE_WRITE8_MEMBER(m14_cram_w);
75   DECLARE_READ8_MEMBER(m14_rng_r);
76   DECLARE_READ8_MEMBER(input_buttons_r);
77   DECLARE_WRITE8_MEMBER(test_w);
78   DECLARE_WRITE8_MEMBER(hopper_w);
7379};
7480
7581
r14845r14846
129135}
130136
131137
132static WRITE8_HANDLER( m14_vram_w )
138WRITE8_MEMBER(m14_state::m14_vram_w)
133139{
134   m14_state *state = space->machine().driver_data<m14_state>();
135140
136   state->m_video_ram[offset] = data;
137   state->m_m14_tilemap->mark_tile_dirty(offset);
141   m_video_ram[offset] = data;
142   m_m14_tilemap->mark_tile_dirty(offset);
138143}
139144
140static WRITE8_HANDLER( m14_cram_w )
145WRITE8_MEMBER(m14_state::m14_cram_w)
141146{
142   m14_state *state = space->machine().driver_data<m14_state>();
143147
144   state->m_color_ram[offset] = data;
145   state->m_m14_tilemap->mark_tile_dirty(offset);
148   m_color_ram[offset] = data;
149   m_m14_tilemap->mark_tile_dirty(offset);
146150}
147151
148152/*************************************
r14845r14846
151155 *
152156 *************************************/
153157
154static READ8_HANDLER( m14_rng_r )
158READ8_MEMBER(m14_state::m14_rng_r)
155159{
156160   /* graphic artifacts happens if this doesn't return random values. */
157   return (space->machine().rand() & 0x0f) | 0xf0; /* | (input_port_read(space->machine(), "IN1") & 0x80)*/;
161   return (machine().rand() & 0x0f) | 0xf0; /* | (input_port_read(machine(), "IN1") & 0x80)*/;
158162}
159163
160164/* Here routes the hopper & the inputs */
161static READ8_HANDLER( input_buttons_r )
165READ8_MEMBER(m14_state::input_buttons_r)
162166{
163   m14_state *state = space->machine().driver_data<m14_state>();
164167
165   if (state->m_hop_mux)
168   if (m_hop_mux)
166169   {
167      state->m_hop_mux = 0;
170      m_hop_mux = 0;
168171      return 0; //0x43 status bits
169172   }
170173   else
171      return input_port_read(space->machine(), "IN0");
174      return input_port_read(machine(), "IN0");
172175}
173176
174177#if 0
175static WRITE8_HANDLER( test_w )
178WRITE8_MEMBER(m14_state::test_w)
176179{
177180   static UINT8 x[5];
178181
r14845r14846
182185}
183186#endif
184187
185static WRITE8_HANDLER( hopper_w )
188WRITE8_MEMBER(m14_state::hopper_w)
186189{
187   m14_state *state = space->machine().driver_data<m14_state>();
188190
189191   /* ---- x--- coin out */
190192   /* ---- --x- hopper/input mux? */
191   state->m_hop_mux = data & 2;
193   m_hop_mux = data & 2;
192194   //popmessage("%02x",data);
193195}
194196
r14845r14846
201203static ADDRESS_MAP_START( m14_map, AS_PROGRAM, 8, m14_state )
202204   AM_RANGE(0x0000, 0x1fff) AM_ROM
203205   AM_RANGE(0x2000, 0x23ff) AM_RAM
204   AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE_LEGACY(m14_vram_w) AM_BASE(m_video_ram)
205   AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE_LEGACY(m14_cram_w) AM_BASE(m_color_ram)
206   AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(m14_vram_w) AM_BASE(m_video_ram)
207   AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m14_cram_w) AM_BASE(m_color_ram)
206208ADDRESS_MAP_END
207209
208210static ADDRESS_MAP_START( m14_io_map, AS_IO, 8, m14_state )
209211   ADDRESS_MAP_GLOBAL_MASK(0xff)
210212   AM_RANGE(0xf8, 0xf8) AM_READ_PORT("AN_PADDLE") AM_WRITENOP
211   AM_RANGE(0xf9, 0xf9) AM_READ_LEGACY(input_buttons_r) AM_WRITENOP
212   AM_RANGE(0xfa, 0xfa) AM_READ_LEGACY(m14_rng_r) AM_WRITENOP
213   AM_RANGE(0xfb, 0xfb) AM_READ_PORT("DSW") AM_WRITE_LEGACY(hopper_w)
213   AM_RANGE(0xf9, 0xf9) AM_READ(input_buttons_r) AM_WRITENOP
214   AM_RANGE(0xfa, 0xfa) AM_READ(m14_rng_r) AM_WRITENOP
215   AM_RANGE(0xfb, 0xfb) AM_READ_PORT("DSW") AM_WRITE(hopper_w)
214216   AM_RANGE(0xf8, 0xfc) AM_WRITENOP
215217ADDRESS_MAP_END
216218
src/mame/drivers/jantotsu.c
r14845r14846
119119   UINT8    m_col_bank;
120120   UINT8    m_display_on;
121121   UINT8    m_bitmap[0x8000];
122   DECLARE_READ8_MEMBER(jantotsu_bitmap_r);
123   DECLARE_WRITE8_MEMBER(jantotsu_bitmap_w);
124   DECLARE_WRITE8_MEMBER(bankaddr_w);
125   DECLARE_READ8_MEMBER(jantotsu_mux_r);
126   DECLARE_WRITE8_MEMBER(jantotsu_mux_w);
127   DECLARE_READ8_MEMBER(jantotsu_dsw2_r);
122128};
123129
124130
r14845r14846
170176}
171177
172178/* banked vram */
173static READ8_HANDLER( jantotsu_bitmap_r )
179READ8_MEMBER(jantotsu_state::jantotsu_bitmap_r)
174180{
175   jantotsu_state *state = space->machine().driver_data<jantotsu_state>();
176   return state->m_bitmap[offset + ((state->m_vram_bank & 3) * 0x2000)];
181   return m_bitmap[offset + ((m_vram_bank & 3) * 0x2000)];
177182}
178183
179static WRITE8_HANDLER( jantotsu_bitmap_w )
184WRITE8_MEMBER(jantotsu_state::jantotsu_bitmap_w)
180185{
181   jantotsu_state *state = space->machine().driver_data<jantotsu_state>();
182   state->m_bitmap[offset + ((state->m_vram_bank & 3) * 0x2000)] = data;
186   m_bitmap[offset + ((m_vram_bank & 3) * 0x2000)] = data;
183187}
184188
185static WRITE8_HANDLER( bankaddr_w )
189WRITE8_MEMBER(jantotsu_state::bankaddr_w)
186190{
187   jantotsu_state *state = space->machine().driver_data<jantotsu_state>();
188191
189   state->m_vram_bank = ((data & 0xc0) >> 6);
192   m_vram_bank = ((data & 0xc0) >> 6);
190193
191   state->m_display_on = (data & 2);
194   m_display_on = (data & 2);
192195
193196   /* bit 0 is unknown */
194197   if(data & 0x3c)
r14845r14846
227230 *************************************/
228231
229232/*Multiplexer is mapped as 6-bits reads,bits 6 & 7 are always connected to the coin mechs.*/
230static READ8_HANDLER( jantotsu_mux_r )
233READ8_MEMBER(jantotsu_state::jantotsu_mux_r)
231234{
232   jantotsu_state *state = space->machine().driver_data<jantotsu_state>();
233235   const char *const portnames[] = { "PL1_1", "PL1_2", "PL1_3", "PL1_4",
234236                             "PL2_1", "PL2_2", "PL2_3", "PL2_4" };
235237   UINT8 i,res;
236238
237   //  printf("%02x\n", state->m_mux_data);
238   res = input_port_read(space->machine(), "COINS");
239   //  printf("%02x\n", m_mux_data);
240   res = input_port_read(machine(), "COINS");
239241
240242   for(i=0;i<8;i++)
241243   {
242      if((~state->m_mux_data) & (1 << i))
243         res |= input_port_read(space->machine(), portnames[i]);
244      if((~m_mux_data) & (1 << i))
245         res |= input_port_read(machine(), portnames[i]);
244246   }
245247
246248   return res;
247249}
248250
249static WRITE8_HANDLER( jantotsu_mux_w )
251WRITE8_MEMBER(jantotsu_state::jantotsu_mux_w)
250252{
251   jantotsu_state *state = space->machine().driver_data<jantotsu_state>();
252   state->m_mux_data = data;
253   m_mux_data = data;
253254}
254255
255256/*If bits 6 & 7 doesn't return 0x80,the game hangs until this bit is set,
256257  so I'm guessing that these bits can't be read by the z80 at all but directly
257258  hard-wired to the video chip. However I need the schematics / pcb snaps and/or
258259  a side-by-side test (to know if the background colors really works) to be sure. */
259static READ8_HANDLER( jantotsu_dsw2_r )
260READ8_MEMBER(jantotsu_state::jantotsu_dsw2_r)
260261{
261   return (input_port_read(space->machine(), "DSW2") & 0x3f) | 0x80;
262   return (input_port_read(machine(), "DSW2") & 0x3f) | 0x80;
262263}
263264
264265static WRITE8_DEVICE_HANDLER( jan_adpcm_w )
r14845r14846
322323static ADDRESS_MAP_START( jantotsu_map, AS_PROGRAM, 8, jantotsu_state )
323324   AM_RANGE(0x0000, 0xbfff) AM_ROM
324325   AM_RANGE(0xc000, 0xc7ff) AM_RAM
325   AM_RANGE(0xe000, 0xffff) AM_READWRITE_LEGACY(jantotsu_bitmap_r, jantotsu_bitmap_w)
326   AM_RANGE(0xe000, 0xffff) AM_READWRITE(jantotsu_bitmap_r, jantotsu_bitmap_w)
326327ADDRESS_MAP_END
327328
328329static ADDRESS_MAP_START( jantotsu_io, AS_IO, 8, jantotsu_state )
329330   ADDRESS_MAP_GLOBAL_MASK(0xff)
330331   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW1") AM_DEVWRITE_LEGACY("sn1", sn76496_w)
331   AM_RANGE(0x01, 0x01) AM_READ_LEGACY(jantotsu_dsw2_r) AM_DEVWRITE_LEGACY("sn2", sn76496_w)
332   AM_RANGE(0x01, 0x01) AM_READ(jantotsu_dsw2_r) AM_DEVWRITE_LEGACY("sn2", sn76496_w)
332333   AM_RANGE(0x02, 0x03) AM_DEVWRITE_LEGACY("adpcm", jan_adpcm_w)
333   AM_RANGE(0x04, 0x04) AM_READWRITE_LEGACY(jantotsu_mux_r, jantotsu_mux_w)
334   AM_RANGE(0x07, 0x07) AM_WRITE_LEGACY(bankaddr_w)
334   AM_RANGE(0x04, 0x04) AM_READWRITE(jantotsu_mux_r, jantotsu_mux_w)
335   AM_RANGE(0x07, 0x07) AM_WRITE(bankaddr_w)
335336ADDRESS_MAP_END
336337
337338
src/mame/drivers/photon2.c
r14845r14846
2828   UINT8 m_nmi_enable;
2929
3030   required_device<cpu_device> m_maincpu;
31   DECLARE_WRITE8_MEMBER(photon2_membank_w);
32   DECLARE_READ8_MEMBER(photon2_fe_r);
33   DECLARE_WRITE8_MEMBER(photon2_fe_w);
34   DECLARE_WRITE8_MEMBER(photon2_misc_w);
3135};
3236
3337
r14845r14846
174178 *
175179 *************************************/
176180
177static WRITE8_HANDLER(photon2_membank_w)
181WRITE8_MEMBER(photon2_state::photon2_membank_w)
178182{
179183   int bank = 0;
180184   if (data == 0)
r14845r14846
194198      logerror( "Unknown banking write: %02X\n", data);
195199   }
196200
197   memory_set_bankptr(space->machine(), "bank1", space->machine().region("maincpu")->base() + 0x4000*bank );
201   memory_set_bankptr(machine(), "bank1", machine().region("maincpu")->base() + 0x4000*bank );
198202}
199203
200static READ8_HANDLER(photon2_fe_r)
204READ8_MEMBER(photon2_state::photon2_fe_r)
201205{
202206   return 0xff;
203207}
204208
205static WRITE8_HANDLER(photon2_fe_w)
209WRITE8_MEMBER(photon2_state::photon2_fe_w)
206210{
207   photon2_state *state = space->machine().driver_data<photon2_state>();
208   device_t *speaker = space->machine().device("speaker");
209   state->m_spectrum_port_fe = data;
211   device_t *speaker = machine().device("speaker");
212   m_spectrum_port_fe = data;
210213
211214   speaker_level_w(speaker, BIT(data,4));
212215}
213216
214static WRITE8_HANDLER(photon2_misc_w)
217WRITE8_MEMBER(photon2_state::photon2_misc_w)
215218{
216   photon2_state *state = space->machine().driver_data<photon2_state>();
217   state->m_nmi_enable = !BIT(data,5);
219   m_nmi_enable = !BIT(data,5);
218220}
219221
220222/*************************************
r14845r14846
232234static ADDRESS_MAP_START (spectrum_io, AS_IO, 8, photon2_state )
233235   ADDRESS_MAP_GLOBAL_MASK(0xff)
234236   AM_RANGE(0x1f, 0x1f) AM_READ_PORT("JOY")
235   AM_RANGE(0x5b, 0x5b) AM_READ_PORT("COIN") AM_WRITE_LEGACY(photon2_misc_w)
236   AM_RANGE(0x7a, 0x7a) AM_WRITE_LEGACY(photon2_membank_w)
237   AM_RANGE(0x5b, 0x5b) AM_READ_PORT("COIN") AM_WRITE(photon2_misc_w)
238   AM_RANGE(0x7a, 0x7a) AM_WRITE(photon2_membank_w)
237239   AM_RANGE(0x7b, 0x7b) AM_WRITENOP // unknown write
238   AM_RANGE(0x7e, 0x7e) AM_WRITE_LEGACY(photon2_membank_w)
239   AM_RANGE(0xfe, 0xfe) AM_READWRITE_LEGACY(photon2_fe_r, photon2_fe_w)
240   AM_RANGE(0x7e, 0x7e) AM_WRITE(photon2_membank_w)
241   AM_RANGE(0xfe, 0xfe) AM_READWRITE(photon2_fe_r, photon2_fe_w)
240242ADDRESS_MAP_END
241243
242244/*************************************
src/mame/drivers/highvdeo.c
r14845r14846
100100   UINT16 m_vblank_bit;
101101   UINT16 m_brasil_prot_latch;
102102   struct { int r,g,b,offs,offs_internal; } m_pal;
103   DECLARE_READ16_MEMBER(read1_r);
104   DECLARE_READ16_MEMBER(read2_r);
105   DECLARE_READ16_MEMBER(read3_r);
106   DECLARE_WRITE16_MEMBER(tv_vcf_paletteram_w);
107   DECLARE_WRITE16_MEMBER(tv_vcf_bankselect_w);
108   DECLARE_WRITE16_MEMBER(write1_w);
109   DECLARE_READ16_MEMBER(tv_ncf_read2_r);
110   DECLARE_WRITE16_MEMBER(tv_tcf_paletteram_w);
111   DECLARE_WRITE16_MEMBER(tv_tcf_bankselect_w);
112   DECLARE_READ16_MEMBER(newmcard_status_r);
113   DECLARE_READ16_MEMBER(newmcard_vblank_r);
114   DECLARE_WRITE16_MEMBER(newmcard_vblank_w);
115   DECLARE_WRITE16_MEMBER(write2_w);
116   DECLARE_READ16_MEMBER(brasil_status_r);
117   DECLARE_WRITE16_MEMBER(brasil_status_w);
118   DECLARE_READ16_MEMBER(ciclone_status_r);
119   DECLARE_WRITE16_MEMBER(fashion_output_w);
103120};
104121
105122
r14845r14846
174191
175192
176193
177static READ16_HANDLER( read1_r )
194READ16_MEMBER(highvdeo_state::read1_r)
178195{
179   return input_port_read(space->machine(), "IN0");
196   return input_port_read(machine(), "IN0");
180197}
181198
182static READ16_HANDLER( read2_r )
199READ16_MEMBER(highvdeo_state::read2_r)
183200{
184   return input_port_read(space->machine(), "IN1");
201   return input_port_read(machine(), "IN1");
185202}
186203
187static READ16_HANDLER( read3_r )
204READ16_MEMBER(highvdeo_state::read3_r)
188205{
189   return input_port_read(space->machine(), "IN2");
206   return input_port_read(machine(), "IN2");
190207}
191208
192static WRITE16_HANDLER( tv_vcf_paletteram_w )
209WRITE16_MEMBER(highvdeo_state::tv_vcf_paletteram_w)
193210{
194   highvdeo_state *state = space->machine().driver_data<highvdeo_state>();
195211   switch(offset*2)
196212   {
197213      case 0:
198         state->m_pal.offs = data;
214         m_pal.offs = data;
199215         break;
200216      case 2:
201         state->m_pal.offs_internal = 0;
217         m_pal.offs_internal = 0;
202218         break;
203219      case 4:
204         switch(state->m_pal.offs_internal)
220         switch(m_pal.offs_internal)
205221         {
206222            case 0:
207               state->m_pal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
208               state->m_pal.offs_internal++;
223               m_pal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
224               m_pal.offs_internal++;
209225               break;
210226            case 1:
211               state->m_pal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
212               state->m_pal.offs_internal++;
227               m_pal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
228               m_pal.offs_internal++;
213229               break;
214230            case 2:
215               state->m_pal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
216               palette_set_color(space->machine(), state->m_pal.offs, MAKE_RGB(state->m_pal.r, state->m_pal.g, state->m_pal.b));
217               state->m_pal.offs_internal = 0;
218               state->m_pal.offs++;
231               m_pal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
232               palette_set_color(machine(), m_pal.offs, MAKE_RGB(m_pal.r, m_pal.g, m_pal.b));
233               m_pal.offs_internal = 0;
234               m_pal.offs++;
219235               break;
220236         }
221237
r14845r14846
223239   }
224240}
225241
226static WRITE16_HANDLER( tv_vcf_bankselect_w )
242WRITE16_MEMBER(highvdeo_state::tv_vcf_bankselect_w)
227243{
228244   UINT32 bankaddress;
229   UINT8 *ROM = space->machine().region("user1")->base();
245   UINT8 *ROM = machine().region("user1")->base();
230246
231247   /* bits 0, 1 select the ROM bank */
232248   bankaddress = (data & 0x03) * 0x40000;
233249
234   memory_set_bankptr(space->machine(), "bank1", &ROM[bankaddress]);
250   memory_set_bankptr(machine(), "bank1", &ROM[bankaddress]);
235251}
236252
237253
r14845r14846
255271   return 0xff;
256272}
257273
258static WRITE16_HANDLER( write1_w )
274WRITE16_MEMBER(highvdeo_state::write1_w)
259275{
260276/*
261277    - Lbits -
r14845r14846
287303ADDRESS_MAP_END
288304
289305static ADDRESS_MAP_START( tv_vcf_io, AS_IO, 16, highvdeo_state )
290   AM_RANGE(0x0000, 0x0001) AM_WRITE_LEGACY(write1_w ) // lamps
306   AM_RANGE(0x0000, 0x0001) AM_WRITE(write1_w ) // lamps
291307   AM_RANGE(0x0006, 0x0007) AM_DEVWRITE_LEGACY("oki", tv_oki6376_w )
292   AM_RANGE(0x0008, 0x0009) AM_READ_LEGACY(read1_r )
293   AM_RANGE(0x000a, 0x000b) AM_READ_LEGACY(read2_r )
294   AM_RANGE(0x000c, 0x000d) AM_READ_LEGACY(read3_r )
295   AM_RANGE(0x0010, 0x0015) AM_WRITE_LEGACY(tv_vcf_paletteram_w )
296   AM_RANGE(0x0030, 0x0031) AM_WRITE_LEGACY(tv_vcf_bankselect_w ) AM_DEVREAD_LEGACY("oki", tv_oki6376_r )
308   AM_RANGE(0x0008, 0x0009) AM_READ(read1_r )
309   AM_RANGE(0x000a, 0x000b) AM_READ(read2_r )
310   AM_RANGE(0x000c, 0x000d) AM_READ(read3_r )
311   AM_RANGE(0x0010, 0x0015) AM_WRITE(tv_vcf_paletteram_w )
312   AM_RANGE(0x0030, 0x0031) AM_WRITE(tv_vcf_bankselect_w ) AM_DEVREAD_LEGACY("oki", tv_oki6376_r )
297313ADDRESS_MAP_END
298314
299315
300static READ16_HANDLER( tv_ncf_read2_r )
316READ16_MEMBER(highvdeo_state::tv_ncf_read2_r)
301317{
302318   static int resetpulse = 0;
303319
r14845r14846
305321   // machine resets itself.
306322   resetpulse ^= 0x40;
307323
308   return (input_port_read(space->machine(), "IN1") & 0xbf) | resetpulse;
324   return (input_port_read(machine(), "IN1") & 0xbf) | resetpulse;
309325}
310326
311327static WRITE16_DEVICE_HANDLER( tv_ncf_oki6376_w )
r14845r14846
334350ADDRESS_MAP_END
335351
336352static ADDRESS_MAP_START( tv_ncf_io, AS_IO, 16, highvdeo_state )
337   AM_RANGE(0x0000, 0x0001) AM_WRITE_LEGACY(write1_w ) // lamps
353   AM_RANGE(0x0000, 0x0001) AM_WRITE(write1_w ) // lamps
338354   AM_RANGE(0x0008, 0x0009) AM_DEVWRITE_LEGACY("oki", tv_ncf_oki6376_w )
339355   AM_RANGE(0x000a, 0x000b) AM_DEVWRITE_LEGACY("oki", tv_ncf_oki6376_st_w )
340   AM_RANGE(0x000c, 0x000d) AM_READ_LEGACY(read1_r )
341   AM_RANGE(0x0010, 0x0011) AM_READ_LEGACY(tv_ncf_read2_r )
342   AM_RANGE(0x0012, 0x0013) AM_READ_LEGACY(read3_r )
343   AM_RANGE(0x0030, 0x0035) AM_WRITE_LEGACY(tv_vcf_paletteram_w )
356   AM_RANGE(0x000c, 0x000d) AM_READ(read1_r )
357   AM_RANGE(0x0010, 0x0011) AM_READ(tv_ncf_read2_r )
358   AM_RANGE(0x0012, 0x0013) AM_READ(read3_r )
359   AM_RANGE(0x0030, 0x0035) AM_WRITE(tv_vcf_paletteram_w )
344360ADDRESS_MAP_END
345361
346362
347static WRITE16_HANDLER( tv_tcf_paletteram_w )
363WRITE16_MEMBER(highvdeo_state::tv_tcf_paletteram_w)
348364{
349365   int r, g, b, color;
350366
351   COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
367   COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
352368
353   color = space->machine().generic.paletteram.u16[offset];
369   color = machine().generic.paletteram.u16[offset];
354370   r = (color >> 8) & 0xf8;
355371   g = (color >> 3) & 0xf8;
356372   b = (color << 3) & 0xf8;
357373
358   palette_set_color_rgb(space->machine(), offset, r, g, b);
374   palette_set_color_rgb(machine(), offset, r, g, b);
359375}
360376
361static WRITE16_HANDLER( tv_tcf_bankselect_w )
377WRITE16_MEMBER(highvdeo_state::tv_tcf_bankselect_w)
362378{
363379   UINT32 bankaddress;
364   UINT8 *ROM = space->machine().region("user1")->base();
380   UINT8 *ROM = machine().region("user1")->base();
365381
366382   /* bits 0, 1, 2 select the ROM bank */
367383   bankaddress = (data & 0x07) * 0x40000;
368384
369   memory_set_bankptr(space->machine(), "bank1", &ROM[bankaddress]);
385   memory_set_bankptr(machine(), "bank1", &ROM[bankaddress]);
370386}
371387
372388static ADDRESS_MAP_START( tv_tcf_map, AS_PROGRAM, 16, highvdeo_state )
373389   AM_RANGE(0x00000, 0x003ff) AM_RAM /*irq vector area*/
374390   AM_RANGE(0x00400, 0x03fff) AM_RAM AM_SHARE("nvram")
375391   AM_RANGE(0x40000, 0x5d4bf) AM_RAM AM_BASE(m_blit_ram) /*blitter ram*/
376   AM_RANGE(0x7fe00, 0x7ffff) AM_RAM_WRITE_LEGACY(tv_tcf_paletteram_w ) AM_BASE_GENERIC(paletteram)
392   AM_RANGE(0x7fe00, 0x7ffff) AM_RAM_WRITE(tv_tcf_paletteram_w ) AM_BASE_GENERIC(paletteram)
377393   AM_RANGE(0x80000, 0xbffff) AM_ROMBANK("bank1")
378394   AM_RANGE(0xc0000, 0xfffff) AM_ROM AM_REGION("boot_prg",0)
379395ADDRESS_MAP_END
380396
381397static ADDRESS_MAP_START( tv_tcf_io, AS_IO, 16, highvdeo_state )
382   AM_RANGE(0x0000, 0x0001) AM_WRITE_LEGACY(write1_w ) // lamps
398   AM_RANGE(0x0000, 0x0001) AM_WRITE(write1_w ) // lamps
383399   AM_RANGE(0x0006, 0x0007) AM_DEVWRITE_LEGACY("oki", tv_oki6376_w )
384   AM_RANGE(0x0008, 0x0009) AM_READ_LEGACY(read1_r )
385   AM_RANGE(0x000a, 0x000b) AM_READ_LEGACY(read2_r )
386   AM_RANGE(0x0030, 0x0031) AM_READ_LEGACY(read3_r ) AM_WRITE_LEGACY(tv_tcf_bankselect_w )
400   AM_RANGE(0x0008, 0x0009) AM_READ(read1_r )
401   AM_RANGE(0x000a, 0x000b) AM_READ(read2_r )
402   AM_RANGE(0x0030, 0x0031) AM_READ(read3_r ) AM_WRITE(tv_tcf_bankselect_w )
387403ADDRESS_MAP_END
388404
389405/****************************
r14845r14846
392408*
393409****************************/
394410
395static READ16_HANDLER( newmcard_status_r )
411READ16_MEMBER(highvdeo_state::newmcard_status_r)
396412{
397413   switch(offset*2)
398414   {
r14845r14846
403419}
404420
405421
406static READ16_HANDLER( newmcard_vblank_r )
422READ16_MEMBER(highvdeo_state::newmcard_vblank_r)
407423{
408   highvdeo_state *state = space->machine().driver_data<highvdeo_state>();
409   return state->m_vblank_bit; //0x80
424   return m_vblank_bit; //0x80
410425}
411426
412static WRITE16_HANDLER( newmcard_vblank_w )
427WRITE16_MEMBER(highvdeo_state::newmcard_vblank_w)
413428{
414   highvdeo_state *state = space->machine().driver_data<highvdeo_state>();
415   state->m_vblank_bit = data;
429   m_vblank_bit = data;
416430}
417431
418static WRITE16_HANDLER( write2_w )
432WRITE16_MEMBER(highvdeo_state::write2_w)
419433{
420434   int i;
421435
r14845r14846
423437
424438   for(i=0;i<4;i++)
425439   {
426      coin_counter_w(space->machine(), i,data & 0x20);
427      coin_lockout_w(space->machine(), i,~data & 0x08);
440      coin_counter_w(machine(), i,data & 0x20);
441      coin_lockout_w(machine(), i,~data & 0x08);
428442   }
429443}
430444
r14845r14846
437451ADDRESS_MAP_END
438452
439453static ADDRESS_MAP_START( newmcard_io, AS_IO, 16, highvdeo_state )
440   AM_RANGE(0x0030, 0x0033) AM_READ_LEGACY(newmcard_status_r )
441   AM_RANGE(0x0030, 0x0031) AM_WRITE_LEGACY(tv_tcf_bankselect_w )
442   AM_RANGE(0x0000, 0x0001) AM_WRITE_LEGACY(write1_w ) // lamps
443   AM_RANGE(0x0002, 0x0003) AM_WRITE_LEGACY(write2_w ) // coin counter & coin lockout
444   AM_RANGE(0x0004, 0x0005) AM_WRITE_LEGACY(newmcard_vblank_w )
454   AM_RANGE(0x0030, 0x0033) AM_READ(newmcard_status_r )
455   AM_RANGE(0x0030, 0x0031) AM_WRITE(tv_tcf_bankselect_w )
456   AM_RANGE(0x0000, 0x0001) AM_WRITE(write1_w ) // lamps
457   AM_RANGE(0x0002, 0x0003) AM_WRITE(write2_w ) // coin counter & coin lockout
458   AM_RANGE(0x0004, 0x0005) AM_WRITE(newmcard_vblank_w )
445459   AM_RANGE(0x0006, 0x0007) AM_DEVWRITE_LEGACY("oki", tv_oki6376_w )
446   AM_RANGE(0x0008, 0x0009) AM_READ_LEGACY(read1_r )
447   AM_RANGE(0x000a, 0x000b) AM_READ_LEGACY(read2_r )
448   AM_RANGE(0x000c, 0x000d) AM_READ_LEGACY(newmcard_vblank_r )
449   AM_RANGE(0x000e, 0x000f) AM_READ_LEGACY(read3_r )
450   AM_RANGE(0x0010, 0x0015) AM_WRITE_LEGACY(tv_vcf_paletteram_w )
460   AM_RANGE(0x0008, 0x0009) AM_READ(read1_r )
461   AM_RANGE(0x000a, 0x000b) AM_READ(read2_r )
462   AM_RANGE(0x000c, 0x000d) AM_READ(newmcard_vblank_r )
463   AM_RANGE(0x000e, 0x000f) AM_READ(read3_r )
464   AM_RANGE(0x0010, 0x0015) AM_WRITE(tv_vcf_paletteram_w )
451465ADDRESS_MAP_END
452466
453467/****************************
r14845r14846
457471****************************/
458472
459473
460static READ16_HANDLER( brasil_status_r )
474READ16_MEMBER(highvdeo_state::brasil_status_r)
461475{
462   highvdeo_state *state = space->machine().driver_data<highvdeo_state>();
463476   static UINT16 resetpulse;
464477
465478   switch(offset*2)
r14845r14846
468481      resetpulse^=0x10;
469482
470483      return 3 | resetpulse;
471      case 2: return (state->m_brasil_prot_latch & 3); //and 0x3f
484      case 2: return (m_brasil_prot_latch & 3); //and 0x3f
472485   }
473486
474487   return 0;
r14845r14846
477490
478491
479492/*bankaddress might be incorrect.*/
480static WRITE16_HANDLER( brasil_status_w )
493WRITE16_MEMBER(highvdeo_state::brasil_status_w)
481494{
482   highvdeo_state *state = space->machine().driver_data<highvdeo_state>();
483495   UINT32 bankaddress;
484   UINT8 *ROM = space->machine().region("user1")->base();
496   UINT8 *ROM = machine().region("user1")->base();
485497
486498   switch(data & 3) //data & 7?
487499   {
488      case 0: state->m_brasil_prot_latch = 1; break;
489      case 1: state->m_brasil_prot_latch = 0; break;
490      case 2: state->m_brasil_prot_latch = 2; break;
500      case 0: m_brasil_prot_latch = 1; break;
501      case 1: m_brasil_prot_latch = 0; break;
502      case 2: m_brasil_prot_latch = 2; break;
491503   }
492504
493505   bankaddress = (data & 0x07) * 0x40000;
494506
495   memory_set_bankptr(space->machine(), "bank1", &ROM[bankaddress]);
507   memory_set_bankptr(machine(), "bank1", &ROM[bankaddress]);
496508
497509//  popmessage("%04x",data);
498510}
r14845r14846
506518ADDRESS_MAP_END
507519
508520static ADDRESS_MAP_START( brasil_io, AS_IO, 16, highvdeo_state )
509   AM_RANGE(0x0030, 0x0033) AM_READ_LEGACY(brasil_status_r )
510   AM_RANGE(0x0030, 0x0031) AM_WRITE_LEGACY(brasil_status_w )
511   AM_RANGE(0x0000, 0x0001) AM_WRITE_LEGACY(write1_w ) // lamps
512   AM_RANGE(0x0002, 0x0003) AM_WRITE_LEGACY(write2_w ) // coin counter & coin lockout
521   AM_RANGE(0x0030, 0x0033) AM_READ(brasil_status_r )
522   AM_RANGE(0x0030, 0x0031) AM_WRITE(brasil_status_w )
523   AM_RANGE(0x0000, 0x0001) AM_WRITE(write1_w ) // lamps
524   AM_RANGE(0x0002, 0x0003) AM_WRITE(write2_w ) // coin counter & coin lockout
513525   AM_RANGE(0x0006, 0x0007) AM_DEVWRITE_LEGACY("oki", tv_oki6376_w )
514   AM_RANGE(0x0008, 0x0009) AM_READ_LEGACY(read1_r )
515   AM_RANGE(0x000a, 0x000b) AM_READ_LEGACY(read2_r )
516   AM_RANGE(0x000e, 0x000f) AM_READ_LEGACY(read3_r )
526   AM_RANGE(0x0008, 0x0009) AM_READ(read1_r )
527   AM_RANGE(0x000a, 0x000b) AM_READ(read2_r )
528   AM_RANGE(0x000e, 0x000f) AM_READ(read3_r )
517529//  AM_RANGE(0x000e, 0x000f) AM_WRITE
518530//  AM_RANGE(0xffa2, 0xffa3) AM_WRITE
519531ADDRESS_MAP_END
r14845r14846
11601172ROM_END
11611173
11621174/*Ciclone*/
1163static READ16_HANDLER( ciclone_status_r )
1175READ16_MEMBER(highvdeo_state::ciclone_status_r)
11641176{
11651177   static UINT16 resetpulse;
11661178   switch(offset*2)
r14845r14846
11761188
11771189static DRIVER_INIT( ciclone )
11781190{
1179   machine.device("maincpu")->memory().space(AS_IO)->install_legacy_read_handler(0x0030, 0x0033, FUNC(ciclone_status_r) );
1191   highvdeo_state *state = machine.driver_data<highvdeo_state>();
1192   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x0030, 0x0033, read16_delegate(FUNC(highvdeo_state::ciclone_status_r), state));
11801193}
11811194
11821195/*
r14845r14846
12311244   ROM_LOAD( "sound-fashion-v-1-memory4m.u16", 0x00000, 0x80000, CRC(2927c799) SHA1(f11cad096a23fee10bfdff5bf944c96e30f4a8b8) )
12321245ROM_END
12331246
1234static WRITE16_HANDLER( fashion_output_w )
1247WRITE16_MEMBER(highvdeo_state::fashion_output_w)
12351248{
12361249   int i;
12371250
r14845r14846
12391252
12401253   for(i=0;i<4;i++)
12411254   {
1242      coin_counter_w(space->machine(), i,data & 0x20);
1243      coin_lockout_w(space->machine(), i,~data & 0x01);
1255      coin_counter_w(machine(), i,data & 0x20);
1256      coin_lockout_w(machine(), i,~data & 0x01);
12441257   }
12451258}
12461259
12471260static DRIVER_INIT( fashion )
12481261{
1249   machine.device("maincpu")->memory().space(AS_IO)->install_legacy_write_handler(0x0002, 0x0003, FUNC(fashion_output_w) );
1262   highvdeo_state *state = machine.driver_data<highvdeo_state>();
1263   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x0002, 0x0003, write16_delegate(FUNC(highvdeo_state::fashion_output_w), state));
12501264}
12511265
12521266GAMEL( 2000, tour4000,  0,      tv_vcf,   tv_vcf,   0,       ROT0,  "High Video", "Tour 4000",         0, layout_fashion )
src/mame/drivers/nsmpoker.c
r14845r14846
7373   UINT8 *m_videoram;
7474   UINT8 *m_colorram;
7575   tilemap_t *m_bg_tilemap;
76   DECLARE_WRITE8_MEMBER(nsmpoker_videoram_w);
77   DECLARE_WRITE8_MEMBER(nsmpoker_colorram_w);
78   DECLARE_WRITE8_MEMBER(debug_w);
79   DECLARE_READ8_MEMBER(debug_r);
7680};
7781
7882
r14845r14846
8185*************************/
8286
8387
84static WRITE8_HANDLER( nsmpoker_videoram_w )
88WRITE8_MEMBER(nsmpoker_state::nsmpoker_videoram_w)
8589{
86   nsmpoker_state *state = space->machine().driver_data<nsmpoker_state>();
87   state->m_videoram[offset] = data;
88   state->m_bg_tilemap->mark_tile_dirty(offset);
90   m_videoram[offset] = data;
91   m_bg_tilemap->mark_tile_dirty(offset);
8992}
9093
9194
92static WRITE8_HANDLER( nsmpoker_colorram_w )
95WRITE8_MEMBER(nsmpoker_state::nsmpoker_colorram_w)
9396{
94   nsmpoker_state *state = space->machine().driver_data<nsmpoker_state>();
95   state->m_colorram[offset] = data;
96   state->m_bg_tilemap->mark_tile_dirty(offset);
97   m_colorram[offset] = data;
98   m_bg_tilemap->mark_tile_dirty(offset);
9799}
98100
99101
r14845r14846
145147   device_set_input_line_and_vector(device, 0, ASSERT_LINE, 3);//2=nmi  3,4,5,6
146148}
147149
148//static WRITE8_HANDLER( debug_w )
150//WRITE8_MEMBER(nsmpoker_state::debug_w)
149151//{
150152//  popmessage("written : %02X", data);
151153//}
152154
153static READ8_HANDLER( debug_r )
155READ8_MEMBER(nsmpoker_state::debug_r)
154156{
155   return space->machine().rand() & 0xff;
157   return machine().rand() & 0xff;
156158}
157159
158160
r14845r14846
164166   AM_RANGE(0x0000, 0x7fff) AM_ROM
165167   AM_RANGE(0x9000, 0xafff) AM_RAM   // OK... cleared at beginning.
166168   AM_RANGE(0xb000, 0xcfff) AM_ROM   // WRONG... just to map the last rom somewhere.
167   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE_LEGACY(nsmpoker_videoram_w) AM_BASE(m_videoram) // WRONG... just a placeholder.
168   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE_LEGACY(nsmpoker_colorram_w) AM_BASE(m_colorram) // WRONG... just a placeholder.
169   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(nsmpoker_videoram_w) AM_BASE(m_videoram) // WRONG... just a placeholder.
170   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(nsmpoker_colorram_w) AM_BASE(m_colorram) // WRONG... just a placeholder.
169171ADDRESS_MAP_END
170172
171173static ADDRESS_MAP_START( nsmpoker_portmap, AS_IO, 8, nsmpoker_state )
172174   ADDRESS_MAP_GLOBAL_MASK(0xff)
173   AM_RANGE(0xf0, 0xf0) AM_READ_LEGACY(debug_r)   // kind of trap at beginning
175   AM_RANGE(0xf0, 0xf0) AM_READ(debug_r)   // kind of trap at beginning
174176ADDRESS_MAP_END
175177
176178/* I/O byte R/W
src/mame/drivers/othello.c
r14845r14846
7373   device_t *m_n7751;
7474   device_t *m_ay1;
7575   device_t *m_ay2;
76   DECLARE_READ8_MEMBER(unk_87_r);
77   DECLARE_WRITE8_MEMBER(unk_8a_w);
78   DECLARE_WRITE8_MEMBER(unk_8c_w);
79   DECLARE_READ8_MEMBER(unk_8c_r);
80   DECLARE_READ8_MEMBER(sound_ack_r);
81   DECLARE_WRITE8_MEMBER(unk_8f_w);
82   DECLARE_WRITE8_MEMBER(tilebank_w);
83   DECLARE_READ8_MEMBER(latch_r);
84   DECLARE_WRITE8_MEMBER(ay_select_w);
85   DECLARE_WRITE8_MEMBER(ack_w);
86   DECLARE_WRITE8_MEMBER(ay_address_w);
87   DECLARE_WRITE8_MEMBER(ay_data_w);
88   DECLARE_READ8_MEMBER(n7751_rom_r);
89   DECLARE_READ8_MEMBER(n7751_command_r);
90   DECLARE_READ8_MEMBER(n7751_t1_r);
7691};
7792
7893
r14845r14846
124139   AM_RANGE(0xf000, 0xffff) AM_RAM
125140ADDRESS_MAP_END
126141
127static READ8_HANDLER( unk_87_r )
142READ8_MEMBER(othello_state::unk_87_r)
128143{
129144   /* n7751_status_r ?  bit 7 = ack/status from device connected  to port 8a? */
130   return space->machine().rand();
145   return machine().rand();
131146}
132147
133static WRITE8_HANDLER( unk_8a_w )
148WRITE8_MEMBER(othello_state::unk_8a_w)
134149{
135150   /*
136    othello_state *state = space->machine().driver_data<othello_state>();
137151
138    state->m_n7751_command = (data & 0x07);
139    device_set_input_line(state->m_n7751, 0, ((data & 0x08) == 0) ? ASSERT_LINE : CLEAR_LINE);
140    //device_set_input_line(state->m_n7751, 0, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE);
141    space->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
152
153    m_n7751_command = (data & 0x07);
154    device_set_input_line(m_n7751, 0, ((data & 0x08) == 0) ? ASSERT_LINE : CLEAR_LINE);
155    //device_set_input_line(m_n7751, 0, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE);
156    machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
142157    */
143158
144159   logerror("8a -> %x\n", data);
145160}
146161
147static WRITE8_HANDLER( unk_8c_w )
162WRITE8_MEMBER(othello_state::unk_8c_w)
148163{
149164   logerror("8c -> %x\n", data);
150165}
151166
152static READ8_HANDLER( unk_8c_r )
167READ8_MEMBER(othello_state::unk_8c_r)
153168{
154   return space->machine().rand();
169   return machine().rand();
155170}
156171
157static READ8_HANDLER( sound_ack_r )
172READ8_MEMBER(othello_state::sound_ack_r)
158173{
159   othello_state *state = space->machine().driver_data<othello_state>();
160   return state->m_ack_data;
174   return m_ack_data;
161175}
162176
163static WRITE8_HANDLER( unk_8f_w )
177WRITE8_MEMBER(othello_state::unk_8f_w)
164178{
165179   logerror("8f -> %x\n", data);
166180}
167181
168static WRITE8_HANDLER( tilebank_w )
182WRITE8_MEMBER(othello_state::tilebank_w)
169183{
170   othello_state *state = space->machine().driver_data<othello_state>();
171   state->m_tile_bank = (data == 0x0f) ? 0x100 : 0x00;
184   m_tile_bank = (data == 0x0f) ? 0x100 : 0x00;
172185   logerror("tilebank -> %x\n", data);
173186}
174187
r14845r14846
179192   AM_RANGE(0x80, 0x80) AM_READ_PORT("INP")
180193   AM_RANGE(0x81, 0x81) AM_READ_PORT("SYSTEM")
181194   AM_RANGE(0x83, 0x83) AM_READ_PORT("DSW")
182   AM_RANGE(0x86, 0x86) AM_WRITE_LEGACY(tilebank_w)
183   AM_RANGE(0x87, 0x87) AM_READ_LEGACY(unk_87_r)
184   AM_RANGE(0x8a, 0x8a) AM_WRITE_LEGACY(unk_8a_w)
185   AM_RANGE(0x8c, 0x8c) AM_READWRITE_LEGACY(unk_8c_r, unk_8c_w)
186   AM_RANGE(0x8d, 0x8d) AM_READWRITE_LEGACY(sound_ack_r, soundlatch_w)
187   AM_RANGE(0x8f, 0x8f) AM_WRITE_LEGACY(unk_8f_w)
195   AM_RANGE(0x86, 0x86) AM_WRITE(tilebank_w)
196   AM_RANGE(0x87, 0x87) AM_READ(unk_87_r)
197   AM_RANGE(0x8a, 0x8a) AM_WRITE(unk_8a_w)
198   AM_RANGE(0x8c, 0x8c) AM_READWRITE(unk_8c_r, unk_8c_w)
199   AM_RANGE(0x8d, 0x8d) AM_READWRITE(sound_ack_r, soundlatch_w)
200   AM_RANGE(0x8f, 0x8f) AM_WRITE(unk_8f_w)
188201ADDRESS_MAP_END
189202
190static READ8_HANDLER( latch_r )
203READ8_MEMBER(othello_state::latch_r)
191204{
192205   int retval = soundlatch_r(space, 0);
193206   soundlatch_clear_w(space, 0, 0);
194207   return retval;
195208}
196209
197static WRITE8_HANDLER( ay_select_w )
210WRITE8_MEMBER(othello_state::ay_select_w)
198211{
199   othello_state *state = space->machine().driver_data<othello_state>();
200   state->m_ay_select = data;
212   m_ay_select = data;
201213}
202214
203static WRITE8_HANDLER( ack_w )
215WRITE8_MEMBER(othello_state::ack_w)
204216{
205   othello_state *state = space->machine().driver_data<othello_state>();
206   state->m_ack_data = data;
217   m_ack_data = data;
207218}
208219
209static WRITE8_HANDLER( ay_address_w )
220WRITE8_MEMBER(othello_state::ay_address_w)
210221{
211   othello_state *state = space->machine().driver_data<othello_state>();
212222
213   if (state->m_ay_select & 1) ay8910_address_w(state->m_ay1, 0, data);
214   if (state->m_ay_select & 2) ay8910_address_w(state->m_ay2, 0, data);
223   if (m_ay_select & 1) ay8910_address_w(m_ay1, 0, data);
224   if (m_ay_select & 2) ay8910_address_w(m_ay2, 0, data);
215225}
216226
217static WRITE8_HANDLER( ay_data_w )
227WRITE8_MEMBER(othello_state::ay_data_w)
218228{
219   othello_state *state = space->machine().driver_data<othello_state>();
220229
221   if (state->m_ay_select & 1) ay8910_data_w(state->m_ay1, 0, data);
222   if (state->m_ay_select & 2) ay8910_data_w(state->m_ay2, 0, data);
230   if (m_ay_select & 1) ay8910_data_w(m_ay1, 0, data);
231   if (m_ay_select & 2) ay8910_data_w(m_ay2, 0, data);
223232}
224233
225234static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, othello_state )
r14845r14846
229238
230239static ADDRESS_MAP_START( audio_portmap, AS_IO, 8, othello_state )
231240   ADDRESS_MAP_GLOBAL_MASK(0xff)
232   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(latch_r)
233   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(ay_data_w)
234   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(ay_address_w)
235   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(ack_w)
236   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(ay_select_w)
241   AM_RANGE(0x00, 0x00) AM_READ(latch_r)
242   AM_RANGE(0x01, 0x01) AM_WRITE(ay_data_w)
243   AM_RANGE(0x03, 0x03) AM_WRITE(ay_address_w)
244   AM_RANGE(0x04, 0x04) AM_WRITE(ack_w)
245   AM_RANGE(0x08, 0x08) AM_WRITE(ay_select_w)
237246ADDRESS_MAP_END
238247
239248static WRITE8_DEVICE_HANDLER( n7751_rom_control_w )
r14845r14846
271280   }
272281}
273282
274static READ8_HANDLER( n7751_rom_r )
283READ8_MEMBER(othello_state::n7751_rom_r)
275284{
276   othello_state *state = space->machine().driver_data<othello_state>();
277   return space->machine().region("n7751data")->base()[state->m_sound_addr];
285   return machine().region("n7751data")->base()[m_sound_addr];
278286}
279287
280static READ8_HANDLER( n7751_command_r )
288READ8_MEMBER(othello_state::n7751_command_r)
281289{
282   othello_state *state = space->machine().driver_data<othello_state>();
283   return 0x80 | ((state->m_n7751_command & 0x07) << 4);
290   return 0x80 | ((m_n7751_command & 0x07) << 4);
284291}
285292
286293static WRITE8_DEVICE_HANDLER( n7751_p2_w )
r14845r14846
295302   state->m_n7751_busy = data;
296303}
297304
298static READ8_HANDLER( n7751_t1_r )
305READ8_MEMBER(othello_state::n7751_t1_r)
299306{
300307   /* T1 - labelled as "TEST", connected to ground */
301308   return 0;
302309}
303310
304311static ADDRESS_MAP_START( n7751_portmap, AS_IO, 8, othello_state )
305   AM_RANGE(MCS48_PORT_T1,   MCS48_PORT_T1) AM_READ_LEGACY(n7751_t1_r)
306   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2) AM_READ_LEGACY(n7751_command_r)
307   AM_RANGE(MCS48_PORT_BUS,  MCS48_PORT_BUS) AM_READ_LEGACY(n7751_rom_r)
312   AM_RANGE(MCS48_PORT_T1,   MCS48_PORT_T1) AM_READ(n7751_t1_r)
313   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2) AM_READ(n7751_command_r)
314   AM_RANGE(MCS48_PORT_BUS,  MCS48_PORT_BUS) AM_READ(n7751_rom_r)
308315   AM_RANGE(MCS48_PORT_P1,   MCS48_PORT_P1) AM_DEVWRITE_LEGACY("dac", dac_w)
309316   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2) AM_DEVWRITE_LEGACY("n7751_8243", n7751_p2_w)
310317   AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_DEVWRITE_LEGACY("n7751_8243", i8243_prog_w)
src/mame/drivers/f-32.c
r14845r14846
2727   /* memory pointers */
2828   required_device<e132xn_device>   m_maincpu;
2929   UINT32 *  m_videoram;
30   DECLARE_READ32_MEMBER(f32_input_port_1_r);
3031};
3132
3233
r14845r14846
5960   AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("user1",0)
6061ADDRESS_MAP_END
6162
62static READ32_HANDLER( f32_input_port_1_r )
63READ32_MEMBER(mosaicf2_state::f32_input_port_1_r)
6364{
6465   /* burn a bunch of cycles because this is polled frequently during busy loops */
65   mosaicf2_state *state = space->machine().driver_data<mosaicf2_state>();
66   offs_t pc = state->m_maincpu->pc();
66
67   offs_t pc = m_maincpu->pc();
6768   if ((pc == 0x000379de) || (pc == 0x000379cc) )
68      state->m_maincpu->eat_cycles(100);
69      m_maincpu->eat_cycles(100);
6970   //else printf("PC %08x\n", pc );
70   return input_port_read(space->machine(), "SYSTEM_P2");
71   return input_port_read(machine(), "SYSTEM_P2");
7172}
7273
7374
r14845r14846
7576   AM_RANGE(0x4000, 0x4003) AM_DEVREAD8("oki", okim6295_device, read, 0x000000ff)
7677   AM_RANGE(0x4810, 0x4813) AM_DEVREAD8_LEGACY("ymsnd", ym2151_status_port_r, 0x000000ff)
7778   AM_RANGE(0x5000, 0x5003) AM_READ_PORT("P1")
78   AM_RANGE(0x5200, 0x5203) AM_READ_LEGACY(f32_input_port_1_r)
79   AM_RANGE(0x5200, 0x5203) AM_READ(f32_input_port_1_r)
7980   AM_RANGE(0x5400, 0x5403) AM_READ_PORT("EEPROMIN")
8081   AM_RANGE(0x6000, 0x6003) AM_DEVWRITE8("oki", okim6295_device, write, 0x000000ff)
8182   AM_RANGE(0x6800, 0x6803) AM_DEVWRITE8_LEGACY("ymsnd", ym2151_data_port_w, 0x000000ff)
src/mame/drivers/majorpkr.c
r14845r14846
473473
474474   required_device<okim6295_device> oki;
475475
476   DECLARE_WRITE8_MEMBER(rom_bank_w);
477   DECLARE_WRITE8_MEMBER(palette_bank_w);
478   DECLARE_READ8_MEMBER(paletteram_r);
479   DECLARE_WRITE8_MEMBER(paletteram_w);
480   DECLARE_WRITE8_MEMBER(vram_bank_w);
481   DECLARE_READ8_MEMBER(vram_r);
482   DECLARE_WRITE8_MEMBER(vram_w);
483   DECLARE_WRITE8_MEMBER(vidreg_w);
484   DECLARE_READ8_MEMBER(mux_port_r);
485   DECLARE_READ8_MEMBER(mux_port2_r);
486   DECLARE_WRITE8_MEMBER(mux_sel_w);
487   DECLARE_WRITE8_MEMBER(lamps_a_w);
488   DECLARE_WRITE8_MEMBER(lamps_b_w);
489   DECLARE_WRITE8_MEMBER(pulses_w);
476490};
477491
478492
r14845r14846
552566*         R/W Handlers        *
553567******************************/
554568
555static WRITE8_HANDLER(rom_bank_w)
569WRITE8_MEMBER(majorpkr_state::rom_bank_w)
556570{
557   memory_set_bank(space->machine(), "rom_bank", data & 0x3);
571   memory_set_bank(machine(), "rom_bank", data & 0x3);
558572}
559573
560574
561static WRITE8_HANDLER(palette_bank_w)
575WRITE8_MEMBER(majorpkr_state::palette_bank_w)
562576{
563   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
564577
565   state->m_palette_bank=data;
578   m_palette_bank=data;
566579}
567580
568581
569static READ8_HANDLER(paletteram_r)
582READ8_MEMBER(majorpkr_state::paletteram_r)
570583{
571   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
572   return state->machine().generic.paletteram.u8[state->m_palette_bank * 0x800 + offset];
584   return machine().generic.paletteram.u8[m_palette_bank * 0x800 + offset];
573585}
574586
575static WRITE8_HANDLER(paletteram_w)
587WRITE8_MEMBER(majorpkr_state::paletteram_w)
576588{
577   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
578   state->machine().generic.paletteram.u8[state->m_palette_bank * 0x800 + offset] = data;
589   machine().generic.paletteram.u8[m_palette_bank * 0x800 + offset] = data;
579590
580591   offset >>= 1;
581   int color = state->machine().generic.paletteram.u8[state->m_palette_bank * 0x800 + offset * 2] + state->machine().generic.paletteram.u8[state->m_palette_bank * 0x800 + offset * 2 + 1] * 256;
582   palette_set_color(space->machine(), offset + state->m_palette_bank * 256 * 4, MAKE_RGB(pal5bit(color >> 5), pal5bit(color >> 10), pal5bit(color)));
592   int color = machine().generic.paletteram.u8[m_palette_bank * 0x800 + offset * 2] + machine().generic.paletteram.u8[m_palette_bank * 0x800 + offset * 2 + 1] * 256;
593   palette_set_color(machine(), offset + m_palette_bank * 256 * 4, MAKE_RGB(pal5bit(color >> 5), pal5bit(color >> 10), pal5bit(color)));
583594}
584595
585596
586static WRITE8_HANDLER(vram_bank_w)
597WRITE8_MEMBER(majorpkr_state::vram_bank_w)
587598{
588   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
589   state->m_vram_bank = data;
599   m_vram_bank = data;
590600}
591601
592static READ8_HANDLER(vram_r)
602READ8_MEMBER(majorpkr_state::vram_r)
593603{
594   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
595   return state->m_videoram[state->m_vram_bank * 0x800 + offset];
604   return m_videoram[m_vram_bank * 0x800 + offset];
596605}
597606
598static WRITE8_HANDLER(vram_w)
607WRITE8_MEMBER(majorpkr_state::vram_w)
599608{
600   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
601   state->m_videoram[state->m_vram_bank * 0x800 + offset] = data;
609   m_videoram[m_vram_bank * 0x800 + offset] = data;
602610
603   if (state->m_vram_bank == 0)
611   if (m_vram_bank == 0)
604612   {
605      state->m_fg_tilemap->mark_tile_dirty(offset >> 1);
613      m_fg_tilemap->mark_tile_dirty(offset >> 1);
606614   }
607615   else
608616   {
609      if (state->m_vram_bank == 1)
617      if (m_vram_bank == 1)
610618      {
611         state->m_bg_tilemap->mark_tile_dirty(offset >> 1);
619         m_bg_tilemap->mark_tile_dirty(offset >> 1);
612620      }
613621      else
614622      {
615         //logerror("accessing vram bank %d (offset = %x , data = %x )\n", state->m_vram_bank, offset,data);
623         //logerror("accessing vram bank %d (offset = %x , data = %x )\n", m_vram_bank, offset,data);
616624      }
617625   }
618626}
619627
620static WRITE8_HANDLER(vidreg_w)
628WRITE8_MEMBER(majorpkr_state::vidreg_w)
621629{
622   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
623630
624631/*  If bit6 is active, the screen is drawn upside down.
625632    (also 0xfc and 0x11 are written to the CRTC registers 0xc0 and 0xd0)
r14845r14846
628635   if (data & 0x40)
629636   {
630637      /* upside down screen */
631      state->m_flip_state = 1;
638      m_flip_state = 1;
632639   }
633640
634641/*  If bit6 is not active, the screen is drawn normally.
r14845r14846
638645   else
639646   {
640647      /* normal screen */
641      state->m_flip_state = 0;
648      m_flip_state = 0;
642649   }
643650}
644651
645652
646653/***** Multiplexed Ports *****/
647654
648static READ8_HANDLER( mux_port_r )
655READ8_MEMBER(majorpkr_state::mux_port_r)
649656{
650   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
651657
652   switch( (state->m_mux_data & 0xf0) )      /* 00-10-20-30-0F-1F-2F-3F */
658   switch( (m_mux_data & 0xf0) )      /* 00-10-20-30-0F-1F-2F-3F */
653659   {
654      case 0x00: return input_port_read(space->machine(), "DSW1");   /* confirmed */
655      case 0x10: return input_port_read(space->machine(), "DSW2");   /* confirmed */
656      case 0x20: return input_port_read(space->machine(), "DSW3");   /* confirmed */
657      case 0x30: return input_port_read(space->machine(), "DSW4");   /* confirmed */
660      case 0x00: return input_port_read(machine(), "DSW1");   /* confirmed */
661      case 0x10: return input_port_read(machine(), "DSW2");   /* confirmed */
662      case 0x20: return input_port_read(machine(), "DSW3");   /* confirmed */
663      case 0x30: return input_port_read(machine(), "DSW4");   /* confirmed */
658664   }
659665
660666   return 0xff;
661667}
662668
663static READ8_HANDLER( mux_port2_r )
669READ8_MEMBER(majorpkr_state::mux_port2_r)
664670{
665   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
666671
667   if ((state->m_mux_data & 0x0f) == 4)
672   if ((m_mux_data & 0x0f) == 4)
668673   {
669      return input_port_read(space->machine(), "IN0-1");
674      return input_port_read(machine(), "IN0-1");
670675   }
671676   else
672677   {
673      return input_port_read(space->machine(), "IN0-0");
678      return input_port_read(machine(), "IN0-0");
674679   }
675680}
676681
677static WRITE8_HANDLER( mux_sel_w )
682WRITE8_MEMBER(majorpkr_state::mux_sel_w)
678683{
679   majorpkr_state *state = space->machine().driver_data<majorpkr_state>();
680684
681   state->m_mux_data = data;   /* 00-10-20-30-0F-1F-2F-3F */
685   m_mux_data = data;   /* 00-10-20-30-0F-1F-2F-3F */
682686}
683687
684688
r14845r14846
686690*    Lamps and Pulses    *
687691*************************/
688692
689static WRITE8_HANDLER( lamps_a_w )
693WRITE8_MEMBER(majorpkr_state::lamps_a_w)
690694{
691695/*  Lamps - Array A.
692696
r14845r14846
713717      logerror("Lamps A: Write to 13h: %02x\n", data);
714718}
715719
716static WRITE8_HANDLER( lamps_b_w )
720WRITE8_MEMBER(majorpkr_state::lamps_b_w)
717721{
718722/*  Lamps - Array B.
719723
r14845r14846
738742      logerror("Lamps B: Write to 14h: %02x\n", data);
739743}
740744
741static WRITE8_HANDLER( pulses_w )
745WRITE8_MEMBER(majorpkr_state::pulses_w)
742746{
743747/*  Pulses...
744748
r14845r14846
751755    ---x ----   Watchdog? (constant writes).
752756    xxx- ----   Unknown.
753757*/
754   coin_counter_w(space->machine(), 3, data & 0x01);      /* Credits Out (all) */
755   coin_counter_w(space->machine(), 2, data & 0x02);      /* Credits 3 */
756   coin_counter_w(space->machine(), 0, data & 0x04);      /* Credits 1 */
757   coin_counter_w(space->machine(), 1, data & 0x08);      /* Credits 2 */
758   coin_counter_w(machine(), 3, data & 0x01);      /* Credits Out (all) */
759   coin_counter_w(machine(), 2, data & 0x02);      /* Credits 3 */
760   coin_counter_w(machine(), 0, data & 0x04);      /* Credits 1 */
761   coin_counter_w(machine(), 1, data & 0x08);      /* Credits 2 */
758762
759763   if (data & 0xe0)
760764      logerror("Pulse: Write to 10h: %02x\n", data);
r14845r14846
769773   AM_RANGE(0x0000, 0xdfff) AM_ROM
770774   AM_RANGE(0xe000, 0xe7ff) AM_ROM AM_ROMBANK("rom_bank")
771775   AM_RANGE(0xe800, 0xefff) AM_RAM AM_SHARE("nvram")
772   AM_RANGE(0xf000, 0xf7ff) AM_READWRITE_LEGACY(paletteram_r, paletteram_w)   /* 4*4 palettes - 4 banks? */
773   AM_RANGE(0xf800, 0xffff) AM_READWRITE_LEGACY(vram_r, vram_w)            /* two tilemaps - 2 banks? */
776   AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(paletteram_r, paletteram_w)   /* 4*4 palettes - 4 banks? */
777   AM_RANGE(0xf800, 0xffff) AM_READWRITE(vram_r, vram_w)            /* two tilemaps - 2 banks? */
774778ADDRESS_MAP_END
775779
776780/*
r14845r14846
796800*/
797801static ADDRESS_MAP_START( portmap, AS_IO, 8, majorpkr_state )
798802   ADDRESS_MAP_GLOBAL_MASK(0xff)
799   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(rom_bank_w)
800   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(palette_bank_w)
801   AM_RANGE(0x02, 0x02) AM_WRITE_LEGACY(vram_bank_w)
803   AM_RANGE(0x00, 0x00) AM_WRITE(rom_bank_w)
804   AM_RANGE(0x01, 0x01) AM_WRITE(palette_bank_w)
805   AM_RANGE(0x02, 0x02) AM_WRITE(vram_bank_w)
802806
803   AM_RANGE(0x10, 0x10) AM_READ_LEGACY(mux_port2_r)   /* muxed set of controls */
804   AM_RANGE(0x10, 0x10) AM_WRITE_LEGACY(pulses_w)      /* kind of watchdog on bit4... mech counters on bits 0-1-2-3 */
807   AM_RANGE(0x10, 0x10) AM_READ(mux_port2_r)   /* muxed set of controls */
808   AM_RANGE(0x10, 0x10) AM_WRITE(pulses_w)      /* kind of watchdog on bit4... mech counters on bits 0-1-2-3 */
805809   AM_RANGE(0x11, 0x11) AM_READ_PORT("IN1")
806   AM_RANGE(0x11, 0x11) AM_WRITE_LEGACY(mux_sel_w)   /* multiplexer selector */
810   AM_RANGE(0x11, 0x11) AM_WRITE(mux_sel_w)   /* multiplexer selector */
807811   AM_RANGE(0x12, 0x12) AM_READ_PORT("IN2")
808   AM_RANGE(0x12, 0x12) AM_WRITE_LEGACY(vidreg_w)      /* video registers: normal or up down screen */
809   AM_RANGE(0x13, 0x13) AM_READ_LEGACY(mux_port_r)   /* all 4 DIP switches banks multiplexed */
810   AM_RANGE(0x13, 0x13) AM_WRITE_LEGACY(lamps_a_w)   /* lamps a out */
812   AM_RANGE(0x12, 0x12) AM_WRITE(vidreg_w)      /* video registers: normal or up down screen */
813   AM_RANGE(0x13, 0x13) AM_READ(mux_port_r)   /* all 4 DIP switches banks multiplexed */
814   AM_RANGE(0x13, 0x13) AM_WRITE(lamps_a_w)   /* lamps a out */
811815   AM_RANGE(0x14, 0x14) AM_READ_PORT("TEST")   /* "freeze" switch */
812   AM_RANGE(0x14, 0x14) AM_WRITE_LEGACY(lamps_b_w)   /* lamps b out */
816   AM_RANGE(0x14, 0x14) AM_WRITE(lamps_b_w)   /* lamps b out */
813817
814818   AM_RANGE(0x30, 0x30) AM_DEVWRITE("crtc", mc6845_device, address_w)
815819   AM_RANGE(0x31, 0x31) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
src/mame/drivers/sshot.c
r14845r14846
167167
168168   UINT8      *m_videoram;
169169   tilemap_t   *m_tilemap;
170   DECLARE_WRITE8_MEMBER(supershot_vidram_w);
171   DECLARE_WRITE8_MEMBER(supershot_output0_w);
172   DECLARE_WRITE8_MEMBER(supershot_output1_w);
170173};
171174
172175/*************************************
r14845r14846
196199   return 0;
197200}
198201
199static WRITE8_HANDLER( supershot_vidram_w )
202WRITE8_MEMBER(supershot_state::supershot_vidram_w)
200203{
201   supershot_state *state = space->machine().driver_data<supershot_state>();
202204
203   state->m_videoram[offset] = data;
204   state->m_tilemap->mark_tile_dirty(offset);
205   m_videoram[offset] = data;
206   m_tilemap->mark_tile_dirty(offset);
205207}
206208
207209/*************************************
r14845r14846
210212 *
211213 *************************************/
212214
213static WRITE8_HANDLER(supershot_output0_w)
215WRITE8_MEMBER(supershot_state::supershot_output0_w)
214216{
215217   /*
216218        bit     signal      description
r14845r14846
226228    */
227229}
228230
229static WRITE8_HANDLER(supershot_output1_w)
231WRITE8_MEMBER(supershot_state::supershot_output1_w)
230232{
231233   /*
232234        bit     signal      description
r14845r14846
250252
251253static ADDRESS_MAP_START( supershot_map, AS_PROGRAM, 8, supershot_state )
252254   AM_RANGE(0x0000, 0x1fff) AM_ROM
253   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE_LEGACY(supershot_vidram_w ) AM_BASE(m_videoram )
255   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(supershot_vidram_w ) AM_BASE(m_videoram )
254256   AM_RANGE(0x4100, 0x41ff) AM_RAM
255257   AM_RANGE(0x4200, 0x4200) AM_READ_PORT("GUNX")
256258   AM_RANGE(0x4201, 0x4201) AM_READ_PORT("GUNY")
257259   AM_RANGE(0x4202, 0x4202) AM_READ_PORT("IN0")
258260   AM_RANGE(0x4203, 0x4203) AM_READ_PORT("DSW")
259   AM_RANGE(0x4206, 0x4206) AM_WRITE_LEGACY(supershot_output0_w)
260   AM_RANGE(0x4207, 0x4207) AM_WRITE_LEGACY(supershot_output1_w)
261   AM_RANGE(0x4206, 0x4206) AM_WRITE(supershot_output0_w)
262   AM_RANGE(0x4207, 0x4207) AM_WRITE(supershot_output1_w)
261263ADDRESS_MAP_END
262264
263265/*************************************
src/mame/drivers/gstream.c
r14845r14846
159159   required_device<e132xt_device> m_maincpu;
160160   required_device<okim6295_device> m_oki_1;
161161   required_device<okim6295_device> m_oki_2;
162   DECLARE_WRITE32_MEMBER(gstream_palette_w);
163   DECLARE_WRITE32_MEMBER(gstream_vram_w);
164   DECLARE_WRITE32_MEMBER(gstream_tilemap1_scrollx_w);
165   DECLARE_WRITE32_MEMBER(gstream_tilemap1_scrolly_w);
166   DECLARE_WRITE32_MEMBER(gstream_tilemap2_scrollx_w);
167   DECLARE_WRITE32_MEMBER(gstream_tilemap2_scrolly_w);
168   DECLARE_WRITE32_MEMBER(gstream_tilemap3_scrollx_w);
169   DECLARE_WRITE32_MEMBER(gstream_tilemap3_scrolly_w);
170   DECLARE_WRITE32_MEMBER(gstream_oki_banking_w);
171   DECLARE_WRITE32_MEMBER(gstream_oki_4040_w);
172   DECLARE_READ32_MEMBER(gstream_speedup_r);
162173};
163174
164175
r14845r14846
192203}
193204
194205
195static WRITE32_HANDLER( gstream_palette_w )
206WRITE32_MEMBER(gstream_state::gstream_palette_w)
196207{
197   gstream_state *state = space->machine().driver_data<gstream_state>();
198   COMBINE_DATA(&state->m_paletteram[offset]);
208   COMBINE_DATA(&m_paletteram[offset]);
199209
200   palette_set_color_rgb(space->machine(), offset * 2, pal5bit(state->m_paletteram[offset] >> (0 + 16)),
201                           pal5bit(state->m_paletteram[offset] >> (6 + 16)),
202                           pal5bit(state->m_paletteram[offset] >> (11 + 16)));
210   palette_set_color_rgb(machine(), offset * 2, pal5bit(m_paletteram[offset] >> (0 + 16)),
211                           pal5bit(m_paletteram[offset] >> (6 + 16)),
212                           pal5bit(m_paletteram[offset] >> (11 + 16)));
203213
204214
205   palette_set_color_rgb(space->machine(),offset * 2 + 1,pal5bit(state->m_paletteram[offset] >> (0)),
206                           pal5bit(state->m_paletteram[offset] >> (6)),
207                           pal5bit(state->m_paletteram[offset] >> (11)));
215   palette_set_color_rgb(machine(),offset * 2 + 1,pal5bit(m_paletteram[offset] >> (0)),
216                           pal5bit(m_paletteram[offset] >> (6)),
217                           pal5bit(m_paletteram[offset] >> (11)));
208218}
209219
210static WRITE32_HANDLER( gstream_vram_w )
220WRITE32_MEMBER(gstream_state::gstream_vram_w)
211221{
212   gstream_state *state = space->machine().driver_data<gstream_state>();
213   COMBINE_DATA(&state->m_vram[offset]);
222   COMBINE_DATA(&m_vram[offset]);
214223
215224   if (ACCESSING_BITS_24_31)
216225   {
217226      if (offset >= 0x000 / 4 && offset < 0x400 / 4)
218227      {
219         state->m_tilemap1->mark_tile_dirty(offset - (0x000 / 4));
228         m_tilemap1->mark_tile_dirty(offset - (0x000 / 4));
220229      }
221230      else if (offset >= 0x400 / 4 && offset < 0x800 / 4)
222231      {
223         state->m_tilemap2->mark_tile_dirty(offset - (0x400 / 4));
232         m_tilemap2->mark_tile_dirty(offset - (0x400 / 4));
224233      }
225234      else if (offset >= 0x800 / 4 && offset < 0xc00 / 4)
226235      {
227         state->m_tilemap3->mark_tile_dirty(offset - (0x800 / 4));
236         m_tilemap3->mark_tile_dirty(offset - (0x800 / 4));
228237      }
229238   }
230239}
231240
232static WRITE32_HANDLER( gstream_tilemap1_scrollx_w )
241WRITE32_MEMBER(gstream_state::gstream_tilemap1_scrollx_w)
233242{
234   gstream_state *state = space->machine().driver_data<gstream_state>();
235   state->m_tmap1_scrollx = data;
243   m_tmap1_scrollx = data;
236244}
237245
238static WRITE32_HANDLER( gstream_tilemap1_scrolly_w )
246WRITE32_MEMBER(gstream_state::gstream_tilemap1_scrolly_w)
239247{
240   gstream_state *state = space->machine().driver_data<gstream_state>();
241   state->m_tmap1_scrolly = data;
248   m_tmap1_scrolly = data;
242249}
243250
244static WRITE32_HANDLER( gstream_tilemap2_scrollx_w )
251WRITE32_MEMBER(gstream_state::gstream_tilemap2_scrollx_w)
245252{
246   gstream_state *state = space->machine().driver_data<gstream_state>();
247   state->m_tmap2_scrollx = data;
253   m_tmap2_scrollx = data;
248254}
249255
250static WRITE32_HANDLER( gstream_tilemap2_scrolly_w )
256WRITE32_MEMBER(gstream_state::gstream_tilemap2_scrolly_w)
251257{
252   gstream_state *state = space->machine().driver_data<gstream_state>();
253   state->m_tmap2_scrolly = data;
258   m_tmap2_scrolly = data;
254259}
255260
256static WRITE32_HANDLER( gstream_tilemap3_scrollx_w )
261WRITE32_MEMBER(gstream_state::gstream_tilemap3_scrollx_w)
257262{
258   gstream_state *state = space->machine().driver_data<gstream_state>();
259   state->m_tmap3_scrollx = data;
263   m_tmap3_scrollx = data;
260264}
261265
262static WRITE32_HANDLER( gstream_tilemap3_scrolly_w )
266WRITE32_MEMBER(gstream_state::gstream_tilemap3_scrolly_w)
263267{
264   gstream_state *state = space->machine().driver_data<gstream_state>();
265   state->m_tmap3_scrolly = data;
268   m_tmap3_scrolly = data;
266269}
267270
268271static ADDRESS_MAP_START( gstream_32bit_map, AS_PROGRAM, 32, gstream_state )
269272   AM_RANGE(0x00000000, 0x003FFFFF) AM_RAM AM_BASE(m_workram) // work ram
270273//  AM_RANGE(0x40000000, 0x40FFFFFF) AM_RAM // ?? lots of data gets copied here if present, but game runs without it??
271   AM_RANGE(0x80000000, 0x80003FFF) AM_RAM_WRITE_LEGACY(gstream_vram_w) AM_BASE(m_vram) // video ram
274   AM_RANGE(0x80000000, 0x80003FFF) AM_RAM_WRITE(gstream_vram_w) AM_BASE(m_vram) // video ram
272275   AM_RANGE(0x4E000000, 0x4E1FFFFF) AM_ROM AM_REGION("user2",0) // main game rom
273   AM_RANGE(0x4F000000, 0x4F000003) AM_WRITE_LEGACY(gstream_tilemap3_scrollx_w)
274   AM_RANGE(0x4F200000, 0x4F200003) AM_WRITE_LEGACY(gstream_tilemap3_scrolly_w)
275   AM_RANGE(0x4F400000, 0x4F406FFF) AM_RAM_WRITE_LEGACY(gstream_palette_w) AM_BASE(m_paletteram)
276   AM_RANGE(0x4F800000, 0x4F800003) AM_WRITE_LEGACY(gstream_tilemap1_scrollx_w)
277   AM_RANGE(0x4FA00000, 0x4FA00003) AM_WRITE_LEGACY(gstream_tilemap1_scrolly_w)
278   AM_RANGE(0x4FC00000, 0x4FC00003) AM_WRITE_LEGACY(gstream_tilemap2_scrollx_w)
279   AM_RANGE(0x4FE00000, 0x4FE00003) AM_WRITE_LEGACY(gstream_tilemap2_scrolly_w)
276   AM_RANGE(0x4F000000, 0x4F000003) AM_WRITE(gstream_tilemap3_scrollx_w)
277   AM_RANGE(0x4F200000, 0x4F200003) AM_WRITE(gstream_tilemap3_scrolly_w)
278   AM_RANGE(0x4F400000, 0x4F406FFF) AM_RAM_WRITE(gstream_palette_w) AM_BASE(m_paletteram)
279   AM_RANGE(0x4F800000, 0x4F800003) AM_WRITE(gstream_tilemap1_scrollx_w)
280   AM_RANGE(0x4FA00000, 0x4FA00003) AM_WRITE(gstream_tilemap1_scrolly_w)
281   AM_RANGE(0x4FC00000, 0x4FC00003) AM_WRITE(gstream_tilemap2_scrollx_w)
282   AM_RANGE(0x4FE00000, 0x4FE00003) AM_WRITE(gstream_tilemap2_scrolly_w)
280283   AM_RANGE(0xFFC00000, 0xFFC01FFF) AM_RAM AM_SHARE("nvram") // Backup RAM
281284   AM_RANGE(0xFFF80000, 0xFFFFFFFF) AM_ROM AM_REGION("user1",0) // boot rom
282285ADDRESS_MAP_END
283286
284static WRITE32_HANDLER( gstream_oki_banking_w )
287WRITE32_MEMBER(gstream_state::gstream_oki_banking_w)
285288{
286289   /* OKI BANKING  (still far from perfect, based on game behaviour)
287290
r14845r14846
314317
315318    Musics order is completely guessed but close to what the original PCB game should be */
316319
317   gstream_state *state = space->machine().driver_data<gstream_state>();
318320   static const int bank_table_0[16] = { -1, -1, -1, -1, -1, -1, 0, 0, -1, 6, 0, 5, -1, 0, 0, 0 };
319321   static const int bank_table_1[16] = { -1, -1, -1, -1, -1, -1, 2, 2, -1, 0, 0, 4, -1, 1, 1, 1 };
320322
321323   //popmessage("oki_0 banking value = %X\noki_1 banking value = %X\n",data & 0xf,(data >> 4) & 0xf);
322324
323   state->m_oki_bank_0 = bank_table_0[data & 0xf];
324   state->m_oki_bank_1 = bank_table_1[data & 0xf];      // (data >> 4) & 0xf ??
325   m_oki_bank_0 = bank_table_0[data & 0xf];
326   m_oki_bank_1 = bank_table_1[data & 0xf];      // (data >> 4) & 0xf ??
325327
326328   /* some values are already used in the table, so we force them manually */
327329   if ((data == 0x6f) || (data == 0x6e))
328330   {
329      state->m_oki_bank_0 = 0;   // level 3b-5a samples
330      state->m_oki_bank_1 = 6;      // level 3b-5a music
331      m_oki_bank_0 = 0;   // level 3b-5a samples
332      m_oki_bank_1 = 6;      // level 3b-5a music
331333   }
332334
333335   if (data == 0x9b)
334336   {
335      state->m_oki_bank_0 = 7;      // level 7 music
336      state->m_oki_bank_1 = 0;      // level 7 samples
337      m_oki_bank_0 = 7;      // level 7 music
338      m_oki_bank_1 = 0;      // level 7 samples
337339   }
338340
339341   if (data == 0x9f)
340342   {
341      state->m_oki_bank_0 = 0;      // end sequence samples
342      state->m_oki_bank_1 = 3;      // end sequence music
343      m_oki_bank_0 = 0;      // end sequence samples
344      m_oki_bank_1 = 3;      // end sequence music
343345   }
344346
345   state->m_oki_1->set_bank_base(state->m_oki_bank_0 * 0x40000);
346   state->m_oki_2->set_bank_base(state->m_oki_bank_1 * 0x40000);
347   m_oki_1->set_bank_base(m_oki_bank_0 * 0x40000);
348   m_oki_2->set_bank_base(m_oki_bank_1 * 0x40000);
347349}
348350
349static WRITE32_HANDLER( gstream_oki_4040_w )
351WRITE32_MEMBER(gstream_state::gstream_oki_4040_w)
350352{
351353   // data == 0 or data == 0x81
352354}
r14845r14846
355357   AM_RANGE(0x4000, 0x4003) AM_READ_PORT("IN0")
356358   AM_RANGE(0x4010, 0x4013) AM_READ_PORT("IN1")
357359   AM_RANGE(0x4020, 0x4023) AM_READ_PORT("IN2")   // extra coin switches etc
358   AM_RANGE(0x4030, 0x4033) AM_WRITE_LEGACY(gstream_oki_banking_w)   // oki banking
359   AM_RANGE(0x4040, 0x4043) AM_WRITE_LEGACY(gstream_oki_4040_w)   // ??
360   AM_RANGE(0x4030, 0x4033) AM_WRITE(gstream_oki_banking_w)   // oki banking
361   AM_RANGE(0x4040, 0x4043) AM_WRITE(gstream_oki_4040_w)   // ??
360362   AM_RANGE(0x4050, 0x4053) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x000000ff)   // music and samples
361363   AM_RANGE(0x4060, 0x4063) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x000000ff)   // music and samples
362364ADDRESS_MAP_END
r14845r14846
627629   ROM_LOAD( "gstream.nv", 0x000000, 0x2000, CRC(895d724b) SHA1(97941102f94923220d9beb270939f0ad9a40fe0e) )
628630ROM_END
629631
630static READ32_HANDLER( gstream_speedup_r )
632READ32_MEMBER(gstream_state::gstream_speedup_r)
631633{
632   gstream_state *state = space->machine().driver_data<gstream_state>();
633   if (state->m_maincpu->state(STATE_GENPC) == 0xc0001592)
634   if (m_maincpu->state(STATE_GENPC) == 0xc0001592)
634635   {
635      state->m_maincpu->eat_cycles(50);
636      m_maincpu->eat_cycles(50);
636637   }
637638
638   return state->m_workram[0xd1ee0 / 4];
639   return m_workram[0xd1ee0 / 4];
639640}
640641
641642static DRIVER_INIT( gstream )
642643{
643   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xd1ee0, 0xd1ee3, FUNC(gstream_speedup_r) );
644   gstream_state *state = machine.driver_data<gstream_state>();
645   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xd1ee0, 0xd1ee3, read32_delegate(FUNC(gstream_state::gstream_speedup_r), state));
644646}
645647
646648
src/mame/drivers/igs017.c
r14845r14846
7878   UINT8 *m_spriteram;
7979
8080   required_device<cpu_device> m_maincpu;
81   DECLARE_WRITE8_MEMBER(video_disable_w);
82   DECLARE_WRITE16_MEMBER(video_disable_lsb_w);
83   DECLARE_WRITE8_MEMBER(fg_w);
84   DECLARE_WRITE8_MEMBER(bg_w);
85   DECLARE_READ16_MEMBER(fg_lsb_r);
86   DECLARE_WRITE16_MEMBER(fg_lsb_w);
87   DECLARE_READ16_MEMBER(bg_lsb_r);
88   DECLARE_WRITE16_MEMBER(bg_lsb_w);
89   DECLARE_READ16_MEMBER(spriteram_lsb_r);
90   DECLARE_WRITE16_MEMBER(spriteram_lsb_w);
91   DECLARE_WRITE8_MEMBER(nmi_enable_w);
92   DECLARE_WRITE8_MEMBER(irq_enable_w);
93   DECLARE_WRITE8_MEMBER(input_select_w);
94   DECLARE_READ8_MEMBER(input_r);
95   DECLARE_WRITE16_MEMBER(mgcs_magic_w);
96   DECLARE_READ16_MEMBER(mgcs_magic_r);
97   DECLARE_WRITE16_MEMBER(irq1_enable_w);
98   DECLARE_WRITE16_MEMBER(irq2_enable_w);
99   DECLARE_WRITE16_MEMBER(mgcs_paletteram_w);
100   DECLARE_WRITE16_MEMBER(sdmg2_paletteram_w);
101   DECLARE_READ8_MEMBER(sdmg2_keys_r);
102   DECLARE_WRITE16_MEMBER(sdmg2_magic_w);
103   DECLARE_READ16_MEMBER(sdmg2_magic_r);
104   DECLARE_READ8_MEMBER(mgdh_keys_r);
105   DECLARE_WRITE16_MEMBER(mgdha_magic_w);
106   DECLARE_READ16_MEMBER(mgdha_magic_r);
107   DECLARE_WRITE8_MEMBER(tjsb_paletteram_w);
108   DECLARE_WRITE8_MEMBER(tjsb_output_w);
109   DECLARE_READ8_MEMBER(tjsb_input_r);
81110};
82111
83112
r14845r14846
86115                                Video Hardware
87116***************************************************************************/
88117
89static WRITE8_HANDLER( video_disable_w )
118WRITE8_MEMBER(igs017_state::video_disable_w)
90119{
91   igs017_state *state = space->machine().driver_data<igs017_state>();
92   state->m_video_disable = data & 1;
120   m_video_disable = data & 1;
93121   if (data & (~1))
94      logerror("PC %06X: unknown bits of video_disable written = %02x\n",cpu_get_pc(&space->device()),data);
122      logerror("PC %06X: unknown bits of video_disable written = %02x\n",cpu_get_pc(&space.device()),data);
95123//  popmessage("VIDEO %02X",data);
96124}
97static WRITE16_HANDLER( video_disable_lsb_w )
125WRITE16_MEMBER(igs017_state::video_disable_lsb_w)
98126{
99127   if (ACCESSING_BITS_0_7)
100128      video_disable_w(space,offset,data);
r14845r14846
124152   SET_TILE_INFO(0, code, COLOR(attr)+8, TILE_FLIPXY( attr >> 5 ));
125153}
126154
127static WRITE8_HANDLER( fg_w )
155WRITE8_MEMBER(igs017_state::fg_w)
128156{
129   igs017_state *state = space->machine().driver_data<igs017_state>();
130   state->m_fg_videoram[offset] = data;
131   state->m_fg_tilemap->mark_tile_dirty(offset/4);
157   m_fg_videoram[offset] = data;
158   m_fg_tilemap->mark_tile_dirty(offset/4);
132159}
133160
134static WRITE8_HANDLER( bg_w )
161WRITE8_MEMBER(igs017_state::bg_w)
135162{
136   igs017_state *state = space->machine().driver_data<igs017_state>();
137   state->m_bg_videoram[offset] = data;
138   state->m_bg_tilemap->mark_tile_dirty(offset/4);
163   m_bg_videoram[offset] = data;
164   m_bg_tilemap->mark_tile_dirty(offset/4);
139165}
140166
141167// 16-bit handlers for an 8-bit chip
142168
143static READ16_HANDLER( fg_lsb_r )
169READ16_MEMBER(igs017_state::fg_lsb_r)
144170{
145   igs017_state *state = space->machine().driver_data<igs017_state>();
146   return state->m_fg_videoram[offset];
171   return m_fg_videoram[offset];
147172}
148static WRITE16_HANDLER( fg_lsb_w )
173WRITE16_MEMBER(igs017_state::fg_lsb_w)
149174{
150175   if (ACCESSING_BITS_0_7)
151176      fg_w(space,offset,data);
152177}
153178
154static READ16_HANDLER( bg_lsb_r )
179READ16_MEMBER(igs017_state::bg_lsb_r)
155180{
156   igs017_state *state = space->machine().driver_data<igs017_state>();
157   return state->m_bg_videoram[offset];
181   return m_bg_videoram[offset];
158182}
159static WRITE16_HANDLER( bg_lsb_w )
183WRITE16_MEMBER(igs017_state::bg_lsb_w)
160184{
161185   if (ACCESSING_BITS_0_7)
162186      bg_w(space,offset,data);
163187}
164188
165static READ16_HANDLER( spriteram_lsb_r )
189READ16_MEMBER(igs017_state::spriteram_lsb_r)
166190{
167   igs017_state *state = space->machine().driver_data<igs017_state>();
168   return state->m_spriteram[offset];
191   return m_spriteram[offset];
169192}
170static WRITE16_HANDLER( spriteram_lsb_w )
193WRITE16_MEMBER(igs017_state::spriteram_lsb_w)
171194{
172   igs017_state *state = space->machine().driver_data<igs017_state>();
173195   if (ACCESSING_BITS_0_7)
174      state->m_spriteram[offset] = data;
196      m_spriteram[offset] = data;
175197}
176198
177199
r14845r14846
10991121   AM_RANGE( 0x10000, 0x3ffff ) AM_ROM
11001122ADDRESS_MAP_END
11011123
1102static WRITE8_HANDLER( nmi_enable_w )
1124WRITE8_MEMBER(igs017_state::nmi_enable_w)
11031125{
1104   igs017_state *state = space->machine().driver_data<igs017_state>();
1105   state->m_nmi_enable = data & 1;
1126   m_nmi_enable = data & 1;
11061127   if (data & (~1))
1107      logerror("PC %06X: nmi_enable = %02x\n",cpu_get_pc(&space->device()),data);
1128      logerror("PC %06X: nmi_enable = %02x\n",cpu_get_pc(&space.device()),data);
11081129}
11091130
1110static WRITE8_HANDLER( irq_enable_w )
1131WRITE8_MEMBER(igs017_state::irq_enable_w)
11111132{
1112   igs017_state *state = space->machine().driver_data<igs017_state>();
1113   state->m_irq_enable = data & 1;
1133   m_irq_enable = data & 1;
11141134   if (data & (~1))
1115      logerror("PC %06X: irq_enable = %02x\n",cpu_get_pc(&space->device()),data);
1135      logerror("PC %06X: irq_enable = %02x\n",cpu_get_pc(&space.device()),data);
11161136}
11171137
1118static WRITE8_HANDLER( input_select_w )
1138WRITE8_MEMBER(igs017_state::input_select_w)
11191139{
1120   igs017_state *state = space->machine().driver_data<igs017_state>();
1121   state->m_input_select = data;
1140   m_input_select = data;
11221141}
11231142
1124static READ8_HANDLER( input_r )
1143READ8_MEMBER(igs017_state::input_r)
11251144{
1126   igs017_state *state = space->machine().driver_data<igs017_state>();
1127   switch (state->m_input_select)
1145   switch (m_input_select)
11281146   {
1129      case 0x00:   return input_port_read(space->machine(), "PLAYER1");
1130      case 0x01:   return input_port_read(space->machine(), "PLAYER2");
1131      case 0x02:   return input_port_read(space->machine(), "COINS");
1147      case 0x00:   return input_port_read(machine(), "PLAYER1");
1148      case 0x01:   return input_port_read(machine(), "PLAYER2");
1149      case 0x02:   return input_port_read(machine(), "COINS");
11321150
11331151      case 0x03:   return 01;
11341152
r14845r14846
11551173      case 0x34:   return 0x32;
11561174
11571175      default:
1158         logerror("PC %06X: input %02x read\n",cpu_get_pc(&space->device()),state->m_input_select);
1176         logerror("PC %06X: input %02x read\n",cpu_get_pc(&space.device()),m_input_select);
11591177         return 0xff;
11601178   }
11611179}
r14845r14846
11701188//  AM_RANGE(0x200a, 0x200a) AM_WRITENOP
11711189
11721190   AM_RANGE( 0x2010, 0x2013 ) AM_DEVREAD_LEGACY("ppi8255", ppi8255_r)
1173   AM_RANGE( 0x2012, 0x2012 ) AM_WRITE_LEGACY(video_disable_w )
1191   AM_RANGE( 0x2012, 0x2012 ) AM_WRITE(video_disable_w )
11741192
1175   AM_RANGE( 0x2014, 0x2014 ) AM_WRITE_LEGACY(nmi_enable_w )
1176   AM_RANGE( 0x2015, 0x2015 ) AM_WRITE_LEGACY(irq_enable_w )
1193   AM_RANGE( 0x2014, 0x2014 ) AM_WRITE(nmi_enable_w )
1194   AM_RANGE( 0x2015, 0x2015 ) AM_WRITE(irq_enable_w )
11771195
1178   AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE_LEGACY(fg_w ) AM_BASE(m_fg_videoram )
1179   AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE_LEGACY(bg_w ) AM_BASE(m_bg_videoram )
1196   AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE(fg_w ) AM_BASE(m_fg_videoram )
1197   AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE(bg_w ) AM_BASE(m_bg_videoram )
11801198
1181   AM_RANGE( 0x8000, 0x8000 ) AM_WRITE_LEGACY(input_select_w )
1182   AM_RANGE( 0x8001, 0x8001 ) AM_READ_LEGACY(input_r )
1199   AM_RANGE( 0x8000, 0x8000 ) AM_WRITE(input_select_w )
1200   AM_RANGE( 0x8001, 0x8001 ) AM_READ(input_r )
11831201
11841202   AM_RANGE( 0x9000, 0x9000 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
11851203
r14845r14846
11921210// mgcs
11931211
11941212
1195static WRITE16_HANDLER( mgcs_magic_w )
1213WRITE16_MEMBER(igs017_state::mgcs_magic_w)
11961214{
1197   igs017_state *state = space->machine().driver_data<igs017_state>();
1198   COMBINE_DATA(&state->m_igs_magic[offset]);
1215   COMBINE_DATA(&m_igs_magic[offset]);
11991216
12001217   if (offset == 0)
12011218      return;
12021219
1203   switch(state->m_igs_magic[0])
1220   switch(m_igs_magic[0])
12041221   {
12051222      case 0x00:
12061223         if (ACCESSING_BITS_0_7)
12071224         {
1208            state->m_input_select = data & 0xff;
1225            m_input_select = data & 0xff;
12091226         }
12101227
1211         if ( state->m_input_select & ~0xf8 )
1212            logerror("%06x: warning, unknown bits written in input_select = %02x\n", cpu_get_pc(&space->device()), state->m_input_select);
1228         if ( m_input_select & ~0xf8 )
1229            logerror("%06x: warning, unknown bits written in input_select = %02x\n", cpu_get_pc(&space.device()), m_input_select);
12131230         break;
12141231
12151232      case 0x01:
12161233         if (ACCESSING_BITS_0_7)
12171234         {
1218            state->m_scramble_data = data & 0xff;
1235            m_scramble_data = data & 0xff;
12191236         }
12201237         break;
12211238
r14845r14846
12231240      // case 0x03: ?
12241241
12251242      default:
1226         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0], data);
1243         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0], data);
12271244   }
12281245}
12291246
1230static READ16_HANDLER( mgcs_magic_r )
1247READ16_MEMBER(igs017_state::mgcs_magic_r)
12311248{
1232   igs017_state *state = space->machine().driver_data<igs017_state>();
1233   switch(state->m_igs_magic[0])
1249   switch(m_igs_magic[0])
12341250   {
12351251      case 0x01:
1236         return BITSWAP8(state->m_scramble_data, 4,5,6,7, 0,1,2,3);
1252         return BITSWAP8(m_scramble_data, 4,5,6,7, 0,1,2,3);
12371253
12381254      default:
1239         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0]);
1255         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0]);
12401256         break;
12411257   }
12421258
r14845r14846
12561272   return 0xff;
12571273}
12581274
1259static WRITE16_HANDLER( irq1_enable_w )
1275WRITE16_MEMBER(igs017_state::irq1_enable_w)
12601276{
1261   igs017_state *state = space->machine().driver_data<igs017_state>();
12621277   if (ACCESSING_BITS_0_7)
1263      state->m_irq1_enable = data & 1;
1278      m_irq1_enable = data & 1;
12641279
12651280   if (data != 0 && data != 0xff)
1266      logerror("PC %06X: irq1_enable = %04x\n",cpu_get_pc(&space->device()),data);
1281      logerror("PC %06X: irq1_enable = %04x\n",cpu_get_pc(&space.device()),data);
12671282}
12681283
1269static WRITE16_HANDLER( irq2_enable_w )
1284WRITE16_MEMBER(igs017_state::irq2_enable_w)
12701285{
1271   igs017_state *state = space->machine().driver_data<igs017_state>();
12721286   if (ACCESSING_BITS_0_7)
1273      state->m_irq2_enable = data & 1;
1287      m_irq2_enable = data & 1;
12741288
12751289   if (data != 0 && data != 0xff)
1276      logerror("PC %06X: irq2_enable = %04x\n",cpu_get_pc(&space->device()),data);
1290      logerror("PC %06X: irq2_enable = %04x\n",cpu_get_pc(&space.device()),data);
12771291}
12781292
1279static WRITE16_HANDLER( mgcs_paletteram_w )
1293WRITE16_MEMBER(igs017_state::mgcs_paletteram_w)
12801294{
1281   COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
1295   COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
12821296
1283   int bgr = ((space->machine().generic.paletteram.u16[offset/2*2+0] & 0xff) << 8) | (space->machine().generic.paletteram.u16[offset/2*2+1] & 0xff);
1297   int bgr = ((machine().generic.paletteram.u16[offset/2*2+0] & 0xff) << 8) | (machine().generic.paletteram.u16[offset/2*2+1] & 0xff);
12841298
12851299   // bitswap
12861300   bgr = BITSWAP16(bgr, 7,8,9,2,14,3,13,15,12,11,10,0,1,4,5,6);
12871301
1288   palette_set_color_rgb(space->machine(), offset/2, pal5bit(bgr >> 0), pal5bit(bgr >> 5), pal5bit(bgr >> 10));
1302   palette_set_color_rgb(machine(), offset/2, pal5bit(bgr >> 0), pal5bit(bgr >> 5), pal5bit(bgr >> 10));
12891303}
12901304
12911305static ADDRESS_MAP_START( mgcs, AS_PROGRAM, 16, igs017_state )
12921306   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
12931307   AM_RANGE( 0x300000, 0x303fff ) AM_RAM
1294   AM_RANGE( 0x49c000, 0x49c003 ) AM_WRITE_LEGACY(mgcs_magic_w )
1295   AM_RANGE( 0x49c002, 0x49c003 ) AM_READ_LEGACY(mgcs_magic_r )
1296   AM_RANGE( 0xa02000, 0xa02fff ) AM_READWRITE_LEGACY(spriteram_lsb_r, spriteram_lsb_w ) AM_BASE(m_spriteram)
1297   AM_RANGE( 0xa03000, 0xa037ff ) AM_RAM_WRITE_LEGACY(mgcs_paletteram_w ) AM_BASE_GENERIC( paletteram )
1308   AM_RANGE( 0x49c000, 0x49c003 ) AM_WRITE(mgcs_magic_w )
1309   AM_RANGE( 0x49c002, 0x49c003 ) AM_READ(mgcs_magic_r )
1310   AM_RANGE( 0xa02000, 0xa02fff ) AM_READWRITE(spriteram_lsb_r, spriteram_lsb_w ) AM_BASE(m_spriteram)
1311   AM_RANGE( 0xa03000, 0xa037ff ) AM_RAM_WRITE(mgcs_paletteram_w ) AM_BASE_GENERIC( paletteram )
12981312   AM_RANGE( 0xa04020, 0xa04027 ) AM_DEVREAD8_LEGACY("ppi8255", ppi8255_r, 0x00ff )
1299   AM_RANGE( 0xa04024, 0xa04025 ) AM_WRITE_LEGACY(video_disable_lsb_w )
1300   AM_RANGE( 0xa04028, 0xa04029 ) AM_WRITE_LEGACY(irq2_enable_w )
1301   AM_RANGE( 0xa0402a, 0xa0402b ) AM_WRITE_LEGACY(irq1_enable_w )
1302   AM_RANGE( 0xa08000, 0xa0bfff ) AM_READWRITE_LEGACY(fg_lsb_r, fg_lsb_w ) AM_BASE(m_fg_videoram )
1303   AM_RANGE( 0xa0c000, 0xa0ffff ) AM_READWRITE_LEGACY(bg_lsb_r, bg_lsb_w ) AM_BASE(m_bg_videoram )
1313   AM_RANGE( 0xa04024, 0xa04025 ) AM_WRITE(video_disable_lsb_w )
1314   AM_RANGE( 0xa04028, 0xa04029 ) AM_WRITE(irq2_enable_w )
1315   AM_RANGE( 0xa0402a, 0xa0402b ) AM_WRITE(irq1_enable_w )
1316   AM_RANGE( 0xa08000, 0xa0bfff ) AM_READWRITE(fg_lsb_r, fg_lsb_w ) AM_BASE(m_fg_videoram )
1317   AM_RANGE( 0xa0c000, 0xa0ffff ) AM_READWRITE(bg_lsb_r, bg_lsb_w ) AM_BASE(m_bg_videoram )
13041318   AM_RANGE( 0xa12000, 0xa12001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
13051319   // oki banking through protection (code at $1a350)?
13061320ADDRESS_MAP_END
r14845r14846
13081322
13091323// sdmg2
13101324
1311static WRITE16_HANDLER( sdmg2_paletteram_w )
1325WRITE16_MEMBER(igs017_state::sdmg2_paletteram_w)
13121326{
1313   COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
1327   COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
13141328
1315   int bgr = ((space->machine().generic.paletteram.u16[offset/2*2+1] & 0xff) << 8) | (space->machine().generic.paletteram.u16[offset/2*2+0] & 0xff);
1329   int bgr = ((machine().generic.paletteram.u16[offset/2*2+1] & 0xff) << 8) | (machine().generic.paletteram.u16[offset/2*2+0] & 0xff);
13161330
1317   palette_set_color_rgb(space->machine(), offset/2, pal5bit(bgr >> 0), pal5bit(bgr >> 5), pal5bit(bgr >> 10));
1331   palette_set_color_rgb(machine(), offset/2, pal5bit(bgr >> 0), pal5bit(bgr >> 5), pal5bit(bgr >> 10));
13181332}
13191333
1320static READ8_HANDLER( sdmg2_keys_r )
1334READ8_MEMBER(igs017_state::sdmg2_keys_r)
13211335{
1322   igs017_state *state = space->machine().driver_data<igs017_state>();
1323   if (~state->m_input_select & 0x01)   return input_port_read(space->machine(), "KEY0");
1324   if (~state->m_input_select & 0x02)   return input_port_read(space->machine(), "KEY1");
1325   if (~state->m_input_select & 0x04)   return input_port_read(space->machine(), "KEY2");
1326   if (~state->m_input_select & 0x08)   return input_port_read(space->machine(), "KEY3");
1327   if (~state->m_input_select & 0x10)   return input_port_read(space->machine(), "KEY4");
1336   if (~m_input_select & 0x01)   return input_port_read(machine(), "KEY0");
1337   if (~m_input_select & 0x02)   return input_port_read(machine(), "KEY1");
1338   if (~m_input_select & 0x04)   return input_port_read(machine(), "KEY2");
1339   if (~m_input_select & 0x08)   return input_port_read(machine(), "KEY3");
1340   if (~m_input_select & 0x10)   return input_port_read(machine(), "KEY4");
13281341
1329   if (state->m_input_select == 0x1f)   return input_port_read(space->machine(), "KEY0");   // in joystick mode
1342   if (m_input_select == 0x1f)   return input_port_read(machine(), "KEY0");   // in joystick mode
13301343
1331   logerror("%s: warning, reading key with input_select = %02x\n", space->machine().describe_context(), state->m_input_select);
1344   logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
13321345   return 0xff;
13331346}
13341347
1335static WRITE16_HANDLER( sdmg2_magic_w )
1348WRITE16_MEMBER(igs017_state::sdmg2_magic_w)
13361349{
1337   igs017_state *state = space->machine().driver_data<igs017_state>();
1338   COMBINE_DATA(&state->m_igs_magic[offset]);
1350   COMBINE_DATA(&m_igs_magic[offset]);
13391351
13401352   if (offset == 0)
13411353      return;
13421354
1343   switch(state->m_igs_magic[0])
1355   switch(m_igs_magic[0])
13441356   {
13451357      // case 0x00: ? 0x80
13461358
13471359      case 0x01:
13481360         if (ACCESSING_BITS_0_7)
13491361         {
1350            state->m_input_select   =   data & 0x1f;
1351            coin_counter_w(space->machine(), 0,   data & 0x20);
1362            m_input_select   =   data & 0x1f;
1363            coin_counter_w(machine(), 0,   data & 0x20);
13521364            //  coin out        data & 0x40
1353            state->m_hopper         =   data & 0x80;
1365            m_hopper         =   data & 0x80;
13541366         }
13551367         break;
13561368
13571369      case 0x02:
13581370         if (ACCESSING_BITS_0_7)
13591371         {
1360            okim6295_device *oki = space->machine().device<okim6295_device>("oki");
1372            okim6295_device *oki = machine().device<okim6295_device>("oki");
13611373            oki->set_bank_base((data & 0x80) ? 0x40000 : 0);
13621374         }
13631375         break;
13641376
13651377      default:
1366         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0], data);
1378         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0], data);
13671379   }
13681380}
13691381
1370static READ16_HANDLER( sdmg2_magic_r )
1382READ16_MEMBER(igs017_state::sdmg2_magic_r)
13711383{
1372   igs017_state *state = space->machine().driver_data<igs017_state>();
1373   switch(state->m_igs_magic[0])
1384   switch(m_igs_magic[0])
13741385   {
13751386      case 0x00:
13761387      {
1377         UINT16 hopper_bit = (state->m_hopper && ((space->machine().primary_screen->frame_number()/10)&1)) ? 0x0000 : 0x0001;
1378         return input_port_read(space->machine(), "COINS") | hopper_bit;
1388         UINT16 hopper_bit = (m_hopper && ((machine().primary_screen->frame_number()/10)&1)) ? 0x0000 : 0x0001;
1389         return input_port_read(machine(), "COINS") | hopper_bit;
13791390      }
13801391
13811392      case 0x02:
13821393         return sdmg2_keys_r(space, 0);
13831394
13841395      default:
1385         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0]);
1396         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0]);
13861397         break;
13871398   }
13881399
r14845r14846
13921403static ADDRESS_MAP_START( sdmg2, AS_PROGRAM, 16, igs017_state )
13931404   AM_RANGE(0x000000, 0x07ffff) AM_ROM
13941405   AM_RANGE(0x1f0000, 0x1fffff) AM_RAM
1395   AM_RANGE(0x202000, 0x202fff) AM_READWRITE_LEGACY(spriteram_lsb_r, spriteram_lsb_w ) AM_BASE(m_spriteram)
1396   AM_RANGE(0x203000, 0x2037ff) AM_RAM_WRITE_LEGACY(sdmg2_paletteram_w ) AM_BASE_GENERIC( paletteram )
1406   AM_RANGE(0x202000, 0x202fff) AM_READWRITE(spriteram_lsb_r, spriteram_lsb_w ) AM_BASE(m_spriteram)
1407   AM_RANGE(0x203000, 0x2037ff) AM_RAM_WRITE(sdmg2_paletteram_w ) AM_BASE_GENERIC( paletteram )
13971408   AM_RANGE(0x204020, 0x204027) AM_DEVREAD8_LEGACY("ppi8255", ppi8255_r, 0x00ff )
1398   AM_RANGE(0x204024, 0x204025) AM_WRITE_LEGACY(video_disable_lsb_w )
1399   AM_RANGE(0x204028, 0x204029) AM_WRITE_LEGACY(irq2_enable_w )
1400   AM_RANGE(0x20402a, 0x20402b) AM_WRITE_LEGACY(irq1_enable_w )
1401   AM_RANGE(0x208000, 0x20bfff) AM_READWRITE_LEGACY(fg_lsb_r, fg_lsb_w ) AM_BASE(m_fg_videoram )
1402   AM_RANGE(0x20c000, 0x20ffff) AM_READWRITE_LEGACY(bg_lsb_r, bg_lsb_w ) AM_BASE(m_bg_videoram )
1409   AM_RANGE(0x204024, 0x204025) AM_WRITE(video_disable_lsb_w )
1410   AM_RANGE(0x204028, 0x204029) AM_WRITE(irq2_enable_w )
1411   AM_RANGE(0x20402a, 0x20402b) AM_WRITE(irq1_enable_w )
1412   AM_RANGE(0x208000, 0x20bfff) AM_READWRITE(fg_lsb_r, fg_lsb_w ) AM_BASE(m_fg_videoram )
1413   AM_RANGE(0x20c000, 0x20ffff) AM_READWRITE(bg_lsb_r, bg_lsb_w ) AM_BASE(m_bg_videoram )
14031414   AM_RANGE(0x210000, 0x210001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
1404   AM_RANGE(0x300000, 0x300003) AM_WRITE_LEGACY(sdmg2_magic_w )
1405   AM_RANGE(0x300002, 0x300003) AM_READ_LEGACY(sdmg2_magic_r )
1415   AM_RANGE(0x300000, 0x300003) AM_WRITE(sdmg2_magic_w )
1416   AM_RANGE(0x300002, 0x300003) AM_READ(sdmg2_magic_r )
14061417ADDRESS_MAP_END
14071418
14081419
14091420// mgdh, mgdha
14101421
1411static READ8_HANDLER( mgdh_keys_r )
1422READ8_MEMBER(igs017_state::mgdh_keys_r)
14121423{
1413   igs017_state *state = space->machine().driver_data<igs017_state>();
1414   if (~state->m_input_select & 0x04)   return input_port_read(space->machine(), "KEY0");
1415   if (~state->m_input_select & 0x08)   return input_port_read(space->machine(), "KEY1");
1416   if (~state->m_input_select & 0x10)   return input_port_read(space->machine(), "KEY2");
1417   if (~state->m_input_select & 0x20)   return input_port_read(space->machine(), "KEY3");
1418   if (~state->m_input_select & 0x40)   return input_port_read(space->machine(), "KEY4");
1424   if (~m_input_select & 0x04)   return input_port_read(machine(), "KEY0");
1425   if (~m_input_select & 0x08)   return input_port_read(machine(), "KEY1");
1426   if (~m_input_select & 0x10)   return input_port_read(machine(), "KEY2");
1427   if (~m_input_select & 0x20)   return input_port_read(machine(), "KEY3");
1428   if (~m_input_select & 0x40)   return input_port_read(machine(), "KEY4");
14191429
1420   if ((state->m_input_select & 0xfc) == 0xfc)   return input_port_read(space->machine(), "DSW1");
1430   if ((m_input_select & 0xfc) == 0xfc)   return input_port_read(machine(), "DSW1");
14211431
1422   logerror("%s: warning, reading key with input_select = %02x\n", space->machine().describe_context(), state->m_input_select);
1432   logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
14231433   return 0xff;
14241434}
14251435
1426static WRITE16_HANDLER( mgdha_magic_w )
1436WRITE16_MEMBER(igs017_state::mgdha_magic_w)
14271437{
1428   igs017_state *state = space->machine().driver_data<igs017_state>();
1429   COMBINE_DATA(&state->m_igs_magic[offset]);
1438   COMBINE_DATA(&m_igs_magic[offset]);
14301439
14311440   if (offset == 0)
14321441      return;
14331442
1434   switch(state->m_igs_magic[0])
1443   switch(m_igs_magic[0])
14351444   {
14361445      case 0x00:
14371446         if (ACCESSING_BITS_0_7)
14381447         {
14391448            //  coin out     data & 0x40
1440            coin_counter_w(space->machine(), 0, data & 0x80);
1449            coin_counter_w(machine(), 0, data & 0x80);
14411450         }
14421451
14431452         if ( data & ~0xc0 )
1444            logerror("%06x: warning, unknown bits written to igs_magic 00 = %02x\n", cpu_get_pc(&space->device()), data);
1453            logerror("%06x: warning, unknown bits written to igs_magic 00 = %02x\n", cpu_get_pc(&space.device()), data);
14451454
14461455         break;
14471456
14481457      case 0x01:
14491458         if (ACCESSING_BITS_0_7)
14501459         {
1451            state->m_input_select = data & 0xff;
1452            state->m_hopper = data & 0x01;
1460            m_input_select = data & 0xff;
1461            m_hopper = data & 0x01;
14531462         }
14541463
1455         if ( state->m_input_select & ~0xfd )
1456            logerror("%06x: warning, unknown bits written in input_select = %02x\n", cpu_get_pc(&space->device()), state->m_input_select);
1464         if ( m_input_select & ~0xfd )
1465            logerror("%06x: warning, unknown bits written in input_select = %02x\n", cpu_get_pc(&space.device()), m_input_select);
14571466
14581467         break;
14591468
r14845r14846
14611470         if (ACCESSING_BITS_0_7)
14621471         {
14631472            // bit 7?
1464            okim6295_device *oki = space->machine().device<okim6295_device>("oki");
1473            okim6295_device *oki = machine().device<okim6295_device>("oki");
14651474            oki->set_bank_base((data & 0x40) ? 0x40000 : 0);
14661475         }
14671476         break;
r14845r14846
14781487            04ac10: warning, writing to igs_magic 06 = ff
14791488            04ac20: warning, writing to igs_magic 07 = 3f
14801489*/
1481         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0], data);
1490         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0], data);
14821491   }
14831492}
14841493
1485static READ16_HANDLER( mgdha_magic_r )
1494READ16_MEMBER(igs017_state::mgdha_magic_r)
14861495{
1487   igs017_state *state = space->machine().driver_data<igs017_state>();
1488   switch(state->m_igs_magic[0])
1496   switch(m_igs_magic[0])
14891497   {
14901498      case 0x00:
14911499         return mgdh_keys_r(space, 0);
14921500
14931501      case 0x01:
1494         return input_port_read(space->machine(), "BUTTONS");
1502         return input_port_read(machine(), "BUTTONS");
14951503
14961504      case 0x02:
1497         return BITSWAP8(input_port_read(space->machine(), "DSW2"), 0,1,2,3,4,5,6,7);
1505         return BITSWAP8(input_port_read(machine(), "DSW2"), 0,1,2,3,4,5,6,7);
14981506
14991507      case 0x03:
15001508      {
1501         UINT16 hopper_bit = (state->m_hopper && ((space->machine().primary_screen->frame_number()/10)&1)) ? 0x0000 : 0x0001;
1502         return input_port_read(space->machine(), "COINS") | hopper_bit;
1509         UINT16 hopper_bit = (m_hopper && ((machine().primary_screen->frame_number()/10)&1)) ? 0x0000 : 0x0001;
1510         return input_port_read(machine(), "COINS") | hopper_bit;
15031511      }
15041512
15051513      default:
1506         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0]);
1514         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0]);
15071515         break;
15081516   }
15091517
r14845r14846
15131521static ADDRESS_MAP_START( mgdha_map, AS_PROGRAM, 16, igs017_state )
15141522   AM_RANGE(0x000000, 0x07ffff) AM_ROM
15151523   AM_RANGE(0x600000, 0x603fff) AM_RAM
1516   AM_RANGE(0x876000, 0x876003) AM_WRITE_LEGACY(mgdha_magic_w )
1517   AM_RANGE(0x876002, 0x876003) AM_READ_LEGACY(mgdha_magic_r )
1518   AM_RANGE(0xa02000, 0xa02fff) AM_READWRITE_LEGACY(spriteram_lsb_r, spriteram_lsb_w ) AM_BASE(m_spriteram)
1519   AM_RANGE(0xa03000, 0xa037ff) AM_RAM_WRITE_LEGACY(sdmg2_paletteram_w ) AM_BASE_GENERIC( paletteram )
1524   AM_RANGE(0x876000, 0x876003) AM_WRITE(mgdha_magic_w )
1525   AM_RANGE(0x876002, 0x876003) AM_READ(mgdha_magic_r )
1526   AM_RANGE(0xa02000, 0xa02fff) AM_READWRITE(spriteram_lsb_r, spriteram_lsb_w ) AM_BASE(m_spriteram)
1527   AM_RANGE(0xa03000, 0xa037ff) AM_RAM_WRITE(sdmg2_paletteram_w ) AM_BASE_GENERIC( paletteram )
15201528//  AM_RANGE(0xa04014, 0xa04015) // written with FF at boot
15211529   AM_RANGE(0xa04020, 0xa04027) AM_DEVREAD8_LEGACY("ppi8255", ppi8255_r, 0x00ff )
1522   AM_RANGE(0xa04024, 0xa04025) AM_WRITE_LEGACY(video_disable_lsb_w )
1523   AM_RANGE(0xa04028, 0xa04029) AM_WRITE_LEGACY(irq2_enable_w )
1524   AM_RANGE(0xa0402a, 0xa0402b) AM_WRITE_LEGACY(irq1_enable_w )
1525   AM_RANGE(0xa08000, 0xa0bfff) AM_READWRITE_LEGACY(fg_lsb_r, fg_lsb_w ) AM_BASE(m_fg_videoram )
1526   AM_RANGE(0xa0c000, 0xa0ffff) AM_READWRITE_LEGACY(bg_lsb_r, bg_lsb_w ) AM_BASE(m_bg_videoram )
1530   AM_RANGE(0xa04024, 0xa04025) AM_WRITE(video_disable_lsb_w )
1531   AM_RANGE(0xa04028, 0xa04029) AM_WRITE(irq2_enable_w )
1532   AM_RANGE(0xa0402a, 0xa0402b) AM_WRITE(irq1_enable_w )
1533   AM_RANGE(0xa08000, 0xa0bfff) AM_READWRITE(fg_lsb_r, fg_lsb_w ) AM_BASE(m_fg_videoram )
1534   AM_RANGE(0xa0c000, 0xa0ffff) AM_READWRITE(bg_lsb_r, bg_lsb_w ) AM_BASE(m_bg_videoram )
15271535   AM_RANGE(0xa10000, 0xa10001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
15281536ADDRESS_MAP_END
15291537
15301538
15311539// tjsb
15321540
1533static WRITE8_HANDLER( tjsb_paletteram_w )
1541WRITE8_MEMBER(igs017_state::tjsb_paletteram_w)
15341542{
1535   space->machine().generic.paletteram.u8[offset] = data;
1536   int bgr = (space->machine().generic.paletteram.u8[offset/2*2+1] << 8) | space->machine().generic.paletteram.u8[offset/2*2+0];
1543   machine().generic.paletteram.u8[offset] = data;
1544   int bgr = (machine().generic.paletteram.u8[offset/2*2+1] << 8) | machine().generic.paletteram.u8[offset/2*2+0];
15371545
15381546   // bitswap
15391547   bgr = BITSWAP16(bgr, 15, 12,3,6,10,5, 4,2,9,13,8, 7,11,1,0,14);
15401548
1541   palette_set_color_rgb(space->machine(), offset/2, pal5bit(bgr >> 0), pal5bit(bgr >> 5), pal5bit(bgr >> 10));
1549   palette_set_color_rgb(machine(), offset/2, pal5bit(bgr >> 0), pal5bit(bgr >> 5), pal5bit(bgr >> 10));
15421550}
15431551
1544static WRITE8_HANDLER( tjsb_output_w )
1552WRITE8_MEMBER(igs017_state::tjsb_output_w)
15451553{
1546   igs017_state *state = space->machine().driver_data<igs017_state>();
1547   switch(state->m_input_select)
1554   switch(m_input_select)
15481555   {
15491556      case 0x00:
1550         coin_counter_w(space->machine(), 0,   data & 0x80);   // coin in
1557         coin_counter_w(machine(), 0,   data & 0x80);   // coin in
15511558         if (!(data & ~0x80))
15521559            return;
15531560         break;
15541561
15551562      case 0x01:
1556         coin_counter_w(space->machine(), 1,   data & 0x01);   // coin out
1563         coin_counter_w(machine(), 1,   data & 0x01);   // coin out
15571564         if (!(data & ~0x01))
15581565            return;
15591566         break;
15601567
15611568      case 0x02:
1562         space->machine().device<okim6295_device>("oki")->set_bank_base((data & 0x10) ? 0x40000 : 0);   // oki bank (0x20/0x30)
1569         machine().device<okim6295_device>("oki")->set_bank_base((data & 0x10) ? 0x40000 : 0);   // oki bank (0x20/0x30)
15631570         if (!(data & ~0x30))
15641571            return;
15651572         break;
15661573
15671574      case 0x03:
1568         state->m_hopper = data & 0x40;
1575         m_hopper = data & 0x40;
15691576         if (!(data & ~0x40))
15701577            return;
15711578         break;
15721579   }
1573   logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space->device()), state->m_input_select, data);
1580   logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space.device()), m_input_select, data);
15741581}
15751582
1576static READ8_HANDLER( tjsb_input_r )
1583READ8_MEMBER(igs017_state::tjsb_input_r)
15771584{
1578   igs017_state *state = space->machine().driver_data<igs017_state>();
1579   switch (state->m_input_select)
1585   switch (m_input_select)
15801586   {
1581      case 0x00:   return input_port_read(space->machine(), "PLAYER1");
1582      case 0x01:   return input_port_read(space->machine(), "PLAYER2");
1583      case 0x02:   return input_port_read(space->machine(), "COINS");
1587      case 0x00:   return input_port_read(machine(), "PLAYER1");
1588      case 0x01:   return input_port_read(machine(), "PLAYER2");
1589      case 0x02:   return input_port_read(machine(), "COINS");
15841590      case 0x03:
15851591      {
1586         UINT8 hopper_bit = (state->m_hopper && ((space->machine().primary_screen->frame_number()/10)&1)) ? 0x00 : 0x20;
1587         return input_port_read(space->machine(), "HOPPER") | hopper_bit;
1592         UINT8 hopper_bit = (m_hopper && ((machine().primary_screen->frame_number()/10)&1)) ? 0x00 : 0x20;
1593         return input_port_read(machine(), "HOPPER") | hopper_bit;
15881594      }
15891595
15901596      default:
1591         logerror("PC %06X: input %02x read\n",cpu_get_pc(&space->device()),state->m_input_select);
1597         logerror("PC %06X: input %02x read\n",cpu_get_pc(&space.device()),m_input_select);
15921598         return 0xff;
15931599   }
15941600}
15951601
15961602static ADDRESS_MAP_START( tjsb_map, AS_PROGRAM, 8, igs017_state )
15971603   AM_RANGE( 0x00000, 0x0dfff ) AM_ROM
1598   AM_RANGE( 0x0e000, 0x0e000 ) AM_WRITE_LEGACY(input_select_w )
1599   AM_RANGE( 0x0e001, 0x0e001 ) AM_READWRITE_LEGACY(tjsb_input_r, tjsb_output_w )
1604   AM_RANGE( 0x0e000, 0x0e000 ) AM_WRITE(input_select_w )
1605   AM_RANGE( 0x0e001, 0x0e001 ) AM_READWRITE(tjsb_input_r, tjsb_output_w )
16001606   AM_RANGE( 0x0e002, 0x0efff ) AM_RAM
16011607   AM_RANGE( 0x0f000, 0x0ffff ) AM_RAM
16021608   AM_RANGE( 0x10000, 0x3ffff ) AM_ROM
r14845r14846
16061612   AM_RANGE( 0x0000, 0x003f ) AM_RAM // internal regs
16071613
16081614   AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_BASE(m_spriteram)
1609   AM_RANGE( 0x1800, 0x1bff ) AM_RAM_WRITE_LEGACY(tjsb_paletteram_w ) AM_BASE_GENERIC(paletteram)
1615   AM_RANGE( 0x1800, 0x1bff ) AM_RAM_WRITE(tjsb_paletteram_w ) AM_BASE_GENERIC(paletteram)
16101616   AM_RANGE( 0x1c00, 0x1fff ) AM_RAM
16111617
16121618//  AM_RANGE(0x200a, 0x200a) AM_WRITENOP
16131619
16141620   AM_RANGE( 0x2010, 0x2013 ) AM_DEVREAD_LEGACY("ppi8255", ppi8255_r)
1615   AM_RANGE( 0x2012, 0x2012 ) AM_WRITE_LEGACY(video_disable_w )
1621   AM_RANGE( 0x2012, 0x2012 ) AM_WRITE(video_disable_w )
16161622
1617   AM_RANGE( 0x2014, 0x2014 ) AM_WRITE_LEGACY(nmi_enable_w )
1618   AM_RANGE( 0x2015, 0x2015 ) AM_WRITE_LEGACY(irq_enable_w )
1623   AM_RANGE( 0x2014, 0x2014 ) AM_WRITE(nmi_enable_w )
1624   AM_RANGE( 0x2015, 0x2015 ) AM_WRITE(irq_enable_w )
16191625
1620   AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE_LEGACY(fg_w ) AM_BASE(m_fg_videoram )
1621   AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE_LEGACY(bg_w ) AM_BASE(m_bg_videoram )
1626   AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE(fg_w ) AM_BASE(m_fg_videoram )
1627   AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE(bg_w ) AM_BASE(m_bg_videoram )
16221628
16231629   AM_RANGE( 0x9000, 0x9000 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
16241630
src/mame/drivers/monzagp.c
r14845r14846
4747   UINT8 *m_vram;
4848   int m_screenw;
4949   int m_bank;
50   DECLARE_READ8_MEMBER(rng_r);
51   DECLARE_WRITE8_MEMBER(port_w);
52   DECLARE_WRITE8_MEMBER(port0_w);
53   DECLARE_WRITE8_MEMBER(port1_w);
54   DECLARE_WRITE8_MEMBER(port2_w);
55   DECLARE_WRITE8_MEMBER(port3_w);
5056};
5157
5258
r14845r14846
115121   AM_RANGE(0x0000, 0x0fff) AM_ROM
116122ADDRESS_MAP_END
117123
118static READ8_HANDLER(rng_r)
124READ8_MEMBER(monzagp_state::rng_r)
119125{
120   return space->machine().rand();
126   return machine().rand();
121127}
122128
123static WRITE8_HANDLER(port_w)
129WRITE8_MEMBER(monzagp_state::port_w)
124130{
125   monzagp_state *state = space->machine().driver_data<monzagp_state>();
126   state->m_coordx=offset;//-0xc0;
127   //state->m_vram[state->m_coordy*state->m_screenw+state->m_coordx]=data;
131   m_coordx=offset;//-0xc0;
132   //m_vram[m_coordy*m_screenw+m_coordx]=data;
128133   //if(output==0xfe)
129134   {
130135   //  if(data>='A' && data <='Z')
131   //      printf("%.2x %.2x %c %c\n",state->m_coordy, offset,data, znaki[data-'A']);
132      //state->m_vram[state->m_coordy*state->m_screenw+state->m_coordx]=data;
133      state->m_vram[(state->m_coordx*256+state->m_coordy)&0x7ff]=data;
136   //      printf("%.2x %.2x %c %c\n",m_coordy, offset,data, znaki[data-'A']);
137      //m_vram[m_coordy*m_screenw+m_coordx]=data;
138      m_vram[(m_coordx*256+m_coordy)&0x7ff]=data;
134139   }
135140}
136141/*
r14845r14846
172177
173178
174179
175static WRITE8_HANDLER(port0_w)
180WRITE8_MEMBER(monzagp_state::port0_w)
176181{
177//  printf("P0 %x = %x\n",cpu_get_pc(&space->device()),data);
182//  printf("P0 %x = %x\n",cpu_get_pc(&space.device()),data);
178183}
179184
180static WRITE8_HANDLER(port1_w)
185WRITE8_MEMBER(monzagp_state::port1_w)
181186{
182//  printf("P1 %x = %x\n",cpu_get_pc(&space->device()),data);
187//  printf("P1 %x = %x\n",cpu_get_pc(&space.device()),data);
183188}
184189
185static WRITE8_HANDLER(port2_w)
190WRITE8_MEMBER(monzagp_state::port2_w)
186191{
187   monzagp_state *state = space->machine().driver_data<monzagp_state>();
188//  printf("P2 %x = %x\n",cpu_get_pc(&space->device()),data);
189   state->m_coordy=data;
192//  printf("P2 %x = %x\n",cpu_get_pc(&space.device()),data);
193   m_coordy=data;
190194}
191195
192196#if 0
193static WRITE8_HANDLER(port3_w)
197WRITE8_MEMBER(monzagp_state::port3_w)
194198{
195199   output=data;
196200}
r14845r14846
212216*/
213217
214218static ADDRESS_MAP_START( monzagp_io, AS_IO, 8, monzagp_state )
215   AM_RANGE(0x00, 0xff) AM_READWRITE_LEGACY(rng_r,port_w)
216   AM_RANGE(0x100, 0x100) AM_WRITE_LEGACY(port0_w)
217   AM_RANGE(0x101, 0x101) AM_WRITE_LEGACY(port1_w)
218   AM_RANGE(0x102, 0x102) AM_WRITE_LEGACY(port2_w)
219   AM_RANGE(0x104, 0x104) AM_READ_LEGACY(rng_r)
219   AM_RANGE(0x00, 0xff) AM_READWRITE(rng_r,port_w)
220   AM_RANGE(0x100, 0x100) AM_WRITE(port0_w)
221   AM_RANGE(0x101, 0x101) AM_WRITE(port1_w)
222   AM_RANGE(0x102, 0x102) AM_WRITE(port2_w)
223   AM_RANGE(0x104, 0x104) AM_READ(rng_r)
220224ADDRESS_MAP_END
221225
222226static INPUT_PORTS_START( monzagp )
src/mame/drivers/shanghai.c
r14845r14846
3434   shanghai_state(const machine_config &mconfig, device_type type, const char *tag)
3535      : driver_device(mconfig, type, tag) { }
3636
37   DECLARE_WRITE16_MEMBER(shanghai_coin_w);
38   DECLARE_READ16_MEMBER(kothello_hd63484_status_r);
3739};
3840
3941
r14845r14846
123125   device_set_input_line_and_vector(device,0,HOLD_LINE,0x80);
124126}
125127
126static WRITE16_HANDLER( shanghai_coin_w )
128WRITE16_MEMBER(shanghai_state::shanghai_coin_w)
127129{
128130   if (ACCESSING_BITS_0_7)
129131   {
130      coin_counter_w(space->machine(), 0,data & 1);
131      coin_counter_w(space->machine(), 1,data & 2);
132      coin_counter_w(machine(), 0,data & 1);
133      coin_counter_w(machine(), 1,data & 2);
132134   }
133135}
134136
r14845r14846
152154   AM_RANGE(0x40, 0x41) AM_READ_PORT("P1")
153155   AM_RANGE(0x44, 0x45) AM_READ_PORT("P2")
154156   AM_RANGE(0x48, 0x49) AM_READ_PORT("SYSTEM")
155   AM_RANGE(0x4c, 0x4d) AM_WRITE_LEGACY(shanghai_coin_w)
157   AM_RANGE(0x4c, 0x4d) AM_WRITE(shanghai_coin_w)
156158ADDRESS_MAP_END
157159
158160
r14845r14846
163165   AM_RANGE(0x30, 0x31) AM_DEVREADWRITE_LEGACY("hd63484", hd63484_status_r, hd63484_address_w)
164166   AM_RANGE(0x32, 0x33) AM_DEVREADWRITE_LEGACY("hd63484", hd63484_data_r, hd63484_data_w)
165167   AM_RANGE(0x40, 0x43) AM_DEVREADWRITE8_LEGACY("ymsnd", ym2203_r, ym2203_w, 0x00ff)
166   AM_RANGE(0x50, 0x51) AM_WRITE_LEGACY(shanghai_coin_w)
168   AM_RANGE(0x50, 0x51) AM_WRITE(shanghai_coin_w)
167169ADDRESS_MAP_END
168170
169static READ16_HANDLER( kothello_hd63484_status_r )
171READ16_MEMBER(shanghai_state::kothello_hd63484_status_r)
170172{
171173   return 0xff22;   /* write FIFO ready + command end + read FIFO ready */
172174}
173175
174176static ADDRESS_MAP_START( kothello_map, AS_PROGRAM, 16, shanghai_state )
175177   AM_RANGE(0x00000, 0x07fff) AM_RAM
176   AM_RANGE(0x08010, 0x08011) AM_READ_LEGACY(kothello_hd63484_status_r) AM_DEVWRITE_LEGACY("hd63484", hd63484_address_w)
178   AM_RANGE(0x08010, 0x08011) AM_READ(kothello_hd63484_status_r) AM_DEVWRITE_LEGACY("hd63484", hd63484_address_w)
177179   AM_RANGE(0x08012, 0x08013) AM_DEVREADWRITE_LEGACY("hd63484", hd63484_data_r, hd63484_data_w)
178180   AM_RANGE(0x09010, 0x09011) AM_READ_PORT("P1")
179181   AM_RANGE(0x09012, 0x09013) AM_READ_PORT("P2")
src/mame/drivers/avt.c
r14845r14846
438438
439439   required_device<cpu_device> m_maincpu;
440440   required_device<mc6845_device> m_crtc;
441   DECLARE_WRITE8_MEMBER(debug_w);
441442};
442443
443444#define mc6845_h_char_total    (state->m_crtc_vreg[0])
r14845r14846
581582*            Read / Write Handlers            *
582583**********************************************/
583584
584//static WRITE8_HANDLER( debug_w )
585//WRITE8_MEMBER(avt_state::debug_w)
585586//{
586587//  popmessage("written : %02X", data);
587588//}
src/mame/drivers/mole.c
r14845r14846
6565
6666   /* memory */
6767   UINT16       m_tileram[0x400];
68   DECLARE_WRITE8_MEMBER(mole_videoram_w);
69   DECLARE_WRITE8_MEMBER(mole_tilebank_w);
70   DECLARE_WRITE8_MEMBER(mole_flipscreen_w);
71   DECLARE_READ8_MEMBER(mole_protection_r);
6872};
6973
7074
r14845r14846
99103   state->save_item(NAME(state->m_tileram));
100104}
101105
102static WRITE8_HANDLER( mole_videoram_w )
106WRITE8_MEMBER(mole_state::mole_videoram_w)
103107{
104   mole_state *state = space->machine().driver_data<mole_state>();
105108
106   state->m_tileram[offset] = data | (state->m_tile_bank << 8);
107   state->m_bg_tilemap->mark_tile_dirty(offset);
109   m_tileram[offset] = data | (m_tile_bank << 8);
110   m_bg_tilemap->mark_tile_dirty(offset);
108111}
109112
110static WRITE8_HANDLER( mole_tilebank_w )
113WRITE8_MEMBER(mole_state::mole_tilebank_w)
111114{
112   mole_state *state = space->machine().driver_data<mole_state>();
113115
114   state->m_tile_bank = data;
115   state->m_bg_tilemap->mark_all_dirty();
116   m_tile_bank = data;
117   m_bg_tilemap->mark_all_dirty();
116118}
117119
118static WRITE8_HANDLER( mole_flipscreen_w )
120WRITE8_MEMBER(mole_state::mole_flipscreen_w)
119121{
120   flip_screen_set(space->machine(), data & 0x01);
122   flip_screen_set(machine(), data & 0x01);
121123}
122124
123125static SCREEN_UPDATE_IND16( mole )
r14845r14846
136138 *
137139 *************************************/
138140
139static READ8_HANDLER( mole_protection_r )
141READ8_MEMBER(mole_state::mole_protection_r)
140142{
141
142143    /*  Following are all known examples of Mole Attack
143144    **  code reading from the protection circuitry:
144145    **
r14845r14846
164165   {
165166   case 0x08: return 0xb0; /* random mole placement */
166167   case 0x26:
167      if (cpu_get_pc(&space->device()) == 0x53d7)
168      if (cpu_get_pc(&space.device()) == 0x53d7)
168169      {
169170         return 0x06; /* bonus round */
170171      }
r14845r14846
194195
195196static ADDRESS_MAP_START( mole_map, AS_PROGRAM, 8, mole_state )
196197   AM_RANGE(0x0000, 0x03ff) AM_RAM
197   AM_RANGE(0x0800, 0x08ff) AM_READ_LEGACY(mole_protection_r)
198   AM_RANGE(0x0800, 0x08ff) AM_READ(mole_protection_r)
198199   AM_RANGE(0x0800, 0x0800) AM_WRITENOP // ???
199200   AM_RANGE(0x0820, 0x0820) AM_WRITENOP // ???
200201   AM_RANGE(0x5000, 0x7fff) AM_MIRROR(0x8000) AM_ROM
201   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE_LEGACY(mole_videoram_w)
202   AM_RANGE(0x8400, 0x8400) AM_WRITE_LEGACY(mole_tilebank_w)
202   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(mole_videoram_w)
203   AM_RANGE(0x8400, 0x8400) AM_WRITE(mole_tilebank_w)
203204   AM_RANGE(0x8c00, 0x8c01) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
204205   AM_RANGE(0x8c40, 0x8c40) AM_WRITENOP // ???
205206   AM_RANGE(0x8c80, 0x8c80) AM_WRITENOP // ???
r14845r14846
207208   AM_RANGE(0x8d00, 0x8d00) AM_READ_PORT("DSW") AM_WRITE_LEGACY(watchdog_reset_w)
208209   AM_RANGE(0x8d40, 0x8d40) AM_READ_PORT("IN0")
209210   AM_RANGE(0x8d80, 0x8d80) AM_READ_PORT("IN1")
210   AM_RANGE(0x8dc0, 0x8dc0) AM_READ_PORT("IN2") AM_WRITE_LEGACY(mole_flipscreen_w)
211   AM_RANGE(0x8dc0, 0x8dc0) AM_READ_PORT("IN2") AM_WRITE(mole_flipscreen_w)
211212ADDRESS_MAP_END
212213
213214
src/mame/drivers/sigmab52.c
r14845r14846
140140
141141   int m_latch;
142142   unsigned int m_acrtc_data;
143   DECLARE_WRITE8_MEMBER(acrtc_w);
144   DECLARE_READ8_MEMBER(acrtc_r);
145   DECLARE_READ8_MEMBER(unk_f700_r);
146   DECLARE_WRITE8_MEMBER(unk_f710_w);
147   DECLARE_READ8_MEMBER(unk_f721_r);
143148};
144149
145150
r14845r14846
234239*      ACRTC Access      *
235240*************************/
236241
237static WRITE8_HANDLER(acrtc_w)
242WRITE8_MEMBER(sigmab52_state::acrtc_w)
238243{
239   sigmab52_state *state = space->machine().driver_data<sigmab52_state>();
240   device_t *hd63484 = space->machine().device("hd63484");
244   device_t *hd63484 = machine().device("hd63484");
241245   if(!offset)
242246   {
243247      //address select
244248      hd63484_address_w(hd63484, 0, data, 0x00ff);
245      state->m_latch = 0;
249      m_latch = 0;
246250   }
247251   else
248252   {
249      if(!state->m_latch)
253      if(!m_latch)
250254      {
251         state->m_acrtc_data = data;
255         m_acrtc_data = data;
252256
253257      }
254258
255259      else
256260      {
257         state->m_acrtc_data <<= 8;
258         state->m_acrtc_data |= data;
261         m_acrtc_data <<= 8;
262         m_acrtc_data |= data;
259263
260         hd63484_data_w(hd63484, 0, state->m_acrtc_data, 0xffff);
264         hd63484_data_w(hd63484, 0, m_acrtc_data, 0xffff);
261265      }
262266
263      state->m_latch ^= 1;
267      m_latch ^= 1;
264268   }
265269}
266270
267static READ8_HANDLER(acrtc_r)
271READ8_MEMBER(sigmab52_state::acrtc_r)
268272{
269273   if(offset&1)
270274   {
271      device_t *hd63484 = space->machine().device("hd63484");
275      device_t *hd63484 = machine().device("hd63484");
272276      return hd63484_data_r(hd63484, 0, 0xff);
273277   }
274278
275279   else
276280   {
277      return 0x7b; //fake status read (instead HD63484_status_r(space, 0, 0xff); )
281      return 0x7b; //fake status read (instead HD63484_status_r(&space, 0, 0xff); )
278282   }
279283}
280284
r14845r14846
283287*      Misc Handlers     *
284288*************************/
285289
286static READ8_HANDLER(unk_f700_r)
290READ8_MEMBER(sigmab52_state::unk_f700_r)
287291{
288292   return 0x7f;
289293}
290294
291static WRITE8_HANDLER(unk_f710_w)
295WRITE8_MEMBER(sigmab52_state::unk_f710_w)
292296{
293   memory_set_bankptr(space->machine(), "bank1" ,&space->machine().region("maincpu")->base()[0x10000 + ((data&0x80)?0x4000:0x0000)]);
297   memory_set_bankptr(machine(), "bank1" ,&machine().region("maincpu")->base()[0x10000 + ((data&0x80)?0x4000:0x0000)]);
294298}
295299
296static READ8_HANDLER(unk_f721_r)
300READ8_MEMBER(sigmab52_state::unk_f721_r)
297301{
298302   return 0x04;   // test is stuck. feeding bit3 the error message appear...
299303}
r14845r14846
309313
310314   AM_RANGE(0x8000, 0xf6ff) AM_RAMBANK("bank3")
311315
312   AM_RANGE(0xf700, 0xf700) AM_READ_LEGACY(unk_f700_r)
313   AM_RANGE(0xf710, 0xf710) AM_WRITE_LEGACY(unk_f710_w)
314   AM_RANGE(0xf721, 0xf721) AM_READ_LEGACY(unk_f721_r)
316   AM_RANGE(0xf700, 0xf700) AM_READ(unk_f700_r)
317   AM_RANGE(0xf710, 0xf710) AM_WRITE(unk_f710_w)
318   AM_RANGE(0xf721, 0xf721) AM_READ(unk_f721_r)
315319
316320   //AM_RANGE(0x00, 0x01) AM_DEVREADWRITE_LEGACY("hd63484", hd63484_status_r, hd63484_address_w)
317321   //AM_RANGE(0x02, 0x03) AM_DEVREADWRITE_LEGACY("hd63484", hd63484_data_r, hd63484_data_w)
318322
319   AM_RANGE(0xf730, 0xf731) AM_READWRITE_LEGACY(acrtc_r, acrtc_w)
323   AM_RANGE(0xf730, 0xf731) AM_READWRITE(acrtc_r, acrtc_w)
320324   AM_RANGE(0xf740, 0xf740) AM_READ_PORT("IN0")
321325   AM_RANGE(0xf741, 0xf741) AM_READ_PORT("IN1")   // random checks to active high to go further with the test.
322326   AM_RANGE(0xf742, 0xf742) AM_READ_PORT("IN2")
src/mame/drivers/dynadice.c
r14845r14846
5555
5656   /* misc */
5757   int      m_ay_data;
58   DECLARE_WRITE8_MEMBER(dynadice_videoram_w);
59   DECLARE_WRITE8_MEMBER(sound_data_w);
5860};
5961
6062
61static WRITE8_HANDLER( dynadice_videoram_w )
63WRITE8_MEMBER(dynadice_state::dynadice_videoram_w)
6264{
63   dynadice_state *state = space->machine().driver_data<dynadice_state>();
64   state->m_videoram[offset] = data;
65   state->m_bg_tilemap->mark_tile_dirty(offset);
66   state->m_top_tilemap->mark_all_dirty();
65   m_videoram[offset] = data;
66   m_bg_tilemap->mark_tile_dirty(offset);
67   m_top_tilemap->mark_all_dirty();
6768}
6869
69static WRITE8_HANDLER( sound_data_w )
70WRITE8_MEMBER(dynadice_state::sound_data_w)
7071{
71   dynadice_state *state = space->machine().driver_data<dynadice_state>();
72   state->m_ay_data = data;
72   m_ay_data = data;
7373}
7474
7575static WRITE8_DEVICE_HANDLER( sound_control_w )
r14845r14846
9494
9595static ADDRESS_MAP_START( dynadice_map, AS_PROGRAM, 8, dynadice_state )
9696   AM_RANGE(0x0000, 0x1fff) AM_ROM
97   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE_LEGACY(dynadice_videoram_w) AM_BASE(m_videoram)
97   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(dynadice_videoram_w) AM_BASE(m_videoram)
9898   AM_RANGE(0x4000, 0x40ff) AM_RAM AM_SHARE("nvram")
9999ADDRESS_MAP_END
100100
r14845r14846
116116   ADDRESS_MAP_GLOBAL_MASK(0xff)
117117   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(soundlatch_r)
118118   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(soundlatch_clear_w)
119   AM_RANGE(0x02, 0x02) AM_WRITE_LEGACY(sound_data_w)
119   AM_RANGE(0x02, 0x02) AM_WRITE(sound_data_w)
120120   AM_RANGE(0x03, 0x03) AM_DEVWRITE_LEGACY("aysnd", sound_control_w)
121121ADDRESS_MAP_END
122122
src/mame/drivers/jangou.c
r14845r14846
6464   UINT8        m_pen_data[0x10];
6565   UINT8        m_blit_data[6];
6666   UINT8        m_blit_buffer[256 * 256];
67   DECLARE_WRITE8_MEMBER(blitter_process_w);
68   DECLARE_WRITE8_MEMBER(blit_vregs_w);
69   DECLARE_WRITE8_MEMBER(mux_w);
70   DECLARE_WRITE8_MEMBER(output_w);
71   DECLARE_WRITE8_MEMBER(sound_latch_w);
72   DECLARE_READ8_MEMBER(sound_latch_r);
73   DECLARE_WRITE8_MEMBER(cvsd_w);
74   DECLARE_WRITE8_MEMBER(adpcm_w);
75   DECLARE_READ8_MEMBER(master_com_r);
76   DECLARE_WRITE8_MEMBER(master_com_w);
77   DECLARE_READ8_MEMBER(slave_com_r);
78   DECLARE_WRITE8_MEMBER(slave_com_w);
79   DECLARE_READ8_MEMBER(jngolady_rng_r);
6780};
6881
6982
r14845r14846
176189      state->m_blit_buffer[(y * 256) + (x >> 1)] = (state->m_blit_buffer[(y * 256) + (x >> 1)] & 0xf0) | (pix & 0x0f);
177190}
178191
179static WRITE8_HANDLER( blitter_process_w )
192WRITE8_MEMBER(jangou_state::blitter_process_w)
180193{
181   jangou_state *state = space->machine().driver_data<jangou_state>();
182194   int src, x, y, h, w, flipx;
183   state->m_blit_data[offset] = data;
195   m_blit_data[offset] = data;
184196
185197   if (offset == 5)
186198   {
187199      int count = 0;
188200      int xcount, ycount;
189201
190      /* printf("%02x %02x %02x %02x %02x %02x\n", state->m_blit_data[0], state->m_blit_data[1], state->m_blit_data[2],
191                    state->m_blit_data[3], state->m_blit_data[4], state->m_blit_data[5]); */
192      w = (state->m_blit_data[4] & 0xff) + 1;
193      h = (state->m_blit_data[5] & 0xff) + 1;
194      src = ((state->m_blit_data[1] << 8)|(state->m_blit_data[0] << 0));
195      x = (state->m_blit_data[2] & 0xff);
196      y = (state->m_blit_data[3] & 0xff);
202      /* printf("%02x %02x %02x %02x %02x %02x\n", m_blit_data[0], m_blit_data[1], m_blit_data[2],
203                    m_blit_data[3], m_blit_data[4], m_blit_data[5]); */
204      w = (m_blit_data[4] & 0xff) + 1;
205      h = (m_blit_data[5] & 0xff) + 1;
206      src = ((m_blit_data[1] << 8)|(m_blit_data[0] << 0));
207      x = (m_blit_data[2] & 0xff);
208      y = (m_blit_data[3] & 0xff);
197209
198210      // lowest bit of src controls flipping / draw direction?
199      flipx = (state->m_blit_data[0] & 1);
211      flipx = (m_blit_data[0] & 1);
200212
201213      if (!flipx)
202214         src += (w * h) - 1;
r14845r14846
209221         {
210222            int drawx = (x + xcount) & 0xff;
211223            int drawy = (y + ycount) & 0xff;
212            UINT8 dat = jangou_gfx_nibble(space->machine(), src + count);
213            UINT8 cur_pen_hi = state->m_pen_data[(dat & 0xf0) >> 4];
214            UINT8 cur_pen_lo = state->m_pen_data[(dat & 0x0f) >> 0];
224            UINT8 dat = jangou_gfx_nibble(machine(), src + count);
225            UINT8 cur_pen_hi = m_pen_data[(dat & 0xf0) >> 4];
226            UINT8 cur_pen_lo = m_pen_data[(dat & 0x0f) >> 0];
215227
216228            dat = cur_pen_lo | (cur_pen_hi << 4);
217229
218230            if ((dat & 0xff) != 0)
219               plot_jangou_gfx_pixel(space->machine(), dat, drawx, drawy);
231               plot_jangou_gfx_pixel(machine(), dat, drawx, drawy);
220232
221233            if (!flipx)
222234               count--;
r14845r14846
228240}
229241
230242/* What is the bit 5 (0x20) for?*/
231static WRITE8_HANDLER( blit_vregs_w )
243WRITE8_MEMBER(jangou_state::blit_vregs_w)
232244{
233   jangou_state *state = space->machine().driver_data<jangou_state>();
234245
235246   //  printf("%02x %02x\n", offset, data);
236   state->m_pen_data[offset] = data & 0xf;
247   m_pen_data[offset] = data & 0xf;
237248}
238249
239250/*************************************
r14845r14846
242253 *
243254 *************************************/
244255
245static WRITE8_HANDLER( mux_w )
256WRITE8_MEMBER(jangou_state::mux_w)
246257{
247   jangou_state *state = space->machine().driver_data<jangou_state>();
248   state->m_mux_data = ~data;
258   m_mux_data = ~data;
249259}
250260
251static WRITE8_HANDLER( output_w )
261WRITE8_MEMBER(jangou_state::output_w)
252262{
253263   /*
254264    --x- ---- ? (polls between high and low in irq routine,probably signals the vblank routine)
r14845r14846
256266    ---- ---x coin counter
257267    */
258268//  printf("%02x\n", data);
259   coin_counter_w(space->machine(), 0, data & 0x01);
269   coin_counter_w(machine(), 0, data & 0x01);
260270//  flip_screen_set(data & 0x04);
261//  coin_lockout_w(space->machine(), 0, ~data & 0x20);
271//  coin_lockout_w(machine(), 0, ~data & 0x20);
262272}
263273
264274static READ8_DEVICE_HANDLER( input_mux_r )
r14845r14846
289299 *
290300 *************************************/
291301
292static WRITE8_HANDLER( sound_latch_w )
302WRITE8_MEMBER(jangou_state::sound_latch_w)
293303{
294   jangou_state *state = space->machine().driver_data<jangou_state>();
295304   soundlatch_w(space, 0, data & 0xff);
296   device_set_input_line(state->m_cpu_1, INPUT_LINE_NMI, ASSERT_LINE);
305   device_set_input_line(m_cpu_1, INPUT_LINE_NMI, ASSERT_LINE);
297306}
298307
299static READ8_HANDLER( sound_latch_r )
308READ8_MEMBER(jangou_state::sound_latch_r)
300309{
301   jangou_state *state = space->machine().driver_data<jangou_state>();
302   device_set_input_line(state->m_cpu_1, INPUT_LINE_NMI, CLEAR_LINE);
310   device_set_input_line(m_cpu_1, INPUT_LINE_NMI, CLEAR_LINE);
303311   return soundlatch_r(space, 0);
304312}
305313
306314/* Jangou HC-55516 CVSD */
307static WRITE8_HANDLER( cvsd_w )
315WRITE8_MEMBER(jangou_state::cvsd_w)
308316{
309   jangou_state *state = space->machine().driver_data<jangou_state>();
310   state->m_cvsd_shiftreg = data;
317   m_cvsd_shiftreg = data;
311318}
312319
313320static TIMER_CALLBACK( cvsd_bit_timer_callback )
r14845r14846
325332
326333
327334/* Jangou Lady MSM5218 (MSM5205-compatible) ADPCM */
328static WRITE8_HANDLER( adpcm_w )
335WRITE8_MEMBER(jangou_state::adpcm_w)
329336{
330   jangou_state *state = space->machine().driver_data<jangou_state>();
331   state->m_adpcm_byte = data;
337   m_adpcm_byte = data;
332338}
333339
334340static void jngolady_vclk_cb( device_t *device )
r14845r14846
353359 *
354360 *************************************/
355361
356static READ8_HANDLER( master_com_r )
362READ8_MEMBER(jangou_state::master_com_r)
357363{
358   jangou_state *state = space->machine().driver_data<jangou_state>();
359   return state->m_z80_latch;
364   return m_z80_latch;
360365}
361366
362static WRITE8_HANDLER( master_com_w )
367WRITE8_MEMBER(jangou_state::master_com_w)
363368{
364   jangou_state *state = space->machine().driver_data<jangou_state>();
365369
366   device_set_input_line(state->m_nsc, 0, HOLD_LINE);
367   state->m_nsc_latch = data;
370   device_set_input_line(m_nsc, 0, HOLD_LINE);
371   m_nsc_latch = data;
368372}
369373
370static READ8_HANDLER( slave_com_r )
374READ8_MEMBER(jangou_state::slave_com_r)
371375{
372   jangou_state *state = space->machine().driver_data<jangou_state>();
373   return state->m_nsc_latch;
376   return m_nsc_latch;
374377}
375378
376static WRITE8_HANDLER( slave_com_w )
379WRITE8_MEMBER(jangou_state::slave_com_w)
377380{
378   jangou_state *state = space->machine().driver_data<jangou_state>();
379   state->m_z80_latch = data;
381   m_z80_latch = data;
380382}
381383
382384/*************************************
r14845r14846
395397   AM_RANGE(0x01,0x01) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
396398   AM_RANGE(0x02,0x03) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
397399   AM_RANGE(0x10,0x10) AM_READ_PORT("DSW") //dsw + blitter busy flag
398   AM_RANGE(0x10,0x10) AM_WRITE_LEGACY(output_w)
399   AM_RANGE(0x11,0x11) AM_WRITE_LEGACY(mux_w)
400   AM_RANGE(0x12,0x17) AM_WRITE_LEGACY(blitter_process_w)
401   AM_RANGE(0x20,0x2f) AM_WRITE_LEGACY(blit_vregs_w)
400   AM_RANGE(0x10,0x10) AM_WRITE(output_w)
401   AM_RANGE(0x11,0x11) AM_WRITE(mux_w)
402   AM_RANGE(0x12,0x17) AM_WRITE(blitter_process_w)
403   AM_RANGE(0x20,0x2f) AM_WRITE(blit_vregs_w)
402404   AM_RANGE(0x30,0x30) AM_WRITENOP //? polls 0x03 continuously
403   AM_RANGE(0x31,0x31) AM_WRITE_LEGACY(sound_latch_w)
405   AM_RANGE(0x31,0x31) AM_WRITE(sound_latch_w)
404406ADDRESS_MAP_END
405407
406408
r14845r14846
410412
411413static ADDRESS_MAP_START( cpu1_io, AS_IO, 8, jangou_state )
412414   ADDRESS_MAP_GLOBAL_MASK(0xff)
413   AM_RANGE(0x00,0x00) AM_READ_LEGACY(sound_latch_r)
414   AM_RANGE(0x01,0x01) AM_WRITE_LEGACY(cvsd_w)
415   AM_RANGE(0x00,0x00) AM_READ(sound_latch_r)
416   AM_RANGE(0x01,0x01) AM_WRITE(cvsd_w)
415417   AM_RANGE(0x02,0x02) AM_WRITENOP // Echoes sound command - acknowledge?
416418ADDRESS_MAP_END
417419
r14845r14846
425427static ADDRESS_MAP_START( jngolady_cpu0_map, AS_PROGRAM, 8, jangou_state )
426428   AM_RANGE(0x0000, 0x9fff) AM_ROM
427429   AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("share1")
428   AM_RANGE(0xe000, 0xe000) AM_READWRITE_LEGACY(master_com_r,master_com_w)
430   AM_RANGE(0xe000, 0xe000) AM_READWRITE(master_com_r,master_com_w)
429431ADDRESS_MAP_END
430432
431433
r14845r14846
435437
436438static ADDRESS_MAP_START( jngolady_cpu1_io, AS_IO, 8, jangou_state )
437439   ADDRESS_MAP_GLOBAL_MASK(0xff)
438   AM_RANGE(0x00,0x00) AM_READ_LEGACY(sound_latch_r)
439   AM_RANGE(0x01,0x01) AM_WRITE_LEGACY(adpcm_w)
440   AM_RANGE(0x00,0x00) AM_READ(sound_latch_r)
441   AM_RANGE(0x01,0x01) AM_WRITE(adpcm_w)
440442   AM_RANGE(0x02,0x02) AM_WRITENOP
441443ADDRESS_MAP_END
442444
r14845r14846
444446static ADDRESS_MAP_START( nsc_map, AS_PROGRAM, 8, jangou_state )
445447   AM_RANGE(0x0000, 0x007f) AM_RAM //internal ram for irq etc.
446448   AM_RANGE(0x8000, 0x8000) AM_WRITENOP //write-only,irq related?
447   AM_RANGE(0x9000, 0x9000) AM_READWRITE_LEGACY(slave_com_r,slave_com_w)
449   AM_RANGE(0x9000, 0x9000) AM_READWRITE(slave_com_r,slave_com_w)
448450   AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("share1")
449451   AM_RANGE(0xf000, 0xffff) AM_ROM
450452ADDRESS_MAP_END
r14845r14846
466468   AM_RANGE(0x01,0x01) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
467469   AM_RANGE(0x02,0x03) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
468470   AM_RANGE(0x10,0x10) AM_READ_PORT("DSW") //dsw + blitter busy flag
469   AM_RANGE(0x10,0x10) AM_WRITE_LEGACY(output_w)
470   AM_RANGE(0x11,0x11) AM_WRITE_LEGACY(mux_w)
471   AM_RANGE(0x12,0x17) AM_WRITE_LEGACY(blitter_process_w)
472   AM_RANGE(0x20,0x2f) AM_WRITE_LEGACY(blit_vregs_w )
471   AM_RANGE(0x10,0x10) AM_WRITE(output_w)
472   AM_RANGE(0x11,0x11) AM_WRITE(mux_w)
473   AM_RANGE(0x12,0x17) AM_WRITE(blitter_process_w)
474   AM_RANGE(0x20,0x2f) AM_WRITE(blit_vregs_w )
473475   AM_RANGE(0x30,0x30) AM_WRITENOP //? polls 0x03 continuously
474//  AM_RANGE(0x31,0x31) AM_WRITE_LEGACY(sound_latch_w)
476//  AM_RANGE(0x31,0x31) AM_WRITE(sound_latch_w)
475477ADDRESS_MAP_END
476478
477479/*************************************
r14845r14846
491493   AM_RANGE(0x02,0x03) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
492494   AM_RANGE(0x10,0x10) AM_READ_PORT("DSW")         /* DSW + blitter busy flag */
493495   AM_RANGE(0x10,0x10) AM_WRITENOP               /* Writes continuosly 0's in attract mode, and 1's in game */
494   AM_RANGE(0x11,0x11) AM_WRITE_LEGACY(mux_w)
496   AM_RANGE(0x11,0x11) AM_WRITE(mux_w)
495497   AM_RANGE(0x13,0x13) AM_READNOP               /* Often reads bit7 with unknown purposes */
496   AM_RANGE(0x12,0x17) AM_WRITE_LEGACY(blitter_process_w)
497   AM_RANGE(0x20,0x2f) AM_WRITE_LEGACY(blit_vregs_w)
498   AM_RANGE(0x12,0x17) AM_WRITE(blitter_process_w)
499   AM_RANGE(0x20,0x2f) AM_WRITE(blit_vregs_w)
498500   AM_RANGE(0x30,0x30) AM_WRITENOP               /* Seems to write 0x10 on each sound event */
499501ADDRESS_MAP_END
500502
r14845r14846
13531355 *************************************/
13541356
13551357/*Temporary kludge for make the RNG work*/
1356static READ8_HANDLER( jngolady_rng_r )
1358READ8_MEMBER(jangou_state::jngolady_rng_r)
13571359{
1358   return space->machine().rand();
1360   return machine().rand();
13591361}
13601362
13611363static DRIVER_INIT( jngolady )
13621364{
1363   machine.device("nsc")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x08, 0x08, FUNC(jngolady_rng_r) );
1365   jangou_state *state = machine.driver_data<jangou_state>();
1366   machine.device("nsc")->memory().space(AS_PROGRAM)->install_read_handler(0x08, 0x08, read8_delegate(FUNC(jangou_state::jngolady_rng_r),state) );
13641367}
13651368
13661369static DRIVER_INIT (luckygrl)
src/mame/drivers/pengadvb.c
r14845r14846
3737   UINT8 *m_main_mem;
3838   UINT8 m_mem_map;
3939   UINT8 m_mem_banks[4];
40   DECLARE_WRITE8_MEMBER(mem_w);
4041};
4142
4243
r14845r14846
122123   }
123124}
124125
125static WRITE8_HANDLER(mem_w)
126WRITE8_MEMBER(pengadvb_state::mem_w)
126127{
127   pengadvb_state *state = space->machine().driver_data<pengadvb_state>();
128128   if (offset >= 0xc000)
129129   {
130130      // write to RAM
131      if ((state->m_mem_map >> 6 & 3) == 3)
132         state->m_main_mem[offset - 0xc000] = data;
131      if ((m_mem_map >> 6 & 3) == 3)
132         m_main_mem[offset - 0xc000] = data;
133133   }
134   else if (offset >= 0x4000 && (state->m_mem_map >> (offset >> 13 & 6) & 3) == 1 && (state->m_mem_banks[(offset - 0x4000) >> 13] != (data & 0xf)))
134   else if (offset >= 0x4000 && (m_mem_map >> (offset >> 13 & 6) & 3) == 1 && (m_mem_banks[(offset - 0x4000) >> 13] != (data & 0xf)))
135135   {
136136      // ROM bankswitch
137      state->m_mem_banks[(offset - 0x4000) >> 13] = data & 0xf;
138      mem_map_banks(space->machine());
137      m_mem_banks[(offset - 0x4000) >> 13] = data & 0xf;
138      mem_map_banks(machine());
139139   }
140140}
141141
r14845r14846
147147   AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank31")
148148   AM_RANGE(0xa000, 0xbfff) AM_ROMBANK("bank32")
149149   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank4")
150   AM_RANGE(0x0000, 0xffff) AM_WRITE_LEGACY(mem_w)
150   AM_RANGE(0x0000, 0xffff) AM_WRITE(mem_w)
151151ADDRESS_MAP_END
152152
153153static ADDRESS_MAP_START( io_mem, AS_IO, 8, pengadvb_state )
src/mame/drivers/ssingles.c
r14845r14846
163163   pen_t m_pens[NUM_PENS];
164164
165165   UINT8 m_atamanot_prot_state;
166   DECLARE_WRITE8_MEMBER(ssingles_videoram_w);
167   DECLARE_WRITE8_MEMBER(ssingles_colorram_w);
168   DECLARE_READ8_MEMBER(c000_r);
169   DECLARE_READ8_MEMBER(c001_r);
170   DECLARE_WRITE8_MEMBER(c001_w);
171   DECLARE_READ8_MEMBER(atamanot_prot_r);
172   DECLARE_WRITE8_MEMBER(atamanot_prot_w);
166173};
167174
168175//fake palette
r14845r14846
283290};
284291
285292
286static WRITE8_HANDLER(ssingles_videoram_w)
293WRITE8_MEMBER(ssingles_state::ssingles_videoram_w)
287294{
288   ssingles_state *state = space->machine().driver_data<ssingles_state>();
289   UINT8 *vram = space->machine().region("vram")->base();
295   UINT8 *vram = machine().region("vram")->base();
290296   vram[offset] = data;
291   state->m_videoram[offset]=data;
297   m_videoram[offset]=data;
292298}
293299
294static WRITE8_HANDLER(ssingles_colorram_w)
300WRITE8_MEMBER(ssingles_state::ssingles_colorram_w)
295301{
296   ssingles_state *state = space->machine().driver_data<ssingles_state>();
297   UINT8 *cram = space->machine().region("cram")->base();
302   UINT8 *cram = machine().region("cram")->base();
298303   cram[offset] = data;
299   state->m_colorram[offset]=data;
304   m_colorram[offset]=data;
300305}
301306
302307
r14845r14846
314319}
315320
316321
317static READ8_HANDLER(c000_r)
322READ8_MEMBER(ssingles_state::c000_r)
318323{
319   ssingles_state *state = space->machine().driver_data<ssingles_state>();
320324
321   return state->m_prot_data;
325   return m_prot_data;
322326}
323327
324static READ8_HANDLER(c001_r)
328READ8_MEMBER(ssingles_state::c001_r)
325329{
326   ssingles_state *state = space->machine().driver_data<ssingles_state>();
327330
328   state->m_prot_data=0xc4;
331   m_prot_data=0xc4;
329332   return 0;
330333}
331334
332static WRITE8_HANDLER(c001_w)
335WRITE8_MEMBER(ssingles_state::c001_w)
333336{
334   ssingles_state *state = space->machine().driver_data<ssingles_state>();
335337
336   state->m_prot_data^=data^0x11;
338   m_prot_data^=data^0x11;
337339}
338340
339341static CUSTOM_INPUT(controls_r)
r14845r14846
354356}
355357
356358static ADDRESS_MAP_START( ssingles_map, AS_PROGRAM, 8, ssingles_state )
357   AM_RANGE(0x0000, 0x00ff) AM_WRITE_LEGACY(ssingles_videoram_w)
358   AM_RANGE(0x0800, 0x08ff) AM_WRITE_LEGACY(ssingles_colorram_w)
359   AM_RANGE(0x0000, 0x00ff) AM_WRITE(ssingles_videoram_w)
360   AM_RANGE(0x0800, 0x08ff) AM_WRITE(ssingles_colorram_w)
359361   AM_RANGE(0x0000, 0x1fff) AM_ROM
360   AM_RANGE(0xc000, 0xc000) AM_READ_LEGACY(c000_r )
361   AM_RANGE(0xc001, 0xc001) AM_READWRITE_LEGACY(c001_r, c001_w )
362   AM_RANGE(0xc000, 0xc000) AM_READ(c000_r )
363   AM_RANGE(0xc001, 0xc001) AM_READWRITE(c001_r, c001_w )
362364   AM_RANGE(0x6000, 0xbfff) AM_ROM
363365   AM_RANGE(0xf800, 0xffff) AM_RAM
364366ADDRESS_MAP_END
365367
366368
367static READ8_HANDLER( atamanot_prot_r )
369READ8_MEMBER(ssingles_state::atamanot_prot_r)
368370{
369   ssingles_state *state = space->machine().driver_data<ssingles_state>();
370371   static const char prot_id[] = { "PROGRAM BY KOYAMA" };
371372
372   logerror("%04x %02x\n",offset,state->m_atamanot_prot_state);
373   logerror("%04x %02x\n",offset,m_atamanot_prot_state);
373374
374   switch(state->m_atamanot_prot_state)
375   switch(m_atamanot_prot_state)
375376   {
376377      case 0x20:
377378      case 0x21:
r14845r14846
386387   return 0;
387388}
388389
389static WRITE8_HANDLER( atamanot_prot_w )
390WRITE8_MEMBER(ssingles_state::atamanot_prot_w)
390391{
391   ssingles_state *state = space->machine().driver_data<ssingles_state>();
392392
393   state->m_atamanot_prot_state = data;
393   m_atamanot_prot_state = data;
394394}
395395
396396
397397static ADDRESS_MAP_START( atamanot_map, AS_PROGRAM, 8, ssingles_state )
398   AM_RANGE(0x0000, 0x00ff) AM_WRITE_LEGACY(ssingles_videoram_w)
399   AM_RANGE(0x0800, 0x08ff) AM_WRITE_LEGACY(ssingles_colorram_w)
398   AM_RANGE(0x0000, 0x00ff) AM_WRITE(ssingles_videoram_w)
399   AM_RANGE(0x0800, 0x08ff) AM_WRITE(ssingles_colorram_w)
400400   AM_RANGE(0x0000, 0x3fff) AM_ROM
401401   AM_RANGE(0x4000, 0x47ff) AM_RAM
402402   AM_RANGE(0x6000, 0x60ff) AM_RAM //kanji tilemap?
403403//  AM_RANGE(0x6000, 0x7fff) AM_ROM
404   AM_RANGE(0x8000, 0x83ff) AM_READ_LEGACY(atamanot_prot_r)
404   AM_RANGE(0x8000, 0x83ff) AM_READ(atamanot_prot_r)
405405//  AM_RANGE(0x8000, 0x9fff) AM_ROM AM_REGION("question",0x10000)
406//  AM_RANGE(0xc000, 0xc000) AM_READ_LEGACY(c000_r )
407//  AM_RANGE(0xc001, 0xc001) AM_READWRITE_LEGACY(c001_r, c001_w )
406//  AM_RANGE(0xc000, 0xc000) AM_READ(c000_r )
407//  AM_RANGE(0xc001, 0xc001) AM_READWRITE(c001_r, c001_w )
408408ADDRESS_MAP_END
409409
410410static ADDRESS_MAP_START( ssingles_io_map, AS_IO, 8, ssingles_state )
r14845r14846
430430   AM_RANGE(0x08, 0x08) AM_READNOP
431431   AM_RANGE(0x0a, 0x0a) AM_DEVWRITE_LEGACY("ay2", ay8910_data_w)
432432   AM_RANGE(0x16, 0x16) AM_READ_PORT("DSW0")
433   AM_RANGE(0x18, 0x18) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(atamanot_prot_w)
433   AM_RANGE(0x18, 0x18) AM_READ_PORT("DSW1") AM_WRITE(atamanot_prot_w)
434434   AM_RANGE(0x1c, 0x1c) AM_READ_PORT("INPUTS")
435435//  AM_RANGE(0x1a, 0x1a) AM_WRITENOP //video/crt related
436436   AM_RANGE(0xfe, 0xfe) AM_DEVWRITE("crtc", mc6845_device, address_w)
src/mame/drivers/kinst.c
r14845r14846
148148   UINT32 *m_video_base;
149149   UINT32 *m_control;
150150   const UINT8 *m_control_map;
151   DECLARE_READ32_MEMBER(kinst_control_r);
152   DECLARE_WRITE32_MEMBER(kinst_control_w);
151153};
152154
153155
r14845r14846
320322 *
321323 *************************************/
322324
323static READ32_HANDLER( kinst_control_r )
325READ32_MEMBER(kinst_state::kinst_control_r)
324326{
325   kinst_state *state = space->machine().driver_data<kinst_state>();
326327   UINT32 result;
327328   static const char *const portnames[] = { "P1", "P2", "VOLUME", "UNUSED", "DSW" };
328329
329330   /* apply shuffling */
330   offset = state->m_control_map[offset / 2];
331   result = state->m_control[offset];
331   offset = m_control_map[offset / 2];
332   result = m_control[offset];
332333
333334   switch (offset)
334335   {
335336      case 2:      /* $90 -- sound return */
336         result = input_port_read(space->machine(), portnames[offset]);
337         result = input_port_read(machine(), portnames[offset]);
337338         result &= ~0x0002;
338         if (dcs_control_r(space->machine()) & 0x800)
339         if (dcs_control_r(machine()) & 0x800)
339340            result |= 0x0002;
340341         break;
341342
342343      case 0:      /* $80 */
343344      case 1:      /* $88 */
344345      case 3:      /* $98 */
345         result = input_port_read(space->machine(), portnames[offset]);
346         result = input_port_read(machine(), portnames[offset]);
346347         break;
347348
348349      case 4:      /* $a0 */
349         result = input_port_read(space->machine(), portnames[offset]);
350         if (cpu_get_pc(&space->device()) == 0x802d428)
351            device_spin_until_interrupt(&space->device());
350         result = input_port_read(machine(), portnames[offset]);
351         if (cpu_get_pc(&space.device()) == 0x802d428)
352            device_spin_until_interrupt(&space.device());
352353         break;
353354   }
354355
r14845r14846
356357}
357358
358359
359static WRITE32_HANDLER( kinst_control_w )
360WRITE32_MEMBER(kinst_state::kinst_control_w)
360361{
361   kinst_state *state = space->machine().driver_data<kinst_state>();
362362   UINT32 olddata;
363363
364364   /* apply shuffling */
365   offset = state->m_control_map[offset / 2];
366   olddata = state->m_control[offset];
367   COMBINE_DATA(&state->m_control[offset]);
365   offset = m_control_map[offset / 2];
366   olddata = m_control[offset];
367   COMBINE_DATA(&m_control[offset]);
368368
369369   switch (offset)
370370   {
371371      case 0:      /* $80 - VRAM buffer control */
372372         if (data & 4)
373            state->m_video_base = &state->m_rambase[0x58000/4];
373            m_video_base = &m_rambase[0x58000/4];
374374         else
375            state->m_video_base = &state->m_rambase[0x30000/4];
375            m_video_base = &m_rambase[0x30000/4];
376376         break;
377377
378378      case 1:      /* $88 - sound reset */
379         dcs_reset_w(space->machine(), ~data & 0x01);
379         dcs_reset_w(machine(), ~data & 0x01);
380380         break;
381381
382382      case 2:      /* $90 - sound control */
383         if (!(olddata & 0x02) && (state->m_control[offset] & 0x02))
384            dcs_data_w(space->machine(), state->m_control[3]);
383         if (!(olddata & 0x02) && (m_control[offset] & 0x02))
384            dcs_data_w(machine(), m_control[3]);
385385         break;
386386
387387      case 3:      /* $98 - sound data */
r14845r14846
401401   ADDRESS_MAP_UNMAP_HIGH
402402   AM_RANGE(0x00000000, 0x0007ffff) AM_RAM AM_BASE(m_rambase)
403403   AM_RANGE(0x08000000, 0x087fffff) AM_RAM AM_BASE(m_rambase2)
404   AM_RANGE(0x10000080, 0x100000ff) AM_READWRITE_LEGACY(kinst_control_r, kinst_control_w) AM_BASE(m_control)
404   AM_RANGE(0x10000080, 0x100000ff) AM_READWRITE(kinst_control_r, kinst_control_w) AM_BASE(m_control)
405405   AM_RANGE(0x10000100, 0x1000013f) AM_DEVREADWRITE_LEGACY("ide", kinst_ide_r, kinst_ide_w)
406406   AM_RANGE(0x10000170, 0x10000173) AM_DEVREADWRITE_LEGACY("ide", kinst_ide_extra_r, kinst_ide_extra_w)
407407   AM_RANGE(0x1fc00000, 0x1fc7ffff) AM_ROM AM_REGION("user1", 0) AM_BASE(m_rombase)
src/mame/drivers/sub.c
r14845r14846
124124   UINT8* m_spriteram;
125125   UINT8* m_spriteram2;
126126   UINT8 m_nmi_en;
127   DECLARE_WRITE8_MEMBER(subm_to_sound_w);
128   DECLARE_WRITE8_MEMBER(nmi_mask_w);
127129};
128130
129131static VIDEO_START(sub)
r14845r14846
235237   AM_RANGE(0xf060, 0xf060) AM_READ_PORT("IN0")
236238ADDRESS_MAP_END
237239
238static WRITE8_HANDLER( subm_to_sound_w )
240WRITE8_MEMBER(sub_state::subm_to_sound_w)
239241{
240242   soundlatch_w(space, 0, data & 0xff);
241   cputag_set_input_line(space->machine(), "soundcpu", 0, HOLD_LINE);
243   cputag_set_input_line(machine(), "soundcpu", 0, HOLD_LINE);
242244}
243245
244static WRITE8_HANDLER( nmi_mask_w )
246WRITE8_MEMBER(sub_state::nmi_mask_w)
245247{
246   sub_state *state = space->machine().driver_data<sub_state>();
247248
248   state->m_nmi_en = data & 1;
249   m_nmi_en = data & 1;
249250}
250251
251252static ADDRESS_MAP_START( subm_io, AS_IO, 8, sub_state )
252253   ADDRESS_MAP_GLOBAL_MASK(0xff)
253   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(soundlatch2_r, subm_to_sound_w) // to/from sound CPU
254   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(soundlatch2_r) AM_WRITE(subm_to_sound_w) // to/from sound CPU
254255ADDRESS_MAP_END
255256
256257static ADDRESS_MAP_START( subm_sound_map, AS_PROGRAM, 8, sub_state )
257258   AM_RANGE(0x0000, 0x3fff) AM_ROM
258259   AM_RANGE(0x4000, 0x47ff) AM_RAM
259   AM_RANGE(0x6000, 0x6000) AM_WRITE_LEGACY(nmi_mask_w)
260   AM_RANGE(0x6000, 0x6000) AM_WRITE(nmi_mask_w)
260261ADDRESS_MAP_END
261262
262263static ADDRESS_MAP_START( subm_sound_io, AS_IO, 8, sub_state )
src/mame/drivers/mpoker.c
r14845r14846
183183   UINT8 m_output[8];
184184   UINT8* m_video;
185185   int m_mixdata;
186   DECLARE_READ8_MEMBER(mixport_r);
187   DECLARE_WRITE8_MEMBER(muxed_w);
188   DECLARE_WRITE8_MEMBER(outport0_w);
189   DECLARE_WRITE8_MEMBER(outport1_w);
190   DECLARE_WRITE8_MEMBER(outport2_w);
191   DECLARE_WRITE8_MEMBER(outport3_w);
192   DECLARE_WRITE8_MEMBER(outport4_w);
193   DECLARE_WRITE8_MEMBER(outport5_w);
194   DECLARE_WRITE8_MEMBER(outport6_w);
195   DECLARE_WRITE8_MEMBER(outport7_w);
196   DECLARE_WRITE8_MEMBER(sound_w);
186197};
187198
188199
r14845r14846
230241   }
231242}
232243
233static READ8_HANDLER( mixport_r )
244READ8_MEMBER(mpoker_state::mixport_r)
234245{
235   mpoker_state *state = space->machine().driver_data<mpoker_state>();
236246/*  - bits -
237247    7654 3210
238248    ---- ---x   Unknown.
r14845r14846
247257    If you change the status *every* read, the HW stucks.
248258*/
249259
250   state->m_mixdata = (input_port_read(space->machine(), "SW2") & 0xfd) | (space->machine().rand() & 0x02);
260   m_mixdata = (input_port_read(machine(), "SW2") & 0xfd) | (machine().rand() & 0x02);
251261
252   return state->m_mixdata;
262   return m_mixdata;
253263}
254264
255265/***** Port 0158 *****
r14845r14846
264274    xxx- ----   Unknown.
265275*/
266276
267//static WRITE8_HANDLER( muxed_w )
277//WRITE8_MEMBER(mpoker_state::muxed_w)
268278//{
269279//  popmessage("written : %02X %02X %02X %02X %02X %02X %02X %02X", data & 0x01, data & 0x02, data & 0x04, data & 0x08, data & 0x10, data & 0x20, data & 0x40, data & 0x80);
270280//}
r14845r14846
281291    xxx- ----   Unknown.
282292*/
283293
284static WRITE8_HANDLER( outport0_w )
294WRITE8_MEMBER(mpoker_state::outport0_w)
285295{
286   mpoker_state *state = space->machine().driver_data<mpoker_state>();
287296   output_set_lamp_value(1, (data & 1));         /* Lamp 1 - BET */
288297   output_set_lamp_value(5, (data >> 1) & 1);      /* Lamp 5 - HOLD 1 */
289298
290   state->m_output[0] = data;
291   popmessage("outport0 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
299   m_output[0] = data;
300   popmessage("outport0 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
292301}
293302
294303/***** Port 8001 *****
r14845r14846
303312    xxx- ----   Unknown.
304313*/
305314
306static WRITE8_HANDLER( outport1_w )
315WRITE8_MEMBER(mpoker_state::outport1_w)
307316{
308   mpoker_state *state = space->machine().driver_data<mpoker_state>();
309317   output_set_lamp_value(2, (data & 1));         /* Lamp 2 - DEAL */
310318   output_set_lamp_value(6, (data >> 1) & 1);      /* Lamp 6 - HOLD 2 */
311319
312   state->m_output[1] = data;
313   popmessage("outport1 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
320   m_output[1] = data;
321   popmessage("outport1 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
314322}
315323
316324/***** Port 8002 *****
r14845r14846
325333    xxx- ----   Unknown.
326334*/
327335
328static WRITE8_HANDLER( outport2_w )
336WRITE8_MEMBER(mpoker_state::outport2_w)
329337{
330   mpoker_state *state = space->machine().driver_data<mpoker_state>();
331338   output_set_lamp_value(3, (data & 1));         /* Lamp 3 - CANCEL */
332339   output_set_lamp_value(7, (data >> 1) & 1);      /* Lamp 7 - HOLD 3 */
333340
334   state->m_output[2] = data;
335   popmessage("outport2 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
341   m_output[2] = data;
342   popmessage("outport2 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
336343}
337344
338345/***** Port 8003 *****
r14845r14846
347354    xxx- ----   Unknown.
348355*/
349356
350static WRITE8_HANDLER( outport3_w )
357WRITE8_MEMBER(mpoker_state::outport3_w)
351358{
352   mpoker_state *state = space->machine().driver_data<mpoker_state>();
353359   output_set_lamp_value(4, (data & 1));         /* Lamp 4 - STAND */
354360   output_set_lamp_value(8, (data >> 1) & 1);      /* Lamp 8 - HOLD 4 */
355361
356   state->m_output[3] = data;
357   popmessage("outport3 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
362   m_output[3] = data;
363   popmessage("outport3 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
358364}
359365
360366/***** Port 8004 *****
r14845r14846
369375    xxx- ----   Unknown.
370376*/
371377
372static WRITE8_HANDLER( outport4_w )
378WRITE8_MEMBER(mpoker_state::outport4_w)
373379{
374   mpoker_state *state = space->machine().driver_data<mpoker_state>();
375380   output_set_lamp_value(9, (data >> 1) & 1);      /* Lamp 9 - HOLD 5 */
376381
377   state->m_output[4] = data;
378   popmessage("outport4 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
382   m_output[4] = data;
383   popmessage("outport4 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
379384}
380385
381386/***** Port 8005 *****
r14845r14846
390395    xxx- ----   Unknown.
391396*/
392397
393static WRITE8_HANDLER( outport5_w )
398WRITE8_MEMBER(mpoker_state::outport5_w)
394399{
395   mpoker_state *state = space->machine().driver_data<mpoker_state>();
396   state->m_output[5] = data;
397   popmessage("outport5 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
400   m_output[5] = data;
401   popmessage("outport5 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
398402}
399403
400404/***** Port 8006 *****
r14845r14846
409413    xxx- ----   Unknown.
410414*/
411415
412static WRITE8_HANDLER( outport6_w )
416WRITE8_MEMBER(mpoker_state::outport6_w)
413417{
414   mpoker_state *state = space->machine().driver_data<mpoker_state>();
415   coin_counter_w(space->machine(), 1, data & 0x02);   /* Payout pulse */
418   coin_counter_w(machine(), 1, data & 0x02);   /* Payout pulse */
416419
417   state->m_output[6] = data;
418   popmessage("outport6 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
420   m_output[6] = data;
421   popmessage("outport6 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
419422}
420423
421424/***** Port 8007 *****
r14845r14846
430433    xxx- ----   Unknown.
431434*/
432435
433static WRITE8_HANDLER( outport7_w )
436WRITE8_MEMBER(mpoker_state::outport7_w)
434437{
435   mpoker_state *state = space->machine().driver_data<mpoker_state>();
436   coin_counter_w(space->machine(), 0, data & 0x02);   /* Coin pulse */
438   coin_counter_w(machine(), 0, data & 0x02);   /* Coin pulse */
437439
438   state->m_output[7] = data;
439   popmessage("outport7 : %02X %02X %02X %02X %02X %02X %02X %02X", state->m_output[0], state->m_output[1], state->m_output[2], state->m_output[3], state->m_output[4], state->m_output[5], state->m_output[6], state->m_output[7]);
440   m_output[7] = data;
441   popmessage("outport7 : %02X %02X %02X %02X %02X %02X %02X %02X", m_output[0], m_output[1], m_output[2], m_output[3], m_output[4], m_output[5], m_output[6], m_output[7]);
440442}
441443
442444
r14845r14846
462464   05   | ---- | ---- | ---- | bit2
463465
464466
465//static WRITE8_HANDLER( sound_w )
467WRITE8_MEMBER(mpoker_state::sound_w)
466468//{
467//  dac_data_w(space->machine().device("dac"), data);
469//  dac_data_w(machine().device("dac"), data);
468470//}
469471*/
470472
r14845r14846
474476   AM_RANGE(0x3800, 0x38ff) AM_RAM AM_SHARE("nvram")   /* NVRAM = 2x SCM5101E */
475477   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_BASE(m_video)   /* 4x MM2114N-3 */
476478   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("SW1")
477   AM_RANGE(0x8001, 0x8001) AM_READ_LEGACY(mixport_r) /* DIP switch bank 2 + a sort of watchdog */
479   AM_RANGE(0x8001, 0x8001) AM_READ(mixport_r) /* DIP switch bank 2 + a sort of watchdog */
478480   AM_RANGE(0x8002, 0x8002) AM_READ_PORT("IN1")
479481   AM_RANGE(0x8003, 0x8003) AM_READ_PORT("IN2")
480   AM_RANGE(0x8000, 0x8000) AM_WRITE_LEGACY(outport0_w)
481   AM_RANGE(0x8001, 0x8001) AM_WRITE_LEGACY(outport1_w)
482   AM_RANGE(0x8002, 0x8002) AM_WRITE_LEGACY(outport2_w)
483   AM_RANGE(0x8003, 0x8003) AM_WRITE_LEGACY(outport3_w)
484   AM_RANGE(0x8004, 0x8004) AM_WRITE_LEGACY(outport4_w)
485   AM_RANGE(0x8005, 0x8005) AM_WRITE_LEGACY(outport5_w)
486   AM_RANGE(0x8006, 0x8006) AM_WRITE_LEGACY(outport6_w)
487   AM_RANGE(0x8007, 0x8007) AM_WRITE_LEGACY(outport7_w)
482   AM_RANGE(0x8000, 0x8000) AM_WRITE(outport0_w)
483   AM_RANGE(0x8001, 0x8001) AM_WRITE(outport1_w)
484   AM_RANGE(0x8002, 0x8002) AM_WRITE(outport2_w)
485   AM_RANGE(0x8003, 0x8003) AM_WRITE(outport3_w)
486   AM_RANGE(0x8004, 0x8004) AM_WRITE(outport4_w)
487   AM_RANGE(0x8005, 0x8005) AM_WRITE(outport5_w)
488   AM_RANGE(0x8006, 0x8006) AM_WRITE(outport6_w)
489   AM_RANGE(0x8007, 0x8007) AM_WRITE(outport7_w)
488490
489491ADDRESS_MAP_END
490492
src/mame/drivers/skyarmy.c
r14845r14846
4141   UINT8 *m_scrollram;
4242   tilemap_t* m_tilemap;
4343   int m_nmi;
44   DECLARE_WRITE8_MEMBER(skyarmy_flip_screen_x_w);
45   DECLARE_WRITE8_MEMBER(skyarmy_flip_screen_y_w);
46   DECLARE_WRITE8_MEMBER(skyarmy_videoram_w);
47   DECLARE_WRITE8_MEMBER(skyarmy_colorram_w);
48   DECLARE_WRITE8_MEMBER(nmi_enable_w);
4449};
4550
46static WRITE8_HANDLER( skyarmy_flip_screen_x_w )
51WRITE8_MEMBER(skyarmy_state::skyarmy_flip_screen_x_w)
4752{
48   flip_screen_x_set(space->machine(), data & 0x01);
53   flip_screen_x_set(machine(), data & 0x01);
4954}
5055
51static WRITE8_HANDLER( skyarmy_flip_screen_y_w )
56WRITE8_MEMBER(skyarmy_state::skyarmy_flip_screen_y_w)
5257{
53   flip_screen_y_set(space->machine(), data & 0x01);
58   flip_screen_y_set(machine(), data & 0x01);
5459}
5560
5661static TILE_GET_INFO( get_skyarmy_tile_info )
r14845r14846
6267   SET_TILE_INFO( 0, code, attr, 0);
6368}
6469
65static WRITE8_HANDLER( skyarmy_videoram_w )
70WRITE8_MEMBER(skyarmy_state::skyarmy_videoram_w)
6671{
67   skyarmy_state *state = space->machine().driver_data<skyarmy_state>();
6872
69   state->m_videoram[offset] = data;
70   state->m_tilemap->mark_tile_dirty(offset);
73   m_videoram[offset] = data;
74   m_tilemap->mark_tile_dirty(offset);
7175}
7276
73static WRITE8_HANDLER( skyarmy_colorram_w )
77WRITE8_MEMBER(skyarmy_state::skyarmy_colorram_w)
7478{
75   skyarmy_state *state = space->machine().driver_data<skyarmy_state>();
7679
77   state->m_colorram[offset] = data;
78   state->m_tilemap->mark_tile_dirty(offset);
80   m_colorram[offset] = data;
81   m_tilemap->mark_tile_dirty(offset);
7982}
8083
8184static PALETTE_INIT( skyarmy )
r14845r14846
154157}
155158
156159
157static WRITE8_HANDLER( nmi_enable_w )
160WRITE8_MEMBER(skyarmy_state::nmi_enable_w)
158161{
159   skyarmy_state *state = space->machine().driver_data<skyarmy_state>();
160162
161   state->m_nmi=data & 1;
163   m_nmi=data & 1;
162164}
163165
164166
165167static ADDRESS_MAP_START( skyarmy_map, AS_PROGRAM, 8, skyarmy_state )
166168   AM_RANGE(0x0000, 0x7fff) AM_ROM
167169   AM_RANGE(0x8000, 0x87ff) AM_RAM
168   AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE_LEGACY(skyarmy_videoram_w) AM_BASE(m_videoram) /* Video RAM */
169   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE_LEGACY(skyarmy_colorram_w) AM_BASE(m_colorram) /* Color RAM */
170   AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(skyarmy_videoram_w) AM_BASE(m_videoram) /* Video RAM */
171   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(skyarmy_colorram_w) AM_BASE(m_colorram) /* Color RAM */
170172   AM_RANGE(0x9800, 0x983f) AM_RAM AM_BASE(m_spriteram) /* Sprites */
171173   AM_RANGE(0x9840, 0x985f) AM_RAM AM_BASE(m_scrollram)  /* Scroll RAM */
172174   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW")
173175   AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P1")
174176   AM_RANGE(0xa002, 0xa002) AM_READ_PORT("P2")
175177   AM_RANGE(0xa003, 0xa003) AM_READ_PORT("SYSTEM")
176   AM_RANGE(0xa004, 0xa004) AM_WRITE_LEGACY(nmi_enable_w) // ???
177   AM_RANGE(0xa005, 0xa005) AM_WRITE_LEGACY(skyarmy_flip_screen_x_w)
178   AM_RANGE(0xa006, 0xa006) AM_WRITE_LEGACY(skyarmy_flip_screen_y_w)
178   AM_RANGE(0xa004, 0xa004) AM_WRITE(nmi_enable_w) // ???
179   AM_RANGE(0xa005, 0xa005) AM_WRITE(skyarmy_flip_screen_x_w)
180   AM_RANGE(0xa006, 0xa006) AM_WRITE(skyarmy_flip_screen_y_w)
179181   AM_RANGE(0xa007, 0xa007) AM_WRITENOP
180182ADDRESS_MAP_END
181183
src/mame/drivers/suprgolf.c
r14845r14846
4747   UINT8 m_palette_switch;
4848   UINT8 m_bg_vreg_test;
4949   UINT8 m_toggle;
50   DECLARE_READ8_MEMBER(suprgolf_videoram_r);
51   DECLARE_WRITE8_MEMBER(suprgolf_videoram_w);
52   DECLARE_READ8_MEMBER(suprgolf_bg_vram_r);
53   DECLARE_WRITE8_MEMBER(suprgolf_bg_vram_w);
54   DECLARE_WRITE8_MEMBER(suprgolf_pen_w);
55   DECLARE_WRITE8_MEMBER(adpcm_data_w);
56   DECLARE_WRITE8_MEMBER(rom2_bank_select_w);
5057};
5158
5259static TILE_GET_INFO( get_tile_info )
r14845r14846
120127   return 0;
121128}
122129
123static READ8_HANDLER( suprgolf_videoram_r )
130READ8_MEMBER(suprgolf_state::suprgolf_videoram_r)
124131{
125   suprgolf_state *state = space->machine().driver_data<suprgolf_state>();
126132
127   if (state->m_palette_switch)
128      return state->m_paletteram[offset];
133   if (m_palette_switch)
134      return m_paletteram[offset];
129135   else
130      return state->m_videoram[offset];
136      return m_videoram[offset];
131137}
132138
133static WRITE8_HANDLER( suprgolf_videoram_w )
139WRITE8_MEMBER(suprgolf_state::suprgolf_videoram_w)
134140{
135   suprgolf_state *state = space->machine().driver_data<suprgolf_state>();
136141
137   if(state->m_palette_switch)
142   if(m_palette_switch)
138143   {
139144      int r,g,b,datax;
140      state->m_paletteram[offset] = data;
145      m_paletteram[offset] = data;
141146      offset>>=1;
142      datax = state->m_paletteram[offset*2] + 256*state->m_paletteram[offset*2 + 1];
147      datax = m_paletteram[offset*2] + 256*m_paletteram[offset*2 + 1];
143148
144149      b = (datax & 0x8000) ? 0 : ((datax)&0x001f)>>0;
145150      g = (datax & 0x8000) ? 0 : ((datax)&0x03e0)>>5;
146151      r = (datax & 0x8000) ? 0 : ((datax)&0x7c00)>>10;
147152
148      palette_set_color_rgb(space->machine(), offset, pal5bit(r), pal5bit(g), pal5bit(b));
153      palette_set_color_rgb(machine(), offset, pal5bit(r), pal5bit(g), pal5bit(b));
149154   }
150155   else
151156   {
152      state->m_videoram[offset] = data;
153      state->m_tilemap->mark_tile_dirty((offset & 0x7fe) >> 1);
157      m_videoram[offset] = data;
158      m_tilemap->mark_tile_dirty((offset & 0x7fe) >> 1);
154159   }
155160}
156161
r14845r14846
178183   //  printf("Video regs with data %02x activated\n",data);
179184}
180185
181static READ8_HANDLER( suprgolf_bg_vram_r )
186READ8_MEMBER(suprgolf_state::suprgolf_bg_vram_r)
182187{
183   suprgolf_state *state = space->machine().driver_data<suprgolf_state>();
184188
185   return state->m_bg_vram[offset+state->m_bg_bank*0x2000];
189   return m_bg_vram[offset+m_bg_bank*0x2000];
186190}
187191
188static WRITE8_HANDLER( suprgolf_bg_vram_w )
192WRITE8_MEMBER(suprgolf_state::suprgolf_bg_vram_w)
189193{
190   suprgolf_state *state = space->machine().driver_data<suprgolf_state>();
191194   UINT8 hi_nibble,lo_nibble;
192195   UINT8 hi_dirty_dot,lo_dirty_dot; // helpers
193196
r14845r14846
198201
199202   if(hi_nibble == 0xf0)
200203   {
201      hi_nibble = state->m_bg_vram[offset+state->m_bg_bank*0x2000] & 0xf0;
202      if(!(state->m_vreg_pen & 0x80) && (!(state->m_bg_bank & 0x10)))
204      hi_nibble = m_bg_vram[offset+m_bg_bank*0x2000] & 0xf0;
205      if(!(m_vreg_pen & 0x80) && (!(m_bg_bank & 0x10)))
203206         hi_dirty_dot = 0;
204207   }
205208
206209   if(lo_nibble == 0x0f)
207210   {
208      lo_nibble = state->m_bg_vram[offset+state->m_bg_bank*0x2000] & 0x0f;
209      if(!(state->m_vreg_pen & 0x80) && (!(state->m_bg_bank & 0x10)))
211      lo_nibble = m_bg_vram[offset+m_bg_bank*0x2000] & 0x0f;
212      if(!(m_vreg_pen & 0x80) && (!(m_bg_bank & 0x10)))
210213         lo_dirty_dot = 0;
211214   }
212215
213   if(state->m_vreg_pen & 0x80 || state->m_bg_bank & 0x10)
214      state->m_bg_vram[offset+state->m_bg_bank*0x2000] = data;
216   if(m_vreg_pen & 0x80 || m_bg_bank & 0x10)
217      m_bg_vram[offset+m_bg_bank*0x2000] = data;
215218   else
216      state->m_bg_vram[offset+state->m_bg_bank*0x2000] = hi_nibble|lo_nibble;
219      m_bg_vram[offset+m_bg_bank*0x2000] = hi_nibble|lo_nibble;
217220
218   if(state->m_bg_bank & 0x10)
221   if(m_bg_bank & 0x10)
219222   {
220223      if(hi_dirty_dot)
221         state->m_fg_fb[(offset+(state->m_bg_bank & 0x0f)*0x2000)*2+1] = (state->m_vreg_pen & 0x7f)<<4 | ((state->m_bg_vram[offset+state->m_bg_bank*0x2000] & 0xf0)>>4);
224         m_fg_fb[(offset+(m_bg_bank & 0x0f)*0x2000)*2+1] = (m_vreg_pen & 0x7f)<<4 | ((m_bg_vram[offset+m_bg_bank*0x2000] & 0xf0)>>4);
222225      if(lo_dirty_dot)
223         state->m_fg_fb[(offset+(state->m_bg_bank & 0x0f)*0x2000)*2+0] = (state->m_vreg_pen & 0x7f)<<4 | ((state->m_bg_vram[offset+state->m_bg_bank*0x2000] & 0x0f)>>0);
226         m_fg_fb[(offset+(m_bg_bank & 0x0f)*0x2000)*2+0] = (m_vreg_pen & 0x7f)<<4 | ((m_bg_vram[offset+m_bg_bank*0x2000] & 0x0f)>>0);
224227   }
225228   else
226229   {
227230      if(hi_dirty_dot)
228         state->m_bg_fb[(offset+(state->m_bg_bank & 0x0f)*0x2000)*2+1] = (state->m_vreg_pen & 0x7f)<<4 | ((state->m_bg_vram[offset+state->m_bg_bank*0x2000] & 0xf0)>>4);
231         m_bg_fb[(offset+(m_bg_bank & 0x0f)*0x2000)*2+1] = (m_vreg_pen & 0x7f)<<4 | ((m_bg_vram[offset+m_bg_bank*0x2000] & 0xf0)>>4);
229232      if(lo_dirty_dot)
230         state->m_bg_fb[(offset+(state->m_bg_bank & 0x0f)*0x2000)*2+0] = (state->m_vreg_pen & 0x7f)<<4 | ((state->m_bg_vram[offset+state->m_bg_bank*0x2000] & 0x0f)>>0);
233         m_bg_fb[(offset+(m_bg_bank & 0x0f)*0x2000)*2+0] = (m_vreg_pen & 0x7f)<<4 | ((m_bg_vram[offset+m_bg_bank*0x2000] & 0x0f)>>0);
231234   }
232235}
233236
234static WRITE8_HANDLER( suprgolf_pen_w )
237WRITE8_MEMBER(suprgolf_state::suprgolf_pen_w)
235238{
236   suprgolf_state *state = space->machine().driver_data<suprgolf_state>();
237239
238   state->m_vreg_pen = data;
240   m_vreg_pen = data;
239241}
240242
241static WRITE8_HANDLER( adpcm_data_w )
243WRITE8_MEMBER(suprgolf_state::adpcm_data_w)
242244{
243   suprgolf_state *state = space->machine().driver_data<suprgolf_state>();
244245
245   state->m_msm5205next = data;
246   m_msm5205next = data;
246247}
247248
248249static READ8_DEVICE_HANDLER( rom_bank_select_r )
r14845r14846
268269   flip_screen_set(device->machine(), data & 0x80);
269270}
270271
271static WRITE8_HANDLER( rom2_bank_select_w )
272WRITE8_MEMBER(suprgolf_state::rom2_bank_select_w)
272273{
273   UINT8 *region_base = space->machine().region("user2")->base();
274//  mame_printf_debug("ROM_BANK 0x4000 - %X @%X\n",data,cpu_get_previouspc(&space->device()));
274   UINT8 *region_base = machine().region("user2")->base();
275//  mame_printf_debug("ROM_BANK 0x4000 - %X @%X\n",data,cpu_get_previouspc(&space.device()));
275276
276   memory_set_bankptr(space->machine(), "bank1", region_base + (data&0x0f) * 0x4000);
277   memory_set_bankptr(machine(), "bank1", region_base + (data&0x0f) * 0x4000);
277278
278279   if(data & 0xf0)
279280      printf("Rom bank select 2 with data %02x activated\n",data);
r14845r14846
302303static ADDRESS_MAP_START( suprgolf_map, AS_PROGRAM, 8, suprgolf_state )
303304   AM_RANGE(0x0000, 0x3fff) AM_ROM
304305   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
305   AM_RANGE(0x4000, 0x4000) AM_WRITE_LEGACY(rom2_bank_select_w )
306   AM_RANGE(0x4000, 0x4000) AM_WRITE(rom2_bank_select_w )
306307   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2")
307   AM_RANGE(0xc000, 0xdfff) AM_READWRITE_LEGACY(suprgolf_bg_vram_r, suprgolf_bg_vram_w ) // banked background vram
308   AM_RANGE(0xe000, 0xefff) AM_READWRITE_LEGACY(suprgolf_videoram_r, suprgolf_videoram_w ) AM_BASE(m_videoram) //foreground vram + paletteram
309   AM_RANGE(0xf000, 0xf000) AM_WRITE_LEGACY(suprgolf_pen_w )
308   AM_RANGE(0xc000, 0xdfff) AM_READWRITE(suprgolf_bg_vram_r, suprgolf_bg_vram_w ) // banked background vram
309   AM_RANGE(0xe000, 0xefff) AM_READWRITE(suprgolf_videoram_r, suprgolf_videoram_w ) AM_BASE(m_videoram) //foreground vram + paletteram
310   AM_RANGE(0xf000, 0xf000) AM_WRITE(suprgolf_pen_w )
310311   AM_RANGE(0xf800, 0xffff) AM_RAM
311312ADDRESS_MAP_END
312313
r14845r14846
315316   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
316317   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
317318   AM_RANGE(0x08, 0x09) AM_DEVREADWRITE_LEGACY("ymsnd", ym2203_r, ym2203_w)
318   AM_RANGE(0x0c, 0x0c) AM_WRITE_LEGACY(adpcm_data_w)
319   AM_RANGE(0x0c, 0x0c) AM_WRITE(adpcm_data_w)
319320 ADDRESS_MAP_END
320321
321322static INPUT_PORTS_START( suprgolf )
src/mame/drivers/adp.c
r14845r14846
175175   /* devices */
176176   device_t *m_maincpu;
177177   device_t *m_duart;
178   DECLARE_READ16_MEMBER(test_r);
179   DECLARE_WRITE16_MEMBER(wh2_w);
180   DECLARE_WRITE8_MEMBER(ramdac_io_w);
181   DECLARE_READ8_MEMBER(h63484_rom_r);
178182};
179183
180184
r14845r14846
376380    }
377381}
378382
379static READ16_HANDLER( test_r )
383READ16_MEMBER(adp_state::test_r)
380384{
381   adp_state *state = space->machine().driver_data<adp_state>();
382385   int value = 0xffff;
383386
384   switch (state->m_mux_data)
387   switch (m_mux_data)
385388   {
386      case 0x00: value = input_port_read(space->machine(), "x0"); break;
387      case 0x01: value = input_port_read(space->machine(), "x1"); break;
388      case 0x02: value = input_port_read(space->machine(), "x2"); break;
389      case 0x03: value = input_port_read(space->machine(), "1P_UP"); break;
390      case 0x04: value = input_port_read(space->machine(), "1P_B1"); break;
391      case 0x05: value = input_port_read(space->machine(), "x5"); break;
392      case 0x06: value = input_port_read(space->machine(), "1P_RIGHT"); break;
393      case 0x07: value = input_port_read(space->machine(), "1P_DOWN"); break;
394      case 0x08: value = input_port_read(space->machine(), "1P_LEFT"); break;
395      case 0x09: value = input_port_read(space->machine(), "x9"); break;
396      case 0x0a: value = input_port_read(space->machine(), "x10"); break;
397      case 0x0b: value = input_port_read(space->machine(), "x11"); break;
398      case 0x0c: value = input_port_read(space->machine(), "x12"); break;
399      case 0x0d: value = input_port_read(space->machine(), "x13"); break;
400      case 0x0e: value = input_port_read(space->machine(), "1P_START"); break;
401      case 0x0f: value = input_port_read(space->machine(), "1P_COIN"); break;
389      case 0x00: value = input_port_read(machine(), "x0"); break;
390      case 0x01: value = input_port_read(machine(), "x1"); break;
391      case 0x02: value = input_port_read(machine(), "x2"); break;
392      case 0x03: value = input_port_read(machine(), "1P_UP"); break;
393      case 0x04: value = input_port_read(machine(), "1P_B1"); break;
394      case 0x05: value = input_port_read(machine(), "x5"); break;
395      case 0x06: value = input_port_read(machine(), "1P_RIGHT"); break;
396      case 0x07: value = input_port_read(machine(), "1P_DOWN"); break;
397      case 0x08: value = input_port_read(machine(), "1P_LEFT"); break;
398      case 0x09: value = input_port_read(machine(), "x9"); break;
399      case 0x0a: value = input_port_read(machine(), "x10"); break;
400      case 0x0b: value = input_port_read(machine(), "x11"); break;
401      case 0x0c: value = input_port_read(machine(), "x12"); break;
402      case 0x0d: value = input_port_read(machine(), "x13"); break;
403      case 0x0e: value = input_port_read(machine(), "1P_START"); break;
404      case 0x0f: value = input_port_read(machine(), "1P_COIN"); break;
402405   }
403406
404   state->m_mux_data++;
405   state->m_mux_data &= 0xf;
407   m_mux_data++;
408   m_mux_data &= 0xf;
406409/*
407    switch (space->machine().rand() & 3)
410    switch (machine().rand() & 3)
408411    {
409412        case 0:
410413            return 0;
411414        case 1:
412415            return 0xffff;
413416        default:
414            return space->machine().rand() & 0xffff;
417            return machine().rand() & 0xffff;
415418    }
416419*/
417   return value | (space->machine().rand() & 0x0000);
420   return value | (machine().rand() & 0x0000);
418421}
419422
420423/*???*/
421static WRITE16_HANDLER(wh2_w)
424WRITE16_MEMBER(adp_state::wh2_w)
422425{
423   adp_state *state = space->machine().driver_data<adp_state>();
424   state->m_register_active = data;
426   m_register_active = data;
425427}
426428
427429static READ8_DEVICE_HANDLER(t2_r)
r14845r14846
447449   AM_RANGE(0x000000, 0x0fffff) AM_ROM
448450   AM_RANGE(0x800080, 0x800081) AM_DEVREADWRITE("h63484", h63484_device, status_r, address_w)
449451   AM_RANGE(0x800082, 0x800083) AM_DEVREADWRITE("h63484", h63484_device, data_r, data_w)
450   AM_RANGE(0x800100, 0x800101) AM_READWRITE_LEGACY(test_r,wh2_w) //related to input
452   AM_RANGE(0x800100, 0x800101) AM_READWRITE(test_r,wh2_w) //related to input
451453   AM_RANGE(0x800140, 0x800143) AM_DEVREADWRITE8_LEGACY("aysnd", ay8910_r, ay8910_address_data_w, 0x00ff) //18b too
452454   AM_RANGE(0x800180, 0x80019f) AM_DEVREADWRITE8_LEGACY("duart68681", duart68681_r, duart68681_w, 0xff )
453455   AM_RANGE(0xffc000, 0xffffff) AM_RAM
r14845r14846
472474   AM_RANGE(0x600006, 0x600007) AM_NOP //(r) is discarded (watchdog?)
473475ADDRESS_MAP_END
474476
475static WRITE8_HANDLER( ramdac_io_w )
477WRITE8_MEMBER(adp_state::ramdac_io_w)
476478{
477   adp_state *state = space->machine().driver_data<adp_state>();
478479   switch(offset)
479480   {
480481      case 0:
481         state->m_pal.offs = data;
482         state->m_pal.offs_internal = 0;
482         m_pal.offs = data;
483         m_pal.offs_internal = 0;
483484         break;
484485      case 2:
485486         //mask pen reg
486487         break;
487488      case 1:
488         switch(state->m_pal.offs_internal)
489         switch(m_pal.offs_internal)
489490         {
490491            case 0:
491               state->m_pal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
492               state->m_pal.offs_internal++;
492               m_pal.r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
493               m_pal.offs_internal++;
493494               break;
494495            case 1:
495               state->m_pal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
496               state->m_pal.offs_internal++;
496               m_pal.g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
497               m_pal.offs_internal++;
497498               break;
498499            case 2:
499               state->m_pal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
500               palette_set_color(space->machine(), state->m_pal.offs, MAKE_RGB(state->m_pal.r, state->m_pal.g, state->m_pal.b));
501               state->m_pal.offs_internal = 0;
502               state->m_pal.offs++;
503               state->m_pal.offs&=0xff;
500               m_pal.b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4);
501               palette_set_color(machine(), m_pal.offs, MAKE_RGB(m_pal.r, m_pal.g, m_pal.b));
502               m_pal.offs_internal = 0;
503               m_pal.offs++;
504               m_pal.offs&=0xff;
504505               break;
505506         }
506507
r14845r14846
512513   AM_RANGE(0x000000, 0x0fffff) AM_ROM
513514   AM_RANGE(0x800080, 0x800081) AM_DEVREADWRITE("h63484", h63484_device, status_r, address_w)
514515   AM_RANGE(0x800082, 0x800083) AM_DEVREADWRITE("h63484", h63484_device, data_r, data_w)
515   AM_RANGE(0x800088, 0x80008d) AM_WRITE8_LEGACY(ramdac_io_w, 0x00ff)
516   AM_RANGE(0x800088, 0x80008d) AM_WRITE8(ramdac_io_w, 0x00ff)
516517   AM_RANGE(0x800100, 0x800101) AM_RAM //???
517518   AM_RANGE(0x800140, 0x800143) AM_DEVREADWRITE8_LEGACY("aysnd", ay8910_r, ay8910_address_data_w, 0x00ff) //18b too
518519   AM_RANGE(0x800180, 0x80019f) AM_DEVREADWRITE8_LEGACY("duart68681", duart68681_r, duart68681_w, 0xff )
r14845r14846
634635   DEVCB_NULL
635636};
636637
637static READ8_HANDLER( h63484_rom_r )
638READ8_MEMBER(adp_state::h63484_rom_r)
638639{
639   UINT8 *rom = space->machine().region("gfx1")->base();
640   UINT8 *rom = machine().region("gfx1")->base();
640641
641642   return rom[offset];
642643}
643644
644645static ADDRESS_MAP_START( adp_h63484_map, AS_0, 8, adp_state )
645646   AM_RANGE(0x00000, 0x7ffff) AM_DEVREADWRITE("h63484",h63484_device, vram_r,vram_w)
646   AM_RANGE(0x80000, 0xbffff) AM_READ_LEGACY(h63484_rom_r)
647   AM_RANGE(0x80000, 0xbffff) AM_READ(h63484_rom_r)
647648ADDRESS_MAP_END
648649
649650static ADDRESS_MAP_START( fashiong_h63484_map, AS_0, 8, adp_state )
src/mame/drivers/kas89.c
r14845r14846
218218   device_t *m_audiocpu;
219219
220220   required_device<v9938_device> m_v9938;
221   DECLARE_WRITE8_MEMBER(mux_w);
222   DECLARE_READ8_MEMBER(mux_r);
223   DECLARE_WRITE8_MEMBER(control_w);
224   DECLARE_WRITE8_MEMBER(sound_comm_w);
225   DECLARE_WRITE8_MEMBER(int_ack_w);
226   DECLARE_WRITE8_MEMBER(led_mux_data_w);
227   DECLARE_WRITE8_MEMBER(led_mux_select_w);
221228};
222229
223230#define VDP_MEM             0x40000
r14845r14846
267274*  Input Ports Demux & Common Routines  *
268275****************************************/
269276
270static WRITE8_HANDLER( mux_w )
277WRITE8_MEMBER(kas89_state::mux_w)
271278{
272279/*  - bits -
273280    7654 3210
r14845r14846
275282
276283    Writes: 1-2-4-8-10-20-40-3f. Only 80 (for DSW) at very begining...
277284*/
278   kas89_state *state = space->machine().driver_data<kas89_state>();
279   state->m_mux_data = data;
285
286   m_mux_data = data;
280287}
281288
282static READ8_HANDLER( mux_r )
289READ8_MEMBER(kas89_state::mux_r)
283290{
284   kas89_state *state = space->machine().driver_data<kas89_state>();
285   switch(state->m_mux_data)
291   switch(m_mux_data)
286292   {
287      case 0x01: return input_port_read(space->machine(), "PL1");
288      case 0x02: return input_port_read(space->machine(), "PL2");
289      case 0x04: return input_port_read(space->machine(), "PL3");
290      case 0x08: return input_port_read(space->machine(), "PL4");
291      case 0x10: return input_port_read(space->machine(), "PL5");
292      case 0x20: return input_port_read(space->machine(), "PL6");
293      case 0x01: return input_port_read(machine(), "PL1");
294      case 0x02: return input_port_read(machine(), "PL2");
295      case 0x04: return input_port_read(machine(), "PL3");
296      case 0x08: return input_port_read(machine(), "PL4");
297      case 0x10: return input_port_read(machine(), "PL5");
298      case 0x20: return input_port_read(machine(), "PL6");
293299      case 0x40:
294300      {
295         output_set_lamp_value(37, 1 - ((input_port_read(space->machine(), "SVC") >> 5) & 1));   /* Operator Key LAMP */
296         return input_port_read(space->machine(), "SVC");
301         output_set_lamp_value(37, 1 - ((input_port_read(machine(), "SVC") >> 5) & 1));   /* Operator Key LAMP */
302         return input_port_read(machine(), "SVC");
297303      }
298      case 0x80: return input_port_read(space->machine(), "DSW");   /* Polled at $162a through NMI routine */
299      case 0x3f: return input_port_read(space->machine(), "UNK");
304      case 0x80: return input_port_read(machine(), "DSW");   /* Polled at $162a through NMI routine */
305      case 0x3f: return input_port_read(machine(), "UNK");
300306   }
301307
302   logerror("Mux_data %02X\n", state->m_mux_data);
303   return state->m_mux_data;
308   logerror("Mux_data %02X\n", m_mux_data);
309   return m_mux_data;
304310}
305311
306312static TIMER_DEVICE_CALLBACK ( kas89_nmi_cb )
r14845r14846
319325}
320326
321327
322static WRITE8_HANDLER( control_w )
328WRITE8_MEMBER(kas89_state::control_w)
323329{
324330/*  - bits -
325331    7654 3210
r14845r14846
329335    -x-- ----   NMI enable. Active high.
330336    x-xx x---   Unused.
331337*/
332   kas89_state *state = space->machine().driver_data<kas89_state>();
333   state->m_main_nmi_enable = data & 0x40;
334338
335   coin_counter_w(space->machine(), 0, (data ^ 0xff) & 0x01);   /* Credits In counter */
336   coin_counter_w(space->machine(), 1, (data ^ 0xff) & 0x02);   /* Credits Out counter */
339   m_main_nmi_enable = data & 0x40;
340
341   coin_counter_w(machine(), 0, (data ^ 0xff) & 0x01);   /* Credits In counter */
342   coin_counter_w(machine(), 1, (data ^ 0xff) & 0x02);   /* Credits Out counter */
337343}
338344
339static WRITE8_HANDLER( sound_comm_w )
345WRITE8_MEMBER(kas89_state::sound_comm_w)
340346{
341347/*  This port is used mainly for sound latch, but bit6 activates a
342348    sort of output port (maybe for a sign?)
r14845r14846
351357    is written to the outport... (maybe to clear the possible sign).
352358
353359*/
354   kas89_state *state = space->machine().driver_data<kas89_state>();
355360
361
356362   if (data & 0x40)
357363   {
358      state->m_outdata = (data ^ 0x40);   /* Pure data. Without the activator bit */
364      m_outdata = (data ^ 0x40);   /* Pure data. Without the activator bit */
359365
360      if (state->m_outdata == 0x3f)
366      if (m_outdata == 0x3f)
361367      {
362368         UINT8 i;
363369         for ( i = 0; i < 37; i++ )
r14845r14846
366372         }
367373      }
368374
369      logerror("Outdata: Write %02x\n", state->m_outdata);
375      logerror("Outdata: Write %02x\n", m_outdata);
370376   }
371377
372378   else
373379   {
374380      soundlatch_w(space, 0, data);
375      device_set_input_line(state->m_audiocpu, 0, ASSERT_LINE );
381      device_set_input_line(m_audiocpu, 0, ASSERT_LINE );
376382   }
377383}
378384
379static WRITE8_HANDLER( int_ack_w )
385WRITE8_MEMBER(kas89_state::int_ack_w)
380386{
381   kas89_state *state = space->machine().driver_data<kas89_state>();
382   device_set_input_line(state->m_audiocpu, 0, CLEAR_LINE );
387   device_set_input_line(m_audiocpu, 0, CLEAR_LINE );
383388}
384389
385390
r14845r14846
387392*   Output Ports Demux & LEDs Support   *
388393****************************************/
389394
390static WRITE8_HANDLER( led_mux_data_w )
395WRITE8_MEMBER(kas89_state::led_mux_data_w)
391396{
392397/*  - bits -
393398    7654 3210
394399    xxxx xxxx   LEDs data.
395400*/
396   kas89_state *state = space->machine().driver_data<kas89_state>();
397   state->m_leds_mux_data = data;
401
402   m_leds_mux_data = data;
398403}
399404
400static WRITE8_HANDLER( led_mux_select_w )
405WRITE8_MEMBER(kas89_state::led_mux_select_w)
401406{
402407/*  - bits -
403408    7654 3210
404409    ---x xxxx   LEDs Set selector.
405410*/
406   kas89_state *state = space->machine().driver_data<kas89_state>();
407   state->m_leds_mux_selector = data;
408411
412   m_leds_mux_selector = data;
413
409414   UINT8 i;
410415   for ( i = 0; i < 37; i++ )
411416   {
r14845r14846
424429
425430      case 0x01:
426431      {
427         output_set_lamp_value(11, (state->m_leds_mux_data >> 0) & 1);   /* Number 11 LED */
428         output_set_lamp_value(36, (state->m_leds_mux_data >> 1) & 1);   /* Number 36 LED */
429         output_set_lamp_value(13, (state->m_leds_mux_data >> 2) & 1);   /* Number 13 LED */
430         output_set_lamp_value(27, (state->m_leds_mux_data >> 3) & 1);   /* Number 27 LED */
431         output_set_lamp_value(06, (state->m_leds_mux_data >> 4) & 1);   /* Number  6 LED */
432         output_set_lamp_value(34, (state->m_leds_mux_data >> 5) & 1);   /* Number 34 LED */
433         output_set_lamp_value(17, (state->m_leds_mux_data >> 6) & 1);   /* Number 17 LED */
434         output_set_lamp_value(25, (state->m_leds_mux_data >> 7) & 1);   /* Number 25 LED */
432         output_set_lamp_value(11, (m_leds_mux_data >> 0) & 1);   /* Number 11 LED */
433         output_set_lamp_value(36, (m_leds_mux_data >> 1) & 1);   /* Number 36 LED */
434         output_set_lamp_value(13, (m_leds_mux_data >> 2) & 1);   /* Number 13 LED */
435         output_set_lamp_value(27, (m_leds_mux_data >> 3) & 1);   /* Number 27 LED */
436         output_set_lamp_value(06, (m_leds_mux_data >> 4) & 1);   /* Number  6 LED */
437         output_set_lamp_value(34, (m_leds_mux_data >> 5) & 1);   /* Number 34 LED */
438         output_set_lamp_value(17, (m_leds_mux_data >> 6) & 1);   /* Number 17 LED */
439         output_set_lamp_value(25, (m_leds_mux_data >> 7) & 1);   /* Number 25 LED */
435440         break;
436441      }
437442
438443      case 0x02:
439444      {
440         output_set_lamp_value( 2, (state->m_leds_mux_data >> 0) & 1);   /* Number  2 LED */
441         output_set_lamp_value(21, (state->m_leds_mux_data >> 1) & 1);   /* Number 21 LED */
442         output_set_lamp_value( 4, (state->m_leds_mux_data >> 2) & 1);   /* Number  4 LED */
443         output_set_lamp_value(19, (state->m_leds_mux_data >> 3) & 1);   /* Number 19 LED */
444         output_set_lamp_value(15, (state->m_leds_mux_data >> 4) & 1);   /* Number 15 LED */
445         output_set_lamp_value(32, (state->m_leds_mux_data >> 5) & 1);   /* Number 32 LED */
446         output_set_lamp_value( 0, (state->m_leds_mux_data >> 6) & 1);   /* Number  0 LED */
447         output_set_lamp_value(26, (state->m_leds_mux_data >> 7) & 1);   /* Number 26 LED */
445         output_set_lamp_value( 2, (m_leds_mux_data >> 0) & 1);   /* Number  2 LED */
446         output_set_lamp_value(21, (m_leds_mux_data >> 1) & 1);   /* Number 21 LED */
447         output_set_lamp_value( 4, (m_leds_mux_data >> 2) & 1);   /* Number  4 LED */
448         output_set_lamp_value(19, (m_leds_mux_data >> 3) & 1);   /* Number 19 LED */
449         output_set_lamp_value(15, (m_leds_mux_data >> 4) & 1);   /* Number 15 LED */
450         output_set_lamp_value(32, (m_leds_mux_data >> 5) & 1);   /* Number 32 LED */
451         output_set_lamp_value( 0, (m_leds_mux_data >> 6) & 1);   /* Number  0 LED */
452         output_set_lamp_value(26, (m_leds_mux_data >> 7) & 1);   /* Number 26 LED */
448453         break;
449454      }
450455
451456      case 0x04:
452457      {
453         output_set_lamp_value( 3, (state->m_leds_mux_data >> 0) & 1);   /* Number  3 LED */
454         output_set_lamp_value(35, (state->m_leds_mux_data >> 1) & 1);   /* Number 35 LED */
455         output_set_lamp_value(12, (state->m_leds_mux_data >> 2) & 1);   /* Number 12 LED */
456         output_set_lamp_value(28, (state->m_leds_mux_data >> 3) & 1);   /* Number 28 LED */
457         output_set_lamp_value( 7, (state->m_leds_mux_data >> 4) & 1);   /* Number  7 LED */
458         output_set_lamp_value(29, (state->m_leds_mux_data >> 5) & 1);   /* Number 29 LED */
459         output_set_lamp_value(18, (state->m_leds_mux_data >> 6) & 1);   /* Number 18 LED */
458         output_set_lamp_value( 3, (m_leds_mux_data >> 0) & 1);   /* Number  3 LED */
459         output_set_lamp_value(35, (m_leds_mux_data >> 1) & 1);   /* Number 35 LED */
460         output_set_lamp_value(12, (m_leds_mux_data >> 2) & 1);   /* Number 12 LED */
461         output_set_lamp_value(28, (m_leds_mux_data >> 3) & 1);   /* Number 28 LED */
462         output_set_lamp_value( 7, (m_leds_mux_data >> 4) & 1);   /* Number  7 LED */
463         output_set_lamp_value(29, (m_leds_mux_data >> 5) & 1);   /* Number 29 LED */
464         output_set_lamp_value(18, (m_leds_mux_data >> 6) & 1);   /* Number 18 LED */
460465         break;
461466      }
462467
463468      case 0x08:
464469      {
465         output_set_lamp_value(22, (state->m_leds_mux_data >> 0) & 1);   /* Number 22 LED */
466         output_set_lamp_value( 9, (state->m_leds_mux_data >> 1) & 1);   /* Number  9 LED */
467         output_set_lamp_value(31, (state->m_leds_mux_data >> 2) & 1);   /* Number 31 LED */
468         output_set_lamp_value(14, (state->m_leds_mux_data >> 3) & 1);   /* Number 14 LED */
469         output_set_lamp_value(20, (state->m_leds_mux_data >> 4) & 1);   /* Number 20 LED */
470         output_set_lamp_value( 1, (state->m_leds_mux_data >> 5) & 1);   /* Number  1 LED */
471         output_set_lamp_value(33, (state->m_leds_mux_data >> 6) & 1);   /* Number 33 LED */
470         output_set_lamp_value(22, (m_leds_mux_data >> 0) & 1);   /* Number 22 LED */
471         output_set_lamp_value( 9, (m_leds_mux_data >> 1) & 1);   /* Number  9 LED */
472         output_set_lamp_value(31, (m_leds_mux_data >> 2) & 1);   /* Number 31 LED */
473         output_set_lamp_value(14, (m_leds_mux_data >> 3) & 1);   /* Number 14 LED */
474         output_set_lamp_value(20, (m_leds_mux_data >> 4) & 1);   /* Number 20 LED */
475         output_set_lamp_value( 1, (m_leds_mux_data >> 5) & 1);   /* Number  1 LED */
476         output_set_lamp_value(33, (m_leds_mux_data >> 6) & 1);   /* Number 33 LED */
472477         break;
473478      }
474479
475480      case 0x10:
476481      {
477         output_set_lamp_value(16, (state->m_leds_mux_data >> 0) & 1);   /* Number 16 LED */
478         output_set_lamp_value(24, (state->m_leds_mux_data >> 1) & 1);   /* Number 24 LED */
479         output_set_lamp_value( 5, (state->m_leds_mux_data >> 2) & 1);   /* Number  5 LED */
480         output_set_lamp_value(10, (state->m_leds_mux_data >> 3) & 1);   /* Number 10 LED */
481         output_set_lamp_value(23, (state->m_leds_mux_data >> 4) & 1);   /* Number 23 LED */
482         output_set_lamp_value( 8, (state->m_leds_mux_data >> 5) & 1);   /* Number  8 LED */
483         output_set_lamp_value(30, (state->m_leds_mux_data >> 6) & 1);   /* Number 30 LED */
482         output_set_lamp_value(16, (m_leds_mux_data >> 0) & 1);   /* Number 16 LED */
483         output_set_lamp_value(24, (m_leds_mux_data >> 1) & 1);   /* Number 24 LED */
484         output_set_lamp_value( 5, (m_leds_mux_data >> 2) & 1);   /* Number  5 LED */
485         output_set_lamp_value(10, (m_leds_mux_data >> 3) & 1);   /* Number 10 LED */
486         output_set_lamp_value(23, (m_leds_mux_data >> 4) & 1);   /* Number 23 LED */
487         output_set_lamp_value( 8, (m_leds_mux_data >> 5) & 1);   /* Number  8 LED */
488         output_set_lamp_value(30, (m_leds_mux_data >> 6) & 1);   /* Number 30 LED */
484489         break;
485490      }
486491
r14845r14846
517522static ADDRESS_MAP_START( kas89_io, AS_IO, 8, kas89_state )
518523   ADDRESS_MAP_GLOBAL_MASK(0xff)
519524   AM_RANGE(0x40, 0x43) AM_DEVREADWRITE("v9938", v9938_device, read, write)
520   AM_RANGE(0x80, 0x80) AM_WRITE_LEGACY(mux_w)
521   AM_RANGE(0x81, 0x81) AM_READ_LEGACY(mux_r)
522   AM_RANGE(0x82, 0x82) AM_WRITE_LEGACY(control_w)   /* Bit6 trigger the 138Hz osc. tied to main Z80's NMI.*/
523   AM_RANGE(0x83, 0x83) AM_WRITE_LEGACY(led_mux_data_w)
524   AM_RANGE(0x84, 0x84) AM_WRITE_LEGACY(led_mux_select_w)
525   AM_RANGE(0x85, 0x85) AM_WRITE_LEGACY(sound_comm_w)
525   AM_RANGE(0x80, 0x80) AM_WRITE(mux_w)
526   AM_RANGE(0x81, 0x81) AM_READ(mux_r)
527   AM_RANGE(0x82, 0x82) AM_WRITE(control_w)   /* Bit6 trigger the 138Hz osc. tied to main Z80's NMI.*/
528   AM_RANGE(0x83, 0x83) AM_WRITE(led_mux_data_w)
529   AM_RANGE(0x84, 0x84) AM_WRITE(led_mux_select_w)
530   AM_RANGE(0x85, 0x85) AM_WRITE(sound_comm_w)
526531ADDRESS_MAP_END
527532
528533/*
r14845r14846
570575
571576static ADDRESS_MAP_START( audio_io, AS_IO, 8, kas89_state )
572577   ADDRESS_MAP_GLOBAL_MASK(0xff)
573   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(int_ack_w)   // comm out (1st Z80). seems to write here the value previously read through soundlatch (port 0x02).
578   AM_RANGE(0x00, 0x00) AM_WRITE(int_ack_w)   // comm out (1st Z80). seems to write here the value previously read through soundlatch (port 0x02).
574579   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(soundlatch_r)
575580   AM_RANGE(0x04, 0x04) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
576581   AM_RANGE(0x04, 0x05) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
src/mame/drivers/dmndrby.c
r14845r14846
7070   tilemap_t *m_racetrack_tilemap;
7171   UINT8 m_io_port[8];
7272   int m_bg;
73   DECLARE_WRITE8_MEMBER(dderby_sound_w);
74   DECLARE_READ8_MEMBER(input_r);
75   DECLARE_WRITE8_MEMBER(output_w);
7376};
7477
7578
76static WRITE8_HANDLER( dderby_sound_w )
79WRITE8_MEMBER(dmndrby_state::dderby_sound_w)
7780{
7881   soundlatch_w(space,0,data);
79   cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
82   cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
8083}
8184
8285
83static READ8_HANDLER( input_r )
86READ8_MEMBER(dmndrby_state::input_r)
8487{
8588   switch(offset & 7)
8689   {
87      case 0: return input_port_read(space->machine(), "IN0");
88      case 1: return input_port_read(space->machine(), "IN1");
89      case 2: return input_port_read(space->machine(), "IN2");
90      case 3: return input_port_read(space->machine(), "IN3");
91      case 4: return input_port_read(space->machine(), "IN4");
92      case 5: return input_port_read(space->machine(), "IN5");
93      case 6: return input_port_read(space->machine(), "IN6");
94      case 7: return input_port_read(space->machine(), "IN7");
90      case 0: return input_port_read(machine(), "IN0");
91      case 1: return input_port_read(machine(), "IN1");
92      case 2: return input_port_read(machine(), "IN2");
93      case 3: return input_port_read(machine(), "IN3");
94      case 4: return input_port_read(machine(), "IN4");
95      case 5: return input_port_read(machine(), "IN5");
96      case 6: return input_port_read(machine(), "IN6");
97      case 7: return input_port_read(machine(), "IN7");
9598   }
9699
97100   return 0xff;
98101}
99102
100static WRITE8_HANDLER( output_w )
103WRITE8_MEMBER(dmndrby_state::output_w)
101104{
102   dmndrby_state *state = space->machine().driver_data<dmndrby_state>();
103105   /*
104106    ---- x--- refill meter [4]
105107    ---- x--- token out meter [5]
r14845r14846
111113    ---- --x- coin lockout [0-3]
112114    ---- ---x lamp [0-6]
113115    */
114   state->m_io_port[offset] = data;
115//  popmessage("%02x|%02x|%02x|%02x|%02x|%02x|%02x|%02x|",state->m_io_port[0],state->m_io_port[1],state->m_io_port[2],state->m_io_port[3],state->m_io_port[4],state->m_io_port[5],state->m_io_port[6],state->m_io_port[7]);
116   m_io_port[offset] = data;
117//  popmessage("%02x|%02x|%02x|%02x|%02x|%02x|%02x|%02x|",m_io_port[0],m_io_port[1],m_io_port[2],m_io_port[3],m_io_port[4],m_io_port[5],m_io_port[6],m_io_port[7]);
116118}
117119
118120static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, dmndrby_state )
119121   AM_RANGE(0x0000, 0x5fff) AM_ROM
120122   AM_RANGE(0x8000, 0x8fff) AM_RAM AM_SHARE("nvram")
121   AM_RANGE(0xc000, 0xc007) AM_READ_LEGACY(input_r)
122   AM_RANGE(0xc000, 0xc007) AM_WRITE_LEGACY(output_w)
123   AM_RANGE(0xc000, 0xc007) AM_READ(input_r)
124   AM_RANGE(0xc000, 0xc007) AM_WRITE(output_w)
123125   AM_RANGE(0xc802, 0xc802) AM_READ_PORT("DSW1")
124126   AM_RANGE(0xc803, 0xc803) AM_READ_PORT("DSW2")
125127   AM_RANGE(0xca00, 0xca00) AM_WRITENOP//(vblank_irq_w) //???
126128   AM_RANGE(0xca01, 0xca01) AM_WRITENOP //watchdog
127   AM_RANGE(0xca02, 0xca02) AM_RAM_WRITE_LEGACY(dderby_sound_w)
129   AM_RANGE(0xca02, 0xca02) AM_RAM_WRITE(dderby_sound_w)
128130   AM_RANGE(0xca03, 0xca03) AM_WRITENOP//(timer_irq_w) //???
129131   AM_RANGE(0xcc00, 0xcc05) AM_RAM AM_BASE(m_scroll_ram)
130132   AM_RANGE(0xce08, 0xce1f) AM_RAM AM_BASE(m_sprite_ram) // horse sprites
src/mame/drivers/cmmb.c
r14845r14846
5353
5454   UINT8 *m_videoram;
5555   UINT8 m_irq_mask;
56   DECLARE_READ8_MEMBER(cmmb_charram_r);
57   DECLARE_WRITE8_MEMBER(cmmb_charram_w);
58   DECLARE_WRITE8_MEMBER(cmmb_paletteram_w);
59   DECLARE_READ8_MEMBER(cmmb_input_r);
60   DECLARE_WRITE8_MEMBER(cmmb_output_w);
61   DECLARE_READ8_MEMBER(kludge_r);
5662};
5763
5864
r14845r14846
8692   return 0;
8793}
8894
89static READ8_HANDLER( cmmb_charram_r )
95READ8_MEMBER(cmmb_state::cmmb_charram_r)
9096{
91   UINT8 *GFX = space->machine().region("gfx")->base();
97   UINT8 *GFX = machine().region("gfx")->base();
9298
9399   return GFX[offset];
94100}
95101
96static WRITE8_HANDLER( cmmb_charram_w )
102WRITE8_MEMBER(cmmb_state::cmmb_charram_w)
97103{
98   UINT8 *GFX = space->machine().region("gfx")->base();
104   UINT8 *GFX = machine().region("gfx")->base();
99105
100106   GFX[offset] = data;
101107
102108   offset&=0xfff;
103109
104110   /* dirty char */
105   gfx_element_mark_dirty(space->machine().gfx[0], offset >> 4);
106    gfx_element_mark_dirty(space->machine().gfx[1], offset >> 5);
111   gfx_element_mark_dirty(machine().gfx[0], offset >> 4);
112    gfx_element_mark_dirty(machine().gfx[1], offset >> 5);
107113}
108114
109115
110static WRITE8_HANDLER( cmmb_paletteram_w )
116WRITE8_MEMBER(cmmb_state::cmmb_paletteram_w)
111117{
112118    /* RGB output is inverted */
113119    paletteram_RRRGGGBB_w(space,offset,~data);
114120}
115121
116static READ8_HANDLER( cmmb_input_r )
122READ8_MEMBER(cmmb_state::cmmb_input_r)
117123{
118124   //printf("%02x R\n",offset);
119125   switch(offset)
120126   {
121      case 0x00: return input_port_read(space->machine(), "IN2");
127      case 0x00: return input_port_read(machine(), "IN2");
122128      case 0x03: return 4; //eeprom?
123      case 0x0e: return input_port_read(space->machine(), "IN0");
124      case 0x0f: return input_port_read(space->machine(), "IN1");
129      case 0x0e: return input_port_read(machine(), "IN0");
130      case 0x0f: return input_port_read(machine(), "IN1");
125131   }
126132
127133   return 0xff;
r14845r14846
138144    }
139145*/
140146
141static WRITE8_HANDLER( cmmb_output_w )
147WRITE8_MEMBER(cmmb_state::cmmb_output_w)
142148{
143   cmmb_state *state = space->machine().driver_data<cmmb_state>();
144149   //printf("%02x -> [%02x] W\n",data,offset);
145150   switch(offset)
146151   {
147152      case 0x01:
148153         {
149            UINT8 *ROM = space->machine().region("maincpu")->base();
154            UINT8 *ROM = machine().region("maincpu")->base();
150155            UINT32 bankaddress;
151156
152157            bankaddress = 0x1c000 + (0x10000 * (data & 0x03));
153            memory_set_bankptr(space->machine(), "bank1", &ROM[bankaddress]);
158            memory_set_bankptr(machine(), "bank1", &ROM[bankaddress]);
154159         }
155160         break;
156161      case 0x03:
157         state->m_irq_mask = data & 0x80;
162         m_irq_mask = data & 0x80;
158163         break;
159164      case 0x07:
160165         break;
161166   }
162167}
163168
164static READ8_HANDLER( kludge_r )
169READ8_MEMBER(cmmb_state::kludge_r)
165170{
166   return space->machine().rand();
171   return machine().rand();
167172}
168173
169174/* overlap empty addresses */
r14845r14846
172177   AM_RANGE(0x0000, 0x01ff) AM_RAM /* zero page address */
173178//  AM_RANGE(0x13c0, 0x13ff) AM_RAM //spriteram
174179   AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE(m_videoram)
175   AM_RANGE(0x2480, 0x249f) AM_RAM_WRITE_LEGACY(cmmb_paletteram_w) AM_BASE_GENERIC(paletteram)
176   AM_RANGE(0x4000, 0x400f) AM_READWRITE_LEGACY(cmmb_input_r,cmmb_output_w) //i/o
177   AM_RANGE(0x4900, 0x4900) AM_READ_LEGACY(kludge_r)
180   AM_RANGE(0x2480, 0x249f) AM_RAM_WRITE(cmmb_paletteram_w) AM_BASE_GENERIC(paletteram)
181   AM_RANGE(0x4000, 0x400f) AM_READWRITE(cmmb_input_r,cmmb_output_w) //i/o
182   AM_RANGE(0x4900, 0x4900) AM_READ(kludge_r)
178183   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
179184   AM_RANGE(0xa000, 0xafff) AM_RAM
180   AM_RANGE(0xb000, 0xbfff) AM_READWRITE_LEGACY(cmmb_charram_r,cmmb_charram_w)
181   AM_RANGE(0xc000, 0xc00f) AM_READWRITE_LEGACY(cmmb_input_r,cmmb_output_w) //i/o
185   AM_RANGE(0xb000, 0xbfff) AM_READWRITE(cmmb_charram_r,cmmb_charram_w)
186   AM_RANGE(0xc000, 0xc00f) AM_READWRITE(cmmb_input_r,cmmb_output_w) //i/o
182187   AM_RANGE(0x8000, 0xffff) AM_ROM
183188ADDRESS_MAP_END
184189
src/mame/drivers/boxer.c
r14845r14846
3636
3737   /* devices */
3838   device_t *m_maincpu;
39   DECLARE_READ8_MEMBER(boxer_input_r);
40   DECLARE_READ8_MEMBER(boxer_misc_r);
41   DECLARE_WRITE8_MEMBER(boxer_bell_w);
42   DECLARE_WRITE8_MEMBER(boxer_sound_w);
43   DECLARE_WRITE8_MEMBER(boxer_pot_w);
44   DECLARE_WRITE8_MEMBER(boxer_irq_reset_w);
45   DECLARE_WRITE8_MEMBER(boxer_crowd_w);
46   DECLARE_WRITE8_MEMBER(boxer_led_w);
3947};
4048
4149/*************************************
r14845r14846
191199 *
192200 *************************************/
193201
194static READ8_HANDLER( boxer_input_r )
202READ8_MEMBER(boxer_state::boxer_input_r)
195203{
196   UINT8 val = input_port_read(space->machine(), "IN0");
204   UINT8 val = input_port_read(machine(), "IN0");
197205
198   if (input_port_read(space->machine(), "IN3") < space->machine().primary_screen->vpos())
206   if (input_port_read(machine(), "IN3") < machine().primary_screen->vpos())
199207      val |= 0x02;
200208
201209   return (val << ((offset & 7) ^ 7)) & 0x80;
202210}
203211
204212
205static READ8_HANDLER( boxer_misc_r )
213READ8_MEMBER(boxer_state::boxer_misc_r)
206214{
207   boxer_state *state = space->machine().driver_data<boxer_state>();
208215   UINT8 val = 0;
209216
210217   switch (offset & 3)
211218   {
212219   case 0:
213      val = state->m_pot_state & state->m_pot_latch;
220      val = m_pot_state & m_pot_latch;
214221      break;
215222
216223   case 1:
217      val = space->machine().primary_screen->vpos();
224      val = machine().primary_screen->vpos();
218225      break;
219226
220227   case 2:
221      val = input_port_read(space->machine(), "IN1");
228      val = input_port_read(machine(), "IN1");
222229      break;
223230
224231   case 3:
225      val = input_port_read(space->machine(), "IN2");
232      val = input_port_read(machine(), "IN2");
226233      break;
227234   }
228235
r14845r14846
232239
233240
234241
235static WRITE8_HANDLER( boxer_bell_w )
242WRITE8_MEMBER(boxer_state::boxer_bell_w)
236243{
237244}
238245
239246
240static WRITE8_HANDLER( boxer_sound_w )
247WRITE8_MEMBER(boxer_state::boxer_sound_w)
241248{
242249}
243250
244251
245static WRITE8_HANDLER( boxer_pot_w )
252WRITE8_MEMBER(boxer_state::boxer_pot_w)
246253{
247   boxer_state *state = space->machine().driver_data<boxer_state>();
248254   /* BIT0 => HPOT1 */
249255   /* BIT1 => VPOT1 */
250256   /* BIT2 => RPOT1 */
r14845r14846
252258   /* BIT4 => VPOT2 */
253259   /* BIT5 => RPOT2 */
254260
255   state->m_pot_latch = data & 0x3f;
261   m_pot_latch = data & 0x3f;
256262
257   device_set_input_line(state->m_maincpu, INPUT_LINE_NMI, CLEAR_LINE);
263   device_set_input_line(m_maincpu, INPUT_LINE_NMI, CLEAR_LINE);
258264}
259265
260266
261static WRITE8_HANDLER( boxer_irq_reset_w )
267WRITE8_MEMBER(boxer_state::boxer_irq_reset_w)
262268{
263   boxer_state *state = space->machine().driver_data<boxer_state>();
264   device_set_input_line(state->m_maincpu, 0, CLEAR_LINE);
269   device_set_input_line(m_maincpu, 0, CLEAR_LINE);
265270}
266271
267272
268static WRITE8_HANDLER( boxer_crowd_w )
273WRITE8_MEMBER(boxer_state::boxer_crowd_w)
269274{
270275   /* BIT0 => ATTRACT */
271276   /* BIT1 => CROWD-1 */
272277   /* BIT2 => CROWD-2 */
273278   /* BIT3 => CROWD-3 */
274279
275   coin_lockout_global_w(space->machine(), data & 1);
280   coin_lockout_global_w(machine(), data & 1);
276281}
277282
278283
279static WRITE8_HANDLER( boxer_led_w )
284WRITE8_MEMBER(boxer_state::boxer_led_w)
280285{
281   set_led_status(space->machine(), 1, !(data & 1));
282   set_led_status(space->machine(), 0, !(data & 2));
286   set_led_status(machine(), 1, !(data & 1));
287   set_led_status(machine(), 0, !(data & 2));
283288}
284289
285290
r14845r14846
293298   ADDRESS_MAP_GLOBAL_MASK(0x3fff)
294299   AM_RANGE(0x0000, 0x01ff) AM_RAM
295300   AM_RANGE(0x0200, 0x03ff) AM_RAM AM_BASE(m_tile_ram)
296   AM_RANGE(0x0800, 0x08ff) AM_READ_LEGACY(boxer_input_r)
297   AM_RANGE(0x1000, 0x17ff) AM_READ_LEGACY(boxer_misc_r)
298   AM_RANGE(0x1800, 0x1800) AM_WRITE_LEGACY(boxer_pot_w)
299   AM_RANGE(0x1900, 0x19ff) AM_WRITE_LEGACY(boxer_led_w)
300   AM_RANGE(0x1a00, 0x1aff) AM_WRITE_LEGACY(boxer_sound_w)
301   AM_RANGE(0x1b00, 0x1bff) AM_WRITE_LEGACY(boxer_crowd_w)
302   AM_RANGE(0x1c00, 0x1cff) AM_WRITE_LEGACY(boxer_irq_reset_w)
303   AM_RANGE(0x1d00, 0x1dff) AM_WRITE_LEGACY(boxer_bell_w)
301   AM_RANGE(0x0800, 0x08ff) AM_READ(boxer_input_r)
302   AM_RANGE(0x1000, 0x17ff) AM_READ(boxer_misc_r)
303   AM_RANGE(0x1800, 0x1800) AM_WRITE(boxer_pot_w)
304   AM_RANGE(0x1900, 0x19ff) AM_WRITE(boxer_led_w)
305   AM_RANGE(0x1a00, 0x1aff) AM_WRITE(boxer_sound_w)
306   AM_RANGE(0x1b00, 0x1bff) AM_WRITE(boxer_crowd_w)
307   AM_RANGE(0x1c00, 0x1cff) AM_WRITE(boxer_irq_reset_w)
308   AM_RANGE(0x1d00, 0x1dff) AM_WRITE(boxer_bell_w)
304309   AM_RANGE(0x1e00, 0x1eff) AM_WRITEONLY AM_BASE(m_sprite_ram)
305310   AM_RANGE(0x1f00, 0x1fff) AM_WRITE_LEGACY(watchdog_reset_w)
306311   AM_RANGE(0x3000, 0x3fff) AM_ROM
src/mame/drivers/roul.c
r14845r14846
7676   UINT8 m_reg[0x10];
7777   UINT8 *m_videobuf;
7878   UINT8 m_lamp_old;
79   DECLARE_READ8_MEMBER(blitter_status_r);
80   DECLARE_WRITE8_MEMBER(blitter_cmd_w);
81   DECLARE_WRITE8_MEMBER(sound_latch_w);
82   DECLARE_WRITE8_MEMBER(ball_w);
7983};
8084
8185
r14845r14846
107111   }
108112}
109113
110static READ8_HANDLER( blitter_status_r )
114READ8_MEMBER(roul_state::blitter_status_r)
111115{
112116/*
113117code check bit 6 and bit 7
r14845r14846
115119bit 6 -> ??? (after unknown blitter command : [80][80][08][02])
116120*/
117121//  return 0x80; // blitter ready
118//  logerror("Read unknown port $f5 at %04x\n",cpu_get_pc(&space->device()));
119   return space->machine().rand() & 0x00c0;
122//  logerror("Read unknown port $f5 at %04x\n",cpu_get_pc(&space.device()));
123   return machine().rand() & 0x00c0;
120124}
121125
122static WRITE8_HANDLER( blitter_cmd_w )
126WRITE8_MEMBER(roul_state::blitter_cmd_w)
123127{
124   roul_state *state = space->machine().driver_data<roul_state>();
125   state->m_reg[offset] = data;
128   m_reg[offset] = data;
126129   if (offset==2)
127130   {
128131      int i,j;
129      int width   = state->m_reg[2];
130      int y      = state->m_reg[0];
131      int x      = state->m_reg[1];
132      int color   = state->m_reg[3] & 0x0f;
132      int width   = m_reg[2];
133      int y      = m_reg[0];
134      int x      = m_reg[1];
135      int color   = m_reg[3] & 0x0f;
133136      int xdirection = 1, ydirection = 1;
134137
135      if (state->m_reg[3] & 0x10) ydirection = -1;
136      if (state->m_reg[3] & 0x20) xdirection = -1;
138      if (m_reg[3] & 0x10) ydirection = -1;
139      if (m_reg[3] & 0x20) xdirection = -1;
137140
138141      if (width == 0x00) width = 0x100;
139142
140      switch(state->m_reg[3] & 0xc0)
143      switch(m_reg[3] & 0xc0)
141144      {
142         case 0x00: // state->m_reg[4] used?
145         case 0x00: // m_reg[4] used?
143146            for (i = - width / 2; i < width / 2; i++)
144147               for (j = - width / 2; j < width / 2; j++)
145                  state->m_videobuf[(y + j) * 256 + x + i] = color;
146            logerror("Blitter command 0 : [%02x][%02x][%02x][%02x][%02x]\n",state->m_reg[0],state->m_reg[1],state->m_reg[2],state->m_reg[3],state->m_reg[4]);
148                  m_videobuf[(y + j) * 256 + x + i] = color;
149            logerror("Blitter command 0 : [%02x][%02x][%02x][%02x][%02x]\n",m_reg[0],m_reg[1],m_reg[2],m_reg[3],m_reg[4]);
147150            break;
148         case 0x40: // vertical line - state->m_reg[4] not used
151         case 0x40: // vertical line - m_reg[4] not used
149152            for (i = 0; i < width; i++ )
150               state->m_videobuf[(y + i * ydirection) * 256 + x] = color;
153               m_videobuf[(y + i * ydirection) * 256 + x] = color;
151154            break;
152         case 0x80: // horizontal line - state->m_reg[4] not used
155         case 0x80: // horizontal line - m_reg[4] not used
153156            for (i = 0; i < width; i++ )
154               state->m_videobuf[y * 256 + x + i * xdirection] = color;
157               m_videobuf[y * 256 + x + i * xdirection] = color;
155158            break;
156         case 0xc0: // diagonal line - state->m_reg[4] not used
159         case 0xc0: // diagonal line - m_reg[4] not used
157160            for (i = 0; i < width; i++ )
158               state->m_videobuf[(y + i * ydirection) * 256 + x + i * xdirection] = color;
161               m_videobuf[(y + i * ydirection) * 256 + x + i * xdirection] = color;
159162      }
160163   }
161164
162165}
163166
164static WRITE8_HANDLER( sound_latch_w )
167WRITE8_MEMBER(roul_state::sound_latch_w)
165168{
166169   soundlatch_w(space, 0, data & 0xff);
167   cputag_set_input_line(space->machine(), "soundcpu", 0, HOLD_LINE);
170   cputag_set_input_line(machine(), "soundcpu", 0, HOLD_LINE);
168171}
169172
170static WRITE8_HANDLER( ball_w )
173WRITE8_MEMBER(roul_state::ball_w)
171174{
172   roul_state *state = space->machine().driver_data<roul_state>();
173175   int lamp = data;
174176
175177   output_set_lamp_value(data, 1);
176   output_set_lamp_value(state->m_lamp_old, 0);
177   state->m_lamp_old = lamp;
178   output_set_lamp_value(m_lamp_old, 0);
179   m_lamp_old = lamp;
178180}
179181
180182static ADDRESS_MAP_START( roul_map, AS_PROGRAM, 8, roul_state )
r14845r14846
184186
185187static ADDRESS_MAP_START( roul_cpu_io_map, AS_IO, 8, roul_state )
186188   ADDRESS_MAP_GLOBAL_MASK(0xff)
187   AM_RANGE(0xf0, 0xf4) AM_WRITE_LEGACY(blitter_cmd_w)
188   AM_RANGE(0xf5, 0xf5) AM_READ_LEGACY(blitter_status_r)
189   AM_RANGE(0xf0, 0xf4) AM_WRITE(blitter_cmd_w)
190   AM_RANGE(0xf5, 0xf5) AM_READ(blitter_status_r)
189191   AM_RANGE(0xf8, 0xf8) AM_READ_PORT("DSW")
190   AM_RANGE(0xf9, 0xf9) AM_WRITE_LEGACY(ball_w)
192   AM_RANGE(0xf9, 0xf9) AM_WRITE(ball_w)
191193   AM_RANGE(0xfa, 0xfa) AM_READ_PORT("IN0")
192194   AM_RANGE(0xfd, 0xfd) AM_READ_PORT("IN1")
193   AM_RANGE(0xfe, 0xfe) AM_WRITE_LEGACY(sound_latch_w)
195   AM_RANGE(0xfe, 0xfe) AM_WRITE(sound_latch_w)
194196ADDRESS_MAP_END
195197
196198static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, roul_state )
src/mame/drivers/speglsht.c
r14845r14846
121121   UINT32 m_videoreg;
122122   bitmap_ind16 *m_bitmap;
123123   UINT32 *m_cop_ram;
124   DECLARE_READ32_MEMBER(shared_r);
125   DECLARE_WRITE32_MEMBER(shared_w);
126   DECLARE_WRITE32_MEMBER(videoreg_w);
127   DECLARE_WRITE32_MEMBER(cop_w);
128   DECLARE_READ32_MEMBER(cop_r);
129   DECLARE_READ32_MEMBER(irq_ack_clear);
124130};
125131
126132
r14845r14846
149155   AM_RANGE(0xf0, 0xf0) AM_READ_LEGACY(st0016_dma_r)
150156ADDRESS_MAP_END
151157
152static READ32_HANDLER(shared_r)
158READ32_MEMBER(speglsht_state::shared_r)
153159{
154   speglsht_state *state = space->machine().driver_data<speglsht_state>();
155   return state->m_shared[offset];
160   return m_shared[offset];
156161}
157162
158static WRITE32_HANDLER(shared_w)
163WRITE32_MEMBER(speglsht_state::shared_w)
159164{
160   speglsht_state *state = space->machine().driver_data<speglsht_state>();
161   state->m_shared[offset]=data&0xff;
165   m_shared[offset]=data&0xff;
162166}
163167
164static WRITE32_HANDLER(videoreg_w)
168WRITE32_MEMBER(speglsht_state::videoreg_w)
165169{
166   speglsht_state *state = space->machine().driver_data<speglsht_state>();
167   COMBINE_DATA(&state->m_videoreg);
170   COMBINE_DATA(&m_videoreg);
168171}
169172
170173
171static WRITE32_HANDLER(cop_w)
174WRITE32_MEMBER(speglsht_state::cop_w)
172175{
173   speglsht_state *state = space->machine().driver_data<speglsht_state>();
174   COMBINE_DATA(&state->m_cop_ram[offset]);
176   COMBINE_DATA(&m_cop_ram[offset]);
175177
176   if(state->m_cop_ram[offset]&0x8000) //fix (sign)
178   if(m_cop_ram[offset]&0x8000) //fix (sign)
177179   {
178      state->m_cop_ram[offset]|=0xffff0000;
180      m_cop_ram[offset]|=0xffff0000;
179181   }
180182}
181183
182184//matrix * vector
183static READ32_HANDLER(cop_r)
185READ32_MEMBER(speglsht_state::cop_r)
184186{
185   speglsht_state *state = space->machine().driver_data<speglsht_state>();
186   INT32 *cop=(INT32*)&state->m_cop_ram[0];
187   INT32 *cop=(INT32*)&m_cop_ram[0];
187188
188189   union
189190   {
r14845r14846
215216   return 0;
216217}
217218
218static READ32_HANDLER(irq_ack_clear)
219READ32_MEMBER(speglsht_state::irq_ack_clear)
219220{
220   cputag_set_input_line(space->machine(), "sub", R3000_IRQ4, CLEAR_LINE);
221   cputag_set_input_line(machine(), "sub", R3000_IRQ4, CLEAR_LINE);
221222   return 0;
222223}
223224
224225static ADDRESS_MAP_START( speglsht_mem, AS_PROGRAM, 32, speglsht_state )
225226   AM_RANGE(0x00000000, 0x000fffff) AM_RAM
226227   AM_RANGE(0x01000000, 0x01007fff) AM_RAM //tested - STATIC RAM
227   AM_RANGE(0x01600000, 0x0160004f) AM_READWRITE_LEGACY(cop_r, cop_w) AM_BASE(m_cop_ram)
228   AM_RANGE(0x01800200, 0x01800203) AM_WRITE_LEGACY(videoreg_w)
228   AM_RANGE(0x01600000, 0x0160004f) AM_READWRITE(cop_r, cop_w) AM_BASE(m_cop_ram)
229   AM_RANGE(0x01800200, 0x01800203) AM_WRITE(videoreg_w)
229230   AM_RANGE(0x01800300, 0x01800303) AM_READ_PORT("IN0")
230231   AM_RANGE(0x01800400, 0x01800403) AM_READ_PORT("IN1")
231232   AM_RANGE(0x01a00000, 0x01afffff) AM_RAM AM_BASE(m_framebuffer)
232233   AM_RANGE(0x01b00000, 0x01b07fff) AM_RAM //cleared ...  video related ?
233234   AM_RANGE(0x01c00000, 0x01dfffff) AM_ROM AM_REGION("user2", 0)
234   AM_RANGE(0x0a000000, 0x0a003fff) AM_READWRITE_LEGACY(shared_r, shared_w)
235   AM_RANGE(0x0a000000, 0x0a003fff) AM_READWRITE(shared_r, shared_w)
235236   AM_RANGE(0x1eff0000, 0x1eff001f) AM_RAM
236   AM_RANGE(0x1eff003c, 0x1eff003f) AM_READ_LEGACY(irq_ack_clear)
237   AM_RANGE(0x1eff003c, 0x1eff003f) AM_READ(irq_ack_clear)
237238   AM_RANGE(0x1fc00000, 0x1fdfffff) AM_ROM AM_REGION("user1", 0)
238239   AM_RANGE(0x2fc00000, 0x2fdfffff) AM_ROM AM_REGION("user1", 0) // mirror for interrupts
239240ADDRESS_MAP_END
src/mame/drivers/magicfly.c
r14845r14846
427427   UINT8 *m_colorram;
428428   tilemap_t *m_bg_tilemap;
429429   int m_input_selector;
430   DECLARE_WRITE8_MEMBER(magicfly_videoram_w);
431   DECLARE_WRITE8_MEMBER(magicfly_colorram_w);
432   DECLARE_READ8_MEMBER(mux_port_r);
433   DECLARE_WRITE8_MEMBER(mux_port_w);
430434};
431435
432436
r14845r14846
435439*************************/
436440
437441
438static WRITE8_HANDLER( magicfly_videoram_w )
442WRITE8_MEMBER(magicfly_state::magicfly_videoram_w)
439443{
440   magicfly_state *state = space->machine().driver_data<magicfly_state>();
441   state->m_videoram[offset] = data;
442   state->m_bg_tilemap->mark_tile_dirty(offset);
444   m_videoram[offset] = data;
445   m_bg_tilemap->mark_tile_dirty(offset);
443446}
444447
445static WRITE8_HANDLER( magicfly_colorram_w )
448WRITE8_MEMBER(magicfly_state::magicfly_colorram_w)
446449{
447   magicfly_state *state = space->machine().driver_data<magicfly_state>();
448   state->m_colorram[offset] = data;
449   state->m_bg_tilemap->mark_tile_dirty(offset);
450   m_colorram[offset] = data;
451   m_bg_tilemap->mark_tile_dirty(offset);
450452}
451453
452454static TILE_GET_INFO( get_magicfly_tile_info )
r14845r14846
553555******************************/
554556
555557
556static READ8_HANDLER( mux_port_r )
558READ8_MEMBER(magicfly_state::mux_port_r)
557559{
558   magicfly_state *state = space->machine().driver_data<magicfly_state>();
559   switch( state->m_input_selector )
560   switch( m_input_selector )
560561   {
561      case 0x01: return input_port_read(space->machine(), "IN0-0");
562      case 0x02: return input_port_read(space->machine(), "IN0-1");
563      case 0x04: return input_port_read(space->machine(), "IN0-2");
564      case 0x08: return input_port_read(space->machine(), "IN0-3");
565      case 0x00: return input_port_read(space->machine(), "DSW0");
562      case 0x01: return input_port_read(machine(), "IN0-0");
563      case 0x02: return input_port_read(machine(), "IN0-1");
564      case 0x04: return input_port_read(machine(), "IN0-2");
565      case 0x08: return input_port_read(machine(), "IN0-3");
566      case 0x00: return input_port_read(machine(), "DSW0");
566567   }
567568   return 0xff;
568569}
569570
570static WRITE8_HANDLER( mux_port_w )
571WRITE8_MEMBER(magicfly_state::mux_port_w)
571572{
572   magicfly_state *state = space->machine().driver_data<magicfly_state>();
573573/*  - bits -
574574    7654 3210
575575    ---- xxxx   Input selector.
r14845r14846
579579    x--- ----   Sound DAC.
580580
581581*/
582   state->m_input_selector = data & 0x0f;   /* Input Selector */
582   m_input_selector = data & 0x0f;   /* Input Selector */
583583
584   dac_data_w(space->machine().device("dac"), data & 0x80);      /* Sound DAC */
584   dac_data_w(machine().device("dac"), data & 0x80);      /* Sound DAC */
585585
586   coin_counter_w(space->machine(), 0, data & 0x40);   /* Coin1 */
587   coin_counter_w(space->machine(), 1, data & 0x10);   /* Coin2 */
588   coin_counter_w(space->machine(), 2, data & 0x20);   /* Payout */
586   coin_counter_w(machine(), 0, data & 0x40);   /* Coin1 */
587   coin_counter_w(machine(), 1, data & 0x10);   /* Coin2 */
588   coin_counter_w(machine(), 2, data & 0x20);   /* Payout */
589589}
590590
591591
r14845r14846
597597   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")    /* MK48Z02B NVRAM */
598598   AM_RANGE(0x0800, 0x0800) AM_DEVWRITE("crtc", mc6845_device, address_w)
599599   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
600   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(magicfly_videoram_w) AM_BASE(m_videoram)   /* HM6116LP #1 (2K x 8) RAM (only 1st half used) */
601   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(magicfly_colorram_w) AM_BASE(m_colorram)   /* HM6116LP #2 (2K x 8) RAM (only 1st half used) */
602   AM_RANGE(0x2800, 0x2800) AM_READ_LEGACY(mux_port_r)   /* multiplexed input port */
603   AM_RANGE(0x3000, 0x3000) AM_WRITE_LEGACY(mux_port_w)   /* output port */
600   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(magicfly_videoram_w) AM_BASE(m_videoram)   /* HM6116LP #1 (2K x 8) RAM (only 1st half used) */
601   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(magicfly_colorram_w) AM_BASE(m_colorram)   /* HM6116LP #2 (2K x 8) RAM (only 1st half used) */
602   AM_RANGE(0x2800, 0x2800) AM_READ(mux_port_r)   /* multiplexed input port */
603   AM_RANGE(0x3000, 0x3000) AM_WRITE(mux_port_w)   /* output port */
604604   AM_RANGE(0xc000, 0xffff) AM_ROM               /* ROM space */
605605ADDRESS_MAP_END
606606
src/mame/drivers/gal3.c
r14845r14846
147147   UINT16 *m_rsoSharedRAM;
148148   UINT32 m_led_mst;
149149   UINT32 m_led_slv;
150   DECLARE_READ32_MEMBER(led_mst_r);
151   DECLARE_WRITE32_MEMBER(led_mst_w);
152   DECLARE_READ32_MEMBER(led_slv_r);
153   DECLARE_WRITE32_MEMBER(led_slv_w);
154   DECLARE_READ32_MEMBER(paletteram32_r);
155   DECLARE_WRITE32_MEMBER(paletteram32_w);
156   DECLARE_READ32_MEMBER(namcos21_video_enable_r);
157   DECLARE_WRITE32_MEMBER(namcos21_video_enable_w);
158   DECLARE_READ32_MEMBER(rso_r);
159   DECLARE_WRITE32_MEMBER(rso_w);
150160};
151161
152162
r14845r14846
270280
271281/***************************************************************************************/
272282
273static READ32_HANDLER( led_mst_r )
283READ32_MEMBER(gal3_state::led_mst_r)
274284{
275   gal3_state *state = space->machine().driver_data<gal3_state>();
276   return state->m_led_mst;
285   return m_led_mst;
277286}
278287
279static WRITE32_HANDLER( led_mst_w )
288WRITE32_MEMBER(gal3_state::led_mst_w)
280289{
281   gal3_state *state = space->machine().driver_data<gal3_state>();
282   COMBINE_DATA(&state->m_led_mst);
290   COMBINE_DATA(&m_led_mst);
283291}
284292
285static READ32_HANDLER( led_slv_r )
293READ32_MEMBER(gal3_state::led_slv_r)
286294{
287   gal3_state *state = space->machine().driver_data<gal3_state>();
288   return state->m_led_slv;
295   return m_led_slv;
289296}
290297
291static WRITE32_HANDLER( led_slv_w )
298WRITE32_MEMBER(gal3_state::led_slv_w)
292299{
293   gal3_state *state = space->machine().driver_data<gal3_state>();
294   COMBINE_DATA(&state->m_led_slv);
300   COMBINE_DATA(&m_led_slv);
295301}
296302
297303/* palette memory handlers */
298304
299static READ32_HANDLER( paletteram32_r )
305READ32_MEMBER(gal3_state::paletteram32_r)
300306{
301307   offset *= 2;
302   return (space->machine().generic.paletteram.u16[offset]<<16)|space->machine().generic.paletteram.u16[offset+1];
308   return (machine().generic.paletteram.u16[offset]<<16)|machine().generic.paletteram.u16[offset+1];
303309}
304310
305static WRITE32_HANDLER( paletteram32_w )
311WRITE32_MEMBER(gal3_state::paletteram32_w)
306312{
307313   UINT32 v;
308314   offset *= 2;
309   v = (space->machine().generic.paletteram.u16[offset]<<16)|space->machine().generic.paletteram.u16[offset+1];
315   v = (machine().generic.paletteram.u16[offset]<<16)|machine().generic.paletteram.u16[offset+1];
310316   COMBINE_DATA( &v );
311   space->machine().generic.paletteram.u16[offset+0] = v>>16;
312   space->machine().generic.paletteram.u16[offset+1] = v&0xffff;
317   machine().generic.paletteram.u16[offset+0] = v>>16;
318   machine().generic.paletteram.u16[offset+1] = v&0xffff;
313319}
314320
315static READ32_HANDLER(namcos21_video_enable_r)
321READ32_MEMBER(gal3_state::namcos21_video_enable_r)
316322{
317   gal3_state *state = space->machine().driver_data<gal3_state>();
318   return state->m_namcos21_video_enable<<16;
323   return m_namcos21_video_enable<<16;
319324}
320325
321static WRITE32_HANDLER(namcos21_video_enable_w)
326WRITE32_MEMBER(gal3_state::namcos21_video_enable_w)
322327{
323   gal3_state *state = space->machine().driver_data<gal3_state>();
324328   UINT32 v;
325   v = state->m_namcos21_video_enable<<16;
329   v = m_namcos21_video_enable<<16;
326330   COMBINE_DATA( &v ); // 0xff53, instead of 0x40 in namcos21
327   state->m_namcos21_video_enable = v>>16;
331   m_namcos21_video_enable = v>>16;
328332}
329333
330static READ32_HANDLER(rso_r)
334READ32_MEMBER(gal3_state::rso_r)
331335{
332   gal3_state *state = space->machine().driver_data<gal3_state>();
333336   /*store $5555 @$0046, and readback @$0000
334337    read @$0144 and store at A6_21e & A4_5c
335338    Check @$009a==1 to start DEMO
336339    HACK*/
337340   offset *= 2;
338   return (state->m_rsoSharedRAM[offset]<<16)|state->m_rsoSharedRAM[offset+1];
341   return (m_rsoSharedRAM[offset]<<16)|m_rsoSharedRAM[offset+1];
339342}
340343
341static WRITE32_HANDLER(rso_w)
344WRITE32_MEMBER(gal3_state::rso_w)
342345{
343   gal3_state *state = space->machine().driver_data<gal3_state>();
344346   UINT32 v;
345347   offset *= 2;
346   v = (state->m_rsoSharedRAM[offset]<<16)|state->m_rsoSharedRAM[offset+1];
348   v = (m_rsoSharedRAM[offset]<<16)|m_rsoSharedRAM[offset+1];
347349   COMBINE_DATA( &v );
348   state->m_rsoSharedRAM[offset+0] = v>>16;
349   state->m_rsoSharedRAM[offset+1] = v&0xffff;
350   m_rsoSharedRAM[offset+0] = v>>16;
351   m_rsoSharedRAM[offset+1] = v&0xffff;
350352}
351353
352354
r14845r14846
355357   AM_RANGE(0x20000000, 0x20001fff) AM_RAM AM_BASE(m_nvmem) AM_SIZE(m_nvmem_size)   //NVRAM
356358/// AM_RANGE(0x40000000, 0x4000ffff) AM_WRITE_LEGACY() //
357359   AM_RANGE(0x44000000, 0x44000003) AM_READ_PORT("DSW_CPU_mst"   )
358   AM_RANGE(0x44800000, 0x44800003) AM_READ_LEGACY(led_mst_r) AM_WRITE_LEGACY(led_mst_w)   //LEDs
360   AM_RANGE(0x44800000, 0x44800003) AM_READ(led_mst_r) AM_WRITE(led_mst_w)   //LEDs
359361   AM_RANGE(0x48000000, 0x48000003) AM_READNOP   //irq1 v-blank ack
360362   AM_RANGE(0x4c000000, 0x4c000003) AM_READNOP   //irq3 ack
361363   AM_RANGE(0x60000000, 0x60007fff) AM_RAM AM_SHARE("share1")   //CRAM
r14845r14846
364366/// AM_RANGE(0xc0000000, 0xc000000b) AM_WRITENOP    //upload?
365367   AM_RANGE(0xc000000c, 0xc000000f) AM_READNOP   //irq2 ack
366368/// AM_RANGE(0xd8000000, 0xd800000f) AM_RAM // protection or 68681?
367   AM_RANGE(0xf2800000, 0xf2800fff) AM_READWRITE_LEGACY(rso_r, rso_w)   //RSO PCB
369   AM_RANGE(0xf2800000, 0xf2800fff) AM_READWRITE(rso_r, rso_w)   //RSO PCB
368370ADDRESS_MAP_END
369371
370372static ADDRESS_MAP_START( cpu_slv_map, AS_PROGRAM, 32, gal3_state )
371373   AM_RANGE(0x00000000, 0x0007ffff) AM_ROM
372374/// AM_RANGE(0x40000000, 0x4000ffff) AM_WRITE_LEGACY() //
373375   AM_RANGE(0x44000000, 0x44000003) AM_READ_PORT("DSW_CPU_slv"   )
374   AM_RANGE(0x44800000, 0x44800003) AM_READ_LEGACY(led_slv_r) AM_WRITE_LEGACY(led_slv_w)   //LEDs
376   AM_RANGE(0x44800000, 0x44800003) AM_READ(led_slv_r) AM_WRITE(led_slv_w)   //LEDs
375377   AM_RANGE(0x48000000, 0x48000003) AM_READNOP   //irq1 ack
376378/// AM_RANGE(0x50000000, 0x50000003) AM_READ_LEGACY() AM_WRITE_LEGACY()
377379/// AM_RANGE(0x54000000, 0x54000003) AM_READ_LEGACY() AM_WRITE_LEGACY()
r14845r14846
386388/// AM_RANGE(0xf1480000, 0xf14807ff) AM_READWRITE_LEGACY(namcos21_depthcue_r,namcos21_depthcue_w)
387389   AM_RANGE(0xf1700000, 0xf170ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
388390   AM_RANGE(0xf1720000, 0xf1720007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
389   AM_RANGE(0xf1740000, 0xf175ffff) AM_READWRITE_LEGACY(paletteram32_r,paletteram32_w) AM_BASE_GENERIC(paletteram)
390   AM_RANGE(0xf1760000, 0xf1760003) AM_READWRITE_LEGACY(namcos21_video_enable_r,namcos21_video_enable_w)
391   AM_RANGE(0xf1740000, 0xf175ffff) AM_READWRITE(paletteram32_r,paletteram32_w) AM_BASE_GENERIC(paletteram)
392   AM_RANGE(0xf1760000, 0xf1760003) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w)
391393
392394   AM_RANGE(0xf2200000, 0xf220ffff) AM_RAM
393395   AM_RANGE(0xf2700000, 0xf270ffff) AM_RAM   //AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
394396   AM_RANGE(0xf2720000, 0xf2720007) AM_RAM   //AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w)
395397   AM_RANGE(0xf2740000, 0xf275ffff) AM_RAM   //AM_READWRITE_LEGACY(paletteram16_r,paletteram16_w) AM_BASE_GENERIC(paletteram)
396   AM_RANGE(0xf2760000, 0xf2760003) AM_RAM   //AM_READWRITE_LEGACY(namcos21_video_enable_r,namcos21_video_enable_w)
398   AM_RANGE(0xf2760000, 0xf2760003) AM_RAM   //AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w)
397399ADDRESS_MAP_END
398400
399401static ADDRESS_MAP_START( rs_cpu_map, AS_PROGRAM, 16, gal3_state )
src/mame/drivers/nightgal.c
r14845r14846
5252
5353   /* memory */
5454   UINT8      m_blit_buffer[256*256];
55   DECLARE_READ8_MEMBER(blitter_status_r);
56   DECLARE_WRITE8_MEMBER(nsc_true_blitter_w);
57   DECLARE_WRITE8_MEMBER(sexygal_nsc_true_blitter_w);
58   DECLARE_WRITE8_MEMBER(nsc_latch_w);
59   DECLARE_READ8_MEMBER(nsc_latch_r);
60   DECLARE_WRITE8_MEMBER(z80_latch_w);
61   DECLARE_READ8_MEMBER(z80_latch_r);
62   DECLARE_WRITE8_MEMBER(blitter_w);
63   DECLARE_READ8_MEMBER(nsc_blit_r);
64   DECLARE_WRITE8_MEMBER(royalqn_blitter_0_w);
65   DECLARE_WRITE8_MEMBER(royalqn_blitter_1_w);
66   DECLARE_WRITE8_MEMBER(royalqn_blitter_2_w);
67   DECLARE_READ8_MEMBER(royalqn_nsc_blit_r);
68   DECLARE_READ8_MEMBER(royalqn_comm_r);
69   DECLARE_WRITE8_MEMBER(royalqn_comm_w);
70   DECLARE_WRITE8_MEMBER(blit_vregs_w);
71   DECLARE_READ8_MEMBER(blit_vregs_r);
72   DECLARE_WRITE8_MEMBER(blit_true_vregs_w);
73   DECLARE_WRITE8_MEMBER(mux_w);
5574};
5675
5776
5877
59static READ8_HANDLER( blitter_status_r )
78READ8_MEMBER(nightgal_state::blitter_status_r)
6079{
6180   return 0x80;
6281}
r14845r14846
118137      state->m_blit_buffer[(y * 256) + (x >> 1)] = (state->m_blit_buffer[(y * 256) + (x >> 1)] & 0xf0) | (pix & 0x0f);
119138}
120139
121static WRITE8_HANDLER( nsc_true_blitter_w )
140WRITE8_MEMBER(nightgal_state::nsc_true_blitter_w)
122141{
123   nightgal_state *state = space->machine().driver_data<nightgal_state>();
124142   int src, x, y, h, w, flipx;
125   state->m_true_blit[offset] = data;
143   m_true_blit[offset] = data;
126144
127145   /*trigger blitter write to ram,might not be correct...*/
128146   if (offset == 5)
129147   {
130      //printf("%02x %02x %02x %02x %02x %02x %02x\n", state->m_true_blit[0], state->m_true_blit[1], state->m_true_blit[2], state->m_true_blit[3], state->m_true_blit[4], state->m_true_blit[5], state->m_true_blit[6]);
131      w = (state->m_true_blit[4] & 0xff) + 1;
132      h = (state->m_true_blit[5] & 0xff) + 1;
133      src = ((state->m_true_blit[1] << 8) | (state->m_true_blit[0] << 0));
134      src |= (state->m_true_blit[6] & 3) << 16;
148      //printf("%02x %02x %02x %02x %02x %02x %02x\n", m_true_blit[0], m_true_blit[1], m_true_blit[2], m_true_blit[3], m_true_blit[4], m_true_blit[5], m_true_blit[6]);
149      w = (m_true_blit[4] & 0xff) + 1;
150      h = (m_true_blit[5] & 0xff) + 1;
151      src = ((m_true_blit[1] << 8) | (m_true_blit[0] << 0));
152      src |= (m_true_blit[6] & 3) << 16;
135153
136      x = (state->m_true_blit[2] & 0xff);
137      y = (state->m_true_blit[3] & 0xff);
154      x = (m_true_blit[2] & 0xff);
155      y = (m_true_blit[3] & 0xff);
138156
139157      // lowest bit of src controls flipping / draw direction?
140      flipx = (state->m_true_blit[0] & 1);
158      flipx = (m_true_blit[0] & 1);
141159
142160      if (!flipx)
143161         src += (w * h) - 1;
r14845r14846
153171            {
154172               int drawx = (x + xcount) & 0xff;
155173               int drawy = (y + ycount) & 0xff;
156               UINT8 dat = nightgal_gfx_nibble(space->machine(), src + count);
157               UINT8 cur_pen_hi = state->m_pen_data[(dat & 0xf0) >> 4];
158               UINT8 cur_pen_lo = state->m_pen_data[(dat & 0x0f) >> 0];
174               UINT8 dat = nightgal_gfx_nibble(machine(), src + count);
175               UINT8 cur_pen_hi = m_pen_data[(dat & 0xf0) >> 4];
176               UINT8 cur_pen_lo = m_pen_data[(dat & 0x0f) >> 0];
159177
160178               dat = cur_pen_lo | (cur_pen_hi << 4);
161179
162180               if ((dat & 0xff) != 0)
163                  plot_nightgal_gfx_pixel(space->machine(), dat, drawx, drawy);
181                  plot_nightgal_gfx_pixel(machine(), dat, drawx, drawy);
164182
165183               if (!flipx)
166184                  count--;
r14845r14846
173191}
174192
175193/* different register writes (probably a PAL line swapping).*/
176static WRITE8_HANDLER( sexygal_nsc_true_blitter_w )
194WRITE8_MEMBER(nightgal_state::sexygal_nsc_true_blitter_w)
177195{
178   nightgal_state *state = space->machine().driver_data<nightgal_state>();
179196   int src, x, y, h, w, flipx;
180   state->m_true_blit[offset] = data;
197   m_true_blit[offset] = data;
181198
182199   /*trigger blitter write to ram,might not be correct...*/
183200   if (offset == 6)
184201   {
185      //printf("%02x %02x %02x %02x %02x %02x %02x\n", state->m_true_blit[0], state->m_true_blit[1], state->m_true_blit[2], state->m_true_blit[3], state->m_true_blit[4], state->m_true_blit[5], state->m_true_blit[6]);
186      w = (state->m_true_blit[5] & 0xff) + 1;
187      h = (state->m_true_blit[6] & 0xff) + 1;
188      src = ((state->m_true_blit[1] << 8) | (state->m_true_blit[0] << 0));
189      src |= (state->m_true_blit[2] & 3) << 16;
202      //printf("%02x %02x %02x %02x %02x %02x %02x\n", m_true_blit[0], m_true_blit[1], m_true_blit[2], m_true_blit[3], m_true_blit[4], m_true_blit[5], m_true_blit[6]);
203      w = (m_true_blit[5] & 0xff) + 1;
204      h = (m_true_blit[6] & 0xff) + 1;
205      src = ((m_true_blit[1] << 8) | (m_true_blit[0] << 0));
206      src |= (m_true_blit[2] & 3) << 16;
190207
191208
192      x = (state->m_true_blit[3] & 0xff);
193      y = (state->m_true_blit[4] & 0xff);
209      x = (m_true_blit[3] & 0xff);
210      y = (m_true_blit[4] & 0xff);
194211
195212      // lowest bit of src controls flipping / draw direction?
196      flipx = (state->m_true_blit[0] & 1);
213      flipx = (m_true_blit[0] & 1);
197214
198215      if (!flipx)
199216         src += (w * h) - 1;
r14845r14846
209226            {
210227               int drawx = (x + xcount) & 0xff;
211228               int drawy = (y + ycount) & 0xff;
212               UINT8 dat = nightgal_gfx_nibble(space->machine(), src + count);
213               UINT8 cur_pen_hi = state->m_pen_data[(dat & 0xf0) >> 4];
214               UINT8 cur_pen_lo = state->m_pen_data[(dat & 0x0f) >> 0];
229               UINT8 dat = nightgal_gfx_nibble(machine(), src + count);
230               UINT8 cur_pen_hi = m_pen_data[(dat & 0xf0) >> 4];
231               UINT8 cur_pen_lo = m_pen_data[(dat & 0x0f) >> 0];
215232
216233               dat = cur_pen_lo | cur_pen_hi << 4;
217234
218235               if ((dat & 0xff) != 0)
219                  plot_nightgal_gfx_pixel(space->machine(), dat, drawx, drawy);
236                  plot_nightgal_gfx_pixel(machine(), dat, drawx, drawy);
220237
221238               if (!flipx)
222239                  count--;
r14845r14846
224241                  count++;
225242            }
226243         }
227         //device_set_input_line(state->m_maincpu, INPUT_LINE_NMI, PULSE_LINE );
244         //device_set_input_line(m_maincpu, INPUT_LINE_NMI, PULSE_LINE );
228245      }
229246   }
230247}
r14845r14846
297314//#define SUB_NCS_RUN state->m_ncs_latch = 0x00
298315//#define SUB_NCS_HALT state->m_ncs_latch = 0x80
299316#ifdef UNUSED_CODE
300static WRITE8_HANDLER( nsc_latch_w )
317WRITE8_MEMBER(nightgal_state::nsc_latch_w)
301318{
302   nightgal_state *state = space->machine().driver_data<nightgal_state>();
303   device_set_input_line(state->m_subcpu, 0, HOLD_LINE );
319   device_set_input_line(m_subcpu, 0, HOLD_LINE );
304320}
305321
306static READ8_HANDLER( nsc_latch_r )
322READ8_MEMBER(nightgal_state::nsc_latch_r)
307323{
308   nightgal_state *state = space->machine().driver_data<nightgal_state>();
309324
310   return state->m_z80_latch;
325   return m_z80_latch;
311326}
312327
313static WRITE8_HANDLER( z80_latch_w )
328WRITE8_MEMBER(nightgal_state::z80_latch_w)
314329{
315   nightgal_state *state = space->machine().driver_data<nightgal_state>();
316   state->m_nsc_latch = data;
330   m_nsc_latch = data;
317331}
318332
319static READ8_HANDLER( z80_latch_r )
333READ8_MEMBER(nightgal_state::z80_latch_r)
320334{
321   nightgal_state *state = space->machine().driver_data<nightgal_state>();
322   return state->m_nsc_latch;
335   return m_nsc_latch;
323336}
324337
325338/*z80 -> MCU video params*/
326static WRITE8_HANDLER( blitter_w )
339WRITE8_MEMBER(nightgal_state::blitter_w)
327340{
328   nightgal_state *state = space->machine().driver_data<nightgal_state>();
329   state->m_blit_raw_data[offset] = data;
341   m_blit_raw_data[offset] = data;
330342   MAIN_Z80_HALT;
331343}
332344
333static READ8_HANDLER( nsc_blit_r )
345READ8_MEMBER(nightgal_state::nsc_blit_r)
334346{
335   nightgal_state *state = space->machine().driver_data<nightgal_state>();
336347   MAIN_Z80_RUN;
337   return state->m_blit_raw_data[offset];
348   return m_blit_raw_data[offset];
338349}
339350#endif
340351/* TODO: simplify this (error in the document) */
341352
342static WRITE8_HANDLER( royalqn_blitter_0_w )
353WRITE8_MEMBER(nightgal_state::royalqn_blitter_0_w)
343354{
344   nightgal_state *state = space->machine().driver_data<nightgal_state>();
345   state->m_blit_raw_data[0] = data;
355   m_blit_raw_data[0] = data;
346356}
347357
348static WRITE8_HANDLER( royalqn_blitter_1_w )
358WRITE8_MEMBER(nightgal_state::royalqn_blitter_1_w)
349359{
350   nightgal_state *state = space->machine().driver_data<nightgal_state>();
351   state->m_blit_raw_data[1] = data;
360   m_blit_raw_data[1] = data;
352361}
353362
354static WRITE8_HANDLER( royalqn_blitter_2_w )
363WRITE8_MEMBER(nightgal_state::royalqn_blitter_2_w)
355364{
356   nightgal_state *state = space->machine().driver_data<nightgal_state>();
357   state->m_blit_raw_data[2] = data;
358   device_set_input_line(state->m_subcpu, 0, ASSERT_LINE );
365   m_blit_raw_data[2] = data;
366   device_set_input_line(m_subcpu, 0, ASSERT_LINE );
359367}
360368
361static READ8_HANDLER( royalqn_nsc_blit_r )
369READ8_MEMBER(nightgal_state::royalqn_nsc_blit_r)
362370{
363   nightgal_state *state = space->machine().driver_data<nightgal_state>();
364371
365372   if(offset == 2)
366      device_set_input_line(state->m_subcpu, 0, CLEAR_LINE );
373      device_set_input_line(m_subcpu, 0, CLEAR_LINE );
367374
368   return state->m_blit_raw_data[offset];
375   return m_blit_raw_data[offset];
369376}
370377
371static READ8_HANDLER( royalqn_comm_r )
378READ8_MEMBER(nightgal_state::royalqn_comm_r)
372379{
373   nightgal_state *state = space->machine().driver_data<nightgal_state>();
374380
375   return (state->m_comms_ram[offset] & 0x80) | (0x7f); //bits 6-0 are undefined, presumably open bus
381   return (m_comms_ram[offset] & 0x80) | (0x7f); //bits 6-0 are undefined, presumably open bus
376382}
377383
378static WRITE8_HANDLER( royalqn_comm_w )
384WRITE8_MEMBER(nightgal_state::royalqn_comm_w)
379385{
380   nightgal_state *state = space->machine().driver_data<nightgal_state>();
381386
382   state->m_comms_ram[offset] = data & 0x80;
387   m_comms_ram[offset] = data & 0x80;
383388}
384389
385390#ifdef UNUSED_CODE
386static WRITE8_HANDLER( blit_vregs_w )
391WRITE8_MEMBER(nightgal_state::blit_vregs_w)
387392{
388   nightgal_state *state = space->machine().driver_data<nightgal_state>();
389   state->m_pen_raw_data[offset] = data;
393   m_pen_raw_data[offset] = data;
390394}
391395
392static READ8_HANDLER( blit_vregs_r )
396READ8_MEMBER(nightgal_state::blit_vregs_r)
393397{
394   nightgal_state *state = space->machine().driver_data<nightgal_state>();
395   return state->m_pen_raw_data[offset];
398   return m_pen_raw_data[offset];
396399}
397400#endif
398static WRITE8_HANDLER( blit_true_vregs_w )
401WRITE8_MEMBER(nightgal_state::blit_true_vregs_w)
399402{
400   nightgal_state *state = space->machine().driver_data<nightgal_state>();
401   state->m_pen_data[offset] = data;
403   m_pen_data[offset] = data;
402404}
403405
404406/********************************************
r14845r14846
407409*
408410********************************************/
409411
410static WRITE8_HANDLER( mux_w )
412WRITE8_MEMBER(nightgal_state::mux_w)
411413{
412   nightgal_state *state = space->machine().driver_data<nightgal_state>();
413   state->m_mux_data = ~data;
414   //printf("%02x\n", state->m_mux_data);
414   m_mux_data = ~data;
415   //printf("%02x\n", m_mux_data);
415416}
416417
417418static READ8_DEVICE_HANDLER( input_1p_r )
r14845r14846
466467#ifdef UNUSED_CODE
467468static ADDRESS_MAP_START( nightgal_map, AS_PROGRAM, 8, nightgal_state )
468469   AM_RANGE(0x0000, 0x7fff) AM_ROM
469   AM_RANGE(0xc100, 0xc100) AM_READ_LEGACY(nsc_latch_r)
470   AM_RANGE(0xc200, 0xc200) AM_WRITE_LEGACY(nsc_latch_w)
471   AM_RANGE(0xc300, 0xc30f) AM_WRITE_LEGACY(blit_vregs_w)
470   AM_RANGE(0xc100, 0xc100) AM_READ(nsc_latch_r)
471   AM_RANGE(0xc200, 0xc200) AM_WRITE(nsc_latch_w)
472   AM_RANGE(0xc300, 0xc30f) AM_WRITE(blit_vregs_w)
472473   AM_RANGE(0xf000, 0xffff) AM_RAM
473474ADDRESS_MAP_END
474475
r14845r14846
481482   AM_RANGE(0x11,0x11) AM_READ_PORT("SYSA")
482483   AM_RANGE(0x12,0x12) AM_READ_PORT("DSWA")
483484   AM_RANGE(0x13,0x13) AM_READ_PORT("DSWB")
484   AM_RANGE(0x11,0x11) AM_WRITE_LEGACY(mux_w)
485   AM_RANGE(0x12,0x14) AM_WRITE_LEGACY(blitter_w) //data for the nsc to be processed
485   AM_RANGE(0x11,0x11) AM_WRITE(mux_w)
486   AM_RANGE(0x12,0x14) AM_WRITE(blitter_w) //data for the nsc to be processed
486487ADDRESS_MAP_END
487488
488489static ADDRESS_MAP_START( nsc_map, AS_PROGRAM, 8, nightgal_state )
489490   AM_RANGE(0x0000, 0x007f) AM_RAM
490   AM_RANGE(0x0080, 0x0080) AM_READ_LEGACY(blitter_status_r)
491   AM_RANGE(0x0081, 0x0083) AM_READ_LEGACY(nsc_blit_r)
492   AM_RANGE(0x0080, 0x0086) AM_WRITE_LEGACY(nsc_true_blitter_w)
491   AM_RANGE(0x0080, 0x0080) AM_READ(blitter_status_r)
492   AM_RANGE(0x0081, 0x0083) AM_READ(nsc_blit_r)
493   AM_RANGE(0x0080, 0x0086) AM_WRITE(nsc_true_blitter_w)
493494
494   AM_RANGE(0x00a0, 0x00af) AM_WRITE_LEGACY(blit_true_vregs_w)
495   AM_RANGE(0x00a0, 0x00af) AM_WRITE(blit_true_vregs_w)
495496
496   AM_RANGE(0x1100, 0x1100) AM_READWRITE_LEGACY(z80_latch_r,z80_latch_w) //irq control?
497   AM_RANGE(0x1100, 0x1100) AM_READWRITE(z80_latch_r,z80_latch_w) //irq control?
497498   AM_RANGE(0x1200, 0x1200) AM_READNOP //flip screen set bit
498   AM_RANGE(0x1300, 0x130f) AM_READ_LEGACY(blit_vregs_r)
499   AM_RANGE(0x1300, 0x130f) AM_READ(blit_vregs_r)
499500//  AM_RANGE(0x1000, 0xdfff) AM_ROM AM_REGION("gfx1", 0 )
500501   AM_RANGE(0xe000, 0xffff) AM_ROM AM_WRITENOP
501502ADDRESS_MAP_END
r14845r14846
508509static ADDRESS_MAP_START( sexygal_map, AS_PROGRAM, 8, nightgal_state )
509510   AM_RANGE(0x0000, 0x7fff) AM_ROM
510511   AM_RANGE(0x8000, 0xbfff) AM_RAM //???
511   AM_RANGE(0xe000, 0xefff) AM_READWRITE_LEGACY(royalqn_comm_r, royalqn_comm_w) AM_BASE(m_comms_ram)
512   AM_RANGE(0xe000, 0xefff) AM_READWRITE(royalqn_comm_r, royalqn_comm_w) AM_BASE(m_comms_ram)
512513   AM_RANGE(0xf000, 0xffff) AM_RAM
513514ADDRESS_MAP_END
514515
r14845r14846
517518   AM_RANGE(0x00,0x01) AM_DEVREADWRITE_LEGACY("ymsnd", ym2203_r, ym2203_w)
518519//  AM_RANGE(0x10,0x10) AM_WRITE_LEGACY(output_w)
519520   AM_RANGE(0x10,0x10) AM_READ_PORT("DSWC")
520   AM_RANGE(0x11,0x11) AM_READ_PORT("SYSA") AM_WRITE_LEGACY(mux_w)
521   AM_RANGE(0x12,0x12) AM_MIRROR(0xe8) AM_READ_PORT("DSWA") AM_WRITE_LEGACY(royalqn_blitter_0_w)
522   AM_RANGE(0x13,0x13) AM_MIRROR(0xe8) AM_READ_PORT("DSWB") AM_WRITE_LEGACY(royalqn_blitter_1_w)
523   AM_RANGE(0x14,0x14) AM_MIRROR(0xe8) AM_READNOP AM_WRITE_LEGACY(royalqn_blitter_2_w)
521   AM_RANGE(0x11,0x11) AM_READ_PORT("SYSA") AM_WRITE(mux_w)
522   AM_RANGE(0x12,0x12) AM_MIRROR(0xe8) AM_READ_PORT("DSWA") AM_WRITE(royalqn_blitter_0_w)
523   AM_RANGE(0x13,0x13) AM_MIRROR(0xe8) AM_READ_PORT("DSWB") AM_WRITE(royalqn_blitter_1_w)
524   AM_RANGE(0x14,0x14) AM_MIRROR(0xe8) AM_READNOP AM_WRITE(royalqn_blitter_2_w)
524525ADDRESS_MAP_END
525526
526527static ADDRESS_MAP_START( sexygal_nsc_map, AS_PROGRAM, 8, nightgal_state )
527528   AM_RANGE(0x0000, 0x007f) AM_RAM
528   AM_RANGE(0x0080, 0x0080) AM_READ_LEGACY(blitter_status_r)
529   AM_RANGE(0x0081, 0x0083) AM_READ_LEGACY(royalqn_nsc_blit_r)
530   AM_RANGE(0x0080, 0x0086) AM_WRITE_LEGACY(sexygal_nsc_true_blitter_w)
529   AM_RANGE(0x0080, 0x0080) AM_READ(blitter_status_r)
530   AM_RANGE(0x0081, 0x0083) AM_READ(royalqn_nsc_blit_r)
531   AM_RANGE(0x0080, 0x0086) AM_WRITE(sexygal_nsc_true_blitter_w)
531532
532   AM_RANGE(0x00a0, 0x00af) AM_WRITE_LEGACY(blit_true_vregs_w)
533   AM_RANGE(0x00a0, 0x00af) AM_WRITE(blit_true_vregs_w)
533534   AM_RANGE(0x00b0, 0x00b0) AM_WRITENOP // bltflip register
534535
535   AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2c00) AM_READWRITE_LEGACY(royalqn_comm_r, royalqn_comm_w) AM_BASE(m_comms_ram)
536   AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2c00) AM_READWRITE(royalqn_comm_r, royalqn_comm_w) AM_BASE(m_comms_ram)
536537   AM_RANGE(0xc000, 0xffff) AM_ROM AM_WRITENOP
537538ADDRESS_MAP_END
538539
r14845r14846
543544static ADDRESS_MAP_START( royalqn_map, AS_PROGRAM, 8, nightgal_state )
544545   AM_RANGE(0x0000, 0x7fff) AM_ROM
545546   AM_RANGE(0x8000, 0xbfff) AM_NOP
546   AM_RANGE(0xc000, 0xdfff) AM_READWRITE_LEGACY(royalqn_comm_r, royalqn_comm_w) AM_BASE(m_comms_ram)
547   AM_RANGE(0xc000, 0xdfff) AM_READWRITE(royalqn_comm_r, royalqn_comm_w) AM_BASE(m_comms_ram)
547548   AM_RANGE(0xe000, 0xffff) AM_RAM
548549ADDRESS_MAP_END
549550
r14845r14846
552553   AM_RANGE(0x01,0x01) AM_MIRROR(0xec) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
553554   AM_RANGE(0x02,0x03) AM_MIRROR(0xec) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
554555   AM_RANGE(0x10,0x10) AM_MIRROR(0xe8) AM_READ_PORT("DSWC") AM_WRITENOP //AM_WRITE_LEGACY(output_w)
555   AM_RANGE(0x11,0x11) AM_MIRROR(0xe8) AM_READ_PORT("SYSA") AM_WRITE_LEGACY(mux_w)
556   AM_RANGE(0x12,0x12) AM_MIRROR(0xe8) AM_READ_PORT("DSWA") AM_WRITE_LEGACY(royalqn_blitter_0_w)
557   AM_RANGE(0x13,0x13) AM_MIRROR(0xe8) AM_READ_PORT("DSWB") AM_WRITE_LEGACY(royalqn_blitter_1_w)
558   AM_RANGE(0x14,0x14) AM_MIRROR(0xe8) AM_READNOP AM_WRITE_LEGACY(royalqn_blitter_2_w)
556   AM_RANGE(0x11,0x11) AM_MIRROR(0xe8) AM_READ_PORT("SYSA") AM_WRITE(mux_w)
557   AM_RANGE(0x12,0x12) AM_MIRROR(0xe8) AM_READ_PORT("DSWA") AM_WRITE(royalqn_blitter_0_w)
558   AM_RANGE(0x13,0x13) AM_MIRROR(0xe8) AM_READ_PORT("DSWB") AM_WRITE(royalqn_blitter_1_w)
559   AM_RANGE(0x14,0x14) AM_MIRROR(0xe8) AM_READNOP AM_WRITE(royalqn_blitter_2_w)
559560   AM_RANGE(0x15,0x15) AM_MIRROR(0xe8) AM_NOP
560561   AM_RANGE(0x16,0x16) AM_MIRROR(0xe8) AM_NOP
561562   AM_RANGE(0x17,0x17) AM_MIRROR(0xe8) AM_NOP
r14845r14846
563564
564565static ADDRESS_MAP_START( royalqn_nsc_map, AS_PROGRAM, 8, nightgal_state )
565566   AM_RANGE(0x0000, 0x007f) AM_RAM
566   AM_RANGE(0x0080, 0x0080) AM_READ_LEGACY(blitter_status_r)
567   AM_RANGE(0x0081, 0x0083) AM_READ_LEGACY(royalqn_nsc_blit_r)
568   AM_RANGE(0x0080, 0x0086) AM_WRITE_LEGACY(nsc_true_blitter_w)
567   AM_RANGE(0x0080, 0x0080) AM_READ(blitter_status_r)
568   AM_RANGE(0x0081, 0x0083) AM_READ(royalqn_nsc_blit_r)
569   AM_RANGE(0x0080, 0x0086) AM_WRITE(nsc_true_blitter_w)
569570
570   AM_RANGE(0x00a0, 0x00af) AM_WRITE_LEGACY(blit_true_vregs_w)
571   AM_RANGE(0x00a0, 0x00af) AM_WRITE(blit_true_vregs_w)
571572   AM_RANGE(0x00b0, 0x00b0) AM_WRITENOP // bltflip register
572573
573   AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2c00) AM_READWRITE_LEGACY(royalqn_comm_r,royalqn_comm_w)
574   AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2c00) AM_READWRITE(royalqn_comm_r,royalqn_comm_w)
574575   AM_RANGE(0x4000, 0x4000) AM_NOP
575576   AM_RANGE(0x8000, 0x8000) AM_NOP //open bus or protection check
576577   AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM
src/mame/drivers/maygayv1.c
r14845r14846
226226   device_t *m_duart68681;
227227   i82716_t m_i82716;
228228   i8279_t m_i8279;
229   DECLARE_WRITE16_MEMBER(i82716_w);
230   DECLARE_READ16_MEMBER(i82716_r);
231   DECLARE_WRITE16_MEMBER(write_odd);
232   DECLARE_READ16_MEMBER(read_odd);
233   DECLARE_READ16_MEMBER(maygay_8279_r);
234   DECLARE_WRITE16_MEMBER(maygay_8279_w);
235   DECLARE_WRITE16_MEMBER(vsync_int_ctrl);
236   DECLARE_READ8_MEMBER(mcu_r);
237   DECLARE_WRITE8_MEMBER(mcu_w);
229238};
230239
231240
232241
233242
234static WRITE16_HANDLER( i82716_w )
243WRITE16_MEMBER(maygayv1_state::i82716_w)
235244{
236   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
237   i82716_t &i82716 = state->m_i82716;
245   i82716_t &i82716 = m_i82716;
238246   // Accessing register window?
239247   if ((VREG(RWBA) & 0xfff0) == (offset & 0xfff0))
240248   {
r14845r14846
251259   }
252260}
253261
254static READ16_HANDLER( i82716_r )
262READ16_MEMBER(maygayv1_state::i82716_r)
255263{
256   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
257   i82716_t &i82716 = state->m_i82716;
264   i82716_t &i82716 = m_i82716;
258265   // Accessing register window?
259266   if ((VREG(RWBA) & ~0xf) == (offset & ~0xf))
260267   {
r14845r14846
469476
470477
471478
472static WRITE16_HANDLER( write_odd )
479WRITE16_MEMBER(maygayv1_state::write_odd)
473480{
474481}
475482
476483//;860008 is a latch of some sort
477static READ16_HANDLER( read_odd )
484READ16_MEMBER(maygayv1_state::read_odd)
478485{
479486   return 0;
480487}
r14845r14846
509516      }
510517}
511518
512static READ16_HANDLER( maygay_8279_r )
519READ16_MEMBER(maygayv1_state::maygay_8279_r)
513520{
514   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
515   i8279_t &i8279 = state->m_i8279;
521   i8279_t &i8279 = m_i8279;
516522   static const char *const portnames[] = { "STROBE1","STROBE2","STROBE3","STROBE4","STROBE5","STROBE6","STROBE7","STROBE8" };
517523   UINT8 result = 0xff;
518524   UINT8 addr;
r14845r14846
526532         case 0x40:
527533            addr = i8279.command & 0x07;
528534
529            result = input_port_read(space->machine(), portnames[addr]);
535            result = input_port_read(machine(), portnames[addr]);
530536
531537            /* handle autoincrement */
532538            if (i8279.command & 0x10)
r14845r14846
557563}
558564
559565
560static WRITE16_HANDLER( maygay_8279_w )
566WRITE16_MEMBER(maygayv1_state::maygay_8279_w)
561567{
562   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
563   i8279_t &i8279 = state->m_i8279;
568   i8279_t &i8279 = m_i8279;
564569   UINT8 addr;
565570
566571   data >>= 8;
r14845r14846
660665
661666
662667
663static WRITE16_HANDLER( vsync_int_ctrl )
668WRITE16_MEMBER(maygayv1_state::vsync_int_ctrl)
664669{
665   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
666   state->m_vsync_latch_preset = data & 0x0100;
670   m_vsync_latch_preset = data & 0x0100;
667671
668672   // Active low
669   if (!(state->m_vsync_latch_preset))
670      cputag_set_input_line(space->machine(), "maincpu", 3, CLEAR_LINE);
673   if (!(m_vsync_latch_preset))
674      cputag_set_input_line(machine(), "maincpu", 3, CLEAR_LINE);
671675}
672676
673677static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, maygayv1_state )
674678   AM_RANGE(0x000000, 0x07ffff) AM_ROM
675679   AM_RANGE(0x080000, 0x083fff) AM_RAM AM_SHARE("nvram")
676680   AM_RANGE(0x100000, 0x17ffff) AM_ROM AM_REGION("maincpu", 0x80000)
677   AM_RANGE(0x820000, 0x820003) AM_READWRITE_LEGACY(maygay_8279_r, maygay_8279_w)
681   AM_RANGE(0x820000, 0x820003) AM_READWRITE(maygay_8279_r, maygay_8279_w)
678682   AM_RANGE(0x800000, 0x800003) AM_DEVWRITE8_LEGACY("ymsnd", ym2413_w, 0xff00 )
679   AM_RANGE(0x860000, 0x86000d) AM_READWRITE_LEGACY(read_odd, write_odd)
680   AM_RANGE(0x86000e, 0x86000f) AM_WRITE_LEGACY(vsync_int_ctrl)
681   AM_RANGE(0x880000, 0x89ffff) AM_READWRITE_LEGACY(i82716_r, i82716_w)
683   AM_RANGE(0x860000, 0x86000d) AM_READWRITE(read_odd, write_odd)
684   AM_RANGE(0x86000e, 0x86000f) AM_WRITE(vsync_int_ctrl)
685   AM_RANGE(0x880000, 0x89ffff) AM_READWRITE(i82716_r, i82716_w)
682686   AM_RANGE(0x8a0000, 0x8a001f) AM_DEVREADWRITE8_LEGACY("duart68681", duart68681_r, duart68681_w, 0xff)
683687   AM_RANGE(0x8c0000, 0x8c000f) AM_DEVREADWRITE8("pia", pia6821_device, read, write, 0xff)
684688ADDRESS_MAP_END
r14845r14846
719723
720724*/
721725
722static READ8_HANDLER( mcu_r )
726READ8_MEMBER(maygayv1_state::mcu_r)
723727{
724   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
725728   switch (offset)
726729   {
727730      case 1:
728731      {
729         if ( !BIT(state->m_p3, 4) )
730            return (input_port_read(space->machine(), "REEL"));   // Reels???
732         if ( !BIT(m_p3, 4) )
733            return (input_port_read(machine(), "REEL"));   // Reels???
731734         else
732735            return 0;
733736      }
r14845r14846
737740   return 0;
738741}
739742
740static WRITE8_HANDLER( mcu_w )
743WRITE8_MEMBER(maygayv1_state::mcu_w)
741744{
742   maygayv1_state *state = space->machine().driver_data<maygayv1_state>();
743745         logerror("O %x D %x",offset,data);
744746
745747   switch (offset)
746748   {
747749      // Bottom nibble = UPD
748750      case 1:
749         state->m_p1 = data;
751         m_p1 = data;
750752//          upd7759_msg_w(0, data);//?
751753         break;
752754      case 3:
753755         upd7759_reset_w (0, BIT(data, 2));
754756         upd7759_start_w(0, BIT(data, 6));
755757
756//          if ( !BIT(state->m_p3, 7) && BIT(data, 7) )
758//          if ( !BIT(m_p3, 7) && BIT(data, 7) )
757759            // P1 propagates to outputs
758760
759         state->m_p3 = data;
761         m_p3 = data;
760762         break;
761763   }
762764}
r14845r14846
771773ADDRESS_MAP_END
772774
773775static ADDRESS_MAP_START( sound_io, AS_IO, 8, maygayv1_state )
774   AM_RANGE(0x00, 0xff) AM_READWRITE_LEGACY(mcu_r, mcu_w)
776   AM_RANGE(0x00, 0xff) AM_READWRITE(mcu_r, mcu_w)
775777ADDRESS_MAP_END
776778
777779
src/mame/drivers/attckufo.c
r14845r14846
6161   /* devices */
6262   required_device<cpu_device> m_maincpu;
6363   required_device<mos6560_device> m_mos6560;
64   DECLARE_READ8_MEMBER(attckufo_io_r);
65   DECLARE_WRITE8_MEMBER(attckufo_io_w);
6466};
6567
6668
r14845r14846
9597}
9698
9799
98static READ8_HANDLER(attckufo_io_r)
100READ8_MEMBER(attckufo_state::attckufo_io_r)
99101{
100102   switch(offset)
101103   {
102      case 0: return input_port_read(space->machine(), "DSW");
103      case 2: return input_port_read(space->machine(), "INPUT");
104      case 0: return input_port_read(machine(), "DSW");
105      case 2: return input_port_read(machine(), "INPUT");
104106   }
105107   return 0xff;
106108}
107109
108110
109static WRITE8_HANDLER(attckufo_io_w)
111WRITE8_MEMBER(attckufo_state::attckufo_io_w)
110112{
111113   /*
112114    offset, data:
r14845r14846
121123   ADDRESS_MAP_GLOBAL_MASK(0x3fff)
122124   AM_RANGE(0x0000, 0x0fff) AM_RAM AM_BASE(m_mainram)
123125   AM_RANGE(0x1000, 0x100f) AM_DEVREADWRITE_LEGACY("mos6560", mos6560_port_r, mos6560_port_w)
124   AM_RANGE(0x1400, 0x1403) AM_READWRITE_LEGACY(attckufo_io_r, attckufo_io_w)
126   AM_RANGE(0x1400, 0x1403) AM_READWRITE(attckufo_io_r, attckufo_io_w)
125127   AM_RANGE(0x1c00, 0x1fff) AM_RAM AM_BASE(m_tileram)
126128   AM_RANGE(0x2000, 0x3fff) AM_ROM
127129ADDRESS_MAP_END
src/mame/drivers/jongkyo.c
r14845r14846
4545   /* memory pointers */
4646   UINT8 *  m_videoram;
4747   UINT8    m_videoram2[0x4000];
48   DECLARE_WRITE8_MEMBER(bank_select_w);
49   DECLARE_WRITE8_MEMBER(mux_w);
50   DECLARE_WRITE8_MEMBER(jongkyo_coin_counter_w);
51   DECLARE_WRITE8_MEMBER(videoram2_w);
52   DECLARE_WRITE8_MEMBER(unknown_w);
4853};
4954
5055
r14845r14846
109114 *
110115 *************************************/
111116
112static WRITE8_HANDLER( bank_select_w )
117WRITE8_MEMBER(jongkyo_state::bank_select_w)
113118{
114   jongkyo_state *state = space->machine().driver_data<jongkyo_state>();
115119   int mask = 1 << (offset >> 1);
116120
117   state->m_rom_bank &= ~mask;
121   m_rom_bank &= ~mask;
118122
119123   if (offset & 1)
120      state->m_rom_bank |= mask;
124      m_rom_bank |= mask;
121125
122   memory_set_bank(space->machine(), "bank1", state->m_rom_bank);
126   memory_set_bank(machine(), "bank1", m_rom_bank);
123127}
124128
125static WRITE8_HANDLER( mux_w )
129WRITE8_MEMBER(jongkyo_state::mux_w)
126130{
127   jongkyo_state *state = space->machine().driver_data<jongkyo_state>();
128   state->m_mux_data = ~data;
129   //  printf("%02x\n", state->m_mux_data);
131   m_mux_data = ~data;
132   //  printf("%02x\n", m_mux_data);
130133}
131134
132static WRITE8_HANDLER( jongkyo_coin_counter_w )
135WRITE8_MEMBER(jongkyo_state::jongkyo_coin_counter_w)
133136{
134137   /* bit 1 = coin counter */
135   coin_counter_w(space->machine(), 0, data & 2);
138   coin_counter_w(machine(), 0, data & 2);
136139
137140   /* bit 2 always set? */
138141}
r14845r14846
177180          input_port_read(device->machine(), "PL2_4") & input_port_read(device->machine(), "PL2_5") & input_port_read(device->machine(), "PL2_6")) | coin_port;
178181}
179182
180static WRITE8_HANDLER( videoram2_w )
183WRITE8_MEMBER(jongkyo_state::videoram2_w)
181184{
182   jongkyo_state *state = space->machine().driver_data<jongkyo_state>();
183   state->m_videoram2[offset] = data;
185   m_videoram2[offset] = data;
184186}
185187
186static WRITE8_HANDLER( unknown_w )
188WRITE8_MEMBER(jongkyo_state::unknown_w)
187189{
188190   switch (offset)
189191   {
r14845r14846
218220 *************************************/
219221
220222static ADDRESS_MAP_START( jongkyo_memmap, AS_PROGRAM, 8, jongkyo_state )
221   AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITE_LEGACY(videoram2_w) // wrong, this doesn't seem to be video ram on write..
223   AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITE(videoram2_w) // wrong, this doesn't seem to be video ram on write..
222224   AM_RANGE(0x4000, 0x6bff) AM_ROM // fixed rom
223225   AM_RANGE(0x6c00, 0x6fff) AM_ROMBANK("bank1")   // banked (8 banks)
224226   AM_RANGE(0x7000, 0x77ff) AM_RAM
r14845r14846
232234   AM_RANGE(0x01, 0x01) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
233235   AM_RANGE(0x02, 0x03) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
234236
235   AM_RANGE(0x10, 0x10) AM_READ_PORT("DSW") AM_WRITE_LEGACY(jongkyo_coin_counter_w)
236   AM_RANGE(0x11, 0x11) AM_READ_PORT("IN0") AM_WRITE_LEGACY(mux_w)
237   AM_RANGE(0x10, 0x10) AM_READ_PORT("DSW") AM_WRITE(jongkyo_coin_counter_w)
238   AM_RANGE(0x11, 0x11) AM_READ_PORT("IN0") AM_WRITE(mux_w)
237239   // W 11 select keyboard row (fe fd fb f7)
238   AM_RANGE(0x40, 0x45) AM_WRITE_LEGACY(bank_select_w)
239   AM_RANGE(0x46, 0x4f) AM_WRITE_LEGACY(unknown_w)
240   AM_RANGE(0x40, 0x45) AM_WRITE(bank_select_w)
241   AM_RANGE(0x46, 0x4f) AM_WRITE(unknown_w)
240242ADDRESS_MAP_END
241243
242244/*************************************
src/mame/drivers/littlerb.c
r14845r14846
100100   required_device<cpu_device> m_maincpu;
101101   required_device<dac_device> m_dacl;
102102   required_device<dac_device> m_dacr;
103   DECLARE_WRITE16_MEMBER(region4_w);
104   DECLARE_READ16_MEMBER(buffer_status_r);
105   DECLARE_READ16_MEMBER(littlerb_vdp_r);
106   DECLARE_WRITE16_MEMBER(littlerb_vdp_w);
107   DECLARE_WRITE16_MEMBER(littlerb_l_sound_w);
108   DECLARE_WRITE16_MEMBER(littlerb_r_sound_w);
103109};
104110
105111
106static WRITE16_HANDLER( region4_w )
112WRITE16_MEMBER(littlerb_state::region4_w)
107113{
108   littlerb_state *state = space->machine().driver_data<littlerb_state>();
109   COMBINE_DATA(&state->m_region4[offset]);
114   COMBINE_DATA(&m_region4[offset]);
110115}
111116
112static READ16_HANDLER( buffer_status_r )
117READ16_MEMBER(littlerb_state::buffer_status_r)
113118{
114119   return 0;
115120}
r14845r14846
125130   AM_RANGE(0x00800002 ,0x00800003) AM_DEVWRITE8("^ramdac", ramdac_device, pal_w,   0x00ff)
126131   AM_RANGE(0x00800004 ,0x00800005) AM_DEVWRITE8("^ramdac", ramdac_device, mask_w,  0x00ff)
127132
128   AM_RANGE(0x1ff80804, 0x1ff80805) AM_READ_LEGACY(buffer_status_r)
133   AM_RANGE(0x1ff80804, 0x1ff80805) AM_READ(buffer_status_r)
129134   // most gfx end up here including the sprite list
130   AM_RANGE(0x1ff80000, 0x1fffffff) AM_RAM_WRITE_LEGACY(region4_w)  AM_BASE(m_region4)
135   AM_RANGE(0x1ff80000, 0x1fffffff) AM_RAM_WRITE(region4_w)  AM_BASE(m_region4)
131136ADDRESS_MAP_END
132137
133138static ADDRESS_MAP_START( ramdac_map, AS_0, 8, littlerb_state )
r14845r14846
223228   state->m_write_address = state->m_vdp_address_low | state->m_vdp_address_high<<16;
224229}
225230
226static READ16_HANDLER( littlerb_vdp_r )
231READ16_MEMBER(littlerb_state::littlerb_vdp_r)
227232{
228   littlerb_state *state = space->machine().driver_data<littlerb_state>();
229   logerror("%06x littlerb_vdp_r offs %04x mask %04x (address %08x)\n", cpu_get_pc(&space->device()), offset, mem_mask, state->m_write_address);
233   logerror("%06x littlerb_vdp_r offs %04x mask %04x (address %08x)\n", cpu_get_pc(&space.device()), offset, mem_mask, m_write_address);
230234   UINT16 res;
231235
232236   switch (offset & 3)
233237   {
234      case 0: res = state->m_vdp_address_low; break;
235      case 1: res = state->m_vdp_address_high; break;
236      case 2: res = littlerb_data_read(space->machine(), mem_mask); break;
237      case 3: res = state->m_vdp_writemode; break;
238      case 0: res = m_vdp_address_low; break;
239      case 1: res = m_vdp_address_high; break;
240      case 2: res = littlerb_data_read(machine(), mem_mask); break;
241      case 3: res = m_vdp_writemode; break;
238242   }
239243
240244   return res;
241245}
242246
243247#define LOG_VDP 0
244static WRITE16_HANDLER( littlerb_vdp_w )
248WRITE16_MEMBER(littlerb_state::littlerb_vdp_w)
245249{
246   littlerb_state *state = space->machine().driver_data<littlerb_state>();
247250
248251   if (offset!=2)
249252   {
250      if (state->m_type2_writes)
253      if (m_type2_writes)
251254      {
252         if (state->m_type2_writes>2)
255         if (m_type2_writes>2)
253256         {
254257            if (LOG_VDP) logerror("******************************* BIG WRITE OCCURRED BEFORE THIS!!! ****************************\n");
255            printf("big write occured with start %08x end %08x\n", state->m_write_address_laststart >> 3, state->m_write_address_lastend >> 3);
258            printf("big write occured with start %08x end %08x\n", m_write_address_laststart >> 3, m_write_address_lastend >> 3);
256259         }
257260
258         if (LOG_VDP) logerror("~%06x previously wrote %08x data bytes\n", state->m_lasttype2pc, state->m_type2_writes*2);
259         state->m_type2_writes = 0;
261         if (LOG_VDP) logerror("~%06x previously wrote %08x data bytes\n", m_lasttype2pc, m_type2_writes*2);
262         m_type2_writes = 0;
260263      }
261264
262      if (LOG_VDP) logerror("%06x littlerb_vdp_w offs %04x data %04x mask %04x\n", cpu_get_pc(&space->device()), offset, data, mem_mask);
265      if (LOG_VDP) logerror("%06x littlerb_vdp_w offs %04x data %04x mask %04x\n", cpu_get_pc(&space.device()), offset, data, mem_mask);
263266   }
264267   else
265268   {
266269      if (mem_mask==0xffff)
267270      {
268         if (state->m_type2_writes==0)
271         if (m_type2_writes==0)
269272         {
270            if (LOG_VDP) logerror("data write started %06x %04x data %04x mask %04x\n", cpu_get_pc(&space->device()), offset, data, mem_mask);
273            if (LOG_VDP) logerror("data write started %06x %04x data %04x mask %04x\n", cpu_get_pc(&space.device()), offset, data, mem_mask);
271274         }
272         if (state->m_type2_writes==0) state->m_write_address_laststart = state->m_write_address;
273         state->m_write_address_lastend = state->m_write_address;
274         state->m_type2_writes++;
275         state->m_lasttype2pc = cpu_get_pc(&space->device());
275         if (m_type2_writes==0) m_write_address_laststart = m_write_address;
276         m_write_address_lastend = m_write_address;
277         m_type2_writes++;
278         m_lasttype2pc = cpu_get_pc(&space.device());
276279      }
277280      else
278281      {
279         if (LOG_VDP) logerror("xxx %06x littlerb_vdp_w offs %04x data %04x mask %04x\n", cpu_get_pc(&space->device()), offset, data, mem_mask);
282         if (LOG_VDP) logerror("xxx %06x littlerb_vdp_w offs %04x data %04x mask %04x\n", cpu_get_pc(&space.device()), offset, data, mem_mask);
280283      }
281284   }
282285
r14845r14846
284287   switch (offset)
285288   {
286289      case 0:
287         COMBINE_DATA(&state->m_vdp_address_low);
288         littlerb_recalc_address(space->machine());
290         COMBINE_DATA(&m_vdp_address_low);
291         littlerb_recalc_address(machine());
289292      break;
290293
291294      case 1:
292         COMBINE_DATA(&state->m_vdp_address_high);
293         littlerb_recalc_address(space->machine());
295         COMBINE_DATA(&m_vdp_address_high);
296         littlerb_recalc_address(machine());
294297      break;
295298
296299
297300      case 2:
298      littlerb_data_write(space->machine(), data, mem_mask);
301      littlerb_data_write(machine(), data, mem_mask);
299302      break;
300303
301304      case 3:
302         COMBINE_DATA(&state->m_vdp_writemode);
303         int mode = state->m_vdp_writemode;
305         COMBINE_DATA(&m_vdp_writemode);
306         int mode = m_vdp_writemode;
304307         if ((mode!=0x3800) && (mode !=0x2000)) printf("WRITE MODE CHANGED TO %04x\n",mode);
305308      break;
306309
r14845r14846
315318}
316319
317320/* l is SFX, r is BGM (they doesn't seem to share the same data ROM) */
318static WRITE16_HANDLER( littlerb_l_sound_w )
321WRITE16_MEMBER(littlerb_state::littlerb_l_sound_w)
319322{
320   littlerb_state *state = space->machine().driver_data<littlerb_state>();
321   state->m_sound_index_l = (data >> sound_data_shift(space->machine())) & 0xff;
322   state->m_sound_pointer_l = 0;
323   //popmessage("%04x %04x",state->m_sound_index_l,state->m_sound_index_r);
323   m_sound_index_l = (data >> sound_data_shift(machine())) & 0xff;
324   m_sound_pointer_l = 0;
325   //popmessage("%04x %04x",m_sound_index_l,m_sound_index_r);
324326}
325327
326static WRITE16_HANDLER( littlerb_r_sound_w )
328WRITE16_MEMBER(littlerb_state::littlerb_r_sound_w)
327329{
328   littlerb_state *state = space->machine().driver_data<littlerb_state>();
329   state->m_sound_index_r = (data >> sound_data_shift(space->machine())) & 0xff;
330   state->m_sound_pointer_r = 0;
331   //popmessage("%04x %04x",state->m_sound_index_l,state->m_sound_index_r);
330   m_sound_index_r = (data >> sound_data_shift(machine())) & 0xff;
331   m_sound_pointer_r = 0;
332   //popmessage("%04x %04x",m_sound_index_l,m_sound_index_r);
332333}
333334
334335static ADDRESS_MAP_START( littlerb_main, AS_PROGRAM, 16, littlerb_state )
r14845r14846
338339   AM_RANGE(0x060004, 0x060007) AM_WRITENOP
339340   AM_RANGE(0x000000, 0x0fffff) AM_ROM
340341   AM_RANGE(0x200000, 0x203fff) AM_RAM // main ram?
341   AM_RANGE(0x700000, 0x700007) AM_READ_LEGACY(littlerb_vdp_r) AM_WRITE_LEGACY(littlerb_vdp_w)
342   AM_RANGE(0x740000, 0x740001) AM_WRITE_LEGACY(littlerb_l_sound_w)
343   AM_RANGE(0x760000, 0x760001) AM_WRITE_LEGACY(littlerb_r_sound_w)
342   AM_RANGE(0x700000, 0x700007) AM_READ(littlerb_vdp_r) AM_WRITE(littlerb_vdp_w)
343   AM_RANGE(0x740000, 0x740001) AM_WRITE(littlerb_l_sound_w)
344   AM_RANGE(0x760000, 0x760001) AM_WRITE(littlerb_r_sound_w)
344345   AM_RANGE(0x780000, 0x780001) AM_WRITENOP // generic outputs
345346   AM_RANGE(0x7c0000, 0x7c0001) AM_READ_PORT("DSW")
346347   AM_RANGE(0x7e0000, 0x7e0001) AM_READ_PORT("P1")
src/mame/drivers/namcos23.c
r14845r14846
13771377   UINT8 m_im_rd;
13781378   UINT8 m_im_wr;
13791379   UINT8 m_s23_tssio_port_4;
1380   DECLARE_WRITE32_MEMBER(namcos23_textram_w);
1381   DECLARE_WRITE32_MEMBER(s23_txtchar_w);
1382   DECLARE_WRITE32_MEMBER(namcos23_paletteram_w);
1383   DECLARE_READ16_MEMBER(s23_c417_r);
1384   DECLARE_WRITE16_MEMBER(s23_c417_w);
1385   DECLARE_READ16_MEMBER(s23_c412_ram_r);
1386   DECLARE_WRITE16_MEMBER(s23_c412_ram_w);
1387   DECLARE_READ16_MEMBER(s23_c412_r);
1388   DECLARE_WRITE16_MEMBER(s23_c412_w);
1389   DECLARE_READ16_MEMBER(s23_c421_ram_r);
1390   DECLARE_WRITE16_MEMBER(s23_c421_ram_w);
1391   DECLARE_READ16_MEMBER(s23_c421_r);
1392   DECLARE_WRITE16_MEMBER(s23_c421_w);
1393   DECLARE_WRITE16_MEMBER(s23_ctl_w);
1394   DECLARE_READ16_MEMBER(s23_ctl_r);
1395   DECLARE_WRITE16_MEMBER(s23_c361_w);
1396   DECLARE_READ16_MEMBER(s23_c361_r);
1397   DECLARE_READ16_MEMBER(s23_c422_r);
1398   DECLARE_WRITE16_MEMBER(s23_c422_w);
1399   DECLARE_WRITE32_MEMBER(s23_mcuen_w);
1400   DECLARE_READ32_MEMBER(gorgon_sharedram_r);
1401   DECLARE_WRITE32_MEMBER(gorgon_sharedram_w);
1402   DECLARE_READ32_MEMBER(s23_unk_status_r);
1403   DECLARE_READ32_MEMBER(p3d_r);
1404   DECLARE_WRITE32_MEMBER(p3d_w);
1405   DECLARE_READ32_MEMBER(gmen_trigger_sh2);
1406   DECLARE_READ32_MEMBER(sh2_shared_r);
1407   DECLARE_WRITE32_MEMBER(sh2_shared_w);
1408   DECLARE_WRITE16_MEMBER(sharedram_sub_w);
1409   DECLARE_READ16_MEMBER(sharedram_sub_r);
1410   DECLARE_WRITE16_MEMBER(sub_interrupt_main_w);
1411   DECLARE_READ8_MEMBER(s23_mcu_p8_r);
1412   DECLARE_READ8_MEMBER(s23_mcu_pa_r);
1413   DECLARE_WRITE8_MEMBER(s23_mcu_pa_w);
1414   DECLARE_READ8_MEMBER(s23_mcu_rtc_r);
1415   DECLARE_READ8_MEMBER(s23_mcu_portB_r);
1416   DECLARE_WRITE8_MEMBER(s23_mcu_portB_w);
1417   DECLARE_WRITE8_MEMBER(s23_mcu_settings_w);
1418   DECLARE_READ8_MEMBER(s23_mcu_iob_r);
1419   DECLARE_WRITE8_MEMBER(s23_mcu_iob_w);
1420   DECLARE_READ8_MEMBER(s23_mcu_p6_r);
1421   DECLARE_WRITE8_MEMBER(s23_mcu_p6_w);
1422   DECLARE_READ8_MEMBER(s23_iob_mcu_r);
1423   DECLARE_WRITE8_MEMBER(s23_iob_mcu_w);
1424   DECLARE_READ8_MEMBER(s23_iob_p4_r);
1425   DECLARE_WRITE8_MEMBER(s23_iob_p4_w);
1426   DECLARE_READ8_MEMBER(s23_gun_r);
1427   DECLARE_READ8_MEMBER(iob_r);
13801428};
13811429
13821430
r14845r14846
14001448   SET_TILE_INFO( 0, data&0x03ff, data>>12, TILE_FLIPYX((data&0x0c00)>>10) );
14011449} /* TextTilemapGetInfo */
14021450
1403static WRITE32_HANDLER( namcos23_textram_w )
1451WRITE32_MEMBER(namcos23_state::namcos23_textram_w)
14041452{
1405   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1406   COMBINE_DATA( &state->m_textram[offset] );
1407   state->m_bgtilemap->mark_tile_dirty(offset*2);
1408   state->m_bgtilemap->mark_tile_dirty((offset*2)+1);
1453   COMBINE_DATA( &m_textram[offset] );
1454   m_bgtilemap->mark_tile_dirty(offset*2);
1455   m_bgtilemap->mark_tile_dirty((offset*2)+1);
14091456}
14101457
1411static WRITE32_HANDLER( s23_txtchar_w )
1458WRITE32_MEMBER(namcos23_state::s23_txtchar_w)
14121459{
1413   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1414   COMBINE_DATA(&state->m_charram[offset]);
1415   gfx_element_mark_dirty(space->machine().gfx[0], offset/32);
1460   COMBINE_DATA(&m_charram[offset]);
1461   gfx_element_mark_dirty(machine().gfx[0], offset/32);
14161462}
14171463
14181464static UINT8 nthbyte( const UINT32 *pSource, int offs )
r14845r14846
14371483
14381484/* each LONGWORD is 2 colors.  each OFFSET is 2 colors */
14391485
1440static WRITE32_HANDLER( namcos23_paletteram_w )
1486WRITE32_MEMBER(namcos23_state::namcos23_paletteram_w)
14411487{
1442   COMBINE_DATA( &space->machine().generic.paletteram.u32[offset] );
1488   COMBINE_DATA( &machine().generic.paletteram.u32[offset] );
14431489
1444   UpdatePalette(space->machine(), (offset % (0x10000/4))*2);
1490   UpdatePalette(machine(), (offset % (0x10000/4))*2);
14451491}
14461492
1447static READ16_HANDLER(s23_c417_r)
1493READ16_MEMBER(namcos23_state::s23_c417_r)
14481494{
1449   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1450   c417_t &c417 = state->m_c417;
1495   c417_t &c417 = m_c417;
14511496
14521497   switch(offset) {
14531498      /* According to timecrs2c, +0 is the status word with bits being:
r14845r14846
14641509           1:  1st c435 busy (inverted)
14651510           0:  xcpreq
14661511         */
1467   case 0: return 0x8e | (space->machine().primary_screen->vblank() ? 0x0000 : 0x8000);
1512   case 0: return 0x8e | (machine().primary_screen->vblank() ? 0x0000 : 0x8000);
14681513   case 1: return c417.adr;
14691514   case 4:
1470      //      logerror("c417_r %04x = %04x (%08x, %08x)\n", c417.adr, c417.ram[c417.adr], cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1515      //      logerror("c417_r %04x = %04x (%08x, %08x)\n", c417.adr, c417.ram[c417.adr], cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
14711516      return c417.ram[c417.adr];
14721517   case 5:
1473      if(c417.pointrom_adr >= state->m_ptrom_limit)
1518      if(c417.pointrom_adr >= m_ptrom_limit)
14741519         return 0xffff;
1475      return state->m_ptrom[c417.pointrom_adr] >> 16;
1520      return m_ptrom[c417.pointrom_adr] >> 16;
14761521   case 6:
1477      if(c417.pointrom_adr >= state->m_ptrom_limit)
1522      if(c417.pointrom_adr >= m_ptrom_limit)
14781523         return 0xffff;
1479      return state->m_ptrom[c417.pointrom_adr];
1524      return m_ptrom[c417.pointrom_adr];
14801525
14811526   }
14821527
1483   logerror("c417_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1528   logerror("c417_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
14841529   return 0;
14851530}
14861531
1487static WRITE16_HANDLER(s23_c417_w)
1532WRITE16_MEMBER(namcos23_state::s23_c417_w)
14881533{
1489   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1490   c417_t &c417 = state->m_c417;
1534   c417_t &c417 = m_c417;
14911535
14921536   switch(offset) {
14931537   case 0:
r14845r14846
15031547      c417.pointrom_adr = 0;
15041548      break;
15051549   case 4:
1506      //        logerror("c417_w %04x = %04x (%08x, %08x)\n", c417.adr, data, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1550      //        logerror("c417_w %04x = %04x (%08x, %08x)\n", c417.adr, data, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15071551      COMBINE_DATA(c417.ram + c417.adr);
15081552      break;
15091553   case 7:
15101554      logerror("c417_w: ack IRQ 2 (%x)\n", data);
1511      cputag_set_input_line(space->machine(), "maincpu", MIPS3_IRQ2, CLEAR_LINE);
1555      cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ2, CLEAR_LINE);
15121556      break;
15131557   default:
1514      logerror("c417_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1558      logerror("c417_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15151559      break;
15161560   }
15171561}
15181562
1519static READ16_HANDLER(s23_c412_ram_r)
1563READ16_MEMBER(namcos23_state::s23_c412_ram_r)
15201564{
1521   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1522   c412_t &c412 = state->m_c412;
1565   c412_t &c412 = m_c412;
15231566
1524   //  logerror("c412_ram_r %06x (%08x, %08x)\n", offset, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1567   //  logerror("c412_ram_r %06x (%08x, %08x)\n", offset, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15251568   if(offset < 0x100000)
15261569      return c412.sdram_a[offset & 0xfffff];
15271570   else if(offset < 0x200000)
r14845r14846
15341577   return 0xffff;
15351578}
15361579
1537static WRITE16_HANDLER(s23_c412_ram_w)
1580WRITE16_MEMBER(namcos23_state::s23_c412_ram_w)
15381581{
1539   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1540   c412_t &c412 = state->m_c412;
1582   c412_t &c412 = m_c412;
15411583
1542   //  logerror("c412_ram_w %06x = %04x (%08x, %08x)\n", offset, data, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1584   //  logerror("c412_ram_w %06x = %04x (%08x, %08x)\n", offset, data, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15431585   if(offset < 0x100000)
15441586      COMBINE_DATA(c412.sdram_a + (offset & 0xfffff));
15451587   else if(offset < 0x200000)
r14845r14846
15501592      COMBINE_DATA(c412.pczram  + (offset & 0x001ff));
15511593}
15521594
1553static READ16_HANDLER(s23_c412_r)
1595READ16_MEMBER(namcos23_state::s23_c412_r)
15541596{
1555   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1556   c412_t &c412 = state->m_c412;
1597   c412_t &c412 = m_c412;
15571598
15581599   switch(offset) {
15591600   case 3:
r14845r14846
15641605   case 10: return s23_c412_ram_r(space, c412.adr, mem_mask);
15651606   }
15661607
1567   logerror("c412_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1608   logerror("c412_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15681609   return 0;
15691610}
15701611
1571static WRITE16_HANDLER(s23_c412_w)
1612WRITE16_MEMBER(namcos23_state::s23_c412_w)
15721613{
1573   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1574   c412_t &c412 = state->m_c412;
1614   c412_t &c412 = m_c412;
15751615
15761616   switch(offset) {
15771617   case 8: c412.adr = (data & mem_mask) | (c412.adr & (0xffffffff ^ mem_mask)); break;
15781618   case 9: c412.adr = ((data & mem_mask) << 16) | (c412.adr & (0xffffffff ^ (mem_mask << 16))); break;
15791619   case 10: s23_c412_ram_w(space, c412.adr, data, mem_mask); c412.adr += 2; break;
15801620   default:
1581      logerror("c412_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1621      logerror("c412_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15821622      break;
15831623   }
15841624}
15851625
1586static READ16_HANDLER(s23_c421_ram_r)
1626READ16_MEMBER(namcos23_state::s23_c421_ram_r)
15871627{
1588   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1589   c421_t &c421 = state->m_c421;
1628   c421_t &c421 = m_c421;
15901629
1591   //  logerror("c421_ram_r %06x (%08x, %08x)\n", offset, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1630   //  logerror("c421_ram_r %06x (%08x, %08x)\n", offset, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
15921631   if(offset < 0x40000)
15931632      return c421.dram_a[offset & 0x3ffff];
15941633   else if(offset < 0x80000)
r14845r14846
15991638   return 0xffff;
16001639}
16011640
1602static WRITE16_HANDLER(s23_c421_ram_w)
1641WRITE16_MEMBER(namcos23_state::s23_c421_ram_w)
16031642{
1604   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1605   c421_t &c421 = state->m_c421;
1643   c421_t &c421 = m_c421;
16061644
1607   //  logerror("c421_ram_w %06x = %04x (%08x, %08x)\n", offset, data, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1645   //  logerror("c421_ram_w %06x = %04x (%08x, %08x)\n", offset, data, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
16081646   if(offset < 0x40000)
16091647      COMBINE_DATA(c421.dram_a + (offset & 0x3ffff));
16101648   else if(offset < 0x80000)
r14845r14846
16131651      COMBINE_DATA(c421.sram   + (offset & 0x07fff));
16141652}
16151653
1616static READ16_HANDLER(s23_c421_r)
1654READ16_MEMBER(namcos23_state::s23_c421_r)
16171655{
1618   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1619   c421_t &c421 = state->m_c421;
1656   c421_t &c421 = m_c421;
16201657
16211658   switch(offset) {
16221659   case 0: return s23_c421_ram_r(space, c421.adr & 0xfffff, mem_mask);
r14845r14846
16241661   case 3: return c421.adr;
16251662   }
16261663
1627   logerror("c421_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1664   logerror("c421_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
16281665   return 0;
16291666}
16301667
1631static WRITE16_HANDLER(s23_c421_w)
1668WRITE16_MEMBER(namcos23_state::s23_c421_w)
16321669{
1633   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1634   c421_t &c421 = state->m_c421;
1670   c421_t &c421 = m_c421;
16351671
16361672   switch(offset) {
16371673   case 0: s23_c421_ram_w(space, c421.adr & 0xfffff, data, mem_mask); c421.adr += 2; break;
16381674   case 2: c421.adr = ((data & mem_mask) << 16) | (c421.adr & (0xffffffff ^ (mem_mask << 16))); break;
16391675   case 3: c421.adr = (data & mem_mask) | (c421.adr & (0xffffffff ^ mem_mask)); break;
16401676   default:
1641      logerror("c421_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1677      logerror("c421_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
16421678      break;
16431679   }
16441680}
16451681
1646static WRITE16_HANDLER(s23_ctl_w)
1682WRITE16_MEMBER(namcos23_state::s23_ctl_w)
16471683{
1648   namcos23_state *state = space->machine().driver_data<namcos23_state>();
16491684   switch(offset) {
16501685   case 0: {
1651      if(state->m_ctl_led != (data & 0xff)) {
1652         state->m_ctl_led = data;
1686      if(m_ctl_led != (data & 0xff)) {
1687         m_ctl_led = data;
16531688/*          logerror("LEDS %c%c%c%c%c%c%c%c\n",
1654                     state->m_ctl_led & 0x80 ? '.' : '#',
1655                     state->m_ctl_led & 0x40 ? '.' : '#',
1656                     state->m_ctl_led & 0x20 ? '.' : '#',
1657                     state->m_ctl_led & 0x10 ? '.' : '#',
1658                     state->m_ctl_led & 0x08 ? '.' : '#',
1659                     state->m_ctl_led & 0x04 ? '.' : '#',
1660                     state->m_ctl_led & 0x02 ? '.' : '#',
1661                     state->m_ctl_led & 0x01 ? '.' : '#');*/
1689                     m_ctl_led & 0x80 ? '.' : '#',
1690                     m_ctl_led & 0x40 ? '.' : '#',
1691                     m_ctl_led & 0x20 ? '.' : '#',
1692                     m_ctl_led & 0x10 ? '.' : '#',
1693                     m_ctl_led & 0x08 ? '.' : '#',
1694                     m_ctl_led & 0x04 ? '.' : '#',
1695                     m_ctl_led & 0x02 ? '.' : '#',
1696                     m_ctl_led & 0x01 ? '.' : '#');*/
16621697      }
16631698      break;
16641699   }
16651700
16661701   case 2: case 3:
16671702      // These may be coming from another CPU, in particular the I/O one
1668      state->m_ctl_inp_buffer[offset-2] = input_port_read(space->machine(), offset == 2 ? "P1" : "P2");
1703      m_ctl_inp_buffer[offset-2] = input_port_read(machine(), offset == 2 ? "P1" : "P2");
16691704      break;
16701705   case 5:
1671      if(state->m_ctl_vbl_active) {
1672         state->m_ctl_vbl_active = false;
1673         device_set_input_line(&space->device(), MIPS3_IRQ0, CLEAR_LINE);
1706      if(m_ctl_vbl_active) {
1707         m_ctl_vbl_active = false;
1708         device_set_input_line(&space.device(), MIPS3_IRQ0, CLEAR_LINE);
16741709      }
16751710      break;
16761711
16771712   case 6:   // gmen wars spams this heavily with 0 prior to starting the GMEN board test
16781713      if (data != 0)
1679         logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1714         logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
16801715      break;
16811716
16821717   default:
1683      logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1718      logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
16841719   }
16851720}
16861721
1687static READ16_HANDLER(s23_ctl_r)
1722READ16_MEMBER(namcos23_state::s23_ctl_r)
16881723{
1689   namcos23_state *state = space->machine().driver_data<namcos23_state>();
16901724   switch(offset) {
16911725      // 0100 set freezes gorgon (polygon fifo flag)
1692   case 1: return 0x0000 | input_port_read(space->machine(), "DSW");
1726   case 1: return 0x0000 | input_port_read(machine(), "DSW");
16931727   case 2: case 3: {
1694      UINT16 res = state->m_ctl_inp_buffer[offset-2] & 0x800 ? 0xffff : 0x0000;
1695      state->m_ctl_inp_buffer[offset-2] = (state->m_ctl_inp_buffer[offset-2] << 1) | 1;
1728      UINT16 res = m_ctl_inp_buffer[offset-2] & 0x800 ? 0xffff : 0x0000;
1729      m_ctl_inp_buffer[offset-2] = (m_ctl_inp_buffer[offset-2] << 1) | 1;
16961730      return res;
16971731   }
16981732   }
1699   logerror("ctl_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1733   logerror("ctl_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
17001734   return 0xffff;
17011735}
17021736
r14845r14846
17131747   }
17141748}
17151749
1716static WRITE16_HANDLER(s23_c361_w)
1750WRITE16_MEMBER(namcos23_state::s23_c361_w)
17171751{
1718   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1719   c361_t &c361 = state->m_c361;
1752   c361_t &c361 = m_c361;
17201753
17211754   switch(offset) {
17221755   case 0:
1723      state->m_bgtilemap->set_scrollx(0, data&0xfff);
1756      m_bgtilemap->set_scrollx(0, data&0xfff);
17241757      break;
17251758
17261759   case 1:
1727      state->m_bgtilemap->set_scrolly(0, data&0xfff);
1760      m_bgtilemap->set_scrolly(0, data&0xfff);
17281761      break;
17291762
17301763   case 4:   // interrupt control
17311764      c361.scanline = data;
17321765      if (data == 0x1ff)
17331766      {
1734         cputag_set_input_line(space->machine(), "maincpu", MIPS3_IRQ1, CLEAR_LINE);
1767         cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ1, CLEAR_LINE);
17351768         c361.timer->adjust(attotime::never);
17361769      }
17371770      else
17381771      {
1739         c361.timer->adjust(space->machine().primary_screen->time_until_pos(c361.scanline));
1772         c361.timer->adjust(machine().primary_screen->time_until_pos(c361.scanline));
17401773      }
17411774      break;
17421775
17431776   default:
1744      logerror("c361_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1777      logerror("c361_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
17451778   }
17461779}
17471780
1748static READ16_HANDLER(s23_c361_r)
1781READ16_MEMBER(namcos23_state::s23_c361_r)
17491782{
17501783   switch(offset) {
1751   case 5: return space->machine().primary_screen->vpos()*2 | (space->machine().primary_screen->vblank() ? 1 : 0);
1752   case 6: return space->machine().primary_screen->vblank();
1784   case 5: return machine().primary_screen->vpos()*2 | (machine().primary_screen->vblank() ? 1 : 0);
1785   case 6: return machine().primary_screen->vblank();
17531786   }
1754   logerror("c361_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
1787   logerror("c361_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
17551788   return 0xffff;
17561789}
17571790
1758static READ16_HANDLER(s23_c422_r)
1791READ16_MEMBER(namcos23_state::s23_c422_r)
17591792{
1760   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1761   c422_t &c422 = state->m_c422;
1793   c422_t &c422 = m_c422;
17621794   return c422.regs[offset];
17631795}
17641796
1765static WRITE16_HANDLER(s23_c422_w)
1797WRITE16_MEMBER(namcos23_state::s23_c422_w)
17661798{
1767   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1768   c422_t &c422 = state->m_c422;
1799   c422_t &c422 = m_c422;
17691800   switch (offset)
17701801   {
17711802      case 1:
17721803         if (data == 0xfffb)
17731804         {
17741805            logerror("c422_w: raise IRQ 3\n");
1775            cputag_set_input_line(space->machine(), "maincpu", MIPS3_IRQ3, ASSERT_LINE);
1806            cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ3, ASSERT_LINE);
17761807         }
17771808         else if (data == 0x000f)
17781809         {
17791810            logerror("c422_w: ack IRQ 3\n");
1780            cputag_set_input_line(space->machine(), "maincpu", MIPS3_IRQ3, CLEAR_LINE);
1811            cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ3, CLEAR_LINE);
17811812         }
17821813         break;
17831814
r14845r14846
17911822}
17921823
17931824// as with System 22, we need to halt the MCU while checking shared RAM
1794static WRITE32_HANDLER( s23_mcuen_w )
1825WRITE32_MEMBER(namcos23_state::s23_mcuen_w)
17951826{
1796   namcos23_state *state = space->machine().driver_data<namcos23_state>();
17971827   logerror("mcuen_w: mask %08x, data %08x\n", mem_mask, data);
17981828   if (mem_mask == 0x0000ffff)
17991829   {
r14845r14846
18021832         logerror("S23: booting H8/3002\n");
18031833
18041834         // Panic Park: writing 1 when it's already running means reboot?
1805         if (state->m_s23_subcpu_running)
1835         if (m_s23_subcpu_running)
18061836         {
1807            cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
1837            cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
18081838         }
18091839
1810         cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, CLEAR_LINE);
1811         state->m_s23_subcpu_running = 1;
1840         cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, CLEAR_LINE);
1841         m_s23_subcpu_running = 1;
18121842      }
18131843      else
18141844      {
18151845         logerror("S23: stopping H8/3002\n");
1816         cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
1817         state->m_s23_subcpu_running = 0;
1846         cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
1847         m_s23_subcpu_running = 0;
18181848      }
18191849   }
18201850}
r14845r14846
18251855    off into the weeds, so we intercept
18261856*/
18271857
1828static READ32_HANDLER( gorgon_sharedram_r )
1858READ32_MEMBER(namcos23_state::gorgon_sharedram_r)
18291859{
1830   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1831   return state->m_shared_ram[offset];
1860   return m_shared_ram[offset];
18321861}
18331862
1834static WRITE32_HANDLER( gorgon_sharedram_w )
1863WRITE32_MEMBER(namcos23_state::gorgon_sharedram_w)
18351864{
1836   namcos23_state *state = space->machine().driver_data<namcos23_state>();
1837   COMBINE_DATA(&state->m_shared_ram[offset]);
1865   COMBINE_DATA(&m_shared_ram[offset]);
18381866
18391867   // hack for final furlong
18401868   if ((offset == 0x6000/4) && (data == 0) && (mem_mask == 0xff000000))
18411869   {
18421870      logerror("S23: Final Furlong hack stopping H8/3002\n");
1843      cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
1871      cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, ASSERT_LINE);
18441872   }
18451873}
18461874
18471875// Panic Park sits in a tight loop waiting for this AND 0002 to be non-zero (at PC=BFC02F00)
1848static READ32_HANDLER( s23_unk_status_r )
1876READ32_MEMBER(namcos23_state::s23_unk_status_r)
18491877{
18501878   return 0x00020002;
18511879}
r14845r14846
21452173   }
21462174}
21472175
2148static READ32_HANDLER( p3d_r )
2176READ32_MEMBER(namcos23_state::p3d_r)
21492177{
21502178   switch(offset) {
21512179   case 0xa: return 1; // Busy flag
21522180   }
21532181
2154   logerror("p3d_r %02x @ %08x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
2182   logerror("p3d_r %02x @ %08x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
21552183   return 0;
21562184}
21572185
2158static WRITE32_HANDLER( p3d_w)
2186WRITE32_MEMBER(namcos23_state::p3d_w)
21592187{
2160   namcos23_state *state = space->machine().driver_data<namcos23_state>();
21612188   switch(offset) {
2162   case 0x7: COMBINE_DATA(&state->m_p3d_address); return;
2163   case 0x8: COMBINE_DATA(&state->m_p3d_size); return;
2189   case 0x7: COMBINE_DATA(&m_p3d_address); return;
2190   case 0x8: COMBINE_DATA(&m_p3d_size); return;
21642191   case 0x9:
21652192      if(data & 1)
2166         p3d_dma(space, state->m_p3d_address, state->m_p3d_size);
2193         p3d_dma(&space, m_p3d_address, m_p3d_size);
21672194      return;
21682195   case 0x17:
2169      cputag_set_input_line(space->machine(), "maincpu", MIPS3_IRQ1, CLEAR_LINE);
2170      state->m_c361.timer->adjust(attotime::never);
2196      cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ1, CLEAR_LINE);
2197      m_c361.timer->adjust(attotime::never);
21712198      return;
21722199   }
2173   logerror("p3d_w %02x, %08x @ %08x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space->device()), (unsigned int)cpu_get_reg(&space->device(), MIPS3_R31));
2200   logerror("p3d_w %02x, %08x @ %08x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(&space.device()), (unsigned int)cpu_get_reg(&space.device(), MIPS3_R31));
21742201}
21752202
21762203static void render_apply_transform(INT32 xi, INT32 yi, INT32 zi, const namcos23_render_entry *re, poly_vertex &pv)
r14845r14846
24222449static ADDRESS_MAP_START( gorgon_map, AS_PROGRAM, 32, namcos23_state )
24232450   ADDRESS_MAP_GLOBAL_MASK(0xfffffff)
24242451   AM_RANGE(0x00000000, 0x003fffff) AM_RAM
2425   AM_RANGE(0x01000000, 0x010000ff) AM_READWRITE_LEGACY(p3d_r, p3d_w )
2426   AM_RANGE(0x02000000, 0x0200000f) AM_READWRITE16_LEGACY(s23_c417_r, s23_c417_w, 0xffffffff )
2427   AM_RANGE(0x04400000, 0x0440ffff) AM_READWRITE_LEGACY(gorgon_sharedram_r, gorgon_sharedram_w ) AM_BASE(m_shared_ram)
2452   AM_RANGE(0x01000000, 0x010000ff) AM_READWRITE(p3d_r, p3d_w )
2453   AM_RANGE(0x02000000, 0x0200000f) AM_READWRITE16(s23_c417_r, s23_c417_w, 0xffffffff )
2454   AM_RANGE(0x04400000, 0x0440ffff) AM_READWRITE(gorgon_sharedram_r, gorgon_sharedram_w ) AM_BASE(m_shared_ram)
24282455
2429   AM_RANGE(0x04c3ff08, 0x04c3ff0b) AM_WRITE_LEGACY(s23_mcuen_w )
2456   AM_RANGE(0x04c3ff08, 0x04c3ff0b) AM_WRITE(s23_mcuen_w )
24302457   AM_RANGE(0x04c3ff0c, 0x04c3ff0f) AM_RAM
24312458
24322459   AM_RANGE(0x06080000, 0x06081fff) AM_RAM
24332460
24342461   AM_RANGE(0x06108000, 0x061087ff) AM_RAM      // GAMMA (C404-3S)
2435   AM_RANGE(0x06110000, 0x0613ffff) AM_RAM_WRITE_LEGACY(namcos23_paletteram_w ) AM_BASE_GENERIC(paletteram)
2436   AM_RANGE(0x06400000, 0x06403fff) AM_RAM_WRITE_LEGACY(s23_txtchar_w ) AM_BASE(m_charram)   // text layer characters
2462   AM_RANGE(0x06110000, 0x0613ffff) AM_RAM_WRITE(namcos23_paletteram_w ) AM_BASE_GENERIC(paletteram)
2463   AM_RANGE(0x06400000, 0x06403fff) AM_RAM_WRITE(s23_txtchar_w ) AM_BASE(m_charram)   // text layer characters
24372464   AM_RANGE(0x06404000, 0x0641dfff) AM_RAM
2438   AM_RANGE(0x0641e000, 0x0641ffff) AM_RAM_WRITE_LEGACY(namcos23_textram_w ) AM_BASE(m_textram)
2465   AM_RANGE(0x0641e000, 0x0641ffff) AM_RAM_WRITE(namcos23_textram_w ) AM_BASE(m_textram)
24392466
24402467   AM_RANGE(0x08000000, 0x087fffff) AM_ROM AM_REGION("data", 0)   // data ROMs
24412468
24422469   AM_RANGE(0x0c000000, 0x0c00ffff) AM_RAM   AM_SHARE("nvram") // BACKUP
24432470
2444   AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16_LEGACY(s23_ctl_r, s23_ctl_w, 0xffffffff ) // write for LEDs at d000000, watchdog at d000004
2471   AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16(s23_ctl_r, s23_ctl_w, 0xffffffff ) // write for LEDs at d000000, watchdog at d000004
24452472
2446   AM_RANGE(0x0f000000, 0x0f000003) AM_READ_LEGACY(s23_unk_status_r )
2473   AM_RANGE(0x0f000000, 0x0f000003) AM_READ(s23_unk_status_r )
24472474
24482475   AM_RANGE(0x0f200000, 0x0f201fff) AM_RAM
24492476
r14845r14846
24532480static ADDRESS_MAP_START( ss23_map, AS_PROGRAM, 32, namcos23_state )
24542481   ADDRESS_MAP_GLOBAL_MASK(0xfffffff)
24552482   AM_RANGE(0x00000000, 0x00ffffff) AM_RAM
2456   AM_RANGE(0x01000000, 0x010000ff) AM_READWRITE_LEGACY(p3d_r, p3d_w )
2457   AM_RANGE(0x02000000, 0x0200000f) AM_READWRITE16_LEGACY(s23_c417_r, s23_c417_w, 0xffffffff )
2483   AM_RANGE(0x01000000, 0x010000ff) AM_READWRITE(p3d_r, p3d_w )
2484   AM_RANGE(0x02000000, 0x0200000f) AM_READWRITE16(s23_c417_r, s23_c417_w, 0xffffffff )
24582485   AM_RANGE(0x04400000, 0x0440ffff) AM_RAM AM_BASE(m_shared_ram)
2459   AM_RANGE(0x04c3ff08, 0x04c3ff0b) AM_WRITE_LEGACY(s23_mcuen_w )
2486   AM_RANGE(0x04c3ff08, 0x04c3ff0b) AM_WRITE(s23_mcuen_w )
24602487   AM_RANGE(0x04c3ff0c, 0x04c3ff0f) AM_RAM
24612488   AM_RANGE(0x06000000, 0x0600ffff) AM_RAM AM_SHARE("nvram") // Backup
24622489   AM_RANGE(0x06200000, 0x06203fff) AM_RAM                             // C422
2463   AM_RANGE(0x06400000, 0x0640000f) AM_READWRITE16_LEGACY(s23_c422_r, s23_c422_w, 0xffffffff ) // C422 registers
2464   AM_RANGE(0x06800000, 0x06807fff) AM_RAM_WRITE_LEGACY(s23_txtchar_w ) AM_BASE(m_charram) // text layer characters (shown as CGRAM in POST)
2490   AM_RANGE(0x06400000, 0x0640000f) AM_READWRITE16(s23_c422_r, s23_c422_w, 0xffffffff ) // C422 registers
2491   AM_RANGE(0x06800000, 0x06807fff) AM_RAM_WRITE(s23_txtchar_w ) AM_BASE(m_charram) // text layer characters (shown as CGRAM in POST)
24652492   AM_RANGE(0x06804000, 0x0681dfff) AM_RAM
2466   AM_RANGE(0x0681e000, 0x0681ffff) AM_RAM_WRITE_LEGACY(namcos23_textram_w ) AM_BASE(m_textram)
2467   AM_RANGE(0x06820000, 0x0682000f) AM_READWRITE16_LEGACY(s23_c361_r, s23_c361_w, 0xffffffff ) // C361
2493   AM_RANGE(0x0681e000, 0x0681ffff) AM_RAM_WRITE(namcos23_textram_w ) AM_BASE(m_textram)
2494   AM_RANGE(0x06820000, 0x0682000f) AM_READWRITE16(s23_c361_r, s23_c361_w, 0xffffffff ) // C361
24682495   AM_RANGE(0x06a08000, 0x06a087ff) AM_RAM // Blending control & GAMMA (C404)
2469   AM_RANGE(0x06a10000, 0x06a3ffff) AM_RAM_WRITE_LEGACY(namcos23_paletteram_w ) AM_BASE_GENERIC(paletteram)
2496   AM_RANGE(0x06a10000, 0x06a3ffff) AM_RAM_WRITE(namcos23_paletteram_w ) AM_BASE_GENERIC(paletteram)
24702497   AM_RANGE(0x08000000, 0x08ffffff) AM_ROM AM_REGION("data", 0x0000000) AM_MIRROR(0x1000000) // data ROMs
24712498   AM_RANGE(0x0a000000, 0x0affffff) AM_ROM AM_REGION("data", 0x1000000) AM_MIRROR(0x1000000)
2472   AM_RANGE(0x0c000000, 0x0c00001f) AM_READWRITE16_LEGACY(s23_c412_r, s23_c412_w, 0xffffffff )
2473   AM_RANGE(0x0c400000, 0x0c400007) AM_READWRITE16_LEGACY(s23_c421_r, s23_c421_w, 0xffffffff )
2474   AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16_LEGACY(s23_ctl_r, s23_ctl_w, 0xffffffff )
2475   AM_RANGE(0x0e800000, 0x0e800003) AM_READ_LEGACY(s23_unk_status_r )
2499   AM_RANGE(0x0c000000, 0x0c00001f) AM_READWRITE16(s23_c412_r, s23_c412_w, 0xffffffff )
2500   AM_RANGE(0x0c400000, 0x0c400007) AM_READWRITE16(s23_c421_r, s23_c421_w, 0xffffffff )
2501   AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16(s23_ctl_r, s23_ctl_w, 0xffffffff )
2502   AM_RANGE(0x0e800000, 0x0e800003) AM_READ(s23_unk_status_r )
24762503   AM_RANGE(0x0fc00000, 0x0fffffff) AM_WRITENOP AM_ROM AM_REGION("user1", 0)
24772504ADDRESS_MAP_END
24782505
2479static READ32_HANDLER( gmen_trigger_sh2 )
2506READ32_MEMBER(namcos23_state::gmen_trigger_sh2)
24802507{
24812508   logerror("gmen_trigger_sh2: booting SH-2\n");
2482   cputag_set_input_line(space->machine(), "gmen", INPUT_LINE_RESET, CLEAR_LINE);
2509   cputag_set_input_line(machine(), "gmen", INPUT_LINE_RESET, CLEAR_LINE);
24832510
24842511   return 0;
24852512}
24862513
2487static READ32_HANDLER( sh2_shared_r )
2514READ32_MEMBER(namcos23_state::sh2_shared_r)
24882515{
2489   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2490   return state->m_gmen_sh2_shared[offset];
2516   return m_gmen_sh2_shared[offset];
24912517}
24922518
2493static WRITE32_HANDLER( sh2_shared_w )
2519WRITE32_MEMBER(namcos23_state::sh2_shared_w)
24942520{
2495   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2496   COMBINE_DATA(&state->m_gmen_sh2_shared[offset]);
2521   COMBINE_DATA(&m_gmen_sh2_shared[offset]);
24972522}
24982523
24992524static ADDRESS_MAP_START( gmen_mips_map, AS_PROGRAM, 32, namcos23_state )
25002525   AM_IMPORT_FROM(ss23_map)
2501   AM_RANGE(0x0e400000, 0x0e400003) AM_READ_LEGACY(gmen_trigger_sh2 )
2502   AM_RANGE(0x0e700000, 0x0e707fff) AM_READWRITE_LEGACY(sh2_shared_r, sh2_shared_w )
2526   AM_RANGE(0x0e400000, 0x0e400003) AM_READ(gmen_trigger_sh2 )
2527   AM_RANGE(0x0e700000, 0x0e707fff) AM_READWRITE(sh2_shared_r, sh2_shared_w )
25032528ADDRESS_MAP_END
25042529
25052530
r14845r14846
25142539   cputag_set_input_line(machine, "gmen", INPUT_LINE_RESET, ASSERT_LINE);
25152540}
25162541
2517static WRITE16_HANDLER( sharedram_sub_w )
2542WRITE16_MEMBER(namcos23_state::sharedram_sub_w)
25182543{
2519   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2520   UINT16 *shared16 = (UINT16 *)state->m_shared_ram;
2544   UINT16 *shared16 = (UINT16 *)m_shared_ram;
25212545
25222546   // fake that an I/O board is connected for games w/o a dump or that aren't properly communicating with it yet
2523   if (!state->m_has_jvsio)
2547   if (!m_has_jvsio)
25242548   {
25252549      if ((offset == 0x4052/2) && (data == 0x78))
25262550      {
r14845r14846
25312555   COMBINE_DATA(&shared16[BYTE_XOR_BE(offset)]);
25322556}
25332557
2534static READ16_HANDLER( sharedram_sub_r )
2558READ16_MEMBER(namcos23_state::sharedram_sub_r)
25352559{
2536   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2537   UINT16 *shared16 = (UINT16 *)state->m_shared_ram;
2560   UINT16 *shared16 = (UINT16 *)m_shared_ram;
25382561
25392562   return shared16[BYTE_XOR_BE(offset)];
25402563}
25412564
2542static WRITE16_HANDLER( sub_interrupt_main_w )
2565WRITE16_MEMBER(namcos23_state::sub_interrupt_main_w)
25432566{
25442567   if  ((mem_mask == 0xffff) && (data == 0x3170))
25452568   {
2546      cputag_set_input_line(space->machine(), "maincpu", MIPS3_IRQ1, ASSERT_LINE);
2569      cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ1, ASSERT_LINE);
25472570   }
25482571   else
25492572   {
r14845r14846
25542577/* H8/3002 MCU stuff */
25552578static ADDRESS_MAP_START( s23h8rwmap, AS_PROGRAM, 16, namcos23_state )
25562579   AM_RANGE(0x000000, 0x07ffff) AM_ROM
2557   AM_RANGE(0x080000, 0x08ffff) AM_READWRITE_LEGACY(sharedram_sub_r, sharedram_sub_w )
2580   AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(sharedram_sub_r, sharedram_sub_w )
25582581   AM_RANGE(0x280000, 0x287fff) AM_DEVREADWRITE("c352", c352_device, read, write)
25592582   AM_RANGE(0x300000, 0x300003) AM_NOP   // seems to be more inputs, maybe false leftover code from System 12?
25602583   AM_RANGE(0x300010, 0x300011) AM_NOP
2561   AM_RANGE(0x300020, 0x300021) AM_WRITE_LEGACY(sub_interrupt_main_w )
2584   AM_RANGE(0x300020, 0x300021) AM_WRITE(sub_interrupt_main_w )
25622585   AM_RANGE(0x300030, 0x300031) AM_WRITENOP   // timecrs2 writes this when writing to the sync shared ram location, motoxgo doesn't
25632586ADDRESS_MAP_END
25642587
2565static READ8_HANDLER( s23_mcu_p8_r )
2588READ8_MEMBER(namcos23_state::s23_mcu_p8_r)
25662589{
25672590   return 0x02;
25682591}
r14845r14846
25722595// the actual I/O takes place through the H8/3002's serial port B.
25732596
25742597
2575static READ8_HANDLER( s23_mcu_pa_r )
2598READ8_MEMBER(namcos23_state::s23_mcu_pa_r)
25762599{
2577   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2578   return state->m_s23_porta;
2600   return m_s23_porta;
25792601}
25802602
2581static WRITE8_HANDLER( s23_mcu_pa_w )
2603WRITE8_MEMBER(namcos23_state::s23_mcu_pa_w)
25822604{
2583   namcos23_state *state = space->machine().driver_data<namcos23_state>();
25842605   // bit 0 = chip enable for the RTC
25852606   // reset the state on the rising edge of the bit
2586   if ((!(state->m_s23_porta & 1)) && (data & 1))
2607   if ((!(m_s23_porta & 1)) && (data & 1))
25872608   {
2588      state->m_s23_rtcstate = 0;
2609      m_s23_rtcstate = 0;
25892610   }
25902611
2591   state->m_s23_porta = data;
2612   m_s23_porta = data;
25922613}
25932614
25942615INLINE UINT8 make_bcd(UINT8 data)
r14845r14846
25962617   return ((data / 10) << 4) | (data % 10);
25972618}
25982619
2599static READ8_HANDLER( s23_mcu_rtc_r )
2620READ8_MEMBER(namcos23_state::s23_mcu_rtc_r)
26002621{
2601   namcos23_state *state = space->machine().driver_data<namcos23_state>();
26022622   UINT8 ret = 0;
26032623   system_time systime;
26042624   static const int weekday[7] = { 7, 1, 2, 3, 4, 5, 6 };
26052625
2606   space->machine().current_datetime(systime);
2626   machine().current_datetime(systime);
26072627
2608   switch (state->m_s23_rtcstate)
2628   switch (m_s23_rtcstate)
26092629   {
26102630      case 0:
26112631         ret = make_bcd(systime.local_time.second);   // seconds (BCD, 0-59) in bits 0-6, bit 7 = battery low
r14845r14846
26332653         break;
26342654   }
26352655
2636   state->m_s23_rtcstate++;
2656   m_s23_rtcstate++;
26372657
26382658   return ret;
26392659}
26402660
26412661
2642static READ8_HANDLER( s23_mcu_portB_r )
2662READ8_MEMBER(namcos23_state::s23_mcu_portB_r)
26432663{
2644   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2645   state->m_s23_lastpB ^= 0x80;
2646   return state->m_s23_lastpB;
2664   m_s23_lastpB ^= 0x80;
2665   return m_s23_lastpB;
26472666}
26482667
2649static WRITE8_HANDLER( s23_mcu_portB_w )
2668WRITE8_MEMBER(namcos23_state::s23_mcu_portB_w)
26502669{
2651   namcos23_state *state = space->machine().driver_data<namcos23_state>();
26522670   // bit 7 = chip enable for the video settings controller
26532671   if (data & 0x80)
26542672   {
2655      state->m_s23_setstate = 0;
2673      m_s23_setstate = 0;
26562674   }
26572675
2658   state->m_s23_lastpB = data;
2676   m_s23_lastpB = data;
26592677}
26602678
2661static WRITE8_HANDLER( s23_mcu_settings_w )
2679WRITE8_MEMBER(namcos23_state::s23_mcu_settings_w)
26622680{
2663   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2664   if (state->m_s23_setstate)
2681   if (m_s23_setstate)
26652682   {
26662683      // data
2667      state->m_s23_settings[state->m_s23_setnum] = data;
2684      m_s23_settings[m_s23_setnum] = data;
26682685
2669      if (state->m_s23_setnum == 7)
2686      if (m_s23_setnum == 7)
26702687      {
26712688         logerror("S23 video settings: Contrast: %02x  R: %02x  G: %02x  B: %02x\n",
2672            BITSWAP8(state->m_s23_settings[0], 0, 1, 2, 3, 4, 5, 6, 7),
2673            BITSWAP8(state->m_s23_settings[1], 0, 1, 2, 3, 4, 5, 6, 7),
2674            BITSWAP8(state->m_s23_settings[2], 0, 1, 2, 3, 4, 5, 6, 7),
2675            BITSWAP8(state->m_s23_settings[3], 0, 1, 2, 3, 4, 5, 6, 7));
2689            BITSWAP8(m_s23_settings[0], 0, 1, 2, 3, 4, 5, 6, 7),
2690            BITSWAP8(m_s23_settings[1], 0, 1, 2, 3, 4, 5, 6, 7),
2691            BITSWAP8(m_s23_settings[2], 0, 1, 2, 3, 4, 5, 6, 7),
2692            BITSWAP8(m_s23_settings[3], 0, 1, 2, 3, 4, 5, 6, 7));
26762693      }
26772694   }
26782695   else
26792696   {   // setting number
2680      state->m_s23_setnum = (data >> 4)-1;
2697      m_s23_setnum = (data >> 4)-1;
26812698   }
26822699
2683   state->m_s23_setstate ^= 1;
2700   m_s23_setstate ^= 1;
26842701}
26852702
26862703
2687static READ8_HANDLER( s23_mcu_iob_r )
2704READ8_MEMBER(namcos23_state::s23_mcu_iob_r)
26882705{
2689   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2690   UINT8 ret = state->m_iotomain[state->m_im_rd];
2706   UINT8 ret = m_iotomain[m_im_rd];
26912707
2692   state->m_im_rd++;
2693   state->m_im_rd &= 0x7f;
2708   m_im_rd++;
2709   m_im_rd &= 0x7f;
26942710
2695   if (state->m_im_rd == state->m_im_wr)
2711   if (m_im_rd == m_im_wr)
26962712   {
2697      cputag_set_input_line(space->machine(), "audiocpu", H8_SCI_0_RX, CLEAR_LINE);
2713      cputag_set_input_line(machine(), "audiocpu", H8_SCI_0_RX, CLEAR_LINE);
26982714   }
26992715   else
27002716   {
2701      cputag_set_input_line(space->machine(), "audiocpu", H8_SCI_0_RX, CLEAR_LINE);
2702      cputag_set_input_line(space->machine(), "audiocpu", H8_SCI_0_RX, ASSERT_LINE);
2717      cputag_set_input_line(machine(), "audiocpu", H8_SCI_0_RX, CLEAR_LINE);
2718      cputag_set_input_line(machine(), "audiocpu", H8_SCI_0_RX, ASSERT_LINE);
27032719   }
27042720
27052721   return ret;
27062722}
27072723
2708static WRITE8_HANDLER( s23_mcu_iob_w )
2724WRITE8_MEMBER(namcos23_state::s23_mcu_iob_w)
27092725{
2710   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2711   state->m_maintoio[state->m_mi_wr++] = data;
2712   state->m_mi_wr &= 0x7f;
2726   m_maintoio[m_mi_wr++] = data;
2727   m_mi_wr &= 0x7f;
27132728
2714   cputag_set_input_line(space->machine(), "ioboard", H8_SCI_0_RX, ASSERT_LINE);
2729   cputag_set_input_line(machine(), "ioboard", H8_SCI_0_RX, ASSERT_LINE);
27152730}
27162731
27172732static INPUT_PORTS_START( gorgon )
r14845r14846
28932908INPUT_PORTS_END
28942909
28952910
2896static READ8_HANDLER(s23_mcu_p6_r)
2911READ8_MEMBER(namcos23_state::s23_mcu_p6_r)
28972912{
2898   namcos23_state *state = space->machine().driver_data<namcos23_state>();
28992913   // bit 1 = JVS cable present sense (1 = I/O board plugged in)
2900      return (state->m_jvssense << 1) | 0xfd;
2914      return (m_jvssense << 1) | 0xfd;
29012915}
29022916
2903static WRITE8_HANDLER(s23_mcu_p6_w)
2917WRITE8_MEMBER(namcos23_state::s23_mcu_p6_w)
29042918{
29052919//  printf("%02x to port 6\n", data);
29062920}
29072921
29082922static ADDRESS_MAP_START( s23h8iomap, AS_IO, 8, namcos23_state )
2909   AM_RANGE(H8_PORT_6, H8_PORT_6) AM_READWRITE_LEGACY(s23_mcu_p6_r, s23_mcu_p6_w )
2923   AM_RANGE(H8_PORT_6, H8_PORT_6) AM_READWRITE(s23_mcu_p6_r, s23_mcu_p6_w )
29102924   AM_RANGE(H8_PORT_7, H8_PORT_7) AM_READ_PORT( "H8PORT" )
2911   AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READ_LEGACY(s23_mcu_p8_r ) AM_WRITENOP
2925   AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READ(s23_mcu_p8_r ) AM_WRITENOP
29122926   AM_RANGE(H8_PORT_9, H8_PORT_9) AM_NOP   // read on Gorgon, purpose unknown
2913   AM_RANGE(H8_PORT_A, H8_PORT_A) AM_READWRITE_LEGACY(s23_mcu_pa_r, s23_mcu_pa_w )
2914   AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE_LEGACY(s23_mcu_portB_r, s23_mcu_portB_w )
2915   AM_RANGE(H8_SERIAL_0, H8_SERIAL_0) AM_READWRITE_LEGACY(s23_mcu_iob_r, s23_mcu_iob_w )
2916   AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READWRITE_LEGACY(s23_mcu_rtc_r, s23_mcu_settings_w )
2927   AM_RANGE(H8_PORT_A, H8_PORT_A) AM_READWRITE(s23_mcu_pa_r, s23_mcu_pa_w )
2928   AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE(s23_mcu_portB_r, s23_mcu_portB_w )
2929   AM_RANGE(H8_SERIAL_0, H8_SERIAL_0) AM_READWRITE(s23_mcu_iob_r, s23_mcu_iob_w )
2930   AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READWRITE(s23_mcu_rtc_r, s23_mcu_settings_w )
29172931   AM_RANGE(H8_ADC_0_H, H8_ADC_0_L) AM_NOP
29182932   AM_RANGE(H8_ADC_1_H, H8_ADC_1_L) AM_NOP
29192933   AM_RANGE(H8_ADC_2_H, H8_ADC_2_L) AM_NOP
r14845r14846
29222936
29232937// version without serial hookup to I/O board for games where the PIC isn't dumped
29242938static ADDRESS_MAP_START( s23h8noiobmap, AS_IO, 8, namcos23_state )
2925   AM_RANGE(H8_PORT_6, H8_PORT_6) AM_READWRITE_LEGACY(s23_mcu_p6_r, s23_mcu_p6_w )
2939   AM_RANGE(H8_PORT_6, H8_PORT_6) AM_READWRITE(s23_mcu_p6_r, s23_mcu_p6_w )
29262940   AM_RANGE(H8_PORT_7, H8_PORT_7) AM_READ_PORT( "H8PORT" )
2927   AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READ_LEGACY(s23_mcu_p8_r ) AM_WRITENOP
2928   AM_RANGE(H8_PORT_A, H8_PORT_A) AM_READWRITE_LEGACY(s23_mcu_pa_r, s23_mcu_pa_w )
2929   AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE_LEGACY(s23_mcu_portB_r, s23_mcu_portB_w )
2930   AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READWRITE_LEGACY(s23_mcu_rtc_r, s23_mcu_settings_w )
2941   AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READ(s23_mcu_p8_r ) AM_WRITENOP
2942   AM_RANGE(H8_PORT_A, H8_PORT_A) AM_READWRITE(s23_mcu_pa_r, s23_mcu_pa_w )
2943   AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE(s23_mcu_portB_r, s23_mcu_portB_w )
2944   AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READWRITE(s23_mcu_rtc_r, s23_mcu_settings_w )
29312945   AM_RANGE(H8_ADC_0_H, H8_ADC_0_L) AM_NOP
29322946   AM_RANGE(H8_ADC_1_H, H8_ADC_1_L) AM_NOP
29332947   AM_RANGE(H8_ADC_2_H, H8_ADC_2_L) AM_NOP
r14845r14846
29352949ADDRESS_MAP_END
29362950
29372951
2938static READ8_HANDLER( s23_iob_mcu_r )
2952READ8_MEMBER(namcos23_state::s23_iob_mcu_r)
29392953{
2940   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2941   UINT8 ret = state->m_maintoio[state->m_mi_rd];
2954   UINT8 ret = m_maintoio[m_mi_rd];
29422955
2943   state->m_mi_rd++;
2944   state->m_mi_rd &= 0x7f;
2956   m_mi_rd++;
2957   m_mi_rd &= 0x7f;
29452958
2946   if (state->m_mi_rd == state->m_mi_wr)
2959   if (m_mi_rd == m_mi_wr)
29472960   {
2948      cputag_set_input_line(space->machine(), "ioboard", H8_SCI_0_RX, CLEAR_LINE);
2961      cputag_set_input_line(machine(), "ioboard", H8_SCI_0_RX, CLEAR_LINE);
29492962   }
29502963
29512964   return ret;
29522965}
29532966
2954static WRITE8_HANDLER( s23_iob_mcu_w )
2967WRITE8_MEMBER(namcos23_state::s23_iob_mcu_w)
29552968{
2956   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2957   state->m_iotomain[state->m_im_wr++] = data;
2958   state->m_im_wr &= 0x7f;
2969   m_iotomain[m_im_wr++] = data;
2970   m_im_wr &= 0x7f;
29592971
2960   cputag_set_input_line(space->machine(), "audiocpu", H8_SCI_0_RX, ASSERT_LINE);
2972   cputag_set_input_line(machine(), "audiocpu", H8_SCI_0_RX, ASSERT_LINE);
29612973}
29622974
29632975
2964static READ8_HANDLER( s23_iob_p4_r )
2976READ8_MEMBER(namcos23_state::s23_iob_p4_r)
29652977{
2966   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2967   return state->m_s23_tssio_port_4;
2978   return m_s23_tssio_port_4;
29682979}
29692980
2970static WRITE8_HANDLER( s23_iob_p4_w )
2981WRITE8_MEMBER(namcos23_state::s23_iob_p4_w)
29712982{
2972   namcos23_state *state = space->machine().driver_data<namcos23_state>();
2973   state->m_s23_tssio_port_4 = data;
2983   m_s23_tssio_port_4 = data;
29742984
2975   state->m_jvssense = (data & 0x04) ? 0 : 1;
2985   m_jvssense = (data & 0x04) ? 0 : 1;
29762986}
29772987
2978static READ8_HANDLER( s23_gun_r )
2988READ8_MEMBER(namcos23_state::s23_gun_r)
29792989{
2980   UINT16 xpos = input_port_read_safe(space->machine(), "LIGHTX", 0) * 640 / 0xff + 0x80;
2981   UINT16 ypos = input_port_read_safe(space->machine(), "LIGHTY", 0) * 240 / 0xff + 0x20;
2990   UINT16 xpos = input_port_read_safe(machine(), "LIGHTX", 0) * 640 / 0xff + 0x80;
2991   UINT16 ypos = input_port_read_safe(machine(), "LIGHTY", 0) * 240 / 0xff + 0x20;
29822992
29832993   // note: will need angle adjustments for accurate aiming at screen sides
29842994   switch(offset)
r14845r14846
29953005   return 0;
29963006}
29973007
2998static READ8_HANDLER(iob_r)
3008READ8_MEMBER(namcos23_state::iob_r)
29993009{
3000   return space->machine().rand();
3010   return machine().rand();
30013011}
30023012
30033013/* H8/3334 (Namco C78) I/O board MCU */
r14845r14846
30053015   AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("ioboard", 0)
30063016   AM_RANGE(0x6000, 0x6000) AM_READ_PORT("TC2P0")     // 0-1 = coin 0-3 = coin connect, 0-5 = test 0-6 = down select, 0-7 = up select, 0-8 = enter
30073017   AM_RANGE(0x6001, 0x6001) AM_READ_PORT("TC2P1")     // 1-1 = gun trigger 1-2 = foot pedal
3008   AM_RANGE(0x6002, 0x6003) AM_READ_LEGACY(iob_r )
3018   AM_RANGE(0x6002, 0x6003) AM_READ(iob_r )
30093019   AM_RANGE(0x6004, 0x6005) AM_WRITENOP
30103020   AM_RANGE(0x6006, 0x6007) AM_NOP
3011   AM_RANGE(0x7000, 0x700f) AM_READ_LEGACY(iob_r )
3021   AM_RANGE(0x7000, 0x700f) AM_READ(iob_r )
30123022
30133023   AM_RANGE(0xc000, 0xf7ff) AM_RAM
30143024ADDRESS_MAP_END
r14845r14846
30193029   AM_RANGE(0x6001, 0x6001) AM_READ_PORT("TC2P1")
30203030   AM_RANGE(0x6002, 0x6005) AM_WRITENOP
30213031   AM_RANGE(0x6006, 0x6007) AM_NOP
3022   AM_RANGE(0x7000, 0x700f) AM_READ_LEGACY(s23_gun_r )
3032   AM_RANGE(0x7000, 0x700f) AM_READ(s23_gun_r )
30233033
30243034   AM_RANGE(0xc000, 0xf7ff) AM_RAM
30253035ADDRESS_MAP_END
r14845r14846
30323042   AM_RANGE(0x6003, 0x6003) AM_READ_PORT("RRP3")     // 1-1 = button?  1-4 = start?
30333043   AM_RANGE(0x6004, 0x6005) AM_WRITENOP
30343044   AM_RANGE(0x6006, 0x6007) AM_NOP
3035   AM_RANGE(0x7000, 0x700f) AM_READ_LEGACY(iob_r )
3045   AM_RANGE(0x7000, 0x700f) AM_READ(iob_r )
30363046
30373047   AM_RANGE(0xc000, 0xf7ff) AM_RAM
30383048ADDRESS_MAP_END
r14845r14846
30423052    port 4 bit 2 = SENSE line back to main (0 = asserted, 1 = dropped)
30433053*/
30443054static ADDRESS_MAP_START( s23iobrdiomap, AS_IO, 8, namcos23_state )
3045   AM_RANGE(H8_PORT_4, H8_PORT_4) AM_READWRITE_LEGACY(s23_iob_p4_r, s23_iob_p4_w )
3055   AM_RANGE(H8_PORT_4, H8_PORT_4) AM_READWRITE(s23_iob_p4_r, s23_iob_p4_w )
30463056   AM_RANGE(H8_PORT_5, H8_PORT_5) AM_NOP   // status LED in bit 2
30473057   AM_RANGE(H8_PORT_6, H8_PORT_6) AM_NOP   // unknown
30483058   AM_RANGE(H8_PORT_8, H8_PORT_8) AM_NOP   // unknown - used on ASCA-5 only
30493059   AM_RANGE(H8_PORT_9, H8_PORT_9) AM_NOP   // unknown - used on ASCA-5 only
3050   AM_RANGE(H8_SERIAL_0, H8_SERIAL_0) AM_READWRITE_LEGACY(s23_iob_mcu_r, s23_iob_mcu_w )
3060   AM_RANGE(H8_SERIAL_0, H8_SERIAL_0) AM_READWRITE(s23_iob_mcu_r, s23_iob_mcu_w )
30513061   AM_RANGE(H8_ADC_0_H, H8_ADC_3_L) AM_NOP
30523062ADDRESS_MAP_END
30533063
src/mame/drivers/mjsister.c
r14845r14846
4949   /* memory */
5050   UINT8 m_videoram0[0x8000];
5151   UINT8 m_videoram1[0x8000];
52   DECLARE_WRITE8_MEMBER(mjsister_videoram_w);
53   DECLARE_WRITE8_MEMBER(mjsister_dac_adr_s_w);
54   DECLARE_WRITE8_MEMBER(mjsister_dac_adr_e_w);
55   DECLARE_WRITE8_MEMBER(mjsister_banksel1_w);
56   DECLARE_WRITE8_MEMBER(mjsister_banksel2_w);
57   DECLARE_WRITE8_MEMBER(mjsister_input_sel1_w);
58   DECLARE_WRITE8_MEMBER(mjsister_input_sel2_w);
59   DECLARE_READ8_MEMBER(mjsister_keys_r);
5260};
5361
5462
r14845r14846
103111   state->m_tmpbitmap1->pix16(y, x * 2 + 1) = c2;
104112}
105113
106static WRITE8_HANDLER( mjsister_videoram_w )
114WRITE8_MEMBER(mjsister_state::mjsister_videoram_w)
107115{
108   mjsister_state *state = space->machine().driver_data<mjsister_state>();
109   if (state->m_vrambank)
116   if (m_vrambank)
110117   {
111      state->m_videoram1[offset] = data;
112      mjsister_plot1(space->machine(), offset, data);
118      m_videoram1[offset] = data;
119      mjsister_plot1(machine(), offset, data);
113120   }
114121   else
115122   {
116      state->m_videoram0[offset] = data;
117      mjsister_plot0(space->machine(), offset, data);
123      m_videoram0[offset] = data;
124      mjsister_plot0(machine(), offset, data);
118125   }
119126}
120127
r14845r14846
169176      state->m_dac_busy = 0;
170177}
171178
172static WRITE8_HANDLER( mjsister_dac_adr_s_w )
179WRITE8_MEMBER(mjsister_state::mjsister_dac_adr_s_w)
173180{
174   mjsister_state *state = space->machine().driver_data<mjsister_state>();
175   state->m_dac_adr_s = data;
181   m_dac_adr_s = data;
176182}
177183
178static WRITE8_HANDLER( mjsister_dac_adr_e_w )
184WRITE8_MEMBER(mjsister_state::mjsister_dac_adr_e_w)
179185{
180   mjsister_state *state = space->machine().driver_data<mjsister_state>();
181   state->m_dac_adr_e = data;
182   state->m_dac_adr = state->m_dac_adr_s << 8;
186   m_dac_adr_e = data;
187   m_dac_adr = m_dac_adr_s << 8;
183188
184   if (state->m_dac_busy == 0)
185      space->machine().scheduler().synchronize(FUNC(dac_callback));
189   if (m_dac_busy == 0)
190      machine().scheduler().synchronize(FUNC(dac_callback));
186191
187   state->m_dac_busy = 1;
192   m_dac_busy = 1;
188193}
189194
190static WRITE8_HANDLER( mjsister_banksel1_w )
195WRITE8_MEMBER(mjsister_state::mjsister_banksel1_w)
191196{
192   mjsister_state *state = space->machine().driver_data<mjsister_state>();
193   int tmp = state->m_colorbank;
197   int tmp = m_colorbank;
194198
195199   switch (data)
196200   {
197      case 0x0: state->m_rombank0 = 0 ; break;
198      case 0x1: state->m_rombank0 = 1 ; break;
201      case 0x0: m_rombank0 = 0 ; break;
202      case 0x1: m_rombank0 = 1 ; break;
199203
200      case 0x2: state->m_flip_screen = 0 ; break;
201      case 0x3: state->m_flip_screen = 1 ; break;
204      case 0x2: m_flip_screen = 0 ; break;
205      case 0x3: m_flip_screen = 1 ; break;
202206
203      case 0x4: state->m_colorbank &= 0xfe; break;
204      case 0x5: state->m_colorbank |= 0x01; break;
205      case 0x6: state->m_colorbank &= 0xfd; break;
206      case 0x7: state->m_colorbank |= 0x02; break;
207      case 0x8: state->m_colorbank &= 0xfb; break;
208      case 0x9: state->m_colorbank |= 0x04; break;
207      case 0x4: m_colorbank &= 0xfe; break;
208      case 0x5: m_colorbank |= 0x01; break;
209      case 0x6: m_colorbank &= 0xfd; break;
210      case 0x7: m_colorbank |= 0x02; break;
211      case 0x8: m_colorbank &= 0xfb; break;
212      case 0x9: m_colorbank |= 0x04; break;
209213
210      case 0xa: state->m_video_enable = 0 ; break;
211      case 0xb: state->m_video_enable = 1 ; break;
214      case 0xa: m_video_enable = 0 ; break;
215      case 0xb: m_video_enable = 1 ; break;
212216
213      case 0xe: state->m_vrambank = 0 ; break;
214      case 0xf: state->m_vrambank = 1 ; break;
217      case 0xe: m_vrambank = 0 ; break;
218      case 0xf: m_vrambank = 1 ; break;
215219
216220      default:
217         logerror("%04x p30_w:%02x\n", cpu_get_pc(&space->device()), data);
221         logerror("%04x p30_w:%02x\n", cpu_get_pc(&space.device()), data);
218222   }
219223
220   if (tmp != state->m_colorbank)
221      state->m_screen_redraw = 1;
224   if (tmp != m_colorbank)
225      m_screen_redraw = 1;
222226
223   memory_set_bank(space->machine(), "bank1", state->m_rombank0 * 2 + state->m_rombank1);
227   memory_set_bank(machine(), "bank1", m_rombank0 * 2 + m_rombank1);
224228}
225229
226static WRITE8_HANDLER( mjsister_banksel2_w )
230WRITE8_MEMBER(mjsister_state::mjsister_banksel2_w)
227231{
228   mjsister_state *state = space->machine().driver_data<mjsister_state>();
229232
230233   switch (data)
231234   {
232      case 0xa: state->m_dac_bank = 0; break;
233      case 0xb: state->m_dac_bank = 1; break;
235      case 0xa: m_dac_bank = 0; break;
236      case 0xb: m_dac_bank = 1; break;
234237
235      case 0xc: state->m_rombank1 = 0; break;
236      case 0xd: state->m_rombank1 = 1; break;
238      case 0xc: m_rombank1 = 0; break;
239      case 0xd: m_rombank1 = 1; break;
237240
238241      default:
239         logerror("%04x p31_w:%02x\n", cpu_get_pc(&space->device()), data);
242         logerror("%04x p31_w:%02x\n", cpu_get_pc(&space.device()), data);
240243   }
241244
242   memory_set_bank(space->machine(), "bank1", state->m_rombank0 * 2 + state->m_rombank1);
245   memory_set_bank(machine(), "bank1", m_rombank0 * 2 + m_rombank1);
243246}
244247
245static WRITE8_HANDLER( mjsister_input_sel1_w )
248WRITE8_MEMBER(mjsister_state::mjsister_input_sel1_w)
246249{
247   mjsister_state *state = space->machine().driver_data<mjsister_state>();
248   state->m_input_sel1 = data;
250   m_input_sel1 = data;
249251}
250252
251static WRITE8_HANDLER( mjsister_input_sel2_w )
253WRITE8_MEMBER(mjsister_state::mjsister_input_sel2_w)
252254{
253   mjsister_state *state = space->machine().driver_data<mjsister_state>();
254   state->m_input_sel2 = data;
255   m_input_sel2 = data;
255256}
256257
257static READ8_HANDLER( mjsister_keys_r )
258READ8_MEMBER(mjsister_state::mjsister_keys_r)
258259{
259   mjsister_state *state = space->machine().driver_data<mjsister_state>();
260260   int p, i, ret = 0;
261261   static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5" };
262262
263   p = state->m_input_sel1 & 0x3f;
264   //  p |= ((state->m_input_sel2 & 8) << 4) | ((state->m_input_sel2 & 0x20) << 1);
263   p = m_input_sel1 & 0x3f;
264   //  p |= ((m_input_sel2 & 8) << 4) | ((m_input_sel2 & 0x20) << 1);
265265
266266   for (i = 0; i < 6; i++)
267267   {
268268      if (BIT(p, i))
269         ret |= input_port_read(space->machine(), keynames[i]);
269         ret |= input_port_read(machine(), keynames[i]);
270270   }
271271
272272   return ret;
r14845r14846
281281static ADDRESS_MAP_START( mjsister_map, AS_PROGRAM, 8, mjsister_state )
282282   AM_RANGE(0x0000, 0x77ff) AM_ROM
283283   AM_RANGE(0x7800, 0x7fff) AM_RAM
284   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") AM_WRITE_LEGACY(mjsister_videoram_w)
284   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") AM_WRITE(mjsister_videoram_w)
285285ADDRESS_MAP_END
286286
287287static ADDRESS_MAP_START( mjsister_io_map, AS_IO, 8, mjsister_state )
r14845r14846
290290   AM_RANGE(0x10, 0x10) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
291291   AM_RANGE(0x11, 0x11) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
292292   AM_RANGE(0x12, 0x12) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
293   AM_RANGE(0x20, 0x20) AM_READ_LEGACY(mjsister_keys_r)
293   AM_RANGE(0x20, 0x20) AM_READ(mjsister_keys_r)
294294   AM_RANGE(0x21, 0x21) AM_READ_PORT("IN0")
295   AM_RANGE(0x30, 0x30) AM_WRITE_LEGACY(mjsister_banksel1_w)
296   AM_RANGE(0x31, 0x31) AM_WRITE_LEGACY(mjsister_banksel2_w)
297   AM_RANGE(0x32, 0x32) AM_WRITE_LEGACY(mjsister_input_sel1_w)
298   AM_RANGE(0x33, 0x33) AM_WRITE_LEGACY(mjsister_input_sel2_w)
299   AM_RANGE(0x34, 0x34) AM_WRITE_LEGACY(mjsister_dac_adr_s_w)
300   AM_RANGE(0x35, 0x35) AM_WRITE_LEGACY(mjsister_dac_adr_e_w)
295   AM_RANGE(0x30, 0x30) AM_WRITE(mjsister_banksel1_w)
296   AM_RANGE(0x31, 0x31) AM_WRITE(mjsister_banksel2_w)
297   AM_RANGE(0x32, 0x32) AM_WRITE(mjsister_input_sel1_w)
298   AM_RANGE(0x33, 0x33) AM_WRITE(mjsister_input_sel2_w)
299   AM_RANGE(0x34, 0x34) AM_WRITE(mjsister_dac_adr_s_w)
300   AM_RANGE(0x35, 0x35) AM_WRITE(mjsister_dac_adr_e_w)
301301ADDRESS_MAP_END
302302
303303
src/mame/drivers/wheelfir.c
r14845r14846
271271      }
272272      return 0;
273273   }
274   DECLARE_READ16_MEMBER(wheelfir_status_r);
275   DECLARE_WRITE16_MEMBER(wheelfir_scanline_cnt_w);
276   DECLARE_WRITE16_MEMBER(wheelfir_blit_w);
277   DECLARE_WRITE16_MEMBER(pal_reset_pos_w);
278   DECLARE_WRITE16_MEMBER(pal_data_w);
279   DECLARE_WRITE16_MEMBER(wheelfir_7c0000_w);
280   DECLARE_WRITE16_MEMBER(wheelfir_snd_w);
281   DECLARE_READ16_MEMBER(wheelfir_snd_r);
282   DECLARE_WRITE16_MEMBER(coin_cnt_w);
274283};
275284
276285
277static READ16_HANDLER( wheelfir_status_r )
286READ16_MEMBER(wheelfir_state::wheelfir_status_r)
278287{
279288/*
280289    fedcba9876543210
r14845r14846
284293    ---------------x  ? eeprom
285294
286295*/
287   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
288   return state->m_toggle_bit| (space->machine().rand()&0x2000);
296
297   return m_toggle_bit| (machine().rand()&0x2000);
289298}
290299
291static WRITE16_HANDLER( wheelfir_scanline_cnt_w )
300WRITE16_MEMBER(wheelfir_state::wheelfir_scanline_cnt_w)
292301{
293   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
294   COMBINE_DATA(&state->m_scanline_cnt);
302   COMBINE_DATA(&m_scanline_cnt);
295303}
296304
297305
298static WRITE16_HANDLER(wheelfir_blit_w)
306WRITE16_MEMBER(wheelfir_state::wheelfir_blit_w)
299307{
300   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
301308
302   COMBINE_DATA(&state->m_blitter_data[offset]);
309   COMBINE_DATA(&m_blitter_data[offset]);
303310
304311   if(!ACCESSING_BITS_8_15 && offset==0x6)  //LSB only!
305312   {
306313      int x,y;
307314
308315
309      int direct_width=state->m_direct_write_x1-state->m_direct_write_x0+1;
310      int direct_height=state->m_direct_write_y1-state->m_direct_write_y0+1;
316      int direct_width=m_direct_write_x1-m_direct_write_x0+1;
317      int direct_height=m_direct_write_y1-m_direct_write_y0+1;
311318
312319      int sixdat = data&0xff;
313320
314321      if(direct_width>0 && direct_height>0)
315322      {
316         x= state->m_direct_write_idx % direct_width;
317         y = (state->m_direct_write_idx / direct_width) %direct_height;
323         x= m_direct_write_idx % direct_width;
324         y = (m_direct_write_idx / direct_width) %direct_height;
318325
319         x+=state->m_direct_write_x0;
320         y+=state->m_direct_write_y0;
326         x+=m_direct_write_x0;
327         y+=m_direct_write_y0;
321328
322329         if(x<512 && y <512)
323330         {
324            state->m_tmp_bitmap[LAYER_BG]->pix16(y, x) = sixdat;
331            m_tmp_bitmap[LAYER_BG]->pix16(y, x) = sixdat;
325332         }
326333      }
327334
328      ++state->m_direct_write_idx;
335      ++m_direct_write_idx;
329336
330337      return;
331338
r14845r14846
336343
337344   if(offset==0x0a && ACCESSING_BITS_0_7)
338345   {
339      xscroll = (state->m_blitter_data[0xa]&0x00ff) | (state->m_blitter_data[0x8]&0x0040) << 2;
346      xscroll = (m_blitter_data[0xa]&0x00ff) | (m_blitter_data[0x8]&0x0040) << 2;
340347   }
341348
342349   if(offset==0x0b && ACCESSING_BITS_0_7)
343350   {
344      yscroll = (state->m_blitter_data[0xb]&0x00ff) | (state->m_blitter_data[0x8]&0x0080) << 1;
351      yscroll = (m_blitter_data[0xb]&0x00ff) | (m_blitter_data[0x8]&0x0080) << 1;
345352   }
346353
347354   if(offset==0x8 && ACCESSING_BITS_0_7)
348355   {
349      xscroll = (state->m_blitter_data[0xa]&0x00ff) | (state->m_blitter_data[0x8]&0x0040) << 2;
350      yscroll = (state->m_blitter_data[0xb]&0x00ff) | (state->m_blitter_data[0x8]&0x0080) << 1;
356      xscroll = (m_blitter_data[0xa]&0x00ff) | (m_blitter_data[0x8]&0x0040) << 2;
357      yscroll = (m_blitter_data[0xb]&0x00ff) | (m_blitter_data[0x8]&0x0080) << 1;
351358   }
352359
353360   if(xscroll>=0)
354361   {
355      int scl=state->m_current_scanline>=NUM_SCANLINES?0:state->m_current_scanline;
356      state->m_scanlines[scl].x=xscroll;
357      state->m_scanlines[scl].unkbits=state->m_blitter_data[0x8]&0xff;
362      int scl=m_current_scanline>=NUM_SCANLINES?0:m_current_scanline;
363      m_scanlines[scl].x=xscroll;
364      m_scanlines[scl].unkbits=m_blitter_data[0x8]&0xff;
358365   }
359366
360367   if(yscroll>=0)
361368   {
362      int scl=state->m_current_scanline>=NUM_SCANLINES?0:state->m_current_scanline;
363      state->m_scanlines[scl].y=yscroll;
364      state->m_scanlines[scl].unkbits=state->m_blitter_data[0x8]&0xff;
369      int scl=m_current_scanline>=NUM_SCANLINES?0:m_current_scanline;
370      m_scanlines[scl].y=yscroll;
371      m_scanlines[scl].unkbits=m_blitter_data[0x8]&0xff;
365372   }
366373
367374
368375   if(offset==0xf && data==0xffff)
369376   {
370377
371      cputag_set_input_line(space->machine(), "maincpu", 1, HOLD_LINE);
378      cputag_set_input_line(machine(), "maincpu", 1, HOLD_LINE);
372379
373380      {
374         UINT8 *rom = space->machine().region("gfx1")->base();
381         UINT8 *rom = machine().region("gfx1")->base();
375382
376         int width = space->machine().primary_screen->width();
377         int height = space->machine().primary_screen->height();
383         int width = machine().primary_screen->width();
384         int height = machine().primary_screen->height();
378385
379         int src_x0=(state->m_blitter_data[0]>>8)+((state->m_blitter_data[6]&0x100)?256:0);
380         int src_y0=(state->m_blitter_data[2]>>8)+((state->m_blitter_data[6]&0x200)?256:0);
386         int src_x0=(m_blitter_data[0]>>8)+((m_blitter_data[6]&0x100)?256:0);
387         int src_y0=(m_blitter_data[2]>>8)+((m_blitter_data[6]&0x200)?256:0);
381388
382         int dst_x0=(state->m_blitter_data[0]&0xff)+((state->m_blitter_data[7]&0x40)?256:0);
383         int dst_y0=(state->m_blitter_data[2]&0xff)+((state->m_blitter_data[7]&0x80)?256:0);
389         int dst_x0=(m_blitter_data[0]&0xff)+((m_blitter_data[7]&0x40)?256:0);
390         int dst_y0=(m_blitter_data[2]&0xff)+((m_blitter_data[7]&0x80)?256:0);
384391
385         int dst_x1=(state->m_blitter_data[1]&0xff)+((state->m_blitter_data[9]&4)?256:0);
386         int dst_y1=(state->m_blitter_data[3]&0xff)+((state->m_blitter_data[9]&8)?256:0);
392         int dst_x1=(m_blitter_data[1]&0xff)+((m_blitter_data[9]&4)?256:0);
393         int dst_y1=(m_blitter_data[3]&0xff)+((m_blitter_data[9]&8)?256:0);
387394
388         int x_dst_step=(state->m_blitter_data[7]&0x1)?1:-1;
389         int y_dst_step=(state->m_blitter_data[7]&0x2)?1:-1;
395         int x_dst_step=(m_blitter_data[7]&0x1)?1:-1;
396         int y_dst_step=(m_blitter_data[7]&0x2)?1:-1;
390397
391         int x_src_step=(state->m_blitter_data[8]&0x4000)?1:-1;
392         int y_src_step=(state->m_blitter_data[8]&0x8000)?1:-1;
398         int x_src_step=(m_blitter_data[8]&0x4000)?1:-1;
399         int y_src_step=(m_blitter_data[8]&0x8000)?1:-1;
393400
394         int page=((state->m_blitter_data[6])>>10)*0x40000;
401         int page=((m_blitter_data[6])>>10)*0x40000;
395402
396403
397404         if(page>=0x400000) /* src set to  unav. page before direct write to the framebuffer */
398405         {
399406
400               state->m_direct_write_x0=dst_x0;
401               state->m_direct_write_x1=dst_x1;
402               state->m_direct_write_y0=dst_y0;
403               state->m_direct_write_y1=dst_y1;
404               state->m_direct_write_idx=0;
407               m_direct_write_x0=dst_x0;
408               m_direct_write_x1=dst_x1;
409               m_direct_write_y0=dst_y0;
410               m_direct_write_y1=dst_y1;
411               m_direct_write_idx=0;
405412
406413         }
407414
r14845r14846
447454
448455         int d1, d2, hflag, dflag, index;
449456
450         d1=((state->m_blitter_data[0x0a]&0x1f00)>>8);
457         d1=((m_blitter_data[0x0a]&0x1f00)>>8);
451458
452         d2=((state->m_blitter_data[0x0b]&0x1f00)>>8);
459         d2=((m_blitter_data[0x0b]&0x1f00)>>8);
453460
454461
455         d1|=((state->m_blitter_data[0x8]&0x100)>>3);
456         d2|=((state->m_blitter_data[0x8]&0x400)>>5);
457         hflag=(state->m_blitter_data[0x9]&0x1)?1:0;
458         dflag=(state->m_blitter_data[0x8]&0x1000)?1:0;
462         d1|=((m_blitter_data[0x8]&0x100)>>3);
463         d2|=((m_blitter_data[0x8]&0x400)>>5);
464         hflag=(m_blitter_data[0x9]&0x1)?1:0;
465         dflag=(m_blitter_data[0x8]&0x1000)?1:0;
459466         index=d1|(d2<<6)|(hflag<<12)|(dflag<<13);
460467
461468
462         float scale_x=state->get_scale(index);
469         float scale_x=get_scale(index);
463470
464         d1=((state->m_blitter_data[0x0b]&0xc000)>>14) |
465            ((state->m_blitter_data[0x0c]&0xc000)>>12) |
466            ((state->m_blitter_data[0x0a]&0x4000)>>10);
471         d1=((m_blitter_data[0x0b]&0xc000)>>14) |
472            ((m_blitter_data[0x0c]&0xc000)>>12) |
473            ((m_blitter_data[0x0a]&0x4000)>>10);
467474
468         d2=((state->m_blitter_data[0x0c]&0x1f00)>>8);
475         d2=((m_blitter_data[0x0c]&0x1f00)>>8);
469476
470477
471         d1|=((state->m_blitter_data[0x8]&0x200)>>4);
472         d2|=((state->m_blitter_data[0x8]&0x800)>>6);
478         d1|=((m_blitter_data[0x8]&0x200)>>4);
479         d2|=((m_blitter_data[0x8]&0x800)>>6);
473480
474         hflag=(state->m_blitter_data[0x9]&0x2)?1:0;
475         dflag=(state->m_blitter_data[0x8]&0x2000)?1:0;
481         hflag=(m_blitter_data[0x9]&0x2)?1:0;
482         dflag=(m_blitter_data[0x8]&0x2000)?1:0;
476483         index=d1|(d2<<6)|(hflag<<12)|(dflag<<13);
477484
478485
479         float scale_y=state->get_scale(index);
486         float scale_y=get_scale(index);
480487
481488
482489         if(scale_x==0 || scale_y==0) return;
r14845r14846
491498         float idx_x,idx_y;
492499
493500         int vpage=LAYER_FG;
494         if(state->m_blitter_data[0x7]&0x10)
501         if(m_blitter_data[0x7]&0x10)
495502         {
496503            vpage=LAYER_BG;
497504/*
498                printf("bg -> %d %d   %d %d  %d %d @ %x\n",dst_x0,dst_y0, dst_x1,dst_y1, dst_x1-dst_x0, dst_y1-dst_y0,cpu_get_pc(&space->device()));
505                printf("bg -> %d %d   %d %d  %d %d @ %x\n",dst_x0,dst_y0, dst_x1,dst_y1, dst_x1-dst_x0, dst_y1-dst_y0,cpu_get_pc(&space.device()));
499506
500507                for(int i=0;i<16;++i)
501508                {
502                    printf("%x = %.4x\n",i,state->m_blitter_data[i]);
509                    printf("%x = %.4x\n",i,m_blitter_data[i]);
503510                }
504511
505512                printf("\n");
r14845r14846
509516         bool endx=false;
510517         bool endy=false;
511518
512         if(state->m_blitter_data[0x7]&0x0c)
519         if(m_blitter_data[0x7]&0x0c)
513520         {
514521            //???
515522         }
r14845r14846
539546                  //hack for clear
540547                  if(screen_x >0 && screen_y >0 && screen_x < width && screen_y <height)
541548                  {
542               //      state->m_tmp_bitmap[vpage]->pix16(screen_y , screen_x ) =0;
549               //      m_tmp_bitmap[vpage]->pix16(screen_y , screen_x ) =0;
543550                  }
544551               }
545552               else
r14845r14846
548555
549556                  if(pix && screen_x >0 && screen_y >0 && screen_x < width && screen_y <height)
550557                  {
551                     state->m_tmp_bitmap[vpage]->pix16(screen_y , screen_x ) = pix;
558                     m_tmp_bitmap[vpage]->pix16(screen_y , screen_x ) = pix;
552559                  }
553560               }
554561            }
r14845r14846
606613}
607614
608615
609static WRITE16_HANDLER( pal_reset_pos_w )
616WRITE16_MEMBER(wheelfir_state::pal_reset_pos_w)
610617{
611   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
612   state->m_palpos = 0;
618   m_palpos = 0;
613619}
614620
615static WRITE16_HANDLER( pal_data_w )
621WRITE16_MEMBER(wheelfir_state::pal_data_w)
616622{
617   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
618   int color=state->m_palpos/3;
619   state->m_palette[state->m_palpos] = data & 0xff;
620   ++state->m_palpos;
623   int color=m_palpos/3;
624   m_palette[m_palpos] = data & 0xff;
625   ++m_palpos;
621626
622   state->m_palpos %=NUM_COLORS*3;
627   m_palpos %=NUM_COLORS*3;
623628
624629   {
625      int r = state->m_palette[color*3];
626      int g = state->m_palette[color*3+1];
627      int b = state->m_palette[color*3+2];
628      palette_set_color(space->machine(), color, MAKE_RGB(r,g,b));
630      int r = m_palette[color*3];
631      int g = m_palette[color*3+1];
632      int b = m_palette[color*3+2];
633      palette_set_color(machine(), color, MAKE_RGB(r,g,b));
629634   }
630635
631636}
632637
633static WRITE16_HANDLER(wheelfir_7c0000_w)
638WRITE16_MEMBER(wheelfir_state::wheelfir_7c0000_w)
634639{
635640   /* seems to be scanline width/2 (used for scanline int timing ? or real width of scanline ?) */
636641}
637642
638static WRITE16_HANDLER(wheelfir_snd_w)
643WRITE16_MEMBER(wheelfir_state::wheelfir_snd_w)
639644{
640   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
641   COMBINE_DATA(&state->m_soundlatch);
642   cputag_set_input_line(space->machine(), "subcpu", 1, HOLD_LINE); /* guess, tested also with periodic interrupts and latch clear*/
643   space->machine().scheduler().synchronize();
645   COMBINE_DATA(&m_soundlatch);
646   cputag_set_input_line(machine(), "subcpu", 1, HOLD_LINE); /* guess, tested also with periodic interrupts and latch clear*/
647   machine().scheduler().synchronize();
644648}
645649
646static READ16_HANDLER( wheelfir_snd_r )
650READ16_MEMBER(wheelfir_state::wheelfir_snd_r)
647651{
648   wheelfir_state *state = space->machine().driver_data<wheelfir_state>();
649   return state->m_soundlatch;
652   return m_soundlatch;
650653}
651654
652static WRITE16_HANDLER(coin_cnt_w)
655WRITE16_MEMBER(wheelfir_state::coin_cnt_w)
653656{
654657   /* bits 0/1 coin counters */
655   coin_counter_w(space->machine(), 0, data & 0x01);
656   coin_counter_w(space->machine(), 1, data & 0x02);
658   coin_counter_w(machine(), 0, data & 0x01);
659   coin_counter_w(machine(), 1, data & 0x02);
657660}
658661
659662
r14845r14846
661664   AM_RANGE(0x000000, 0x0fffff) AM_ROM
662665   AM_RANGE(0x200000, 0x20ffff) AM_RAM
663666
664   AM_RANGE(0x700000, 0x70001f) AM_WRITE_LEGACY(wheelfir_blit_w)
665   AM_RANGE(0x720000, 0x720001) AM_WRITE_LEGACY(pal_reset_pos_w)
666   AM_RANGE(0x720002, 0x720003) AM_WRITE_LEGACY(pal_data_w)
667   AM_RANGE(0x700000, 0x70001f) AM_WRITE(wheelfir_blit_w)
668   AM_RANGE(0x720000, 0x720001) AM_WRITE(pal_reset_pos_w)
669   AM_RANGE(0x720002, 0x720003) AM_WRITE(pal_data_w)
667670   AM_RANGE(0x720004, 0x720005) AM_WRITENOP // always ffff?
668   AM_RANGE(0x740000, 0x740001) AM_WRITE_LEGACY(wheelfir_snd_w)
671   AM_RANGE(0x740000, 0x740001) AM_WRITE(wheelfir_snd_w)
669672   AM_RANGE(0x780000, 0x78000f) AM_READNOP /* net comms ? */
670   AM_RANGE(0x760000, 0x760001) AM_WRITE_LEGACY(coin_cnt_w)
671   AM_RANGE(0x7a0000, 0x7a0001) AM_WRITE_LEGACY(wheelfir_scanline_cnt_w)
672   AM_RANGE(0x7c0000, 0x7c0001) AM_READWRITE_LEGACY(wheelfir_status_r, wheelfir_7c0000_w)
673   AM_RANGE(0x760000, 0x760001) AM_WRITE(coin_cnt_w)
674   AM_RANGE(0x7a0000, 0x7a0001) AM_WRITE(wheelfir_scanline_cnt_w)
675   AM_RANGE(0x7c0000, 0x7c0001) AM_READWRITE(wheelfir_status_r, wheelfir_7c0000_w)
673676   AM_RANGE(0x7e0000, 0x7e0001) AM_READ_PORT("P1")
674677   AM_RANGE(0x7e0002, 0x7e0003) AM_READ_PORT("P2")
675678
r14845r14846
681684   AM_RANGE(0x000000, 0x0fffff) AM_ROM
682685   AM_RANGE(0x200000, 0x20ffff) AM_RAM
683686
684   AM_RANGE(0x780000, 0x780001) AM_READ_LEGACY(wheelfir_snd_r)
687   AM_RANGE(0x780000, 0x780001) AM_READ(wheelfir_snd_r)
685688
686689   AM_RANGE(0x700000, 0x700001) AM_DEVWRITE8_LEGACY("dac1", dac_w, 0xff00) //guess for now
687690   AM_RANGE(0x740000, 0x740001) AM_DEVWRITE8_LEGACY("dac2", dac_w, 0xff00)
src/mame/drivers/onetwo.c
r14845r14846
6363   /* devices */
6464   device_t *m_maincpu;
6565   device_t *m_audiocpu;
66   DECLARE_WRITE8_MEMBER(onetwo_fgram_w);
67   DECLARE_WRITE8_MEMBER(onetwo_cpubank_w);
68   DECLARE_WRITE8_MEMBER(onetwo_coin_counters_w);
69   DECLARE_WRITE8_MEMBER(onetwo_soundlatch_w);
70   DECLARE_WRITE8_MEMBER(palette1_w);
71   DECLARE_WRITE8_MEMBER(palette2_w);
6672};
6773
6874
r14845r14846
103109 *
104110 *************************************/
105111
106static WRITE8_HANDLER( onetwo_fgram_w )
112WRITE8_MEMBER(onetwo_state::onetwo_fgram_w)
107113{
108   onetwo_state *state = space->machine().driver_data<onetwo_state>();
109   state->m_fgram[offset] = data;
110   state->m_fg_tilemap->mark_tile_dirty(offset / 2);
114   m_fgram[offset] = data;
115   m_fg_tilemap->mark_tile_dirty(offset / 2);
111116}
112117
113static WRITE8_HANDLER( onetwo_cpubank_w )
118WRITE8_MEMBER(onetwo_state::onetwo_cpubank_w)
114119{
115   memory_set_bank(space->machine(), "bank1", data);
120   memory_set_bank(machine(), "bank1", data);
116121}
117122
118static WRITE8_HANDLER( onetwo_coin_counters_w )
123WRITE8_MEMBER(onetwo_state::onetwo_coin_counters_w)
119124{
120   watchdog_reset(space->machine());
121   coin_counter_w(space->machine(), 0, BIT(data, 1));
122   coin_counter_w(space->machine(), 1, BIT(data, 2));
125   watchdog_reset(machine());
126   coin_counter_w(machine(), 0, BIT(data, 1));
127   coin_counter_w(machine(), 1, BIT(data, 2));
123128}
124129
125static WRITE8_HANDLER( onetwo_soundlatch_w )
130WRITE8_MEMBER(onetwo_state::onetwo_soundlatch_w)
126131{
127   onetwo_state *state = space->machine().driver_data<onetwo_state>();
128132   soundlatch_w(space, 0, data);
129   device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
133   device_set_input_line(m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
130134}
131135
132136static void set_color(running_machine &machine, int offset)
r14845r14846
140144   palette_set_color_rgb(machine, offset, pal5bit(r), pal5bit(g), pal5bit(b));
141145}
142146
143static WRITE8_HANDLER(palette1_w)
147WRITE8_MEMBER(onetwo_state::palette1_w)
144148{
145   onetwo_state *state = space->machine().driver_data<onetwo_state>();
146   state->m_paletteram[offset] = data;
147   set_color(space->machine(), offset);
149   m_paletteram[offset] = data;
150   set_color(machine(), offset);
148151}
149152
150static WRITE8_HANDLER(palette2_w)
153WRITE8_MEMBER(onetwo_state::palette2_w)
151154{
152   onetwo_state *state = space->machine().driver_data<onetwo_state>();
153   state->m_paletteram2[offset] = data;
154   set_color(space->machine(), offset);
155   m_paletteram2[offset] = data;
156   set_color(machine(), offset);
155157}
156158
157159/*************************************
r14845r14846
163165static ADDRESS_MAP_START( main_cpu, AS_PROGRAM, 8, onetwo_state )
164166   AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("maincpu", 0x10000)
165167   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
166   AM_RANGE(0xc800, 0xc87f) AM_RAM_WRITE_LEGACY(palette1_w) AM_BASE(m_paletteram)
167   AM_RANGE(0xc900, 0xc97f) AM_RAM_WRITE_LEGACY(palette2_w) AM_BASE(m_paletteram2)
168   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE_LEGACY(onetwo_fgram_w) AM_BASE(m_fgram)
168   AM_RANGE(0xc800, 0xc87f) AM_RAM_WRITE(palette1_w) AM_BASE(m_paletteram)
169   AM_RANGE(0xc900, 0xc97f) AM_RAM_WRITE(palette2_w) AM_BASE(m_paletteram2)
170   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(onetwo_fgram_w) AM_BASE(m_fgram)
169171   AM_RANGE(0xe000, 0xffff) AM_RAM
170172ADDRESS_MAP_END
171173
172174static ADDRESS_MAP_START( main_cpu_io, AS_IO, 8, onetwo_state )
173175   ADDRESS_MAP_GLOBAL_MASK(0xff)
174   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(onetwo_coin_counters_w)
175   AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW2") AM_WRITE_LEGACY(onetwo_soundlatch_w)
176   AM_RANGE(0x02, 0x02) AM_READ_PORT("P1") AM_WRITE_LEGACY(onetwo_cpubank_w)
176   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW1") AM_WRITE(onetwo_coin_counters_w)
177   AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW2") AM_WRITE(onetwo_soundlatch_w)
178   AM_RANGE(0x02, 0x02) AM_READ_PORT("P1") AM_WRITE(onetwo_cpubank_w)
177179   AM_RANGE(0x03, 0x03) AM_READ_PORT("P2")
178180   AM_RANGE(0x04, 0x04) AM_READ_PORT("SYSTEM")
179181ADDRESS_MAP_END
src/mame/drivers/vamphalf.c
r14845r14846
8383   UINT16 m_finalgdr_backupram_bank;
8484   UINT8 *m_finalgdr_backupram;
8585   int m_has_extra_gfx;
86   DECLARE_WRITE16_MEMBER(flipscreen_w);
87   DECLARE_WRITE32_MEMBER(flipscreen32_w);
88   DECLARE_WRITE16_MEMBER(jmpbreak_flipscreen_w);
89   DECLARE_WRITE32_MEMBER(paletteram32_w);
90   DECLARE_READ32_MEMBER(wyvernwg_prot_r);
91   DECLARE_WRITE32_MEMBER(wyvernwg_prot_w);
92   DECLARE_READ32_MEMBER(finalgdr_prot_r);
93   DECLARE_WRITE32_MEMBER(finalgdr_prot_w);
94   DECLARE_WRITE32_MEMBER(finalgdr_backupram_bank_w);
95   DECLARE_READ32_MEMBER(finalgdr_backupram_r);
96   DECLARE_WRITE32_MEMBER(finalgdr_backupram_w);
97   DECLARE_WRITE32_MEMBER(finalgdr_prize_w);
98   DECLARE_WRITE16_MEMBER(boonggab_prize_w);
99   DECLARE_WRITE16_MEMBER(boonggab_lamps_w);
100   DECLARE_READ16_MEMBER(vamphalf_speedup_r);
101   DECLARE_READ16_MEMBER(vamphafk_speedup_r);
102   DECLARE_READ16_MEMBER(misncrft_speedup_r);
103   DECLARE_READ16_MEMBER(coolmini_speedup_r);
104   DECLARE_READ16_MEMBER(suplup_speedup_r);
105   DECLARE_READ16_MEMBER(luplup_speedup_r);
106   DECLARE_READ16_MEMBER(luplup29_speedup_r);
107   DECLARE_READ16_MEMBER(puzlbang_speedup_r);
108   DECLARE_READ32_MEMBER(wyvernwg_speedup_r);
109   DECLARE_READ32_MEMBER(wyvernwga_speedup_r);
110   DECLARE_READ32_MEMBER(finalgdr_speedup_r);
111   DECLARE_READ32_MEMBER(mrkicker_speedup_r);
112   DECLARE_READ16_MEMBER(dquizgo2_speedup_r);
113   DECLARE_READ32_MEMBER(aoh_speedup_r);
114   DECLARE_READ16_MEMBER(jmpbreak_speedup_r);
115   DECLARE_READ16_MEMBER(mrdig_speedup_r);
116   DECLARE_READ16_MEMBER(dtfamily_speedup_r);
117   DECLARE_READ16_MEMBER(toyland_speedup_r);
118   DECLARE_READ16_MEMBER(boonggab_speedup_r);
86119};
87120
88121static READ16_DEVICE_HANDLER( eeprom_r )
r14845r14846
131164   eeprom->set_clock_line((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE );
132165}
133166
134static WRITE16_HANDLER( flipscreen_w )
167WRITE16_MEMBER(vamphalf_state::flipscreen_w)
135168{
136169   if(offset)
137170   {
138      vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
139      state->m_flipscreen = data & state->m_flip_bit;
171      m_flipscreen = data & m_flip_bit;
140172   }
141173}
142174
143static WRITE32_HANDLER( flipscreen32_w )
175WRITE32_MEMBER(vamphalf_state::flipscreen32_w)
144176{
145   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
146   state->m_flipscreen = data & state->m_flip_bit;
177   m_flipscreen = data & m_flip_bit;
147178}
148179
149static WRITE16_HANDLER( jmpbreak_flipscreen_w )
180WRITE16_MEMBER(vamphalf_state::jmpbreak_flipscreen_w)
150181{
151   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
152   state->m_flipscreen = data & 0x8000;
182   m_flipscreen = data & 0x8000;
153183}
154184
155185
156static WRITE32_HANDLER( paletteram32_w )
186WRITE32_MEMBER(vamphalf_state::paletteram32_w)
157187{
158188   UINT16 paldata;
159189
160   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
190   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
161191
162   paldata = space->machine().generic.paletteram.u32[offset] & 0xffff;
163   palette_set_color_rgb(space->machine(), offset*2 + 1, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0));
192   paldata = machine().generic.paletteram.u32[offset] & 0xffff;
193   palette_set_color_rgb(machine(), offset*2 + 1, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0));
164194
165   paldata = (space->machine().generic.paletteram.u32[offset] >> 16) & 0xffff;
166   palette_set_color_rgb(space->machine(), offset*2 + 0, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0));
195   paldata = (machine().generic.paletteram.u32[offset] >> 16) & 0xffff;
196   palette_set_color_rgb(machine(), offset*2 + 0, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0));
167197}
168198
169static READ32_HANDLER( wyvernwg_prot_r )
199READ32_MEMBER(vamphalf_state::wyvernwg_prot_r)
170200{
171   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
172   state->m_semicom_prot_idx--;
173   return (state->m_semicom_prot_data[state->m_semicom_prot_which] & (1 << state->m_semicom_prot_idx)) >> state->m_semicom_prot_idx;
201   m_semicom_prot_idx--;
202   return (m_semicom_prot_data[m_semicom_prot_which] & (1 << m_semicom_prot_idx)) >> m_semicom_prot_idx;
174203}
175204
176static WRITE32_HANDLER( wyvernwg_prot_w )
205WRITE32_MEMBER(vamphalf_state::wyvernwg_prot_w)
177206{
178   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
179   state->m_semicom_prot_which = data & 1;
180   state->m_semicom_prot_idx = 8;
207   m_semicom_prot_which = data & 1;
208   m_semicom_prot_idx = 8;
181209}
182210
183static READ32_HANDLER( finalgdr_prot_r )
211READ32_MEMBER(vamphalf_state::finalgdr_prot_r)
184212{
185   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
186   state->m_semicom_prot_idx--;
187   return (state->m_semicom_prot_data[state->m_semicom_prot_which] & (1 << state->m_semicom_prot_idx)) ? 0x8000 : 0;
213   m_semicom_prot_idx--;
214   return (m_semicom_prot_data[m_semicom_prot_which] & (1 << m_semicom_prot_idx)) ? 0x8000 : 0;
188215}
189216
190static WRITE32_HANDLER( finalgdr_prot_w )
217WRITE32_MEMBER(vamphalf_state::finalgdr_prot_w)
191218{
192   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
193219/*
19422041C6
195221967E
r14845r14846
197223F94B
198224*/
199225   if(data == 0x41c6 || data == 0x446b)
200      state->m_semicom_prot_which = 0;
226      m_semicom_prot_which = 0;
201227   else
202      state->m_semicom_prot_which =  1;
228      m_semicom_prot_which =  1;
203229
204   state->m_semicom_prot_idx = 8;
230   m_semicom_prot_idx = 8;
205231}
206232
207233static WRITE32_DEVICE_HANDLER( finalgdr_oki_bank_w )
r14845r14846
209235   downcast<okim6295_device *>(device)->set_bank_base(0x40000 * ((data & 0x300) >> 8));
210236}
211237
212static WRITE32_HANDLER( finalgdr_backupram_bank_w )
238WRITE32_MEMBER(vamphalf_state::finalgdr_backupram_bank_w)
213239{
214   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
215   state->m_finalgdr_backupram_bank = (data & 0xff000000) >> 24;
240   m_finalgdr_backupram_bank = (data & 0xff000000) >> 24;
216241}
217242
218static READ32_HANDLER( finalgdr_backupram_r )
243READ32_MEMBER(vamphalf_state::finalgdr_backupram_r)
219244{
220   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
221   return state->m_finalgdr_backupram[offset + state->m_finalgdr_backupram_bank * 0x80] << 24;
245   return m_finalgdr_backupram[offset + m_finalgdr_backupram_bank * 0x80] << 24;
222246}
223247
224static WRITE32_HANDLER( finalgdr_backupram_w )
248WRITE32_MEMBER(vamphalf_state::finalgdr_backupram_w)
225249{
226   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
227   state->m_finalgdr_backupram[offset + state->m_finalgdr_backupram_bank * 0x80] = data >> 24;
250   m_finalgdr_backupram[offset + m_finalgdr_backupram_bank * 0x80] = data >> 24;
228251}
229252
230static WRITE32_HANDLER( finalgdr_prize_w )
253WRITE32_MEMBER(vamphalf_state::finalgdr_prize_w)
231254{
232255   if(data & 0x1000000)
233256   {
r14845r14846
256279      downcast<okim6295_device *>(device)->set_bank_base(0x40000 * (data & 0x7));
257280}
258281
259static WRITE16_HANDLER( boonggab_prize_w )
282WRITE16_MEMBER(vamphalf_state::boonggab_prize_w)
260283{
261284   if(offset)
262285   {
r14845r14846
270293   }
271294}
272295
273static WRITE16_HANDLER( boonggab_lamps_w )
296WRITE16_MEMBER(vamphalf_state::boonggab_lamps_w)
274297{
275298   if(offset == 1)
276299   {
r14845r14846
304327static ADDRESS_MAP_START( common_32bit_map, AS_PROGRAM, 32, vamphalf_state )
305328   AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE(m_wram32)
306329   AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_BASE(m_tiles32)
307   AM_RANGE(0x80000000, 0x8000ffff) AM_RAM_WRITE_LEGACY(paletteram32_w) AM_BASE_GENERIC(paletteram)
330   AM_RANGE(0x80000000, 0x8000ffff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
308331   AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("user1",0)
309332ADDRESS_MAP_END
310333
r14845r14846
314337   AM_RANGE(0x140, 0x143) AM_DEVWRITE8_LEGACY("ymsnd", ym2151_register_port_w, 0x00ff)
315338   AM_RANGE(0x146, 0x147) AM_DEVREADWRITE8_LEGACY("ymsnd", ym2151_status_port_r, ym2151_data_port_w, 0x00ff)
316339   AM_RANGE(0x1c0, 0x1c3) AM_DEVREAD_LEGACY("eeprom", eeprom_r)
317   AM_RANGE(0x240, 0x243) AM_WRITE_LEGACY(flipscreen_w)
340   AM_RANGE(0x240, 0x243) AM_WRITE(flipscreen_w)
318341   AM_RANGE(0x600, 0x603) AM_READ_PORT("SYSTEM")
319342   AM_RANGE(0x604, 0x607) AM_READ_PORT("P1_P2")
320343   AM_RANGE(0x608, 0x60b) AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
321344ADDRESS_MAP_END
322345
323346static ADDRESS_MAP_START( misncrft_io, AS_IO, 16, vamphalf_state )
324   AM_RANGE(0x100, 0x103) AM_WRITE_LEGACY(flipscreen_w)
347   AM_RANGE(0x100, 0x103) AM_WRITE(flipscreen_w)
325348   AM_RANGE(0x200, 0x203) AM_READ_PORT("P1_P2")
326349   AM_RANGE(0x240, 0x243) AM_READ_PORT("SYSTEM")
327350   AM_RANGE(0x3c0, 0x3c3) AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
r14845r14846
329352ADDRESS_MAP_END
330353
331354static ADDRESS_MAP_START( coolmini_io, AS_IO, 16, vamphalf_state )
332   AM_RANGE(0x200, 0x203) AM_WRITE_LEGACY(flipscreen_w)
355   AM_RANGE(0x200, 0x203) AM_WRITE(flipscreen_w)
333356   AM_RANGE(0x300, 0x303) AM_READ_PORT("SYSTEM")
334357   AM_RANGE(0x304, 0x307) AM_READ_PORT("P1_P2")
335358   AM_RANGE(0x308, 0x30b) AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
r14845r14846
352375ADDRESS_MAP_END
353376
354377static ADDRESS_MAP_START( wyvernwg_io, AS_IO, 32, vamphalf_state )
355   AM_RANGE(0x1800, 0x1803) AM_READWRITE_LEGACY(wyvernwg_prot_r, wyvernwg_prot_w)
356   AM_RANGE(0x2000, 0x2003) AM_WRITE_LEGACY(flipscreen32_w)
378   AM_RANGE(0x1800, 0x1803) AM_READWRITE(wyvernwg_prot_r, wyvernwg_prot_w)
379   AM_RANGE(0x2000, 0x2003) AM_WRITE(flipscreen32_w)
357380   AM_RANGE(0x2800, 0x2803) AM_READ_PORT("P1_P2")
358381   AM_RANGE(0x3000, 0x3003) AM_READ_PORT("SYSTEM")
359382   AM_RANGE(0x5400, 0x5403) AM_WRITENOP // soundlatch
r14845r14846
362385ADDRESS_MAP_END
363386
364387static ADDRESS_MAP_START( finalgdr_io, AS_IO, 32, vamphalf_state )
365   AM_RANGE(0x2400, 0x2403) AM_READ_LEGACY(finalgdr_prot_r)
366   AM_RANGE(0x2800, 0x2803) AM_WRITE_LEGACY(finalgdr_backupram_bank_w)
367   AM_RANGE(0x2c00, 0x2dff) AM_READWRITE_LEGACY(finalgdr_backupram_r, finalgdr_backupram_w)
388   AM_RANGE(0x2400, 0x2403) AM_READ(finalgdr_prot_r)
389   AM_RANGE(0x2800, 0x2803) AM_WRITE(finalgdr_backupram_bank_w)
390   AM_RANGE(0x2c00, 0x2dff) AM_READWRITE(finalgdr_backupram_r, finalgdr_backupram_w)
368391   AM_RANGE(0x3000, 0x3007) AM_DEVREADWRITE8_LEGACY("ymsnd", ym2151_r, ym2151_w, 0x0000ff00)
369392   AM_RANGE(0x3800, 0x3803) AM_READ_PORT("P1_P2")
370393   AM_RANGE(0x3400, 0x3403) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x0000ff00)
r14845r14846
372395   AM_RANGE(0x4400, 0x4403) AM_DEVREAD_LEGACY("eeprom", eeprom32_r)
373396   AM_RANGE(0x6000, 0x6003) AM_READNOP //?
374397   AM_RANGE(0x6000, 0x6003) AM_DEVWRITE_LEGACY("eeprom", finalgdr_eeprom_w)
375   AM_RANGE(0x6040, 0x6043) AM_WRITE_LEGACY(finalgdr_prot_w)
376   //AM_RANGE(0x6080, 0x6083) AM_WRITE_LEGACY(flipscreen32_w) //?
377   AM_RANGE(0x6060, 0x6063) AM_WRITE_LEGACY(finalgdr_prize_w)
398   AM_RANGE(0x6040, 0x6043) AM_WRITE(finalgdr_prot_w)
399   //AM_RANGE(0x6080, 0x6083) AM_WRITE(flipscreen32_w) //?
400   AM_RANGE(0x6060, 0x6063) AM_WRITE(finalgdr_prize_w)
378401   AM_RANGE(0x60a0, 0x60a3) AM_DEVWRITE_LEGACY("oki", finalgdr_oki_bank_w)
379402ADDRESS_MAP_END
380403
r14845r14846
382405   AM_RANGE(0x2400, 0x2403) AM_DEVREAD_LEGACY("eeprom", eeprom32_r)
383406   AM_RANGE(0x4000, 0x4003) AM_READNOP //?
384407   AM_RANGE(0x4000, 0x4003) AM_DEVWRITE_LEGACY("eeprom", finalgdr_eeprom_w)
385   AM_RANGE(0x4040, 0x4043) AM_WRITE_LEGACY(finalgdr_prot_w)
408   AM_RANGE(0x4040, 0x4043) AM_WRITE(finalgdr_prot_w)
386409   AM_RANGE(0x4084, 0x4087) AM_WRITENOP //?
387410   AM_RANGE(0x40a0, 0x40a3) AM_DEVWRITE_LEGACY("oki", finalgdr_oki_bank_w)
388   AM_RANGE(0x6400, 0x6403) AM_READ_LEGACY(finalgdr_prot_r)
411   AM_RANGE(0x6400, 0x6403) AM_READ(finalgdr_prot_r)
389412   AM_RANGE(0x7000, 0x7007) AM_DEVREADWRITE8_LEGACY("ymsnd", ym2151_r, ym2151_w, 0x0000ff00)
390413   AM_RANGE(0x7400, 0x7403) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x0000ff00)
391414   AM_RANGE(0x7800, 0x7803) AM_READ_PORT("P1_P2")
r14845r14846
419442static ADDRESS_MAP_START( aoh_map, AS_PROGRAM, 32, vamphalf_state )
420443   AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(m_wram32)
421444   AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_BASE(m_tiles32)
422   AM_RANGE(0x80000000, 0x8000ffff) AM_RAM_WRITE_LEGACY(paletteram32_w) AM_BASE_GENERIC(paletteram)
445   AM_RANGE(0x80000000, 0x8000ffff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
423446   AM_RANGE(0x80210000, 0x80210003) AM_READ_PORT("SYSTEM")
424447   AM_RANGE(0x80220000, 0x80220003) AM_READ_PORT("P1_P2")
425448   AM_RANGE(0xffc00000, 0xffffffff) AM_ROM AM_REGION("user1",0)
r14845r14846
436459static ADDRESS_MAP_START( boonggab_io, AS_IO, 16, vamphalf_state )
437460   AM_RANGE(0x0c0, 0x0c3) AM_DEVREAD_LEGACY("eeprom", eeprom_r)
438461   AM_RANGE(0x200, 0x203) AM_NOP // seems unused
439   AM_RANGE(0x300, 0x303) AM_WRITE_LEGACY(flipscreen_w)
462   AM_RANGE(0x300, 0x303) AM_WRITE(flipscreen_w)
440463   AM_RANGE(0x400, 0x403) AM_READ_PORT("SYSTEM")
441464   AM_RANGE(0x404, 0x407) AM_READ_PORT("P1_P2")
442465   AM_RANGE(0x408, 0x40b) AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
443   AM_RANGE(0x410, 0x413) AM_WRITE_LEGACY(boonggab_prize_w)
444   AM_RANGE(0x414, 0x41b) AM_WRITE_LEGACY(boonggab_lamps_w)
466   AM_RANGE(0x410, 0x413) AM_WRITE(boonggab_prize_w)
467   AM_RANGE(0x414, 0x41b) AM_WRITE(boonggab_lamps_w)
445468   AM_RANGE(0x600, 0x603) AM_DEVWRITE_LEGACY("oki", boonggab_oki_bank_w)
446469   AM_RANGE(0x700, 0x701) AM_NOP // return 0, when oki chip is read / written
447470   AM_RANGE(0x702, 0x703) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
r14845r14846
20502073      return 0;
20512074}
20522075
2053static READ16_HANDLER( vamphalf_speedup_r )
2076READ16_MEMBER(vamphalf_state::vamphalf_speedup_r)
20542077{
2055   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2056   if(cpu_get_pc(&space->device()) == 0x82de)
2078   if(cpu_get_pc(&space.device()) == 0x82de)
20572079   {
2058      if(irq_active(space))
2059         device_spin_until_interrupt(&space->device());
2080      if(irq_active(&space))
2081         device_spin_until_interrupt(&space.device());
20602082      else
2061         device_eat_cycles(&space->device(), 50);
2083         device_eat_cycles(&space.device(), 50);
20622084   }
20632085
2064   return state->m_wram[(0x4a840/2)+offset];
2086   return m_wram[(0x4a840/2)+offset];
20652087}
20662088
2067static READ16_HANDLER( vamphafk_speedup_r )
2089READ16_MEMBER(vamphalf_state::vamphafk_speedup_r)
20682090{
2069   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2070   if(cpu_get_pc(&space->device()) == 0x82de)
2091   if(cpu_get_pc(&space.device()) == 0x82de)
20712092   {
2072      if(irq_active(space))
2073         device_spin_until_interrupt(&space->device());
2093      if(irq_active(&space))
2094         device_spin_until_interrupt(&space.device());
20742095      else
2075         device_eat_cycles(&space->device(), 50);
2096         device_eat_cycles(&space.device(), 50);
20762097   }
20772098
2078   return state->m_wram[(0x4a6d0/2)+offset];
2099   return m_wram[(0x4a6d0/2)+offset];
20792100}
20802101
2081static READ16_HANDLER( misncrft_speedup_r )
2102READ16_MEMBER(vamphalf_state::misncrft_speedup_r)
20822103{
2083   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2084   if(cpu_get_pc(&space->device()) == 0xecc8)
2104   if(cpu_get_pc(&space.device()) == 0xecc8)
20852105   {
2086      if(irq_active(space))
2087         device_spin_until_interrupt(&space->device());
2106      if(irq_active(&space))
2107         device_spin_until_interrupt(&space.device());
20882108      else
2089         device_eat_cycles(&space->device(), 50);
2109         device_eat_cycles(&space.device(), 50);
20902110   }
20912111
2092   return state->m_wram[(0x72eb4/2)+offset];
2112   return m_wram[(0x72eb4/2)+offset];
20932113}
20942114
2095static READ16_HANDLER( coolmini_speedup_r )
2115READ16_MEMBER(vamphalf_state::coolmini_speedup_r)
20962116{
2097   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2098   if(cpu_get_pc(&space->device()) == 0x75f7a)
2117   if(cpu_get_pc(&space.device()) == 0x75f7a)
20992118   {
2100      if(irq_active(space))
2101         device_spin_until_interrupt(&space->device());
2119      if(irq_active(&space))
2120         device_spin_until_interrupt(&space.device());
21022121      else
2103         device_eat_cycles(&space->device(), 50);
2122         device_eat_cycles(&space.device(), 50);
21042123   }
21052124
2106   return state->m_wram[(0xd2e80/2)+offset];
2125   return m_wram[(0xd2e80/2)+offset];
21072126}
21082127
2109static READ16_HANDLER( suplup_speedup_r )
2128READ16_MEMBER(vamphalf_state::suplup_speedup_r)
21102129{
2111   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2112   if(cpu_get_pc(&space->device()) == 0xaf18a )
2130   if(cpu_get_pc(&space.device()) == 0xaf18a )
21132131   {
2114      if(irq_active(space))
2115         device_spin_until_interrupt(&space->device());
2132      if(irq_active(&space))
2133         device_spin_until_interrupt(&space.device());
21162134      else
2117         device_eat_cycles(&space->device(), 50);
2135         device_eat_cycles(&space.device(), 50);
21182136   }
21192137
2120   return state->m_wram[(0x11605c/2)+offset];
2138   return m_wram[(0x11605c/2)+offset];
21212139}
21222140
2123static READ16_HANDLER( luplup_speedup_r )
2141READ16_MEMBER(vamphalf_state::luplup_speedup_r)
21242142{
2125   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2126   if(cpu_get_pc(&space->device()) == 0xaefac )
2143   if(cpu_get_pc(&space.device()) == 0xaefac )
21272144   {
2128      if(irq_active(space))
2129         device_spin_until_interrupt(&space->device());
2145      if(irq_active(&space))
2146         device_spin_until_interrupt(&space.device());
21302147      else
2131         device_eat_cycles(&space->device(), 50);
2148         device_eat_cycles(&space.device(), 50);
21322149   }
21332150
2134   return state->m_wram[(0x115e84/2)+offset];
2151   return m_wram[(0x115e84/2)+offset];
21352152}
21362153
2137static READ16_HANDLER( luplup29_speedup_r )
2154READ16_MEMBER(vamphalf_state::luplup29_speedup_r)
21382155{
2139   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2140   if(cpu_get_pc(&space->device()) == 0xae6c0 )
2156   if(cpu_get_pc(&space.device()) == 0xae6c0 )
21412157   {
2142      if(irq_active(space))
2143         device_spin_until_interrupt(&space->device());
2158      if(irq_active(&space))
2159         device_spin_until_interrupt(&space.device());
21442160      else
2145         device_eat_cycles(&space->device(), 50);
2161         device_eat_cycles(&space.device(), 50);
21462162   }
21472163
2148   return state->m_wram[(0x113f08/2)+offset];
2164   return m_wram[(0x113f08/2)+offset];
21492165}
21502166
2151static READ16_HANDLER( puzlbang_speedup_r )
2167READ16_MEMBER(vamphalf_state::puzlbang_speedup_r)
21522168{
2153   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2154   if(cpu_get_pc(&space->device()) == 0xae6d2 )
2169   if(cpu_get_pc(&space.device()) == 0xae6d2 )
21552170   {
2156      if(irq_active(space))
2157         device_spin_until_interrupt(&space->device());
2171      if(irq_active(&space))
2172         device_spin_until_interrupt(&space.device());
21582173      else
2159         device_eat_cycles(&space->device(), 50);
2174         device_eat_cycles(&space.device(), 50);
21602175   }
21612176
2162   return state->m_wram[(0x113ecc/2)+offset];
2177   return m_wram[(0x113ecc/2)+offset];
21632178}
21642179
2165static READ32_HANDLER( wyvernwg_speedup_r )
2180READ32_MEMBER(vamphalf_state::wyvernwg_speedup_r)
21662181{
2167   int pc = cpu_get_pc(&space->device());
2182   int pc = cpu_get_pc(&space.device());
21682183
2169   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
21702184   if(pc == 0x10758)
21712185   {
2172      if(irq_active(space))
2173         device_spin_until_interrupt(&space->device());
2186      if(irq_active(&space))
2187         device_spin_until_interrupt(&space.device());
21742188      else
2175         device_eat_cycles(&space->device(), 50);
2189         device_eat_cycles(&space.device(), 50);
21762190   }
21772191
2178   return state->m_wram32[0x00b56fc/4];
2192   return m_wram32[0x00b56fc/4];
21792193}
21802194
2181static READ32_HANDLER( wyvernwga_speedup_r )
2195READ32_MEMBER(vamphalf_state::wyvernwga_speedup_r)
21822196{
2183   int pc = cpu_get_pc(&space->device());
2197   int pc = cpu_get_pc(&space.device());
21842198
2185   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
21862199   if(pc == 0x10758)
21872200   {
2188      if(irq_active(space))
2189         device_spin_until_interrupt(&space->device());
2201      if(irq_active(&space))
2202         device_spin_until_interrupt(&space.device());
21902203      else
2191         device_eat_cycles(&space->device(), 50);
2204         device_eat_cycles(&space.device(), 50);
21922205   }
21932206
2194   return state->m_wram32[0x00b74f8/4];
2207   return m_wram32[0x00b74f8/4];
21952208}
21962209
21972210
21982211
2199static READ32_HANDLER( finalgdr_speedup_r )
2212READ32_MEMBER(vamphalf_state::finalgdr_speedup_r)
22002213{
2201   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2202   if(cpu_get_pc(&space->device()) == 0x1c212)
2214   if(cpu_get_pc(&space.device()) == 0x1c212)
22032215   {
2204      if(irq_active(space))
2205         device_spin_until_interrupt(&space->device());
2216      if(irq_active(&space))
2217         device_spin_until_interrupt(&space.device());
22062218      else
2207         device_eat_cycles(&space->device(), 50);
2219         device_eat_cycles(&space.device(), 50);
22082220   }
22092221
2210   return state->m_wram32[0x005e874/4];
2222   return m_wram32[0x005e874/4];
22112223}
22122224
2213static READ32_HANDLER( mrkicker_speedup_r )
2225READ32_MEMBER(vamphalf_state::mrkicker_speedup_r)
22142226{
2215   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2216   UINT32 pc = cpu_get_pc(&space->device());
2227   UINT32 pc = cpu_get_pc(&space.device());
22172228   if(pc == 0x469de || pc == 0x46a36)
22182229   {
2219//      if(irq_active(space))
2220//          device_spin_until_interrupt(&space->device());
2230//      if(irq_active(&space))
2231//          device_spin_until_interrupt(&space.device());
22212232//      else
2222         device_eat_cycles(&space->device(), 50);
2233         device_eat_cycles(&space.device(), 50);
22232234   }
22242235
2225   return state->m_wram32[0x00701a4/4];
2236   return m_wram32[0x00701a4/4];
22262237}
22272238
22282239
2229static READ16_HANDLER( dquizgo2_speedup_r )
2240READ16_MEMBER(vamphalf_state::dquizgo2_speedup_r)
22302241{
2231   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2232   if(cpu_get_pc(&space->device()) == 0xaa622)
2242   if(cpu_get_pc(&space.device()) == 0xaa622)
22332243   {
2234      if(irq_active(space))
2235         device_spin_until_interrupt(&space->device());
2244      if(irq_active(&space))
2245         device_spin_until_interrupt(&space.device());
22362246      else
2237         device_eat_cycles(&space->device(), 50);
2247         device_eat_cycles(&space.device(), 50);
22382248   }
22392249
2240   return state->m_wram[(0xcde70/2)+offset];
2250   return m_wram[(0xcde70/2)+offset];
22412251}
22422252
2243static READ32_HANDLER( aoh_speedup_r )
2253READ32_MEMBER(vamphalf_state::aoh_speedup_r)
22442254{
2245   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2246   if(cpu_get_pc(&space->device()) == 0xb994 )
2255   if(cpu_get_pc(&space.device()) == 0xb994 )
22472256   {
2248      device_eat_cycles(&space->device(), 500);
2257      device_eat_cycles(&space.device(), 500);
22492258   }
2250   else if (cpu_get_pc(&space->device()) == 0xba40 )
2259   else if (cpu_get_pc(&space.device()) == 0xba40 )
22512260   {
2252      device_eat_cycles(&space->device(), 500);
2261      device_eat_cycles(&space.device(), 500);
22532262   }
22542263
22552264
2256   return state->m_wram32[0x28a09c/4];
2265   return m_wram32[0x28a09c/4];
22572266}
22582267
2259static READ16_HANDLER( jmpbreak_speedup_r )
2268READ16_MEMBER(vamphalf_state::jmpbreak_speedup_r)
22602269{
2261   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2262   if(cpu_get_pc(&space->device()) == 0x983c)
2270   if(cpu_get_pc(&space.device()) == 0x983c)
22632271   {
2264      if(irq_active(space))
2265         device_spin_until_interrupt(&space->device());
2272      if(irq_active(&space))
2273         device_spin_until_interrupt(&space.device());
22662274      else
2267         device_eat_cycles(&space->device(), 50);
2275         device_eat_cycles(&space.device(), 50);
22682276   }
22692277
2270   return state->m_wram[(0x00906fc / 2)+offset];
2278   return m_wram[(0x00906fc / 2)+offset];
22712279}
22722280
2273static READ16_HANDLER( mrdig_speedup_r )
2281READ16_MEMBER(vamphalf_state::mrdig_speedup_r)
22742282{
2275   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2276   if(cpu_get_pc(&space->device()) == 0x1710)
2283   if(cpu_get_pc(&space.device()) == 0x1710)
22772284   {
2278      if(irq_active(space))
2279         device_spin_until_interrupt(&space->device());
2285      if(irq_active(&space))
2286         device_spin_until_interrupt(&space.device());
22802287      else
2281         device_eat_cycles(&space->device(), 50);
2288         device_eat_cycles(&space.device(), 50);
22822289   }
22832290
2284   return state->m_wram[(0x00a99c / 2)+offset];
2291   return m_wram[(0x00a99c / 2)+offset];
22852292}
22862293
2287static READ16_HANDLER( dtfamily_speedup_r )
2294READ16_MEMBER(vamphalf_state::dtfamily_speedup_r)
22882295{
2289   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
22902296
2291   int pc = cpu_get_pc(&space->device());
2297   int pc = cpu_get_pc(&space.device());
22922298
22932299   if (pc == 0x12fa6)
2294      device_spin_until_interrupt(&space->device());
2300      device_spin_until_interrupt(&space.device());
22952301
2296   return state->m_wram[0xcc2a8 / 2];
2302   return m_wram[0xcc2a8 / 2];
22972303
22982304}
22992305
2300static READ16_HANDLER( toyland_speedup_r )
2306READ16_MEMBER(vamphalf_state::toyland_speedup_r)
23012307{
2302   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
23032308
2304   if (cpu_get_pc(&space->device()) == 0x130c2)
2305      device_spin_until_interrupt(&space->device());
2309   if (cpu_get_pc(&space.device()) == 0x130c2)
2310      device_spin_until_interrupt(&space.device());
23062311
2307   return state->m_wram[0x780d8 / 2];
2312   return m_wram[0x780d8 / 2];
23082313
23092314}
23102315
2311static READ16_HANDLER( boonggab_speedup_r )
2316READ16_MEMBER(vamphalf_state::boonggab_speedup_r)
23122317{
2313   vamphalf_state *state = space->machine().driver_data<vamphalf_state>();
2314   if(cpu_get_pc(&space->device()) == 0x13198)
2318   if(cpu_get_pc(&space.device()) == 0x13198)
23152319   {
2316      if(irq_active(space))
2317         device_spin_until_interrupt(&space->device());
2320      if(irq_active(&space))
2321         device_spin_until_interrupt(&space.device());
23182322   }
23192323
2320   return state->m_wram[(0xf1b7c / 2)+offset];
2324   return m_wram[(0xf1b7c / 2)+offset];
23212325}
23222326
23232327static DRIVER_INIT( vamphalf )
23242328{
23252329   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2326   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x0004a840, 0x0004a843, FUNC(vamphalf_speedup_r) );
2330   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x0004a840, 0x0004a843, read16_delegate(FUNC(vamphalf_state::vamphalf_speedup_r), state));
23272331
23282332   state->m_palshift = 0;
23292333   state->m_flip_bit = 0x80;
r14845r14846
23322336static DRIVER_INIT( vamphafk )
23332337{
23342338   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2335   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x0004a6d0, 0x0004a6d3, FUNC(vamphafk_speedup_r) );
2339   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x0004a6d0, 0x0004a6d3, read16_delegate(FUNC(vamphalf_state::vamphafk_speedup_r), state));
23362340
23372341   state->m_palshift = 0;
23382342   state->m_flip_bit = 0x80;
r14845r14846
23412345static DRIVER_INIT( misncrft )
23422346{
23432347   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2344   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00072eb4, 0x00072eb7, FUNC(misncrft_speedup_r) );
2348   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00072eb4, 0x00072eb7, read16_delegate(FUNC(vamphalf_state::misncrft_speedup_r), state));
23452349
23462350   state->m_palshift = 0;
23472351   state->m_flip_bit = 1;
r14845r14846
23502354static DRIVER_INIT( coolmini )
23512355{
23522356   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2353   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x000d2e80, 0x000d2e83, FUNC(coolmini_speedup_r) );
2357   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x000d2e80, 0x000d2e83, read16_delegate(FUNC(vamphalf_state::coolmini_speedup_r), state));
23542358
23552359   state->m_palshift = 0;
23562360   state->m_flip_bit = 1;
r14845r14846
23592363static DRIVER_INIT( suplup )
23602364{
23612365   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2362   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x0011605c, 0x0011605f, FUNC(suplup_speedup_r) );
2366   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x0011605c, 0x0011605f, read16_delegate(FUNC(vamphalf_state::suplup_speedup_r), state));
23632367
23642368   state->m_palshift = 8;
23652369   /* no flipscreen */
r14845r14846
23682372static DRIVER_INIT( luplup )
23692373{
23702374   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2371   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00115e84, 0x00115e87, FUNC(luplup_speedup_r) );
2375   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00115e84, 0x00115e87, read16_delegate(FUNC(vamphalf_state::luplup_speedup_r), state));
23722376
23732377   state->m_palshift = 8;
23742378   /* no flipscreen */
r14845r14846
23772381static DRIVER_INIT( luplup29 )
23782382{
23792383   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2380   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00113f08, 0x00113f0b, FUNC(luplup29_speedup_r) );
2384   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00113f08, 0x00113f0b, read16_delegate(FUNC(vamphalf_state::luplup29_speedup_r), state));
23812385
23822386   state->m_palshift = 8;
23832387   /* no flipscreen */
r14845r14846
23862390static DRIVER_INIT( puzlbang )
23872391{
23882392   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2389   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00113ecc, 0x00113ecf, FUNC(puzlbang_speedup_r) );
2393   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00113ecc, 0x00113ecf, read16_delegate(FUNC(vamphalf_state::puzlbang_speedup_r), state));
23902394
23912395   state->m_palshift = 8;
23922396   /* no flipscreen */
r14845r14846
23952399static DRIVER_INIT( wyvernwg )
23962400{
23972401   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2398   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00b56fc, 0x00b56ff, FUNC(wyvernwg_speedup_r) );
2399   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00b74f8, 0x00b74fb, FUNC(wyvernwga_speedup_r) );
2402   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00b56fc, 0x00b56ff, read32_delegate(FUNC(vamphalf_state::wyvernwg_speedup_r), state));
2403   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00b74f8, 0x00b74fb, read32_delegate(FUNC(vamphalf_state::wyvernwga_speedup_r), state));
24002404
24012405   state->m_palshift = 0;
24022406   state->m_flip_bit = 1;
r14845r14846
24112415   vamphalf_state *state = machine.driver_data<vamphalf_state>();
24122416   state->m_finalgdr_backupram_bank = 1;
24132417   state->m_finalgdr_backupram = auto_alloc_array(machine, UINT8, 0x80*0x100);
2414   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x005e874, 0x005e877, FUNC(finalgdr_speedup_r) );
2418   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x005e874, 0x005e877, read32_delegate(FUNC(vamphalf_state::finalgdr_speedup_r), state));
24152419   machine.device<nvram_device>("nvram")->set_base(state->m_finalgdr_backupram, 0x80*0x100);
24162420
24172421   state->m_palshift = 0;
r14845r14846
24282432   // backup ram isn't used
24292433   state->m_finalgdr_backupram_bank = 1;
24302434   state->m_finalgdr_backupram = auto_alloc_array(machine, UINT8, 0x80*0x100);
2431   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00701a4, 0x00701a7, FUNC(mrkicker_speedup_r) );
2435   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00701a4, 0x00701a7, read32_delegate(FUNC(vamphalf_state::mrkicker_speedup_r), state));
24322436   machine.device<nvram_device>("nvram")->set_base(state->m_finalgdr_backupram, 0x80*0x100);
24332437
24342438   state->m_palshift = 0;
r14845r14846
24422446static DRIVER_INIT( dquizgo2 )
24432447{
24442448   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2445   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00cde70, 0x00cde73, FUNC(dquizgo2_speedup_r) );
2449   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00cde70, 0x00cde73, read16_delegate(FUNC(vamphalf_state::dquizgo2_speedup_r), state));
24462450
24472451   state->m_palshift = 0;
24482452   state->m_flip_bit = 1;
r14845r14846
24512455static DRIVER_INIT( dtfamily )
24522456{
24532457   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2454   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xcc2a8, 0xcc2a9, FUNC(dtfamily_speedup_r) );
2458   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xcc2a8, 0xcc2a9, read16_delegate(FUNC(vamphalf_state::dtfamily_speedup_r), state));
24552459
24562460   state->m_palshift = 0;
24572461   state->m_flip_bit = 1;
r14845r14846
24612465static DRIVER_INIT( toyland )
24622466{
24632467   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2464   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x780d8, 0x780d9, FUNC(toyland_speedup_r) );
2468   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x780d8, 0x780d9, read16_delegate(FUNC(vamphalf_state::toyland_speedup_r), state));
24652469
24662470   state->m_palshift = 0;
24672471   state->m_flip_bit = 1;
r14845r14846
24702474static DRIVER_INIT( aoh )
24712475{
24722476   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2473   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x028a09c, 0x028a09f, FUNC(aoh_speedup_r) );
2477   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x028a09c, 0x028a09f, read32_delegate(FUNC(vamphalf_state::aoh_speedup_r), state));
24742478
24752479   state->m_palshift = 0;
24762480   /* no flipscreen */
r14845r14846
24792483static DRIVER_INIT( jmpbreak )
24802484{
24812485   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2482   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00906fc, 0x00906ff, FUNC(jmpbreak_speedup_r) );
2483   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe0000000, 0xe0000003, FUNC(jmpbreak_flipscreen_w) );
2486   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00906fc, 0x00906ff, read16_delegate(FUNC(vamphalf_state::jmpbreak_speedup_r), state));
2487   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), state));
24842488
24852489   state->m_palshift = 0;
24862490}
r14845r14846
24882492static DRIVER_INIT( mrdig )
24892493{
24902494   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2491   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x00a99c, 0x00a99f, FUNC(mrdig_speedup_r) );
2492   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe0000000, 0xe0000003, FUNC(jmpbreak_flipscreen_w) );
2495   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x00a99c, 0x00a99f, read16_delegate(FUNC(vamphalf_state::mrdig_speedup_r), state));
2496   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), state));
24932497
24942498   state->m_palshift = 0;
24952499}
r14845r14846
24982502static DRIVER_INIT( boonggab )
24992503{
25002504   vamphalf_state *state = machine.driver_data<vamphalf_state>();
2501   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x000f1b7c, 0x000f1b7f, FUNC(boonggab_speedup_r) );
2505   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x000f1b7c, 0x000f1b7f, read16_delegate(FUNC(vamphalf_state::boonggab_speedup_r), state));
25022506
25032507   state->m_palshift = 0;
25042508   state->m_has_extra_gfx = 1;
src/mame/drivers/mayumi.c
r14845r14846
3030   /* misc */
3131   int m_int_enable;
3232   int m_input_sel;
33   DECLARE_WRITE8_MEMBER(mayumi_videoram_w);
34   DECLARE_WRITE8_MEMBER(bank_sel_w);
35   DECLARE_WRITE8_MEMBER(input_sel_w);
36   DECLARE_READ8_MEMBER(key_matrix_r);
3337};
3438
3539
r14845r14846
5458   state->m_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
5559}
5660
57static WRITE8_HANDLER( mayumi_videoram_w )
61WRITE8_MEMBER(mayumi_state::mayumi_videoram_w)
5862{
59   mayumi_state *state = space->machine().driver_data<mayumi_state>();
60   state->m_videoram[offset] = data;
61   state->m_tilemap->mark_tile_dirty(offset & 0x7ff);
63   m_videoram[offset] = data;
64   m_tilemap->mark_tile_dirty(offset & 0x7ff);
6265}
6366
6467static SCREEN_UPDATE_IND16( mayumi )
r14845r14846
8891 *
8992 *************************************/
9093
91static WRITE8_HANDLER( bank_sel_w )
94WRITE8_MEMBER(mayumi_state::bank_sel_w)
9295{
93   mayumi_state *state = space->machine().driver_data<mayumi_state>();
9496   int bank = BIT(data, 7) | (BIT(data, 6) << 1);
9597
96   memory_set_bank(space->machine(), "bank1", bank);
98   memory_set_bank(machine(), "bank1", bank);
9799
98   state->m_int_enable = data & 1;
100   m_int_enable = data & 1;
99101
100   flip_screen_set(space->machine(), data & 2);
102   flip_screen_set(machine(), data & 2);
101103}
102104
103static WRITE8_HANDLER( input_sel_w )
105WRITE8_MEMBER(mayumi_state::input_sel_w)
104106{
105   mayumi_state *state = space->machine().driver_data<mayumi_state>();
106   state->m_input_sel = data;
107   m_input_sel = data;
107108}
108109
109static READ8_HANDLER( key_matrix_r )
110READ8_MEMBER(mayumi_state::key_matrix_r)
110111{
111   mayumi_state *state = space->machine().driver_data<mayumi_state>();
112112   int p, i, ret;
113113   static const char *const keynames[2][5] =
114114         {
r14845r14846
118118
119119   ret = 0xff;
120120
121   p = ~state->m_input_sel & 0x1f;
121   p = ~m_input_sel & 0x1f;
122122
123123   for (i = 0; i < 5; i++)
124124   {
125125      if (BIT(p, i))
126         ret &= input_port_read(space->machine(), keynames[offset][i]);
126         ret &= input_port_read(machine(), keynames[offset][i]);
127127   }
128128
129129   return ret;
r14845r14846
139139   AM_RANGE(0x0000, 0x7fff) AM_ROM
140140   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
141141   AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("nvram")
142   AM_RANGE(0xe000, 0xf7ff) AM_RAM_WRITE_LEGACY(mayumi_videoram_w) AM_BASE(m_videoram)
142   AM_RANGE(0xe000, 0xf7ff) AM_RAM_WRITE(mayumi_videoram_w) AM_BASE(m_videoram)
143143ADDRESS_MAP_END
144144
145145
146146static ADDRESS_MAP_START( mayumi_io_map, AS_IO, 8, mayumi_state )
147147   ADDRESS_MAP_GLOBAL_MASK(0xff)
148   AM_RANGE(0x30, 0x30) AM_READ_PORT("IN0") AM_WRITE_LEGACY(bank_sel_w)
149   AM_RANGE(0xc0, 0xc0) AM_WRITE_LEGACY(input_sel_w)
150   AM_RANGE(0xc1, 0xc2) AM_READ_LEGACY(key_matrix_r)   // 0xc0-c3 8255ppi
148   AM_RANGE(0x30, 0x30) AM_READ_PORT("IN0") AM_WRITE(bank_sel_w)
149   AM_RANGE(0xc0, 0xc0) AM_WRITE(input_sel_w)
150   AM_RANGE(0xc1, 0xc2) AM_READ(key_matrix_r)   // 0xc0-c3 8255ppi
151151   AM_RANGE(0xc3, 0xc3) AM_WRITENOP      // 0xc0-c3 8255ppi
152152   AM_RANGE(0xd0, 0xd1) AM_DEVREADWRITE_LEGACY("ymsnd", ym2203_r, ym2203_w)
153153ADDRESS_MAP_END
src/mame/drivers/vegaeo.c
r14845r14846
2626
2727   UINT32 *m_vega_vram;
2828   UINT8 m_vega_vbuffer;
29   DECLARE_WRITE32_MEMBER(vega_vram_w);
30   DECLARE_READ32_MEMBER(vega_vram_r);
31   DECLARE_WRITE32_MEMBER(vega_palette_w);
32   DECLARE_WRITE32_MEMBER(vega_misc_w);
33   DECLARE_READ32_MEMBER(vegaeo_custom_read);
2934};
3035
3136
3237
3338
34static WRITE32_HANDLER( vega_vram_w )
39WRITE32_MEMBER(vegaeo_state::vega_vram_w)
3540{
36   vegaeo_state *state = space->machine().driver_data<vegaeo_state>();
3741   switch(mem_mask)
3842   {
3943      case 0xffffffff:
r14845r14846
5963            return;
6064   }
6165
62   COMBINE_DATA(&state->m_vega_vram[offset + state->m_vega_vbuffer * (0x14000/4)]);
66   COMBINE_DATA(&m_vega_vram[offset + m_vega_vbuffer * (0x14000/4)]);
6367}
6468
65static READ32_HANDLER( vega_vram_r )
69READ32_MEMBER(vegaeo_state::vega_vram_r)
6670{
67   vegaeo_state *state = space->machine().driver_data<vegaeo_state>();
68   return state->m_vega_vram[offset + (0x14000/4) * state->m_vega_vbuffer];
71   return m_vega_vram[offset + (0x14000/4) * m_vega_vbuffer];
6972}
7073
71static WRITE32_HANDLER( vega_palette_w )
74WRITE32_MEMBER(vegaeo_state::vega_palette_w)
7275{
7376   UINT16 paldata;
7477
75   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
78   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
7679
77   paldata = space->machine().generic.paletteram.u32[offset] & 0x7fff;
78   palette_set_color_rgb(space->machine(), offset, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0));
80   paldata = machine().generic.paletteram.u32[offset] & 0x7fff;
81   palette_set_color_rgb(machine(), offset, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0));
7982}
8083
81static WRITE32_HANDLER( vega_misc_w )
84WRITE32_MEMBER(vegaeo_state::vega_misc_w)
8285{
83   vegaeo_state *state = space->machine().driver_data<vegaeo_state>();
8486   // other bits ???
8587
86   state->m_vega_vbuffer = data & 1;
88   m_vega_vbuffer = data & 1;
8789}
8890
8991
90static READ32_HANDLER( vegaeo_custom_read )
92READ32_MEMBER(vegaeo_state::vegaeo_custom_read)
9193{
92   eolith_speedup_read(space);
93   return input_port_read(space->machine(), "SYSTEM");
94   eolith_speedup_read(&space);
95   return input_port_read(machine(), "SYSTEM");
9496}
9597
9698static ADDRESS_MAP_START( vega_map, AS_PROGRAM, 32, vegaeo_state )
9799   AM_RANGE(0x00000000, 0x001fffff) AM_RAM
98   AM_RANGE(0x80000000, 0x80013fff) AM_READWRITE_LEGACY(vega_vram_r, vega_vram_w)
100   AM_RANGE(0x80000000, 0x80013fff) AM_READWRITE(vega_vram_r, vega_vram_w)
99101   AM_RANGE(0xfc000000, 0xfc0000ff) AM_DEVREADWRITE8_LEGACY("at28c16", at28c16_r, at28c16_w, 0x000000ff)
100   AM_RANGE(0xfc200000, 0xfc2003ff) AM_RAM_WRITE_LEGACY(vega_palette_w) AM_BASE_GENERIC(paletteram)
102   AM_RANGE(0xfc200000, 0xfc2003ff) AM_RAM_WRITE(vega_palette_w) AM_BASE_GENERIC(paletteram)
101103   AM_RANGE(0xfc400000, 0xfc40005b) AM_WRITENOP // crt registers ?
102104   AM_RANGE(0xfc600000, 0xfc600003) AM_WRITENOP // soundlatch
103   AM_RANGE(0xfca00000, 0xfca00003) AM_WRITE_LEGACY(vega_misc_w)
104   AM_RANGE(0xfcc00000, 0xfcc00003) AM_READ_LEGACY(vegaeo_custom_read)
105   AM_RANGE(0xfca00000, 0xfca00003) AM_WRITE(vega_misc_w)
106   AM_RANGE(0xfcc00000, 0xfcc00003) AM_READ(vegaeo_custom_read)
105107   AM_RANGE(0xfce00000, 0xfce00003) AM_READ_PORT("P1_P2")
106108   AM_RANGE(0xfd000000, 0xfeffffff) AM_ROM AM_REGION("user1", 0)
107109   AM_RANGE(0xfff80000, 0xffffffff) AM_ROM AM_REGION("maincpu", 0)
src/mame/drivers/bnstars.c
r14845r14846
120120   int m_ms32_reverse_sprite_order;
121121   int m_flipscreen;
122122   UINT16 m_irqreq;
123   DECLARE_WRITE32_MEMBER(ms32_tx0_ram_w);
124   DECLARE_WRITE32_MEMBER(ms32_tx1_ram_w);
125   DECLARE_WRITE32_MEMBER(ms32_bg0_ram_w);
126   DECLARE_WRITE32_MEMBER(ms32_bg1_ram_w);
127   DECLARE_WRITE32_MEMBER(ms32_roz0_ram_w);
128   DECLARE_WRITE32_MEMBER(ms32_roz1_ram_w);
129   DECLARE_WRITE32_MEMBER(ms32_pal0_ram_w);
130   DECLARE_WRITE32_MEMBER(ms32_pal1_ram_w);
131   DECLARE_WRITE32_MEMBER(ms32_spramx_w);
132   DECLARE_READ32_MEMBER(bnstars1_r);
133   DECLARE_READ32_MEMBER(bnstars2_r);
134   DECLARE_READ32_MEMBER(bnstars3_r);
135   DECLARE_WRITE32_MEMBER(bnstars1_mahjong_select_w);
123136};
124137
125138
r14845r14846
146159   SET_TILE_INFO(7,tileno,colour,0);
147160}
148161
149static WRITE32_HANDLER( ms32_tx0_ram_w )
162WRITE32_MEMBER(bnstars_state::ms32_tx0_ram_w)
150163{
151   bnstars_state *state = space->machine().driver_data<bnstars_state>();
152   COMBINE_DATA(&state->m_ms32_tx0_ram[offset]);
153   state->m_ms32_tx_tilemap[0]->mark_tile_dirty(offset/2);
164   COMBINE_DATA(&m_ms32_tx0_ram[offset]);
165   m_ms32_tx_tilemap[0]->mark_tile_dirty(offset/2);
154166}
155167
156static WRITE32_HANDLER( ms32_tx1_ram_w )
168WRITE32_MEMBER(bnstars_state::ms32_tx1_ram_w)
157169{
158   bnstars_state *state = space->machine().driver_data<bnstars_state>();
159   COMBINE_DATA(&state->m_ms32_tx1_ram[offset]);
160   state->m_ms32_tx_tilemap[1]->mark_tile_dirty(offset/2);
170   COMBINE_DATA(&m_ms32_tx1_ram[offset]);
171   m_ms32_tx_tilemap[1]->mark_tile_dirty(offset/2);
161172}
162173
163174/* BG Layers */
r14845r14846
184195   SET_TILE_INFO(6,tileno,colour,0);
185196}
186197
187static WRITE32_HANDLER( ms32_bg0_ram_w )
198WRITE32_MEMBER(bnstars_state::ms32_bg0_ram_w)
188199{
189   bnstars_state *state = space->machine().driver_data<bnstars_state>();
190   COMBINE_DATA(&state->m_ms32_bg0_ram[offset]);
191   state->m_ms32_bg_tilemap[0]->mark_tile_dirty(offset/2);
200   COMBINE_DATA(&m_ms32_bg0_ram[offset]);
201   m_ms32_bg_tilemap[0]->mark_tile_dirty(offset/2);
192202}
193203
194static WRITE32_HANDLER( ms32_bg1_ram_w )
204WRITE32_MEMBER(bnstars_state::ms32_bg1_ram_w)
195205{
196   bnstars_state *state = space->machine().driver_data<bnstars_state>();
197   COMBINE_DATA(&state->m_ms32_bg1_ram[offset]);
198   state->m_ms32_bg_tilemap[1]->mark_tile_dirty(offset/2);
206   COMBINE_DATA(&m_ms32_bg1_ram[offset]);
207   m_ms32_bg_tilemap[1]->mark_tile_dirty(offset/2);
199208}
200209
201210/* ROZ Layers */
r14845r14846
308317   SET_TILE_INFO(5,tileno,colour,0);
309318}
310319
311static WRITE32_HANDLER( ms32_roz0_ram_w )
320WRITE32_MEMBER(bnstars_state::ms32_roz0_ram_w)
312321{
313   bnstars_state *state = space->machine().driver_data<bnstars_state>();
314   COMBINE_DATA(&state->m_ms32_roz0_ram[offset]);
315   state->m_ms32_roz_tilemap[0]->mark_tile_dirty(offset/2);
322   COMBINE_DATA(&m_ms32_roz0_ram[offset]);
323   m_ms32_roz_tilemap[0]->mark_tile_dirty(offset/2);
316324}
317325
318static WRITE32_HANDLER( ms32_roz1_ram_w )
326WRITE32_MEMBER(bnstars_state::ms32_roz1_ram_w)
319327{
320   bnstars_state *state = space->machine().driver_data<bnstars_state>();
321   COMBINE_DATA(&state->m_ms32_roz1_ram[offset]);
322   state->m_ms32_roz_tilemap[1]->mark_tile_dirty(offset/2);
328   COMBINE_DATA(&m_ms32_roz1_ram[offset]);
329   m_ms32_roz_tilemap[1]->mark_tile_dirty(offset/2);
323330}
324331
325332
r14845r14846
335342   palette_set_color(machine,color+screen*0x8000,MAKE_RGB(r,g,b));
336343}
337344
338static WRITE32_HANDLER( ms32_pal0_ram_w )
345WRITE32_MEMBER(bnstars_state::ms32_pal0_ram_w)
339346{
340   bnstars_state *state = space->machine().driver_data<bnstars_state>();
341   COMBINE_DATA(&state->m_ms32_pal_ram[0][offset]);
342   update_color(space->machine(), offset/2, 0);
347   COMBINE_DATA(&m_ms32_pal_ram[0][offset]);
348   update_color(machine(), offset/2, 0);
343349}
344350
345static WRITE32_HANDLER( ms32_pal1_ram_w )
351WRITE32_MEMBER(bnstars_state::ms32_pal1_ram_w)
346352{
347   bnstars_state *state = space->machine().driver_data<bnstars_state>();
348   COMBINE_DATA(&state->m_ms32_pal_ram[1][offset]);
349   update_color(space->machine(), offset/2, 1);
353   COMBINE_DATA(&m_ms32_pal_ram[1][offset]);
354   update_color(machine(), offset/2, 1);
350355}
351356
352357
r14845r14846
479484
480485
481486
482static WRITE32_HANDLER( ms32_spramx_w )
487WRITE32_MEMBER(bnstars_state::ms32_spramx_w)
483488{
484   bnstars_state *state = space->machine().driver_data<bnstars_state>();
485   COMBINE_DATA(&state->m_ms32_spram[offset]);
489   COMBINE_DATA(&m_ms32_spram[offset]);
486490}
487491
488492
r14845r14846
12201224
12211225GFXDECODE_END
12221226
1223static READ32_HANDLER( bnstars1_r )
1227READ32_MEMBER(bnstars_state::bnstars1_r)
12241228{
1225   bnstars_state *state = space->machine().driver_data<bnstars_state>();
1226   switch (state->m_bnstars1_mahjong_select & 0x2080)
1229   switch (m_bnstars1_mahjong_select & 0x2080)
12271230   {
12281231      default:
1229         printf("unk bnstars1_r %08x\n",state->m_bnstars1_mahjong_select);
1232         printf("unk bnstars1_r %08x\n",m_bnstars1_mahjong_select);
12301233         return 0xffffffff;
12311234
12321235      case 0x0000:
1233         return input_port_read(space->machine(), "IN0");
1236         return input_port_read(machine(), "IN0");
12341237
12351238      case 0x0080:
1236         return input_port_read(space->machine(), "IN1");
1239         return input_port_read(machine(), "IN1");
12371240
12381241      case 0x2000:
1239         return input_port_read(space->machine(), "IN2");
1242         return input_port_read(machine(), "IN2");
12401243
12411244      case 0x2080:
1242         return input_port_read(space->machine(), "IN3");
1245         return input_port_read(machine(), "IN3");
12431246
12441247   }
12451248}
12461249
1247static READ32_HANDLER( bnstars2_r )
1250READ32_MEMBER(bnstars_state::bnstars2_r)
12481251{
1249   return input_port_read(space->machine(), "IN4");
1252   return input_port_read(machine(), "IN4");
12501253}
12511254
1252static READ32_HANDLER( bnstars3_r )
1255READ32_MEMBER(bnstars_state::bnstars3_r)
12531256{
1254   return input_port_read(space->machine(), "IN5");
1257   return input_port_read(machine(), "IN5");
12551258}
12561259
1257static WRITE32_HANDLER( bnstars1_mahjong_select_w )
1260WRITE32_MEMBER(bnstars_state::bnstars1_mahjong_select_w)
12581261{
1259   bnstars_state *state = space->machine().driver_data<bnstars_state>();
1260   state->m_bnstars1_mahjong_select = data;
1261//  printf("%08x\n",state->m_bnstars1_mahjong_select);
1262   m_bnstars1_mahjong_select = data;
1263//  printf("%08x\n",m_bnstars1_mahjong_select);
12621264}
12631265
12641266static ADDRESS_MAP_START( bnstars_map, AS_PROGRAM, 32, bnstars_state )
12651267   AM_RANGE(0x00000000, 0x001fffff) AM_ROM
12661268
1267   AM_RANGE(0xfcc00004, 0xfcc00007) AM_READ_LEGACY(bnstars1_r )
1268   AM_RANGE(0xfcc00008, 0xfcc0000b) AM_READ_LEGACY(bnstars2_r )
1269   AM_RANGE(0xfcc00010, 0xfcc00013) AM_READ_LEGACY(bnstars3_r )
1269   AM_RANGE(0xfcc00004, 0xfcc00007) AM_READ(bnstars1_r )
1270   AM_RANGE(0xfcc00008, 0xfcc0000b) AM_READ(bnstars2_r )
1271   AM_RANGE(0xfcc00010, 0xfcc00013) AM_READ(bnstars3_r )
12701272
12711273   AM_RANGE(0xfce00034, 0xfce00037) AM_WRITENOP
12721274
r14845r14846
12811283   AM_RANGE(0xfce00c00, 0xfce00c17) AM_WRITEONLY AM_BASE(m_ms32_tx1_scroll)
12821284   AM_RANGE(0xfce00c20, 0xfce00c37) AM_WRITEONLY AM_BASE(m_ms32_bg1_scroll)
12831285
1284   AM_RANGE(0xfce00e00, 0xfce00e03) AM_WRITE_LEGACY(bnstars1_mahjong_select_w) // ?
1286   AM_RANGE(0xfce00e00, 0xfce00e03) AM_WRITE(bnstars1_mahjong_select_w) // ?
12851287
12861288   /* wrote together */
12871289   AM_RANGE(0xfd040000, 0xfd047fff) AM_RAM // priority ram
12881290   AM_RANGE(0xfd080000, 0xfd087fff) AM_RAM
1289   AM_RANGE(0xfd200000, 0xfd237fff) AM_RAM_WRITE_LEGACY(ms32_pal1_ram_w) AM_BASE(m_ms32_pal_ram[1])
1290   AM_RANGE(0xfd400000, 0xfd437fff) AM_RAM_WRITE_LEGACY(ms32_pal0_ram_w) AM_BASE(m_ms32_pal_ram[0])
1291   AM_RANGE(0xfe000000, 0xfe01ffff) AM_RAM_WRITE_LEGACY(ms32_roz1_ram_w) AM_BASE(m_ms32_roz1_ram)
1292   AM_RANGE(0xfe400000, 0xfe41ffff) AM_RAM_WRITE_LEGACY(ms32_roz0_ram_w) AM_BASE(m_ms32_roz0_ram)
1293   AM_RANGE(0xfe800000, 0xfe83ffff) AM_RAM_WRITE_LEGACY(ms32_spramx_w) AM_BASE(m_ms32_spram)
1294   AM_RANGE(0xfea00000, 0xfea07fff) AM_RAM_WRITE_LEGACY(ms32_tx1_ram_w) AM_BASE(m_ms32_tx1_ram)
1295   AM_RANGE(0xfea08000, 0xfea0ffff) AM_RAM_WRITE_LEGACY(ms32_bg1_ram_w) AM_BASE(m_ms32_bg1_ram)
1296   AM_RANGE(0xfec00000, 0xfec07fff) AM_RAM_WRITE_LEGACY(ms32_tx0_ram_w) AM_BASE(m_ms32_tx0_ram)
1297   AM_RANGE(0xfec08000, 0xfec0ffff) AM_RAM_WRITE_LEGACY(ms32_bg0_ram_w) AM_BASE(m_ms32_bg0_ram)
1291   AM_RANGE(0xfd200000, 0xfd237fff) AM_RAM_WRITE(ms32_pal1_ram_w) AM_BASE(m_ms32_pal_ram[1])
1292   AM_RANGE(0xfd400000, 0xfd437fff) AM_RAM_WRITE(ms32_pal0_ram_w) AM_BASE(m_ms32_pal_ram[0])
1293   AM_RANGE(0xfe000000, 0xfe01ffff) AM_RAM_WRITE(ms32_roz1_ram_w) AM_BASE(m_ms32_roz1_ram)
1294   AM_RANGE(0xfe400000, 0xfe41ffff) AM_RAM_WRITE(ms32_roz0_ram_w) AM_BASE(m_ms32_roz0_ram)
1295   AM_RANGE(0xfe800000, 0xfe83ffff) AM_RAM_WRITE(ms32_spramx_w) AM_BASE(m_ms32_spram)
1296   AM_RANGE(0xfea00000, 0xfea07fff) AM_RAM_WRITE(ms32_tx1_ram_w) AM_BASE(m_ms32_tx1_ram)
1297   AM_RANGE(0xfea08000, 0xfea0ffff) AM_RAM_WRITE(ms32_bg1_ram_w) AM_BASE(m_ms32_bg1_ram)
1298   AM_RANGE(0xfec00000, 0xfec07fff) AM_RAM_WRITE(ms32_tx0_ram_w) AM_BASE(m_ms32_tx0_ram)
1299   AM_RANGE(0xfec08000, 0xfec0ffff) AM_RAM_WRITE(ms32_bg0_ram_w) AM_BASE(m_ms32_bg0_ram)
12981300
12991301   AM_RANGE(0xfee00000, 0xfee1ffff) AM_RAM
13001302   AM_RANGE(0xffe00000, 0xffffffff) AM_ROMBANK("bank1")
src/mame/drivers/dai3wksi.c
r14845r14846
6262   UINT8       m_port_last2;
6363   int         m_enabled_sound;
6464   int         m_sound3_counter;
65   DECLARE_WRITE8_MEMBER(dai3wksi_audio_1_w);
66   DECLARE_WRITE8_MEMBER(dai3wksi_audio_2_w);
67   DECLARE_WRITE8_MEMBER(dai3wksi_audio_3_w);
6568};
6669
6770
r14845r14846
194197
195198
196199#if (USE_SAMPLES)
197static WRITE8_HANDLER( dai3wksi_audio_1_w )
200WRITE8_MEMBER(dai3wksi_state::dai3wksi_audio_1_w)
198201{
199   dai3wksi_state *state = space->machine().driver_data<dai3wksi_state>();
200   samples_device *samples = space->machine().device<samples_device>("samples");
201   UINT8 rising_bits = data & ~state->m_port_last1;
202   samples_device *samples = machine().device<samples_device>("samples");
203   UINT8 rising_bits = data & ~m_port_last1;
202204
203   state->m_enabled_sound = data & 0x80;
205   m_enabled_sound = data & 0x80;
204206
205   if ((rising_bits & 0x20) && state->m_enabled_sound)
207   if ((rising_bits & 0x20) && m_enabled_sound)
206208   {
207209      if (data & 0x04)
208210         samples->start(CHANNEL_SOUND5, SAMPLE_SOUND5);
209211      else
210212         samples->start(CHANNEL_SOUND5, SAMPLE_SOUND5, true);
211213   }
212   if (!(data & 0x20) && (state->m_port_last1 & 0x20))
214   if (!(data & 0x20) && (m_port_last1 & 0x20))
213215      samples->stop(CHANNEL_SOUND5);
214216
215   state->m_port_last1 = data;
217   m_port_last1 = data;
216218}
217219
218static WRITE8_HANDLER( dai3wksi_audio_2_w )
220WRITE8_MEMBER(dai3wksi_state::dai3wksi_audio_2_w)
219221{
220   dai3wksi_state *state = space->machine().driver_data<dai3wksi_state>();
221   samples_device *samples = space->machine().device<samples_device>("samples");
222   UINT8 rising_bits = data & ~state->m_port_last2;
222   samples_device *samples = machine().device<samples_device>("samples");
223   UINT8 rising_bits = data & ~m_port_last2;
223224
224   state->m_dai3wksi_flipscreen = data & 0x10;
225   state->m_dai3wksi_redscreen  = ~data & 0x20;
226   state->m_dai3wksi_redterop   = data & 0x40;
225   m_dai3wksi_flipscreen = data & 0x10;
226   m_dai3wksi_redscreen  = ~data & 0x20;
227   m_dai3wksi_redterop   = data & 0x40;
227228
228   if (state->m_enabled_sound)
229   if (m_enabled_sound)
229230   {
230231      if (rising_bits & 0x01) samples->start(CHANNEL_SOUND1, SAMPLE_SOUND1);
231232      if (rising_bits & 0x02) samples->start(CHANNEL_SOUND2, SAMPLE_SOUND2);
232233      if (rising_bits & 0x08) samples->start(CHANNEL_SOUND4, SAMPLE_SOUND4);
233234      if (rising_bits & 0x04)
234235      {
235         if (!state->m_sound3_counter)
236         if (!m_sound3_counter)
236237            samples->start(CHANNEL_SOUND3, SAMPLE_SOUND3_1);
237238         else
238239            samples->start(CHANNEL_SOUND3, SAMPLE_SOUND3_2);
239240
240         state->m_sound3_counter ^= 1;
241         m_sound3_counter ^= 1;
241242      }
242243   }
243244
244   state->m_port_last2 = data;
245   m_port_last2 = data;
245246}
246247
247static WRITE8_HANDLER( dai3wksi_audio_3_w )
248WRITE8_MEMBER(dai3wksi_state::dai3wksi_audio_3_w)
248249{
249   dai3wksi_state *state = space->machine().driver_data<dai3wksi_state>();
250   samples_device *samples = space->machine().device<samples_device>("samples");
250   samples_device *samples = machine().device<samples_device>("samples");
251251
252   if (state->m_enabled_sound)
252   if (m_enabled_sound)
253253   {
254254      if (data & 0x40)
255255         samples->start(CHANNEL_SOUND6, SAMPLE_SOUND6_1);
r14845r14846
282282
283283#else
284284
285static WRITE8_HANDLER( dai3wksi_audio_1_w )
285WRITE8_MEMBER(dai3wksi_state::dai3wksi_audio_1_w)
286286{
287   device_t *ic79 = space->machine().device("ic79");
287   device_t *ic79 = machine().device("ic79");
288288
289   space->machine().sound().system_enable(data & 0x80);
289   machine().sound().system_enable(data & 0x80);
290290
291291   sn76477_enable_w(ic79, (~data >> 5) & 0x01);      /* invader movement enable */
292292   sn76477_envelope_1_w(ic79, (~data >> 2) & 0x01);   /* invader movement envelope control*/
293293}
294294
295static WRITE8_HANDLER( dai3wksi_audio_2_w )
295WRITE8_MEMBER(dai3wksi_state::dai3wksi_audio_2_w)
296296{
297297
298   dai3wksi_state *state = space->machine().driver_data<dai3wksi_state>();
299   device_t *ic77 = space->machine().device("ic77");
300   device_t *ic78 = space->machine().device("ic78");
301   device_t *ic80 = space->machine().device("ic80");
298   device_t *ic77 = machine().device("ic77");
299   device_t *ic78 = machine().device("ic78");
300   device_t *ic80 = machine().device("ic80");
302301
303   state->m_dai3wksi_flipscreen =  data & 0x10;
304   state->m_dai3wksi_redscreen  = ~data & 0x20;
305   state->m_dai3wksi_redterop   =  data & 0x40;
302   m_dai3wksi_flipscreen =  data & 0x10;
303   m_dai3wksi_redscreen  = ~data & 0x20;
304   m_dai3wksi_redterop   =  data & 0x40;
306305
307306   sn76477_enable_w(ic77, (~data >> 0) & 0x01);   /* ship movement */
308307   sn76477_enable_w(ic78, (~data >> 1) & 0x01);   /* danger text */
r14845r14846
310309   sn76477_enable_w(ic80, (~data >> 3) & 0x01);   /* planet explosion */
311310}
312311
313static WRITE8_HANDLER( dai3wksi_audio_3_w )
312WRITE8_MEMBER(dai3wksi_state::dai3wksi_audio_3_w)
314313{
315   device_t *ic81 = space->machine().device("ic81");
314   device_t *ic81 = machine().device("ic81");
316315
317316   sn76477_enable_w(ic81, (~data >> 2) & 0x01);   /* player shoot enable */
318317   sn76477_vco_w(ic81, (~data >> 3) & 0x01);      /* player shoot vco control */
r14845r14846
507506   AM_RANGE(0x2000, 0x23ff) AM_RAM
508507   AM_RANGE(0x2400, 0x24ff) AM_MIRROR(0x100) AM_READ_PORT("IN0")
509508   AM_RANGE(0x2800, 0x28ff) AM_MIRROR(0x100) AM_READ_PORT("IN1")
510   AM_RANGE(0x3000, 0x3000) AM_WRITE_LEGACY(dai3wksi_audio_1_w)
511   AM_RANGE(0x3400, 0x3400) AM_WRITE_LEGACY(dai3wksi_audio_2_w)
512   AM_RANGE(0x3800, 0x3800) AM_WRITE_LEGACY(dai3wksi_audio_3_w)
509   AM_RANGE(0x3000, 0x3000) AM_WRITE(dai3wksi_audio_1_w)
510   AM_RANGE(0x3400, 0x3400) AM_WRITE(dai3wksi_audio_2_w)
511   AM_RANGE(0x3800, 0x3800) AM_WRITE(dai3wksi_audio_3_w)
513512   AM_RANGE(0x8000, 0xbfff) AM_RAM AM_BASE_SIZE(m_dai3wksi_videoram, m_dai3wksi_videoram_size)
514513ADDRESS_MAP_END
515514
src/mame/drivers/diverboy.c
r14845r14846
6666
6767   /* devices */
6868   device_t *m_audiocpu;
69   DECLARE_WRITE16_MEMBER(soundcmd_w);
6970};
7071
7172
r14845r14846
117118}
118119
119120
120static WRITE16_HANDLER( soundcmd_w )
121WRITE16_MEMBER(diverboy_state::soundcmd_w)
121122{
122   diverboy_state *state = space->machine().driver_data<diverboy_state>();
123123
124124   if (ACCESSING_BITS_0_7)
125125   {
126126      soundlatch_w(space, 0, data & 0xff);
127      device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
127      device_set_input_line(m_audiocpu, 0, HOLD_LINE);
128128   }
129129}
130130
r14845r14846
143143   AM_RANGE(0x000000, 0x03ffff) AM_ROM
144144   AM_RANGE(0x040000, 0x04ffff) AM_RAM
145145   AM_RANGE(0x080000, 0x083fff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
146   AM_RANGE(0x100000, 0x100001) AM_WRITE_LEGACY(soundcmd_w)
146   AM_RANGE(0x100000, 0x100001) AM_WRITE(soundcmd_w)
147147   AM_RANGE(0x140000, 0x1407ff) AM_WRITE_LEGACY(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
148148   AM_RANGE(0x180000, 0x180001) AM_READ_PORT("P1_P2")
149149   AM_RANGE(0x180002, 0x180003) AM_READ_PORT("DSW")
src/mame/drivers/firefox.c
r14845r14846
5757   UINT8 m_main_to_sound_flag;
5858   int m_sprite_bank;
5959   UINT8 *m_spriteram;
60   DECLARE_READ8_MEMBER(firefox_disc_status_r);
61   DECLARE_READ8_MEMBER(firefox_disc_data_r);
62   DECLARE_WRITE8_MEMBER(firefox_disc_read_w);
63   DECLARE_WRITE8_MEMBER(firefox_disc_lock_w);
64   DECLARE_WRITE8_MEMBER(audio_enable_w);
65   DECLARE_WRITE8_MEMBER(firefox_disc_reset_w);
66   DECLARE_WRITE8_MEMBER(firefox_disc_write_w);
67   DECLARE_WRITE8_MEMBER(firefox_disc_data_w);
68   DECLARE_WRITE8_MEMBER(tileram_w);
69   DECLARE_WRITE8_MEMBER(tile_palette_w);
70   DECLARE_WRITE8_MEMBER(sprite_palette_w);
71   DECLARE_WRITE8_MEMBER(firefox_objram_bank_w);
72   DECLARE_READ8_MEMBER(sound_to_main_r);
73   DECLARE_WRITE8_MEMBER(main_to_sound_w);
74   DECLARE_WRITE8_MEMBER(sound_reset_w);
75   DECLARE_READ8_MEMBER(main_to_sound_r);
76   DECLARE_WRITE8_MEMBER(sound_to_main_w);
77   DECLARE_READ8_MEMBER(adc_r);
78   DECLARE_WRITE8_MEMBER(adc_select_w);
79   DECLARE_WRITE8_MEMBER(nvram_w);
80   DECLARE_READ8_MEMBER(nvram_r);
81   DECLARE_WRITE8_MEMBER(novram_recall_w);
82   DECLARE_WRITE8_MEMBER(novram_store_w);
83   DECLARE_WRITE8_MEMBER(rom_bank_w);
84   DECLARE_WRITE8_MEMBER(main_irq_clear_w);
85   DECLARE_WRITE8_MEMBER(main_firq_clear_w);
86   DECLARE_WRITE8_MEMBER(self_reset_w);
87   DECLARE_WRITE8_MEMBER(led_w);
88   DECLARE_WRITE8_MEMBER(firefox_coin_counter_w);
6089};
6190
6291
r14845r14846
88117   40 = DISKFULL - Active low
89118   80 = DISKDAV - Active low data available
90119   */
91static READ8_HANDLER( firefox_disc_status_r )
120READ8_MEMBER(firefox_state::firefox_disc_status_r)
92121{
93   firefox_state *state = space->machine().driver_data<firefox_state>();
94122   UINT8 result = 0xff;
95123
96124   result ^= 0x20;
97   if (!state->m_laserdisc->ready_r())
125   if (!m_laserdisc->ready_r())
98126      result ^= 0x40;
99   if (state->m_laserdisc->data_available_r())
127   if (m_laserdisc->data_available_r())
100128      result ^= 0x80;
101129
102130   return result;
r14845r14846
104132
105133/* 4105 - DREAD */
106134/* this reset RDDSK (&DSKRD) */
107static READ8_HANDLER( firefox_disc_data_r )
135READ8_MEMBER(firefox_state::firefox_disc_data_r)
108136{
109   firefox_state *state = space->machine().driver_data<firefox_state>();
110   return state->m_n_disc_read_data;
137   return m_n_disc_read_data;
111138}
112139
113140/* DISK READ ENABLE */
114141/* 4218 - DSKREAD, set RDDSK */
115static WRITE8_HANDLER( firefox_disc_read_w )
142WRITE8_MEMBER(firefox_state::firefox_disc_read_w)
116143{
117   firefox_state *state = space->machine().driver_data<firefox_state>();
118   state->m_n_disc_read_data = state->m_laserdisc->data_r();
144   m_n_disc_read_data = m_laserdisc->data_r();
119145}
120146
121static WRITE8_HANDLER( firefox_disc_lock_w )
147WRITE8_MEMBER(firefox_state::firefox_disc_lock_w)
122148{
123   firefox_state *state = space->machine().driver_data<firefox_state>();
124   state->m_n_disc_lock = data & 0x80;
149   m_n_disc_lock = data & 0x80;
125150}
126151
127static WRITE8_HANDLER( audio_enable_w )
152WRITE8_MEMBER(firefox_state::audio_enable_w)
128153{
129   firefox_state *state = space->machine().driver_data<firefox_state>();
130   state->m_laserdisc->set_output_gain(~offset & 1, (data & 0x80) ? 1.0 : 0.0);
154   m_laserdisc->set_output_gain(~offset & 1, (data & 0x80) ? 1.0 : 0.0);
131155}
132156
133static WRITE8_HANDLER( firefox_disc_reset_w )
157WRITE8_MEMBER(firefox_state::firefox_disc_reset_w)
134158{
135   firefox_state *state = space->machine().driver_data<firefox_state>();
136   state->m_laserdisc->reset_w((data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
159   m_laserdisc->reset_w((data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
137160}
138161
139162/* active low on dbb7 */
140static WRITE8_HANDLER( firefox_disc_write_w )
163WRITE8_MEMBER(firefox_state::firefox_disc_write_w)
141164{
142   firefox_state *state = space->machine().driver_data<firefox_state>();
143165   if ( ( data & 0x80 ) == 0 )
144      state->m_laserdisc->data_w(state->m_n_disc_data);
166      m_laserdisc->data_w(m_n_disc_data);
145167}
146168
147169/* latch the data */
148static WRITE8_HANDLER( firefox_disc_data_w )
170WRITE8_MEMBER(firefox_state::firefox_disc_data_w)
149171{
150   firefox_state *state = space->machine().driver_data<firefox_state>();
151   state->m_n_disc_data = data;
172   m_n_disc_data = data;
152173}
153174
154175
r14845r14846
167188}
168189
169190
170static WRITE8_HANDLER( tileram_w )
191WRITE8_MEMBER(firefox_state::tileram_w)
171192{
172   firefox_state *state = space->machine().driver_data<firefox_state>();
173   state->m_tileram[offset] = data;
174   state->m_bgtiles->mark_tile_dirty(offset);
193   m_tileram[offset] = data;
194   m_bgtiles->mark_tile_dirty(offset);
175195}
176196
177197
r14845r14846
237257   palette_set_color( machine, start + index, MAKE_ARGB( a, r, g, b ) );
238258}
239259
240static WRITE8_HANDLER( tile_palette_w )
260WRITE8_MEMBER(firefox_state::tile_palette_w)
241261{
242   firefox_state *state = space->machine().driver_data<firefox_state>();
243   state->m_tile_palette[ offset ] = data;
244   set_rgba( space->machine(), 0, offset & 0xff, state->m_tile_palette );
262   m_tile_palette[ offset ] = data;
263   set_rgba( machine(), 0, offset & 0xff, m_tile_palette );
245264}
246265
247static WRITE8_HANDLER( sprite_palette_w )
266WRITE8_MEMBER(firefox_state::sprite_palette_w)
248267{
249   firefox_state *state = space->machine().driver_data<firefox_state>();
250   state->m_sprite_palette[ offset ] = data;
251   set_rgba( space->machine(), 256, offset & 0xff, state->m_sprite_palette );
268   m_sprite_palette[ offset ] = data;
269   set_rgba( machine(), 256, offset & 0xff, m_sprite_palette );
252270}
253271
254static WRITE8_HANDLER( firefox_objram_bank_w )
272WRITE8_MEMBER(firefox_state::firefox_objram_bank_w)
255273{
256   firefox_state *state = space->machine().driver_data<firefox_state>();
257   state->m_sprite_bank = data & 0x03;
274   m_sprite_bank = data & 0x03;
258275}
259276
260277
r14845r14846
277294   return state->m_sound_to_main_flag;
278295}
279296
280static READ8_HANDLER( sound_to_main_r )
297READ8_MEMBER(firefox_state::sound_to_main_r)
281298{
282   firefox_state *state = space->machine().driver_data<firefox_state>();
283   state->m_sound_to_main_flag = 0;
299   m_sound_to_main_flag = 0;
284300   return soundlatch2_r(space, 0);
285301}
286302
287static WRITE8_HANDLER( main_to_sound_w )
303WRITE8_MEMBER(firefox_state::main_to_sound_w)
288304{
289   firefox_state *state = space->machine().driver_data<firefox_state>();
290   state->m_main_to_sound_flag = 1;
305   m_main_to_sound_flag = 1;
291306   soundlatch_w(space, 0, data);
292   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
307   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
293308}
294309
295static WRITE8_HANDLER( sound_reset_w )
310WRITE8_MEMBER(firefox_state::sound_reset_w)
296311{
297   firefox_state *state = space->machine().driver_data<firefox_state>();
298   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
312   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
299313   if ((data & 0x80) != 0)
300      state->m_sound_to_main_flag = state->m_main_to_sound_flag = 0;
314      m_sound_to_main_flag = m_main_to_sound_flag = 0;
301315}
302316
303static READ8_HANDLER( main_to_sound_r )
317READ8_MEMBER(firefox_state::main_to_sound_r)
304318{
305   firefox_state *state = space->machine().driver_data<firefox_state>();
306   state->m_main_to_sound_flag = 0;
319   m_main_to_sound_flag = 0;
307320   return soundlatch_r(space, 0);
308321}
309322
310static WRITE8_HANDLER( sound_to_main_w )
323WRITE8_MEMBER(firefox_state::sound_to_main_w)
311324{
312   firefox_state *state = space->machine().driver_data<firefox_state>();
313   state->m_sound_to_main_flag = 1;
325   m_sound_to_main_flag = 1;
314326   soundlatch2_w(space, 0, data);
315327}
316328
r14845r14846
361373 *
362374 *************************************/
363375
364static READ8_HANDLER( adc_r )
376READ8_MEMBER(firefox_state::adc_r)
365377{
366   firefox_state *state = space->machine().driver_data<firefox_state>();
367   if( state->m_control_num == 0 )
378   if( m_control_num == 0 )
368379   {
369      return input_port_read( space->machine(), "PITCH" );
380      return input_port_read( machine(), "PITCH" );
370381   }
371382
372   return input_port_read( space->machine(), "YAW" );
383   return input_port_read( machine(), "YAW" );
373384}
374385
375static WRITE8_HANDLER( adc_select_w )
386WRITE8_MEMBER(firefox_state::adc_select_w)
376387{
377   firefox_state *state = space->machine().driver_data<firefox_state>();
378   state->m_control_num = offset;
388   m_control_num = offset;
379389}
380390
381391
r14845r14846
386396 *
387397 *************************************/
388398
389static WRITE8_HANDLER( nvram_w )
399WRITE8_MEMBER(firefox_state::nvram_w)
390400{
391   firefox_state *state = space->machine().driver_data<firefox_state>();
392   state->m_nvram_1c->write(*space, offset, data >> 4);
393   state->m_nvram_1d->write(*space, offset, data & 0xf);
401   m_nvram_1c->write(*&space, offset, data >> 4);
402   m_nvram_1d->write(*&space, offset, data & 0xf);
394403}
395404
396static READ8_HANDLER( nvram_r )
405READ8_MEMBER(firefox_state::nvram_r)
397406{
398   firefox_state *state = space->machine().driver_data<firefox_state>();
399   return (state->m_nvram_1c->read(*space, offset) << 4) | (state->m_nvram_1d->read(*space, offset) & 0x0f);
407   return (m_nvram_1c->read(*&space, offset) << 4) | (m_nvram_1d->read(*&space, offset) & 0x0f);
400408}
401409
402static WRITE8_HANDLER( novram_recall_w )
410WRITE8_MEMBER(firefox_state::novram_recall_w)
403411{
404   firefox_state *state = space->machine().driver_data<firefox_state>();
405   state->m_nvram_1c->recall(data & 0x80);
406   state->m_nvram_1d->recall(data & 0x80);
412   m_nvram_1c->recall(data & 0x80);
413   m_nvram_1d->recall(data & 0x80);
407414}
408415
409static WRITE8_HANDLER( novram_store_w )
416WRITE8_MEMBER(firefox_state::novram_store_w)
410417{
411   firefox_state *state = space->machine().driver_data<firefox_state>();
412   state->m_nvram_1c->store(data & 0x80);
413   state->m_nvram_1d->store(data & 0x80);
418   m_nvram_1c->store(data & 0x80);
419   m_nvram_1d->store(data & 0x80);
414420}
415421
416422
r14845r14846
421427 *
422428 *************************************/
423429
424static WRITE8_HANDLER( rom_bank_w )
430WRITE8_MEMBER(firefox_state::rom_bank_w)
425431{
426   memory_set_bank(space->machine(), "bank1", data & 0x1f);
432   memory_set_bank(machine(), "bank1", data & 0x1f);
427433}
428434
429static WRITE8_HANDLER( main_irq_clear_w )
435WRITE8_MEMBER(firefox_state::main_irq_clear_w)
430436{
431    cputag_set_input_line( space->machine(), "maincpu", M6809_IRQ_LINE, CLEAR_LINE );
437    cputag_set_input_line( machine(), "maincpu", M6809_IRQ_LINE, CLEAR_LINE );
432438}
433439
434static WRITE8_HANDLER( main_firq_clear_w )
440WRITE8_MEMBER(firefox_state::main_firq_clear_w)
435441{
436    cputag_set_input_line( space->machine(), "maincpu", M6809_FIRQ_LINE, CLEAR_LINE );
442    cputag_set_input_line( machine(), "maincpu", M6809_FIRQ_LINE, CLEAR_LINE );
437443}
438444
439static WRITE8_HANDLER( self_reset_w )
445WRITE8_MEMBER(firefox_state::self_reset_w)
440446{
441   cputag_set_input_line( space->machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE );
447   cputag_set_input_line( machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE );
442448}
443449
444450
r14845r14846
449455 *
450456 *************************************/
451457
452static WRITE8_HANDLER( led_w )
458WRITE8_MEMBER(firefox_state::led_w)
453459{
454    set_led_status( space->machine(), offset, ( data & 0x80 ) == 0 );
460    set_led_status( machine(), offset, ( data & 0x80 ) == 0 );
455461}
456462
457static WRITE8_HANDLER( firefox_coin_counter_w )
463WRITE8_MEMBER(firefox_state::firefox_coin_counter_w)
458464{
459   coin_counter_w( space->machine(), offset, data & 0x80 );
465   coin_counter_w( machine(), offset, data & 0x80 );
460466}
461467
462468
r14845r14846
490496
491497static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, firefox_state )
492498   AM_RANGE(0x0000, 0x0fff) AM_RAM
493   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE_LEGACY(tileram_w) AM_BASE(m_tileram)
499   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(tileram_w) AM_BASE(m_tileram)
494500   AM_RANGE(0x2000, 0x27ff) AM_RAM AM_BASE(m_spriteram)
495   AM_RANGE(0x2800, 0x2aff) AM_RAM_WRITE_LEGACY(sprite_palette_w) AM_BASE(m_sprite_palette)
496   AM_RANGE(0x2b00, 0x2b00) AM_MIRROR(0x04ff) AM_WRITE_LEGACY(firefox_objram_bank_w)
497   AM_RANGE(0x2c00, 0x2eff) AM_RAM_WRITE_LEGACY(tile_palette_w) AM_BASE(m_tile_palette)
501   AM_RANGE(0x2800, 0x2aff) AM_RAM_WRITE(sprite_palette_w) AM_BASE(m_sprite_palette)
502   AM_RANGE(0x2b00, 0x2b00) AM_MIRROR(0x04ff) AM_WRITE(firefox_objram_bank_w)
503   AM_RANGE(0x2c00, 0x2eff) AM_RAM_WRITE(tile_palette_w) AM_BASE(m_tile_palette)
498504   AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("bank1")
499   AM_RANGE(0x4000, 0x40ff) AM_READWRITE_LEGACY(nvram_r, nvram_w)                  /* NOVRAM */
505   AM_RANGE(0x4000, 0x40ff) AM_READWRITE(nvram_r, nvram_w)                  /* NOVRAM */
500506   AM_RANGE(0x4100, 0x4100) AM_MIRROR(0x00f8) AM_READ_PORT("rdin0")         /* RDIN0 */
501507   AM_RANGE(0x4101, 0x4101) AM_MIRROR(0x00f8) AM_READ_PORT("rdin1")         /* RDIN1 */
502   AM_RANGE(0x4102, 0x4102) AM_MIRROR(0x00f8) AM_READ_LEGACY(firefox_disc_status_r)   /* RDIN2 */
508   AM_RANGE(0x4102, 0x4102) AM_MIRROR(0x00f8) AM_READ(firefox_disc_status_r)   /* RDIN2 */
503509   AM_RANGE(0x4103, 0x4103) AM_MIRROR(0x00f8) AM_READ_PORT("opt0")            /* OPT0 */
504510   AM_RANGE(0x4104, 0x4104) AM_MIRROR(0x00f8) AM_READ_PORT("opt1")            /* OPT1 */
505   AM_RANGE(0x4105, 0x4105) AM_MIRROR(0x00f8) AM_READ_LEGACY(firefox_disc_data_r)      /* DREAD */
506   AM_RANGE(0x4106, 0x4106) AM_MIRROR(0x00f8) AM_READ_LEGACY(sound_to_main_r)         /* RDSOUND */
507   AM_RANGE(0x4107, 0x4107) AM_MIRROR(0x00f8) AM_READ_LEGACY(adc_r)               /* ADC */
508   AM_RANGE(0x4200, 0x4200) AM_MIRROR(0x0047) AM_WRITE_LEGACY(main_irq_clear_w)      /* RSTIRQ */
509   AM_RANGE(0x4208, 0x4208) AM_MIRROR(0x0047) AM_WRITE_LEGACY(main_firq_clear_w)      /* RSTFIRQ */
511   AM_RANGE(0x4105, 0x4105) AM_MIRROR(0x00f8) AM_READ(firefox_disc_data_r)      /* DREAD */
512   AM_RANGE(0x4106, 0x4106) AM_MIRROR(0x00f8) AM_READ(sound_to_main_r)         /* RDSOUND */
513   AM_RANGE(0x4107, 0x4107) AM_MIRROR(0x00f8) AM_READ(adc_r)               /* ADC */
514   AM_RANGE(0x4200, 0x4200) AM_MIRROR(0x0047) AM_WRITE(main_irq_clear_w)      /* RSTIRQ */
515   AM_RANGE(0x4208, 0x4208) AM_MIRROR(0x0047) AM_WRITE(main_firq_clear_w)      /* RSTFIRQ */
510516   AM_RANGE(0x4210, 0x4210) AM_MIRROR(0x0047) AM_WRITE_LEGACY(watchdog_reset_w)      /* WDCLK */
511   AM_RANGE(0x4218, 0x4218) AM_MIRROR(0x0047) AM_WRITE_LEGACY(firefox_disc_read_w)   /* DSKREAD */
512   AM_RANGE(0x4220, 0x4223) AM_MIRROR(0x0044) AM_WRITE_LEGACY(adc_select_w)         /* ADCSTART */
513   AM_RANGE(0x4230, 0x4230) AM_MIRROR(0x0047) AM_WRITE_LEGACY(self_reset_w)         /* AMUCK */
514   AM_RANGE(0x4280, 0x4280) AM_MIRROR(0x0040) AM_WRITE_LEGACY(novram_recall_w)      /* LATCH0 -> NVRECALL */
515   AM_RANGE(0x4281, 0x4281) AM_MIRROR(0x0040) AM_WRITE_LEGACY(sound_reset_w)         /* LATCH0 -> RSTSOUND */
516   AM_RANGE(0x4282, 0x4282) AM_MIRROR(0x0040) AM_WRITE_LEGACY(novram_store_w)         /* LATCH0 -> NVRSTORE */
517   AM_RANGE(0x4283, 0x4283) AM_MIRROR(0x0040) AM_WRITE_LEGACY(firefox_disc_lock_w)   /* LATCH0 -> LOCK */
518   AM_RANGE(0x4284, 0x4285) AM_MIRROR(0x0040) AM_WRITE_LEGACY(audio_enable_w)         /* LATCH0 -> SWDSKR, SWDSKL */
519   AM_RANGE(0x4286, 0x4286) AM_MIRROR(0x0040) AM_WRITE_LEGACY(firefox_disc_reset_w)   /* LATCH0 -> RSTDSK */
520   AM_RANGE(0x4287, 0x4287) AM_MIRROR(0x0040) AM_WRITE_LEGACY(firefox_disc_write_w)   /* LATCH0 -> WRDSK */
521   AM_RANGE(0x4288, 0x4289) AM_MIRROR(0x0040) AM_WRITE_LEGACY(firefox_coin_counter_w)   /* LATCH1 -> COIN COUNTERR, COUNTERL */
522   AM_RANGE(0x428c, 0x428f) AM_MIRROR(0x0040) AM_WRITE_LEGACY(led_w)               /* LATCH1 -> LEDs */
523   AM_RANGE(0x4290, 0x4290) AM_MIRROR(0x0047) AM_WRITE_LEGACY(rom_bank_w)            /* WRTREG */
524   AM_RANGE(0x4298, 0x4298) AM_MIRROR(0x0047) AM_WRITE_LEGACY(main_to_sound_w)      /* WRSOUND */
525   AM_RANGE(0x42a0, 0x42a0) AM_MIRROR(0x0047) AM_WRITE_LEGACY(firefox_disc_data_w)   /* DSKLATCH */
517   AM_RANGE(0x4218, 0x4218) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_read_w)   /* DSKREAD */
518   AM_RANGE(0x4220, 0x4223) AM_MIRROR(0x0044) AM_WRITE(adc_select_w)         /* ADCSTART */
519   AM_RANGE(0x4230, 0x4230) AM_MIRROR(0x0047) AM_WRITE(self_reset_w)         /* AMUCK */
520   AM_RANGE(0x4280, 0x4280) AM_MIRROR(0x0040) AM_WRITE(novram_recall_w)      /* LATCH0 -> NVRECALL */
521   AM_RANGE(0x4281, 0x4281) AM_MIRROR(0x0040) AM_WRITE(sound_reset_w)         /* LATCH0 -> RSTSOUND */
522   AM_RANGE(0x4282, 0x4282) AM_MIRROR(0x0040) AM_WRITE(novram_store_w)         /* LATCH0 -> NVRSTORE */
523   AM_RANGE(0x4283, 0x4283) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_lock_w)   /* LATCH0 -> LOCK */
524   AM_RANGE(0x4284, 0x4285) AM_MIRROR(0x0040) AM_WRITE(audio_enable_w)         /* LATCH0 -> SWDSKR, SWDSKL */
525   AM_RANGE(0x4286, 0x4286) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_reset_w)   /* LATCH0 -> RSTDSK */
526   AM_RANGE(0x4287, 0x4287) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_write_w)   /* LATCH0 -> WRDSK */
527   AM_RANGE(0x4288, 0x4289) AM_MIRROR(0x0040) AM_WRITE(firefox_coin_counter_w)   /* LATCH1 -> COIN COUNTERR, COUNTERL */
528   AM_RANGE(0x428c, 0x428f) AM_MIRROR(0x0040) AM_WRITE(led_w)               /* LATCH1 -> LEDs */
529   AM_RANGE(0x4290, 0x4290) AM_MIRROR(0x0047) AM_WRITE(rom_bank_w)            /* WRTREG */
530   AM_RANGE(0x4298, 0x4298) AM_MIRROR(0x0047) AM_WRITE(main_to_sound_w)      /* WRSOUND */
531   AM_RANGE(0x42a0, 0x42a0) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_data_w)   /* DSKLATCH */
526532   AM_RANGE(0x4400, 0xffff) AM_ROM
527533ADDRESS_MAP_END
528534
r14845r14846
538544   AM_RANGE(0x0000, 0x07ff) AM_RAM
539545   AM_RANGE(0x0800, 0x087f) AM_MIRROR(0x0700) AM_RAM /* RIOT ram */
540546   AM_RANGE(0x0880, 0x089f) AM_MIRROR(0x07e0) AM_DEVREADWRITE_LEGACY("riot",riot6532_r, riot6532_w)
541   AM_RANGE(0x1000, 0x1000) AM_READ_LEGACY(main_to_sound_r)
542   AM_RANGE(0x1800, 0x1800) AM_WRITE_LEGACY(sound_to_main_w)
547   AM_RANGE(0x1000, 0x1000) AM_READ(main_to_sound_r)
548   AM_RANGE(0x1800, 0x1800) AM_WRITE(sound_to_main_w)
543549   AM_RANGE(0x2000, 0x200f) AM_DEVREADWRITE_LEGACY("pokey1", pokey_r, pokey_w)
544550   AM_RANGE(0x2800, 0x280f) AM_DEVREADWRITE_LEGACY("pokey2", pokey_r, pokey_w)
545551   AM_RANGE(0x3000, 0x300f) AM_DEVREADWRITE_LEGACY("pokey3", pokey_r, pokey_w)
src/mame/drivers/deco156.c
r14845r14846
4141   UINT16   m_pf1_rowscroll[0x800/2];
4242   UINT16   m_pf2_rowscroll[0x800/2];
4343   UINT16* m_spriteram;
44   DECLARE_WRITE32_MEMBER(hvysmsh_eeprom_w);
45   DECLARE_WRITE32_MEMBER(wcvol95_nonbuffered_palette_w);
46   DECLARE_WRITE32_MEMBER(deco156_nonbuffered_palette_w);
47   DECLARE_READ32_MEMBER(wcvol95_pf1_rowscroll_r);
48   DECLARE_READ32_MEMBER(wcvol95_pf2_rowscroll_r);
49   DECLARE_READ32_MEMBER(wcvol95_spriteram_r);
50   DECLARE_WRITE32_MEMBER(wcvol95_pf1_rowscroll_w);
51   DECLARE_WRITE32_MEMBER(wcvol95_pf2_rowscroll_w);
52   DECLARE_WRITE32_MEMBER(wcvol95_spriteram_w);
4453};
4554
4655
r14845r14846
7685
7786/***************************************************************************/
7887
79static WRITE32_HANDLER(hvysmsh_eeprom_w)
88WRITE32_MEMBER(deco156_state::hvysmsh_eeprom_w)
8089{
81   deco156_state *state = space->machine().driver_data<deco156_state>();
8290   if (ACCESSING_BITS_0_7)
8391   {
84      state->m_oki2->set_bank_base(0x40000 * (data & 0x7));
85      input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
92      m_oki2->set_bank_base(0x40000 * (data & 0x7));
93      input_port_write(machine(), "EEPROMOUT", data, 0xff);
8694   }
8795}
8896
r14845r14846
92100   oki->set_bank_base((data & 1) * 0x40000);
93101}
94102
95static WRITE32_HANDLER(wcvol95_nonbuffered_palette_w)
103WRITE32_MEMBER(deco156_state::wcvol95_nonbuffered_palette_w)
96104{
97   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
98   palette_set_color_rgb(space->machine(),offset,pal5bit(space->machine().generic.paletteram.u32[offset] >> 0),pal5bit(space->machine().generic.paletteram.u32[offset] >> 5),pal5bit(space->machine().generic.paletteram.u32[offset] >> 10));
105   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
106   palette_set_color_rgb(machine(),offset,pal5bit(machine().generic.paletteram.u32[offset] >> 0),pal5bit(machine().generic.paletteram.u32[offset] >> 5),pal5bit(machine().generic.paletteram.u32[offset] >> 10));
99107}
100108
101109/* This is the same as deco32_nonbuffered_palette_w in video/deco32.c */
102static WRITE32_HANDLER( deco156_nonbuffered_palette_w )
110WRITE32_MEMBER(deco156_state::deco156_nonbuffered_palette_w)
103111{
104112   int r,g,b;
105113
106   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
114   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
107115
108   b = (space->machine().generic.paletteram.u32[offset] >>16) & 0xff;
109   g = (space->machine().generic.paletteram.u32[offset] >> 8) & 0xff;
110   r = (space->machine().generic.paletteram.u32[offset] >> 0) & 0xff;
116   b = (machine().generic.paletteram.u32[offset] >>16) & 0xff;
117   g = (machine().generic.paletteram.u32[offset] >> 8) & 0xff;
118   r = (machine().generic.paletteram.u32[offset] >> 0) & 0xff;
111119
112   palette_set_color(space->machine(),offset,MAKE_RGB(r,g,b));
120   palette_set_color(machine(),offset,MAKE_RGB(r,g,b));
113121}
114122
115static READ32_HANDLER( wcvol95_pf1_rowscroll_r ) { deco156_state *state = space->machine().driver_data<deco156_state>(); return state->m_pf1_rowscroll[offset] ^ 0xffff0000; }
116static READ32_HANDLER( wcvol95_pf2_rowscroll_r ) { deco156_state *state = space->machine().driver_data<deco156_state>();   return state->m_pf2_rowscroll[offset] ^ 0xffff0000; }
117static READ32_HANDLER( wcvol95_spriteram_r )     { deco156_state *state = space->machine().driver_data<deco156_state>(); return state->m_spriteram[offset] ^ 0xffff0000; }
118static WRITE32_HANDLER( wcvol95_pf1_rowscroll_w ) { deco156_state *state = space->machine().driver_data<deco156_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf1_rowscroll[offset]); }
119static WRITE32_HANDLER( wcvol95_pf2_rowscroll_w ) { deco156_state *state = space->machine().driver_data<deco156_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf2_rowscroll[offset]); }
120static WRITE32_HANDLER( wcvol95_spriteram_w )    { deco156_state *state = space->machine().driver_data<deco156_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff;   COMBINE_DATA(&state->m_spriteram[offset]); }
123READ32_MEMBER(deco156_state::wcvol95_pf1_rowscroll_r){ return m_pf1_rowscroll[offset] ^ 0xffff0000; }
124READ32_MEMBER(deco156_state::wcvol95_pf2_rowscroll_r){ return m_pf2_rowscroll[offset] ^ 0xffff0000; }
125READ32_MEMBER(deco156_state::wcvol95_spriteram_r){ return m_spriteram[offset] ^ 0xffff0000; }
126WRITE32_MEMBER(deco156_state::wcvol95_pf1_rowscroll_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf1_rowscroll[offset]); }
127WRITE32_MEMBER(deco156_state::wcvol95_pf2_rowscroll_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf2_rowscroll[offset]); }
128WRITE32_MEMBER(deco156_state::wcvol95_spriteram_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff;   COMBINE_DATA(&m_spriteram[offset]); }
121129
122130
123131static ADDRESS_MAP_START( hvysmsh_map, AS_PROGRAM, 32, deco156_state )
r14845r14846
125133   AM_RANGE(0x100000, 0x107fff) AM_RAM
126134   AM_RANGE(0x120000, 0x120003) AM_READ_PORT("INPUTS")
127135   AM_RANGE(0x120000, 0x120003) AM_WRITENOP // Volume control in low byte
128   AM_RANGE(0x120004, 0x120007) AM_WRITE_LEGACY(hvysmsh_eeprom_w)
136   AM_RANGE(0x120004, 0x120007) AM_WRITE(hvysmsh_eeprom_w)
129137   AM_RANGE(0x120008, 0x12000b) AM_WRITENOP // IRQ ack?
130138   AM_RANGE(0x12000c, 0x12000f) AM_DEVWRITE_LEGACY("oki1", hvysmsh_oki_0_bank_w)
131139   AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x000000ff)
r14845r14846
133141   AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
134142   AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
135143   AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
136   AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE_LEGACY(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w)
137   AM_RANGE(0x1a4000, 0x1a4fff) AM_READWRITE_LEGACY(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w)
138   AM_RANGE(0x1c0000, 0x1c0fff) AM_RAM_WRITE_LEGACY(deco156_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
144   AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w)
145   AM_RANGE(0x1a4000, 0x1a4fff) AM_READWRITE(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w)
146   AM_RANGE(0x1c0000, 0x1c0fff) AM_RAM_WRITE(deco156_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
139147   AM_RANGE(0x1d0010, 0x1d002f) AM_READNOP // Check for DMA complete?
140   AM_RANGE(0x1e0000, 0x1e1fff) AM_READWRITE_LEGACY(wcvol95_spriteram_r, wcvol95_spriteram_w)
148   AM_RANGE(0x1e0000, 0x1e1fff) AM_READWRITE(wcvol95_spriteram_r, wcvol95_spriteram_w)
141149ADDRESS_MAP_END
142150
143151static ADDRESS_MAP_START( wcvol95_map, AS_PROGRAM, 32, deco156_state )
r14845r14846
145153   AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
146154   AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
147155   AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
148   AM_RANGE(0x120000, 0x120fff) AM_READWRITE_LEGACY(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w)
149   AM_RANGE(0x124000, 0x124fff) AM_READWRITE_LEGACY(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w)
156   AM_RANGE(0x120000, 0x120fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w)
157   AM_RANGE(0x124000, 0x124fff) AM_READWRITE(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w)
150158   AM_RANGE(0x130000, 0x137fff) AM_RAM
151159   AM_RANGE(0x140000, 0x140003) AM_READ_PORT("INPUTS")
152160   AM_RANGE(0x150000, 0x150003) AM_WRITE_PORT("EEPROMOUT")
153   AM_RANGE(0x160000, 0x161fff) AM_READWRITE_LEGACY(wcvol95_spriteram_r, wcvol95_spriteram_w)
161   AM_RANGE(0x160000, 0x161fff) AM_READWRITE(wcvol95_spriteram_r, wcvol95_spriteram_w)
154162   AM_RANGE(0x170000, 0x170003) AM_NOP // Irq ack?
155   AM_RANGE(0x180000, 0x180fff) AM_RAM_WRITE_LEGACY(wcvol95_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
163   AM_RANGE(0x180000, 0x180fff) AM_RAM_WRITE(wcvol95_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
156164   AM_RANGE(0x1a0000, 0x1a0007) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0x000000ff)
157165ADDRESS_MAP_END
158166
src/mame/drivers/dwarfd.c
r14845r14846
333333   UINT8    m_videobuf[0x8000];
334334
335335   required_device<cpu_device> m_maincpu;
336   DECLARE_WRITE8_MEMBER(i8275_preg_w);
337   DECLARE_READ8_MEMBER(i8275_preg_r);
338   DECLARE_WRITE8_MEMBER(i8275_creg_w);
339   DECLARE_READ8_MEMBER(i8275_sreg_r);
340   DECLARE_READ8_MEMBER(dwarfd_ram_r);
341   DECLARE_WRITE8_MEMBER(dwarfd_ram_w);
342   DECLARE_WRITE8_MEMBER(output1_w);
343   DECLARE_WRITE8_MEMBER(output2_w);
344   DECLARE_READ8_MEMBER(qc_b8_r);
336345};
337346
338347
r14845r14846
373382};
374383
375384
376static WRITE8_HANDLER (i8275_preg_w) //param reg
385WRITE8_MEMBER(dwarfd_state::i8275_preg_w)//param reg
377386{
378   dwarfd_state *state = space->machine().driver_data<dwarfd_state>();
379387
380   switch (state->m_i8275Command)
388   switch (m_i8275Command)
381389   {
382390      case I8275_COMMAND_RESET:
383391      {
384         switch (state->m_i8275CommandSeqCnt)
392         switch (m_i8275CommandSeqCnt)
385393         {
386394            case 4:
387395            {
388396               //screen byte comp byte 1
389               state->m_i8275SpacedRows = data >> 7;
390               state->m_i8275HorizontalCharactersRow = (data & 0x7f) + 1;
391               if (state->m_i8275HorizontalCharactersRow > 80)
397               m_i8275SpacedRows = data >> 7;
398               m_i8275HorizontalCharactersRow = (data & 0x7f) + 1;
399               if (m_i8275HorizontalCharactersRow > 80)
392400               {
393                  logerror("i8275 Undefined num of characters/Row! = %d\n", state->m_i8275HorizontalCharactersRow);
394                  state->m_i8275HorizontalCharactersRow = CHARACTERS_UNDEFINED;
401                  logerror("i8275 Undefined num of characters/Row! = %d\n", m_i8275HorizontalCharactersRow);
402                  m_i8275HorizontalCharactersRow = CHARACTERS_UNDEFINED;
395403               }
396404               else
397405               {
398                  logerror("i8275 %d characters/row\n", state->m_i8275HorizontalCharactersRow);
406                  logerror("i8275 %d characters/row\n", m_i8275HorizontalCharactersRow);
399407               }
400               if (state->m_i8275SpacedRows & 1)
408               if (m_i8275SpacedRows & 1)
401409               {
402                  logerror("i8275 spaced rows\n");
410                  logerror("i8275 &spaced rows\n");
403411               }
404412               else
405413               {
406414                  logerror("i8275 normal rows\n");
407415               }
408               state->m_i8275CommandSeqCnt--;
416               m_i8275CommandSeqCnt--;
409417            }
410418            break;
411419
412420            case 3:
413421            {
414422               //screen byte comp byte 2
415               state->m_i8275VerticalRows = (data & 0x3f) + 1;
416               state->m_i8275VerticalRetraceRows = (data >> 6) + 1;
423               m_i8275VerticalRows = (data & 0x3f) + 1;
424               m_i8275VerticalRetraceRows = (data >> 6) + 1;
417425
418               logerror("i8275 %d rows\n", state->m_i8275VerticalRows);
419               logerror("i8275 %d vertical retrace rows\n", state->m_i8275VerticalRetraceRows);
426               logerror("i8275 %d rows\n", m_i8275VerticalRows);
427               logerror("i8275 %d vertical retrace rows\n", m_i8275VerticalRetraceRows);
420428
421               state->m_i8275CommandSeqCnt--;
429               m_i8275CommandSeqCnt--;
422430            }
423431            break;
424432
425433            case 2:
426434            {
427435               //screen byte comp byte 3
428               state->m_i8275Underline = (data >> 4) + 1;
429               state->m_i8275Lines = (data & 0xf) + 1;
430               logerror("i8275 underline placement: %d\n", state->m_i8275Underline);
431               logerror("i8275 %d lines/row\n", state->m_i8275Lines);
436               m_i8275Underline = (data >> 4) + 1;
437               m_i8275Lines = (data & 0xf) + 1;
438               logerror("i8275 underline placement: %d\n", m_i8275Underline);
439               logerror("i8275 %d lines/row\n", m_i8275Lines);
432440
433               state->m_i8275CommandSeqCnt--;
441               m_i8275CommandSeqCnt--;
434442            }
435443            break;
436444
437445            case 1:
438446            {
439447               //screen byte comp byte 4
440               state->m_i8275LineCounterMode = data >> 7;
441               state->m_i8275FieldAttributeMode = (data >> 6) & 1;
442               state->m_i8275CursorFormat = (data >> 4) & 3;
443               state->m_i8275HorizontalRetrace = ((data & 0xf) + 1) << 1;
444               logerror("i8275 line counter mode: %d\n", state->m_i8275LineCounterMode);
445               if (state->m_i8275FieldAttributeMode)
448               m_i8275LineCounterMode = data >> 7;
449               m_i8275FieldAttributeMode = (data >> 6) & 1;
450               m_i8275CursorFormat = (data >> 4) & 3;
451               m_i8275HorizontalRetrace = ((data & 0xf) + 1) << 1;
452               logerror("i8275 line counter mode: %d\n", m_i8275LineCounterMode);
453               if (m_i8275FieldAttributeMode)
446454               {
447455                  logerror("i8275 field attribute mode non-transparent\n");
448456               }
r14845r14846
451459                  logerror("i8275 field attribute mode transparent\n");
452460               }
453461
454               switch (state->m_i8275CursorFormat)
462               switch (m_i8275CursorFormat)
455463               {
456464                  case 0:   {logerror("i8275 cursor format - blinking reverse video block\n");}   break;
457465                  case 1:   {logerror("i8275 cursor format - blinking underline\n");}break;
r14845r14846
459467                  case 3:   {logerror("i8275 cursor format - nonblinking underline\n");}break;
460468               }
461469
462               logerror("i8275 %d chars for horizontal retrace\n",state->m_i8275HorizontalRetrace );
463               state->m_i8275CommandSeqCnt--;
470               logerror("i8275 %d chars for horizontal retrace\n",m_i8275HorizontalRetrace );
471               m_i8275CommandSeqCnt--;
464472            }
465473            break;
466474
r14845r14846
489497
490498}
491499
492static READ8_HANDLER (i8275_preg_r) //param reg
500READ8_MEMBER(dwarfd_state::i8275_preg_r)//param reg
493501{
494502   return 0;
495503}
496504
497static WRITE8_HANDLER (i8275_creg_w) //comand reg
505WRITE8_MEMBER(dwarfd_state::i8275_creg_w)//comand reg
498506{
499   dwarfd_state *state = space->machine().driver_data<dwarfd_state>();
500507
501508   switch (data>>5)
502509   {
503510      case 0:
504511      {
505512         /* reset */
506         state->m_i8275Command = I8275_COMMAND_RESET;
507         state->m_i8275CommandSeqCnt = I8275_COMMAND_RESET_LENGTH;
513         m_i8275Command = I8275_COMMAND_RESET;
514         m_i8275CommandSeqCnt = I8275_COMMAND_RESET_LENGTH;
508515      }
509516      break;
510517
511518      case 5:
512519      {
513520         /* enable interrupt */
514         state->m_i8275Command = I8275_COMMAND_EI;
515         state->m_i8275CommandSeqCnt = I8275_COMMAND_EI_LENGTH;
521         m_i8275Command = I8275_COMMAND_EI;
522         m_i8275CommandSeqCnt = I8275_COMMAND_EI_LENGTH;
516523      }
517524      break;
518525
519526      case 6:
520527      {
521528         /* disable interrupt */
522         state->m_i8275Command = I8275_COMMAND_DI;
523         state->m_i8275CommandSeqCnt = I8275_COMMAND_DI_LENGTH;
529         m_i8275Command = I8275_COMMAND_DI;
530         m_i8275CommandSeqCnt = I8275_COMMAND_DI_LENGTH;
524531      }
525532      break;
526533
527534      case 7:
528535      {
529536         /* preset counters */
530         state->m_i8275CommandSeqCnt = I8275_COMMAND_PRESET_LENGTH;
537         m_i8275CommandSeqCnt = I8275_COMMAND_PRESET_LENGTH;
531538
532539      }
533540      break;
534541   }
535542}
536543
537static READ8_HANDLER (i8275_sreg_r) //status
544READ8_MEMBER(dwarfd_state::i8275_sreg_r)//status
538545{
539546   return 0;
540547}
541548
542static READ8_HANDLER(dwarfd_ram_r)
549READ8_MEMBER(dwarfd_state::dwarfd_ram_r)
543550{
544   dwarfd_state *state = space->machine().driver_data<dwarfd_state>();
545551
546   if (state->m_crt_access == 0)
552   if (m_crt_access == 0)
547553   {
548      return state->m_dw_ram[offset];
554      return m_dw_ram[offset];
549555   }
550556   else
551557   {
552      state->m_videobuf[state->m_line * 256 + state->m_idx] = state->m_dw_ram[offset];
553      state->m_idx++;
554      return state->m_dw_ram[offset];
558      m_videobuf[m_line * 256 + m_idx] = m_dw_ram[offset];
559      m_idx++;
560      return m_dw_ram[offset];
555561   }
556562}
557563
558static WRITE8_HANDLER(dwarfd_ram_w)
564WRITE8_MEMBER(dwarfd_state::dwarfd_ram_w)
559565{
560   dwarfd_state *state = space->machine().driver_data<dwarfd_state>();
561   state->m_dw_ram[offset] = data;
566   m_dw_ram[offset] = data;
562567}
563568
564static WRITE8_HANDLER(output1_w)
569WRITE8_MEMBER(dwarfd_state::output1_w)
565570{
566571/*
567572 bits:
r14845r14846
576581*/
577582}
578583
579static WRITE8_HANDLER(output2_w)
584WRITE8_MEMBER(dwarfd_state::output2_w)
580585{
581586/*
582587 bits:
r14845r14846
592597}
593598
594599
595static READ8_HANDLER(qc_b8_r)
600READ8_MEMBER(dwarfd_state::qc_b8_r)
596601{
597   return space->machine().rand();
602   return machine().rand();
598603}
599604
600605static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, dwarfd_state )
601606   AM_RANGE(0x0000, 0x3fff) AM_ROM
602   AM_RANGE(0x4000, 0x4fff) AM_READWRITE_LEGACY(dwarfd_ram_r, dwarfd_ram_w)
607   AM_RANGE(0x4000, 0x4fff) AM_READWRITE(dwarfd_ram_r, dwarfd_ram_w)
603608ADDRESS_MAP_END
604609
605610static ADDRESS_MAP_START( io_map, AS_IO, 8, dwarfd_state )
r14845r14846
607612   AM_RANGE(0x01, 0x01) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
608613   AM_RANGE(0x02, 0x03) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
609614
610   AM_RANGE(0x20, 0x20) AM_READWRITE_LEGACY(i8275_preg_r, i8275_preg_w)
611   AM_RANGE(0x21, 0x21) AM_READWRITE_LEGACY(i8275_sreg_r, i8275_creg_w)
615   AM_RANGE(0x20, 0x20) AM_READWRITE(i8275_preg_r, i8275_preg_w)
616   AM_RANGE(0x21, 0x21) AM_READWRITE(i8275_sreg_r, i8275_creg_w)
612617   AM_RANGE(0x40, 0x40) AM_WRITENOP // unknown
613   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(output1_w)
614   AM_RANGE(0x80, 0x80) AM_WRITE_LEGACY(output2_w)
618   AM_RANGE(0x60, 0x60) AM_WRITE(output1_w)
619   AM_RANGE(0x80, 0x80) AM_WRITE(output2_w)
615620   AM_RANGE(0xc0, 0xc0) AM_READ_PORT("DSW1")
616621   AM_RANGE(0xc1, 0xc1) AM_READ_PORT("DSW2")
617622ADDRESS_MAP_END
618623
619624static ADDRESS_MAP_START( qc_map, AS_PROGRAM, 8, dwarfd_state )
620625   AM_RANGE(0x0000, 0x7fff) AM_ROM
621   AM_RANGE(0x8000, 0x8fff) AM_READWRITE_LEGACY(dwarfd_ram_r, dwarfd_ram_w)
626   AM_RANGE(0x8000, 0x8fff) AM_READWRITE(dwarfd_ram_r, dwarfd_ram_w)
622627ADDRESS_MAP_END
623628
624629static ADDRESS_MAP_START( qc_io_map, AS_IO, 8, dwarfd_state )
625630   AM_IMPORT_FROM( io_map )
626631   ADDRESS_MAP_GLOBAL_MASK(0xff)
627   AM_RANGE(0xb8, 0xb8) AM_READ_LEGACY(qc_b8_r)
632   AM_RANGE(0xb8, 0xb8) AM_READ(qc_b8_r)
628633ADDRESS_MAP_END
629634
630635static INPUT_PORTS_START( dwarfd )
src/mame/drivers/caswin.c
r14845r14846
5656   UINT8 *m_sc0_vram;
5757   UINT8 *m_sc0_attr;
5858   tilemap_t *m_sc0_tilemap;
59   DECLARE_WRITE8_MEMBER(sc0_vram_w);
60   DECLARE_WRITE8_MEMBER(sc0_attr_w);
61   DECLARE_WRITE8_MEMBER(vvillage_scroll_w);
62   DECLARE_WRITE8_MEMBER(vvillage_vregs_w);
63   DECLARE_READ8_MEMBER(vvillage_rng_r);
64   DECLARE_WRITE8_MEMBER(vvillage_output_w);
65   DECLARE_WRITE8_MEMBER(vvillage_lamps_w);
5966};
6067
6168
r14845r14846
8693   return 0;
8794}
8895
89static WRITE8_HANDLER( sc0_vram_w )
96WRITE8_MEMBER(caswin_state::sc0_vram_w)
9097{
91   caswin_state *state = space->machine().driver_data<caswin_state>();
92   state->m_sc0_vram[offset] = data;
93   state->m_sc0_tilemap->mark_tile_dirty(offset);
98   m_sc0_vram[offset] = data;
99   m_sc0_tilemap->mark_tile_dirty(offset);
94100}
95101
96static WRITE8_HANDLER( sc0_attr_w )
102WRITE8_MEMBER(caswin_state::sc0_attr_w)
97103{
98   caswin_state *state = space->machine().driver_data<caswin_state>();
99   state->m_sc0_attr[offset] = data;
100   state->m_sc0_tilemap->mark_tile_dirty(offset);
104   m_sc0_attr[offset] = data;
105   m_sc0_tilemap->mark_tile_dirty(offset);
101106}
102107
103108/*These two are tested during the two cherry sub-games.I really don't know what is supposed to do...*/
104static WRITE8_HANDLER( vvillage_scroll_w )
109WRITE8_MEMBER(caswin_state::vvillage_scroll_w)
105110{
106111   //...
107112}
108113
109114/*---- --x- window effect? */
110115/*---- ---x flip screen */
111static WRITE8_HANDLER( vvillage_vregs_w )
116WRITE8_MEMBER(caswin_state::vvillage_vregs_w)
112117{
113   flip_screen_set(space->machine(), data & 1);
118   flip_screen_set(machine(), data & 1);
114119}
115120
116121/**********************
r14845r14846
119124*
120125**********************/
121126
122static READ8_HANDLER( vvillage_rng_r )
127READ8_MEMBER(caswin_state::vvillage_rng_r)
123128{
124   return space->machine().rand();
129   return machine().rand();
125130}
126131
127static WRITE8_HANDLER( vvillage_output_w )
132WRITE8_MEMBER(caswin_state::vvillage_output_w)
128133{
129   coin_counter_w(space->machine(), 0,data & 1);
130   coin_counter_w(space->machine(), 1,data & 1);
134   coin_counter_w(machine(), 0,data & 1);
135   coin_counter_w(machine(), 1,data & 1);
131136   // data & 4 payout counter
132   coin_lockout_w(space->machine(), 0,data & 0x20);
133   coin_lockout_w(space->machine(), 1,data & 0x20);
137   coin_lockout_w(machine(), 0,data & 0x20);
138   coin_lockout_w(machine(), 1,data & 0x20);
134139}
135140
136static WRITE8_HANDLER( vvillage_lamps_w )
141WRITE8_MEMBER(caswin_state::vvillage_lamps_w)
137142{
138143   /*
139144    ---x ---- lamp button 5
r14845r14846
142147    ---- --x- lamp button 2
143148    ---- ---x lamp button 1
144149    */
145   set_led_status(space->machine(), 0, data & 0x01);
146   set_led_status(space->machine(), 1, data & 0x02);
147   set_led_status(space->machine(), 2, data & 0x04);
148   set_led_status(space->machine(), 3, data & 0x08);
149   set_led_status(space->machine(), 4, data & 0x10);
150   set_led_status(machine(), 0, data & 0x01);
151   set_led_status(machine(), 1, data & 0x02);
152   set_led_status(machine(), 2, data & 0x04);
153   set_led_status(machine(), 3, data & 0x08);
154   set_led_status(machine(), 4, data & 0x10);
150155}
151156
152157static ADDRESS_MAP_START( vvillage_mem, AS_PROGRAM, 8, caswin_state )
153158   AM_RANGE(0x0000, 0x7fff) AM_ROM
154   AM_RANGE(0xa000, 0xa000) AM_READ_LEGACY(vvillage_rng_r) //accessed by caswin only
159   AM_RANGE(0xa000, 0xa000) AM_READ(vvillage_rng_r) //accessed by caswin only
155160   AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("nvram")
156   AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE_LEGACY(sc0_vram_w) AM_BASE(m_sc0_vram)
157   AM_RANGE(0xf800, 0xfbff) AM_RAM_WRITE_LEGACY(sc0_attr_w) AM_BASE(m_sc0_attr)
161   AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(sc0_vram_w) AM_BASE(m_sc0_vram)
162   AM_RANGE(0xf800, 0xfbff) AM_RAM_WRITE(sc0_attr_w) AM_BASE(m_sc0_attr)
158163ADDRESS_MAP_END
159164
160165static ADDRESS_MAP_START( vvillage_io, AS_IO, 8, caswin_state )
r14845r14846
163168   AM_RANGE(0x02,0x03) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
164169   AM_RANGE(0x10,0x10) AM_READ_PORT("IN0")
165170   AM_RANGE(0x11,0x11) AM_READ_PORT("IN1")
166   AM_RANGE(0x10,0x10) AM_WRITE_LEGACY(vvillage_scroll_w)
167   AM_RANGE(0x11,0x11) AM_WRITE_LEGACY(vvillage_vregs_w)
168   AM_RANGE(0x12,0x12) AM_WRITE_LEGACY(vvillage_lamps_w)
169   AM_RANGE(0x13,0x13) AM_WRITE_LEGACY(vvillage_output_w)
171   AM_RANGE(0x10,0x10) AM_WRITE(vvillage_scroll_w)
172   AM_RANGE(0x11,0x11) AM_WRITE(vvillage_vregs_w)
173   AM_RANGE(0x12,0x12) AM_WRITE(vvillage_lamps_w)
174   AM_RANGE(0x13,0x13) AM_WRITE(vvillage_output_w)
170175ADDRESS_MAP_END
171176
172177
src/mame/drivers/hitpoker.c
r14845r14846
6262   UINT8 m_eeprom_data[0x200];
6363   UINT16 m_eeprom_index;
6464   UINT8 m_tmp;
65   DECLARE_READ8_MEMBER(hitpoker_vram_r);
66   DECLARE_WRITE8_MEMBER(hitpoker_vram_w);
67   DECLARE_READ8_MEMBER(hitpoker_cram_r);
68   DECLARE_WRITE8_MEMBER(hitpoker_cram_w);
69   DECLARE_READ8_MEMBER(hitpoker_paletteram_r);
70   DECLARE_WRITE8_MEMBER(hitpoker_paletteram_w);
71   DECLARE_READ8_MEMBER(rtc_r);
72   DECLARE_WRITE8_MEMBER(eeprom_w);
73   DECLARE_READ8_MEMBER(eeprom_r);
74   DECLARE_READ8_MEMBER(hitpoker_pic_r);
75   DECLARE_WRITE8_MEMBER(hitpoker_pic_w);
76   DECLARE_READ8_MEMBER(test_r);
6577};
6678
6779
r14845r14846
102114   return 0;
103115}
104116
105static READ8_HANDLER( hitpoker_vram_r )
117READ8_MEMBER(hitpoker_state::hitpoker_vram_r)
106118{
107   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
108   UINT8 *ROM = space->machine().region("maincpu")->base();
119   UINT8 *ROM = machine().region("maincpu")->base();
109120
110   if(state->m_pic_data & 0x10)
111      return state->m_videoram[offset];
121   if(m_pic_data & 0x10)
122      return m_videoram[offset];
112123   else
113124      return ROM[offset+0x8000];
114125}
115126
116static WRITE8_HANDLER( hitpoker_vram_w )
127WRITE8_MEMBER(hitpoker_state::hitpoker_vram_w)
117128{
118   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
119//  UINT8 *ROM = space->machine().region("maincpu")->base();
129//  UINT8 *ROM = machine().region("maincpu")->base();
120130
121//  if(state->m_sys_regs[0x00] & 0x10)
122   state->m_videoram[offset] = data;
131//  if(m_sys_regs[0x00] & 0x10)
132   m_videoram[offset] = data;
123133}
124134
125static READ8_HANDLER( hitpoker_cram_r )
135READ8_MEMBER(hitpoker_state::hitpoker_cram_r)
126136{
127   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
128   UINT8 *ROM = space->machine().region("maincpu")->base();
137   UINT8 *ROM = machine().region("maincpu")->base();
129138
130   if(state->m_pic_data & 0x10)
131      return state->m_colorram[offset];
139   if(m_pic_data & 0x10)
140      return m_colorram[offset];
132141   else
133142      return ROM[offset+0xc000];
134143}
135144
136static WRITE8_HANDLER( hitpoker_cram_w )
145WRITE8_MEMBER(hitpoker_state::hitpoker_cram_w)
137146{
138   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
139   state->m_colorram[offset] = data;
147   m_colorram[offset] = data;
140148}
141149
142static READ8_HANDLER( hitpoker_paletteram_r )
150READ8_MEMBER(hitpoker_state::hitpoker_paletteram_r)
143151{
144   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
145   UINT8 *ROM = space->machine().region("maincpu")->base();
152   UINT8 *ROM = machine().region("maincpu")->base();
146153
147   if(state->m_pic_data & 0x10)
148      return state->m_paletteram[offset];
154   if(m_pic_data & 0x10)
155      return m_paletteram[offset];
149156   else
150157      return ROM[offset+0xe000];
151158}
152159
153static WRITE8_HANDLER( hitpoker_paletteram_w )
160WRITE8_MEMBER(hitpoker_state::hitpoker_paletteram_w)
154161{
155   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
156162   int r,g,b,datax;
157   state->m_paletteram[offset] = data;
163   m_paletteram[offset] = data;
158164   offset>>=1;
159   datax=256*state->m_paletteram[offset*2]+state->m_paletteram[offset*2+1];
165   datax=256*m_paletteram[offset*2]+m_paletteram[offset*2+1];
160166
161167   /* RGB565 */
162168   b = ((datax)&0xf800)>>11;
163169   g = ((datax)&0x07e0)>>5;
164170   r = ((datax)&0x001f)>>0;
165171
166   palette_set_color_rgb(space->machine(), offset, pal5bit(r), pal6bit(g), pal5bit(b));
172   palette_set_color_rgb(machine(), offset, pal5bit(r), pal6bit(g), pal5bit(b));
167173}
168174
169static READ8_HANDLER( rtc_r )
175READ8_MEMBER(hitpoker_state::rtc_r)
170176{
171177   return 0x80; //kludge it for now
172178}
173179
174180
175181/* tests 0x180, what EEPROM is this one??? */
176static WRITE8_HANDLER( eeprom_w )
182WRITE8_MEMBER(hitpoker_state::eeprom_w)
177183{
178   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
179184   if(offset == 0)
180185   {
181      state->m_eeprom_index = (state->m_eeprom_index & 0x100)|(data & 0xff);
186      m_eeprom_index = (m_eeprom_index & 0x100)|(data & 0xff);
182187      //printf("W INDEX %02x\n",data);
183188   }
184189   if(offset == 1)
185190   {
186      state->m_eeprom_index = (state->m_eeprom_index & 0xff)|((data & 0x1)<<8);
191      m_eeprom_index = (m_eeprom_index & 0xff)|((data & 0x1)<<8);
187192      //data & 0x4: eeprom clock
188193      //printf("W CLOCK + INDEX %02x\n",data);
189194   }
190195}
191196
192static READ8_HANDLER( eeprom_r )
197READ8_MEMBER(hitpoker_state::eeprom_r)
193198{
194   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
195   state->m_tmp = state->m_eeprom_data[state->m_eeprom_index];
196   if((state->m_eeprom_index & 0x1f) == 0x1f)
197      state->m_tmp = 0xaa;
198   //printf("%02x\n",state->m_eeprom_index);
199   state->m_eeprom_index++;
200   //state->m_eeprom_index&=0x1f;
201   return state->m_tmp;
199   m_tmp = m_eeprom_data[m_eeprom_index];
200   if((m_eeprom_index & 0x1f) == 0x1f)
201      m_tmp = 0xaa;
202   //printf("%02x\n",m_eeprom_index);
203   m_eeprom_index++;
204   //m_eeprom_index&=0x1f;
205   return m_tmp;
202206}
203207
204static READ8_HANDLER( hitpoker_pic_r )
208READ8_MEMBER(hitpoker_state::hitpoker_pic_r)
205209{
206   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
207210//  logerror("R\n");
208211
209212   if(offset == 0)
210213   {
211      if(cpu_get_pc(&space->device()) == 0x3143 ||
212         cpu_get_pc(&space->device()) == 0x314e ||
213         cpu_get_pc(&space->device()) == 0x3164 ||
214         cpu_get_pc(&space->device()) == 0x3179)
215         return state->m_pic_data;
214      if(cpu_get_pc(&space.device()) == 0x3143 ||
215         cpu_get_pc(&space.device()) == 0x314e ||
216         cpu_get_pc(&space.device()) == 0x3164 ||
217         cpu_get_pc(&space.device()) == 0x3179)
218         return m_pic_data;
216219
217      return (state->m_pic_data & 0x7f) | (state->m_pic_data & 0x40 ? 0x80 : 0x00);
220      return (m_pic_data & 0x7f) | (m_pic_data & 0x40 ? 0x80 : 0x00);
218221   }
219222
220   return state->m_sys_regs[offset];
223   return m_sys_regs[offset];
221224}
222225
223static WRITE8_HANDLER( hitpoker_pic_w )
226WRITE8_MEMBER(hitpoker_state::hitpoker_pic_w)
224227{
225   hitpoker_state *state = space->machine().driver_data<hitpoker_state>();
226228   if(offset == 0)
227      state->m_pic_data = (data & 0xff);// | (data & 0x40) ? 0x80 : 0x00;
229      m_pic_data = (data & 0xff);// | (data & 0x40) ? 0x80 : 0x00;
228230//  logerror("%02x W\n",data);
229   state->m_sys_regs[offset] = data;
231   m_sys_regs[offset] = data;
230232}
231233
232234#if 0
233static READ8_HANDLER( test_r )
235READ8_MEMBER(hitpoker_state::test_r)
234236{
235   return space->machine().rand();
237   return machine().rand();
236238}
237239#endif
238240
r14845r14846
240242static ADDRESS_MAP_START( hitpoker_map, AS_PROGRAM, 8, hitpoker_state )
241243   AM_RANGE(0x0000, 0x00ff) AM_RAM // stack ram
242244   AM_RANGE(0x1000, 0x103f) AM_RAM // internal I/O
243   AM_RANGE(0x8000, 0xb5ff) AM_READWRITE_LEGACY(hitpoker_vram_r,hitpoker_vram_w)
245   AM_RANGE(0x8000, 0xb5ff) AM_READWRITE(hitpoker_vram_r,hitpoker_vram_w)
244246   AM_RANGE(0xb600, 0xbdff) AM_RAM
245247   AM_RANGE(0xbe0a, 0xbe0a) AM_READ_PORT("IN0")
246248   AM_RANGE(0xbe0c, 0xbe0c) AM_READ_PORT("IN2") //irq ack?
247   AM_RANGE(0xbe0d, 0xbe0d) AM_READ_LEGACY(rtc_r)
249   AM_RANGE(0xbe0d, 0xbe0d) AM_READ(rtc_r)
248250   AM_RANGE(0xbe0e, 0xbe0e) AM_READ_PORT("IN1")
249   AM_RANGE(0xbe50, 0xbe51) AM_WRITE_LEGACY(eeprom_w)
250   AM_RANGE(0xbe53, 0xbe53) AM_READ_LEGACY(eeprom_r)
251   AM_RANGE(0xbe50, 0xbe51) AM_WRITE(eeprom_w)
252   AM_RANGE(0xbe53, 0xbe53) AM_READ(eeprom_r)
251253   AM_RANGE(0xbe80, 0xbe80) AM_DEVWRITE("crtc", mc6845_device, address_w)
252254   AM_RANGE(0xbe81, 0xbe81) AM_DEVWRITE("crtc", mc6845_device, register_w)
253255   AM_RANGE(0xbe90, 0xbe91) AM_DEVREADWRITE_LEGACY("aysnd", ay8910_r,ay8910_address_data_w)
254256   AM_RANGE(0xbea0, 0xbea0) AM_READ_PORT("VBLANK") //probably other bits as well
255//  AM_RANGE(0xbe00, 0xbeff) AM_READ_LEGACY(test_r)
256   AM_RANGE(0xc000, 0xdfff) AM_READWRITE_LEGACY(hitpoker_cram_r,hitpoker_cram_w)
257   AM_RANGE(0xe000, 0xefff) AM_READWRITE_LEGACY(hitpoker_paletteram_r,hitpoker_paletteram_w)
257//  AM_RANGE(0xbe00, 0xbeff) AM_READ(test_r)
258   AM_RANGE(0xc000, 0xdfff) AM_READWRITE(hitpoker_cram_r,hitpoker_cram_w)
259   AM_RANGE(0xe000, 0xefff) AM_READWRITE(hitpoker_paletteram_r,hitpoker_paletteram_w)
258260   AM_RANGE(0x0000, 0xbdff) AM_ROM
259261   AM_RANGE(0xbf00, 0xffff) AM_ROM
260262ADDRESS_MAP_END
261263
262264static ADDRESS_MAP_START( hitpoker_io, AS_IO, 8, hitpoker_state )
263   AM_RANGE(MC68HC11_IO_PORTA, MC68HC11_IO_PORTA) AM_READWRITE_LEGACY(hitpoker_pic_r,hitpoker_pic_w) AM_BASE(m_sys_regs)
265   AM_RANGE(MC68HC11_IO_PORTA, MC68HC11_IO_PORTA) AM_READWRITE(hitpoker_pic_r,hitpoker_pic_w) AM_BASE(m_sys_regs)
264266ADDRESS_MAP_END
265267
266268static INPUT_PORTS_START( hitpoker )
src/mame/drivers/m79amb.c
r14845r14846
7171   /* misc */
7272   UINT8 m_lut_gun1[0x100];
7373   UINT8 m_lut_gun2[0x100];
74   DECLARE_WRITE8_MEMBER(ramtek_videoram_w);
75   DECLARE_READ8_MEMBER(gray5bit_controller0_r);
76   DECLARE_READ8_MEMBER(gray5bit_controller1_r);
77   DECLARE_WRITE8_MEMBER(m79amb_8002_w);
7478};
7579
7680
77static WRITE8_HANDLER( ramtek_videoram_w )
81WRITE8_MEMBER(m79amb_state::ramtek_videoram_w)
7882{
79   m79amb_state *state = space->machine().driver_data<m79amb_state>();
80   state->m_videoram[offset] = data & ~*state->m_mask;
83   m_videoram[offset] = data & ~*m_mask;
8184}
8285
8386static SCREEN_UPDATE_RGB32( ramtek )
r14845r14846
107110}
108111
109112
110static READ8_HANDLER( gray5bit_controller0_r )
113READ8_MEMBER(m79amb_state::gray5bit_controller0_r)
111114{
112   m79amb_state *state = space->machine().driver_data<m79amb_state>();
113   UINT8 port_data = input_port_read(space->machine(), "8004");
114   UINT8 gun_pos = input_port_read(space->machine(), "GUN1");
115   UINT8 port_data = input_port_read(machine(), "8004");
116   UINT8 gun_pos = input_port_read(machine(), "GUN1");
115117
116   return (port_data & 0xe0) | state->m_lut_gun1[gun_pos];
118   return (port_data & 0xe0) | m_lut_gun1[gun_pos];
117119}
118120
119static READ8_HANDLER( gray5bit_controller1_r )
121READ8_MEMBER(m79amb_state::gray5bit_controller1_r)
120122{
121   m79amb_state *state = space->machine().driver_data<m79amb_state>();
122   UINT8 port_data = input_port_read(space->machine(), "8005");
123   UINT8 gun_pos = input_port_read(space->machine(), "GUN2");
123   UINT8 port_data = input_port_read(machine(), "8005");
124   UINT8 gun_pos = input_port_read(machine(), "GUN2");
124125
125   return (port_data & 0xe0) | state->m_lut_gun2[gun_pos];
126   return (port_data & 0xe0) | m_lut_gun2[gun_pos];
126127}
127128
128static WRITE8_HANDLER( m79amb_8002_w )
129WRITE8_MEMBER(m79amb_state::m79amb_8002_w)
129130{
130131   /* D1 may also be watchdog reset */
131132   /* port goes to 0x7f to turn on explosion lamp */
r14845r14846
134135
135136static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, m79amb_state )
136137   AM_RANGE(0x0000, 0x1fff) AM_ROM
137   AM_RANGE(0x4000, 0x5fff) AM_RAM_WRITE_LEGACY(ramtek_videoram_w) AM_BASE(m_videoram)
138   AM_RANGE(0x4000, 0x5fff) AM_RAM_WRITE(ramtek_videoram_w) AM_BASE(m_videoram)
138139   AM_RANGE(0x6000, 0x63ff) AM_RAM               /* ?? */
139140   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("8000") AM_DEVWRITE_LEGACY("discrete", m79amb_8000_w)
140141   AM_RANGE(0x8001, 0x8001) AM_WRITEONLY AM_BASE(m_mask)
141   AM_RANGE(0x8002, 0x8002) AM_READ_PORT("8002") AM_WRITE_LEGACY(m79amb_8002_w)
142   AM_RANGE(0x8002, 0x8002) AM_READ_PORT("8002") AM_WRITE(m79amb_8002_w)
142143   AM_RANGE(0x8003, 0x8003) AM_DEVWRITE_LEGACY("discrete", m79amb_8003_w)
143   AM_RANGE(0x8004, 0x8004) AM_READ_LEGACY(gray5bit_controller0_r)
144   AM_RANGE(0x8005, 0x8005) AM_READ_LEGACY(gray5bit_controller1_r)
144   AM_RANGE(0x8004, 0x8004) AM_READ(gray5bit_controller0_r)
145   AM_RANGE(0x8005, 0x8005) AM_READ(gray5bit_controller1_r)
145146   AM_RANGE(0xc000, 0xc07f) AM_RAM               /* ?? */
146147   AM_RANGE(0xc200, 0xc27f) AM_RAM               /* ?? */
147148ADDRESS_MAP_END
src/mame/drivers/meritm.c
r14845r14846
147147   required_device<v9938_device> m_v9938_0;
148148   required_device<v9938_device> m_v9938_1;
149149   required_device<microtouch_device> m_microtouch;
150   DECLARE_WRITE8_MEMBER(meritm_crt250_bank_w);
151   DECLARE_WRITE8_MEMBER(meritm_psd_a15_w);
152   DECLARE_WRITE8_MEMBER(meritm_bank_w);
153   DECLARE_WRITE8_MEMBER(meritm_crt250_questions_lo_w);
154   DECLARE_WRITE8_MEMBER(meritm_crt250_questions_hi_w);
155   DECLARE_WRITE8_MEMBER(meritm_crt250_questions_bank_w);
156   DECLARE_WRITE8_MEMBER(meritm_ds1644_w);
157   DECLARE_READ8_MEMBER(meritm_ds1644_r);
150158};
151159
152160
r14845r14846
414422   memory_set_bank(machine, "bank1", rombank );
415423};
416424
417static WRITE8_HANDLER(meritm_crt250_bank_w)
425WRITE8_MEMBER(meritm_state::meritm_crt250_bank_w)
418426{
419   meritm_crt250_switch_banks(space->machine());
427   meritm_crt250_switch_banks(machine());
420428};
421429
422430static void meritm_switch_banks( running_machine &machine )
r14845r14846
434442   memory_set_bank(machine, "bank3", rambank);
435443};
436444
437static WRITE8_HANDLER(meritm_psd_a15_w)
445WRITE8_MEMBER(meritm_state::meritm_psd_a15_w)
438446{
439   meritm_state *state = space->machine().driver_data<meritm_state>();
440   state->m_psd_a15 = data;
441   //logerror( "Writing PSD_A15 with %02x at PC=%04X\n", data, cpu_get_pc(&space->device()) );
442   meritm_switch_banks(space->machine());
447   m_psd_a15 = data;
448   //logerror( "Writing PSD_A15 with %02x at PC=%04X\n", data, cpu_get_pc(&space.device()) );
449   meritm_switch_banks(machine());
443450};
444451
445static WRITE8_HANDLER(meritm_bank_w)
452WRITE8_MEMBER(meritm_state::meritm_bank_w)
446453{
447   meritm_switch_banks(space->machine());
454   meritm_switch_banks(machine());
448455};
449456
450457/*************************************
r14845r14846
454461 *************************************/
455462
456463
457static WRITE8_HANDLER(meritm_crt250_questions_lo_w)
464WRITE8_MEMBER(meritm_state::meritm_crt250_questions_lo_w)
458465{
459   meritm_state *state = space->machine().driver_data<meritm_state>();
460   state->m_questions_loword_address &= 0xff00;
461   state->m_questions_loword_address |= data;
466   m_questions_loword_address &= 0xff00;
467   m_questions_loword_address |= data;
462468};
463469
464static WRITE8_HANDLER(meritm_crt250_questions_hi_w)
470WRITE8_MEMBER(meritm_state::meritm_crt250_questions_hi_w)
465471{
466   meritm_state *state = space->machine().driver_data<meritm_state>();
467   state->m_questions_loword_address &= 0x00ff;
468   state->m_questions_loword_address |= (data << 8);
472   m_questions_loword_address &= 0x00ff;
473   m_questions_loword_address |= (data << 8);
469474};
470475
471static WRITE8_HANDLER(meritm_crt250_questions_bank_w)
476WRITE8_MEMBER(meritm_state::meritm_crt250_questions_bank_w)
472477{
473   meritm_state *state = space->machine().driver_data<meritm_state>();
474478   UINT32 questions_address;
475479   UINT8 *dst;
476480
477   if ((state->m_bank & 0x07) != 0)
481   if ((m_bank & 0x07) != 0)
478482   {
479      logerror("meritm_crt250_questions_bank_w: bank is %d\n", state->m_bank);
483      logerror("meritm_crt250_questions_bank_w: bank is %d\n", m_bank);
480484      return;
481485   }
482486
483   dst = space->machine().region("maincpu")->base() + 0x70000 + 2;
487   dst = machine().region("maincpu")->base() + 0x70000 + 2;
484488
485489   if (data == 0)
486490   {
r14845r14846
508512         case 0x3f: questions_address = 0xb0000; break;
509513         default: logerror( "meritm_crt250_questions_bank_w: unknown data = %02x\n", data ); return;
510514      }
511      logerror( "Reading question byte at %06X\n", questions_address | state->m_questions_loword_address);
512      *dst = space->machine().region("extra")->base()[questions_address | state->m_questions_loword_address];
515      logerror( "Reading question byte at %06X\n", questions_address | m_questions_loword_address);
516      *dst = machine().region("extra")->base()[questions_address | m_questions_loword_address];
513517   }
514518};
515519
r14845r14846
520524 *
521525 *************************************/
522526
523static WRITE8_HANDLER(meritm_ds1644_w)
527WRITE8_MEMBER(meritm_state::meritm_ds1644_w)
524528{
525   meritm_state *state = space->machine().driver_data<meritm_state>();
526   int rambank = (state->m_psd_a15 >> 2) & 0x3;
529   int rambank = (m_psd_a15 >> 2) & 0x3;
527530   if (rambank < 3)
528531   {
529      state->m_ram[rambank*0x2000 + 0x1ff8 + offset] = data;
532      m_ram[rambank*0x2000 + 0x1ff8 + offset] = data;
530533   }
531534   else
532535   {
533536      if (offset == 0)
534537      {
535         state->m_ram[0x7ff8] = data;
538         m_ram[0x7ff8] = data;
536539      }
537540      //logerror( "Writing RTC, reg = %d, data = %x\n", offset, data);
538541   }
r14845r14846
545548   return ((data / 10) << 4) | (data %10);
546549}
547550
548static READ8_HANDLER(meritm_ds1644_r)
551READ8_MEMBER(meritm_state::meritm_ds1644_r)
549552{
550   meritm_state *state = space->machine().driver_data<meritm_state>();
551553   system_time systime;
552   int rambank = (state->m_psd_a15 >> 2) & 0x3;
554   int rambank = (m_psd_a15 >> 2) & 0x3;
553555   if (rambank == 3)
554556   {
555557      //logerror( "Reading RTC, reg = %x\n", offset);
556558
557      space->machine().current_datetime(systime);
558      state->m_ram[0x7ff9] = binary_to_BCD(systime.local_time.second);
559      state->m_ram[0x7ffa] = binary_to_BCD(systime.local_time.minute);
560      state->m_ram[0x7ffb] = binary_to_BCD(systime.local_time.hour);
561      state->m_ram[0x7ffc] = binary_to_BCD(systime.local_time.weekday+1);
562      state->m_ram[0x7ffd] = binary_to_BCD(systime.local_time.mday);
563      state->m_ram[0x7ffe] = binary_to_BCD(systime.local_time.month+1);
564      state->m_ram[0x7fff] = binary_to_BCD(systime.local_time.year % 100);
559      machine().current_datetime(systime);
560      m_ram[0x7ff9] = binary_to_BCD(systime.local_time.second);
561      m_ram[0x7ffa] = binary_to_BCD(systime.local_time.minute);
562      m_ram[0x7ffb] = binary_to_BCD(systime.local_time.hour);
563      m_ram[0x7ffc] = binary_to_BCD(systime.local_time.weekday+1);
564      m_ram[0x7ffd] = binary_to_BCD(systime.local_time.mday);
565      m_ram[0x7ffe] = binary_to_BCD(systime.local_time.month+1);
566      m_ram[0x7fff] = binary_to_BCD(systime.local_time.year % 100);
565567   }
566   return state->m_ram[rambank*0x2000 + 0x1ff8 + offset];
568   return m_ram[rambank*0x2000 + 0x1ff8 + offset];
567569};
568570
569571/*************************************
r14845r14846
579581
580582static ADDRESS_MAP_START( meritm_crt250_questions_map, AS_PROGRAM, 8, meritm_state )
581583   AM_RANGE(0x0000, 0xdfff) AM_ROMBANK("bank1")
582   AM_RANGE(0x0000, 0x0000) AM_WRITE_LEGACY(meritm_crt250_questions_lo_w)
583   AM_RANGE(0x0001, 0x0001) AM_WRITE_LEGACY(meritm_crt250_questions_hi_w)
584   AM_RANGE(0x0002, 0x0002) AM_WRITE_LEGACY(meritm_crt250_questions_bank_w)
584   AM_RANGE(0x0000, 0x0000) AM_WRITE(meritm_crt250_questions_lo_w)
585   AM_RANGE(0x0001, 0x0001) AM_WRITE(meritm_crt250_questions_hi_w)
586   AM_RANGE(0x0002, 0x0002) AM_WRITE(meritm_crt250_questions_bank_w)
585587   AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("nvram")
586588ADDRESS_MAP_END
587589
r14845r14846
594596   AM_RANGE(0x50, 0x53) AM_DEVREADWRITE_LEGACY("z80pio_1", z80pio_cd_ba_r, z80pio_cd_ba_w)
595597   AM_RANGE(0x80, 0x80) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
596598   AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
597   AM_RANGE(0xff, 0xff) AM_WRITE_LEGACY(meritm_crt250_bank_w)
599   AM_RANGE(0xff, 0xff) AM_WRITE(meritm_crt250_bank_w)
598600ADDRESS_MAP_END
599601
600602static ADDRESS_MAP_START( meritm_crt250_crt258_io_map, AS_IO, 8, meritm_state )
r14845r14846
607609   AM_RANGE(0x60, 0x67) AM_READWRITE_LEGACY(pc16552d_0_r,pc16552d_0_w)
608610   AM_RANGE(0x80, 0x80) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
609611   AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
610   AM_RANGE(0xff, 0xff) AM_WRITE_LEGACY(meritm_crt250_bank_w)
612   AM_RANGE(0xff, 0xff) AM_WRITE(meritm_crt250_bank_w)
611613ADDRESS_MAP_END
612614
613615static ADDRESS_MAP_START( meritm_map, AS_PROGRAM, 8, meritm_state )
r14845r14846
618620
619621static ADDRESS_MAP_START( meritm_io_map, AS_IO, 8, meritm_state )
620622   ADDRESS_MAP_GLOBAL_MASK(0xff)
621   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(meritm_psd_a15_w)
623   AM_RANGE(0x00, 0x00) AM_WRITE(meritm_psd_a15_w)
622624   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(watchdog_reset_w)
623625   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("v9938_0", v9938_device, read, write)
624626   AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("v9938_1", v9938_device, read, write)
r14845r14846
628630   AM_RANGE(0x60, 0x67) AM_READWRITE_LEGACY(pc16552d_0_r,pc16552d_0_w)
629631   AM_RANGE(0x80, 0x80) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
630632   AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
631   AM_RANGE(0xff, 0xff) AM_WRITE_LEGACY(meritm_bank_w)
633   AM_RANGE(0xff, 0xff) AM_WRITE(meritm_bank_w)
632634ADDRESS_MAP_END
633635
634636/*************************************
r14845r14846
18761878      { 0x99, 0x53, 0xfc, 0x29, 0x3a, 0x95, 0x8b, 0x58, 0xca, 0xca, 0x00, 0xc2, 0x30, 0x62, 0x0b, 0x96 };
18771879
18781880   ds1204_init(machine, megat3_ds1204_key, megat3_ds1204_nvram);
1881   
1882   meritm_state *state = machine.driver_data<meritm_state>();
1883   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0xfff8, 0xffff, read8_delegate(FUNC(meritm_state::meritm_ds1644_r), state), write8_delegate(FUNC(meritm_state::meritm_ds1644_w), state));
18791884
1880   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0xfff8, 0xffff, FUNC(meritm_ds1644_r), FUNC(meritm_ds1644_w) );
1881
18821885};
18831886
18841887static DRIVER_INIT(megat4)
r14845r14846
19071910
19081911   ds1204_init(machine, 0, megat4te_ds1204_nvram);
19091912
1910   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0xfff8, 0xffff, FUNC(meritm_ds1644_r), FUNC(meritm_ds1644_w) );
1913   meritm_state *state = machine.driver_data<meritm_state>();
1914   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0xfff8, 0xffff, read8_delegate(FUNC(meritm_state::meritm_ds1644_r), state), write8_delegate(FUNC(meritm_state::meritm_ds1644_w), state));
19111915
19121916};
19131917
r14845r14846
19181922
19191923   ds1204_init(machine, 0, megat4te_ds1204_nvram);
19201924
1921   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0xfff8, 0xffff, FUNC(meritm_ds1644_r), FUNC(meritm_ds1644_w) );
1925   meritm_state *state = machine.driver_data<meritm_state>();
1926   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0xfff8, 0xffff, read8_delegate(FUNC(meritm_state::meritm_ds1644_r), state), write8_delegate(FUNC(meritm_state::meritm_ds1644_w), state));
19221927
19231928};
19241929
r14845r14846
19381943
19391944   ds1204_init(machine, 0, megat5_ds1204_nvram);
19401945
1941   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0xfff8, 0xffff, FUNC(meritm_ds1644_r), FUNC(meritm_ds1644_w) );
1946   meritm_state *state = machine.driver_data<meritm_state>();
1947   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0xfff8, 0xffff, read8_delegate(FUNC(meritm_state::meritm_ds1644_r), state), write8_delegate(FUNC(meritm_state::meritm_ds1644_w), state));
19421948
19431949}
19441950
src/mame/drivers/koftball.c
r14845r14846
5151   UINT16 m_prot_data;
5252
5353   required_device<cpu_device> m_maincpu;
54   DECLARE_WRITE16_MEMBER(bmc_RAMDAC_offset_w);
55   DECLARE_WRITE16_MEMBER(bmc_RAMDAC_color_w);
56   DECLARE_READ16_MEMBER(bmc_RAMDAC_color_r);
57   DECLARE_READ16_MEMBER(random_number_r);
58   DECLARE_READ16_MEMBER(prot_r);
59   DECLARE_WRITE16_MEMBER(prot_w);
60   DECLARE_WRITE16_MEMBER(bmc_1_videoram_w);
61   DECLARE_WRITE16_MEMBER(bmc_2_videoram_w);
5462};
5563
5664
r14845r14846
93101   return 0;
94102}
95103
96static WRITE16_HANDLER( bmc_RAMDAC_offset_w )
104WRITE16_MEMBER(koftball_state::bmc_RAMDAC_offset_w)
97105{
98   koftball_state *state = space->machine().driver_data<koftball_state>();
99   state->m_clr_offset=data*3;
106   m_clr_offset=data*3;
100107}
101108
102static WRITE16_HANDLER( bmc_RAMDAC_color_w )
109WRITE16_MEMBER(koftball_state::bmc_RAMDAC_color_w)
103110{
104   koftball_state *state = space->machine().driver_data<koftball_state>();
105   state->m_bmc_colorram[state->m_clr_offset]=data;
106   palette_set_color_rgb(space->machine(),state->m_clr_offset/3,pal6bit(state->m_bmc_colorram[(state->m_clr_offset/3)*3]),pal6bit(state->m_bmc_colorram[(state->m_clr_offset/3)*3+1]),pal6bit(state->m_bmc_colorram[(state->m_clr_offset/3)*3+2]));
107   state->m_clr_offset=(state->m_clr_offset+1)%768;
111   m_bmc_colorram[m_clr_offset]=data;
112   palette_set_color_rgb(machine(),m_clr_offset/3,pal6bit(m_bmc_colorram[(m_clr_offset/3)*3]),pal6bit(m_bmc_colorram[(m_clr_offset/3)*3+1]),pal6bit(m_bmc_colorram[(m_clr_offset/3)*3+2]));
113   m_clr_offset=(m_clr_offset+1)%768;
108114}
109115
110static READ16_HANDLER( bmc_RAMDAC_color_r )
116READ16_MEMBER(koftball_state::bmc_RAMDAC_color_r)
111117{
112   koftball_state *state = space->machine().driver_data<koftball_state>();
113   return state->m_bmc_colorram[state->m_clr_offset];
118   return m_bmc_colorram[m_clr_offset];
114119}
115120
116static READ16_HANDLER(random_number_r)
121READ16_MEMBER(koftball_state::random_number_r)
117122{
118   return space->machine().rand();
123   return machine().rand();
119124}
120125
121126
122static READ16_HANDLER(prot_r)
127READ16_MEMBER(koftball_state::prot_r)
123128{
124   koftball_state *state = space->machine().driver_data<koftball_state>();
125   switch(state->m_prot_data)
129   switch(m_prot_data)
126130   {
127131      case 0x0000: return 0x0d00;
128132      case 0xff00: return 0x8d00;
r14845r14846
130134      case 0x8000: return 0x0f0f;
131135   }
132136
133   logerror("unk prot r %x %x\n",state->m_prot_data,   cpu_get_previouspc(&space->device()));
134   return space->machine().rand();
137   logerror("unk prot r %x %x\n",m_prot_data,   cpu_get_previouspc(&space.device()));
138   return machine().rand();
135139}
136140
137static WRITE16_HANDLER(prot_w)
141WRITE16_MEMBER(koftball_state::prot_w)
138142{
139   koftball_state *state = space->machine().driver_data<koftball_state>();
140   COMBINE_DATA(&state->m_prot_data);
143   COMBINE_DATA(&m_prot_data);
141144}
142145
143static WRITE16_HANDLER(bmc_1_videoram_w)
146WRITE16_MEMBER(koftball_state::bmc_1_videoram_w)
144147{
145   koftball_state *state = space->machine().driver_data<koftball_state>();
146   COMBINE_DATA(&state->m_bmc_1_videoram[offset]);
147   state->m_tilemap_1->mark_tile_dirty(offset);
148   COMBINE_DATA(&m_bmc_1_videoram[offset]);
149   m_tilemap_1->mark_tile_dirty(offset);
148150}
149151
150static WRITE16_HANDLER(bmc_2_videoram_w)
152WRITE16_MEMBER(koftball_state::bmc_2_videoram_w)
151153{
152   koftball_state *state = space->machine().driver_data<koftball_state>();
153   COMBINE_DATA(&state->m_bmc_2_videoram[offset]);
154   state->m_tilemap_2->mark_tile_dirty(offset);
154   COMBINE_DATA(&m_bmc_2_videoram[offset]);
155   m_tilemap_2->mark_tile_dirty(offset);
155156}
156157
157158static ADDRESS_MAP_START( koftball_mem, AS_PROGRAM, 16, koftball_state )
158159   AM_RANGE(0x000000, 0x01ffff) AM_ROM
159160   AM_RANGE(0x220000, 0x22ffff) AM_RAM AM_BASE(m_main_ram)
160161
161   AM_RANGE(0x260000, 0x260fff) AM_WRITE_LEGACY(bmc_1_videoram_w) AM_BASE(m_bmc_1_videoram)
162   AM_RANGE(0x261000, 0x261fff) AM_WRITE_LEGACY(bmc_2_videoram_w) AM_BASE(m_bmc_2_videoram)
162   AM_RANGE(0x260000, 0x260fff) AM_WRITE(bmc_1_videoram_w) AM_BASE(m_bmc_1_videoram)
163   AM_RANGE(0x261000, 0x261fff) AM_WRITE(bmc_2_videoram_w) AM_BASE(m_bmc_2_videoram)
163164   AM_RANGE(0x262000, 0x26ffff) AM_RAM
164165
165166   AM_RANGE(0x280000, 0x28ffff) AM_RAM /* unused ? */
166167   AM_RANGE(0x2a0000, 0x2a001f) AM_WRITENOP
167   AM_RANGE(0x2a0000, 0x2a001f) AM_READ_LEGACY(random_number_r)
168   AM_RANGE(0x2b0000, 0x2b0003) AM_READ_LEGACY(random_number_r)
169   AM_RANGE(0x2d8000, 0x2d8001) AM_READ_LEGACY(random_number_r)
168   AM_RANGE(0x2a0000, 0x2a001f) AM_READ(random_number_r)
169   AM_RANGE(0x2b0000, 0x2b0003) AM_READ(random_number_r)
170   AM_RANGE(0x2d8000, 0x2d8001) AM_READ(random_number_r)
170171   /*sound chip or mcu comm ? maybe just i/o (offset 0xe=lamps?)*/
171172   AM_RANGE(0x2da000, 0x2da001) AM_WRITENOP /* offset ? */
172173   AM_RANGE(0x2da002, 0x2da003) AM_WRITENOP /* data ? */
173174
174   AM_RANGE(0x2db000, 0x2db001) AM_WRITE_LEGACY(bmc_RAMDAC_offset_w)
175   AM_RANGE(0x2db002, 0x2db003) AM_READWRITE_LEGACY(bmc_RAMDAC_color_r, bmc_RAMDAC_color_w)
175   AM_RANGE(0x2db000, 0x2db001) AM_WRITE(bmc_RAMDAC_offset_w)
176   AM_RANGE(0x2db002, 0x2db003) AM_READWRITE(bmc_RAMDAC_color_r, bmc_RAMDAC_color_w)
176177   AM_RANGE(0x2db004, 0x2db005) AM_WRITENOP
177178   AM_RANGE(0x2dc000, 0x2dc001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0xff00)
178179   AM_RANGE(0x2f0000, 0x2f0003) AM_READ_PORT("INPUTS")
179180   AM_RANGE(0x300000, 0x300001) AM_WRITENOP
180181   AM_RANGE(0x320000, 0x320001) AM_WRITENOP
181   AM_RANGE(0x340000, 0x340001) AM_READ_LEGACY(prot_r)
182   AM_RANGE(0x360000, 0x360001) AM_WRITE_LEGACY(prot_w)
182   AM_RANGE(0x340000, 0x340001) AM_READ(prot_r)
183   AM_RANGE(0x360000, 0x360001) AM_WRITE(prot_w)
183184ADDRESS_MAP_END
184185
185186
src/mame/drivers/ertictac.c
r14845r14846
3232   ertictac_state(const machine_config &mconfig, device_type type, const char *tag)
3333      : driver_device(mconfig, type, tag) { }
3434
35   DECLARE_READ32_MEMBER(ertictac_podule_r);
3536};
3637
3738
38static READ32_HANDLER( ertictac_podule_r )
39READ32_MEMBER(ertictac_state::ertictac_podule_r)
3940{
4041   ioc_regs[IRQ_STATUS_B] &= ~ARCHIMEDES_IRQB_PODULE_IRQ;
4142
4243   switch(offset)
4344   {
44      case 0x04/4: return input_port_read(space->machine(), "DSW1") & 0xff;
45      case 0x08/4: return input_port_read(space->machine(), "DSW2") & 0xff;
46      case 0x10/4: return input_port_read(space->machine(), "SYSTEM") & 0xff;
47      case 0x14/4: return input_port_read(space->machine(), "P2") & 0xff;
48      case 0x18/4: return input_port_read(space->machine(), "P1") & 0xff;
45      case 0x04/4: return input_port_read(machine(), "DSW1") & 0xff;
46      case 0x08/4: return input_port_read(machine(), "DSW2") & 0xff;
47      case 0x10/4: return input_port_read(machine(), "SYSTEM") & 0xff;
48      case 0x14/4: return input_port_read(machine(), "P2") & 0xff;
49      case 0x18/4: return input_port_read(machine(), "P1") & 0xff;
4950   }
5051
5152   return 0;
r14845r14846
5556   AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE_LEGACY(archimedes_memc_logical_r, archimedes_memc_logical_w)
5657   AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE_LEGACY(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */
5758
58   AM_RANGE(0x03340000, 0x0334001f) AM_READ_LEGACY(ertictac_podule_r)
59   AM_RANGE(0x033c0000, 0x033c001f) AM_READ_LEGACY(ertictac_podule_r)
59   AM_RANGE(0x03340000, 0x0334001f) AM_READ(ertictac_podule_r)
60   AM_RANGE(0x033c0000, 0x033c001f) AM_READ(ertictac_podule_r)
6061
6162   AM_RANGE(0x03000000, 0x033fffff) AM_READWRITE_LEGACY(archimedes_ioc_r, archimedes_ioc_w)
6263   AM_RANGE(0x03400000, 0x035fffff) AM_READWRITE_LEGACY(archimedes_vidc_r, archimedes_vidc_w)
src/mame/drivers/atarisy4.c
r14845r14846
3535   UINT16 *m_shared_ram[2];
3636   UINT16 *m_screen_ram;
3737   poly_manager *m_poly;
38   DECLARE_WRITE16_MEMBER(gpu_w);
39   DECLARE_READ16_MEMBER(gpu_r);
40   DECLARE_READ16_MEMBER(m68k_shared_0_r);
41   DECLARE_WRITE16_MEMBER(m68k_shared_0_w);
42   DECLARE_READ16_MEMBER(m68k_shared_1_r);
43   DECLARE_WRITE16_MEMBER(m68k_shared_1_w);
44   DECLARE_READ16_MEMBER(dsp0_status_r);
45   DECLARE_WRITE16_MEMBER(dsp0_control_w);
46   DECLARE_READ16_MEMBER(dsp0_bio_r);
47   DECLARE_WRITE16_MEMBER(dsp0_bank_w);
48   DECLARE_READ16_MEMBER(dsp1_status_r);
49   DECLARE_WRITE16_MEMBER(dsp1_control_w);
50   DECLARE_READ16_MEMBER(dsp1_bio_r);
51   DECLARE_WRITE16_MEMBER(dsp1_bank_w);
52   DECLARE_READ16_MEMBER(analog_r);
3853};
3954
4055
r14845r14846
112127 *
113128 *************************************/
114129
115static READ16_HANDLER( analog_r );
130
116131static MACHINE_RESET( atarisy4 );
117132static MACHINE_RESET( airrace );
118133
r14845r14846
426441   }
427442}
428443
429static WRITE16_HANDLER( gpu_w )
444WRITE16_MEMBER(atarisy4_state::gpu_w)
430445{
431446   switch (offset)
432447   {
r14845r14846
454469      case 0x17:
455470      {
456471         gpu.ecr = data;
457         execute_gpu_command(space->machine());
472         execute_gpu_command(machine());
458473         break;
459474      }
460475      case 0x1a:   gpu.far = data;      break;
r14845r14846
463478         gpu.mcr = data;
464479
465480         if (~data & 0x08)
466            cputag_set_input_line(space->machine(), "maincpu", 6, CLEAR_LINE);
481            cputag_set_input_line(machine(), "maincpu", 6, CLEAR_LINE);
467482
468483         break;
469484      }
r14845r14846
473488   }
474489}
475490
476static READ16_HANDLER( gpu_r )
491READ16_MEMBER(atarisy4_state::gpu_r)
477492{
478493   UINT16 res = 0;
479494
r14845r14846
508523 *
509524 *************************************/
510525
511static READ16_HANDLER( m68k_shared_0_r )
526READ16_MEMBER(atarisy4_state::m68k_shared_0_r)
512527{
513   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
514   if (!BIT(state->m_csr[0], 3))
515      return (state->m_shared_ram[0][offset]);
528   if (!BIT(m_csr[0], 3))
529      return (m_shared_ram[0][offset]);
516530   else
517531      return 0xffff;
518532}
519533
520static WRITE16_HANDLER( m68k_shared_0_w )
534WRITE16_MEMBER(atarisy4_state::m68k_shared_0_w)
521535{
522   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
523   if (!BIT(state->m_csr[0], 3))
524      COMBINE_DATA(&state->m_shared_ram[0][offset]);
536   if (!BIT(m_csr[0], 3))
537      COMBINE_DATA(&m_shared_ram[0][offset]);
525538}
526539
527static READ16_HANDLER( m68k_shared_1_r )
540READ16_MEMBER(atarisy4_state::m68k_shared_1_r)
528541{
529   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
530   if (!BIT(state->m_csr[1], 3))
531      return (state->m_shared_ram[1][offset]);
542   if (!BIT(m_csr[1], 3))
543      return (m_shared_ram[1][offset]);
532544   else
533545      return 0xffff;
534546}
535547
536static WRITE16_HANDLER( m68k_shared_1_w )
548WRITE16_MEMBER(atarisy4_state::m68k_shared_1_w)
537549{
538   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
539   if (!BIT(state->m_csr[1], 3))
540      COMBINE_DATA(&state->m_shared_ram[1][offset]);
550   if (!BIT(m_csr[1], 3))
551      COMBINE_DATA(&m_shared_ram[1][offset]);
541552}
542553
543static READ16_HANDLER( dsp0_status_r )
554READ16_MEMBER(atarisy4_state::dsp0_status_r)
544555{
545   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
546   return state->m_csr[0];
556   return m_csr[0];
547557}
548558
549static WRITE16_HANDLER( dsp0_control_w )
559WRITE16_MEMBER(atarisy4_state::dsp0_control_w)
550560{
551   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
552   cputag_set_input_line(space->machine(), "dsp0", INPUT_LINE_RESET, data & 0x01 ? CLEAR_LINE : ASSERT_LINE);
553   cputag_set_input_line(space->machine(), "dsp0", 0, data & 0x02 ? ASSERT_LINE : CLEAR_LINE);
561   cputag_set_input_line(machine(), "dsp0", INPUT_LINE_RESET, data & 0x01 ? CLEAR_LINE : ASSERT_LINE);
562   cputag_set_input_line(machine(), "dsp0", 0, data & 0x02 ? ASSERT_LINE : CLEAR_LINE);
554563
555   state->m_csr[0] = data;
564   m_csr[0] = data;
556565}
557566
558static READ16_HANDLER( dsp0_bio_r )
567READ16_MEMBER(atarisy4_state::dsp0_bio_r)
559568{
560   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
561   return BIT(state->m_csr[0], 2);
569   return BIT(m_csr[0], 2);
562570}
563571
564static WRITE16_HANDLER( dsp0_bank_w )
572WRITE16_MEMBER(atarisy4_state::dsp0_bank_w)
565573{
566   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
567574   if (data & 0x4000)
568575   {
569576      /* Set TIDONE bit */
570      state->m_csr[0] |= 0x10;
577      m_csr[0] |= 0x10;
571578
572      if (BIT(state->m_csr[0], 5) == 1)
579      if (BIT(m_csr[0], 5) == 1)
573580         fatalerror("68000 interrupt enable was set!");
574581   }
575582
576583   data &= 0x3800;
577   memory_set_bankptr(space->machine(), "dsp0_bank1", &state->m_shared_ram[0][data]);
578   state->m_dsp_bank[0] = data;
584   memory_set_bankptr(machine(), "dsp0_bank1", &m_shared_ram[0][data]);
585   m_dsp_bank[0] = data;
579586}
580587
581static READ16_HANDLER( dsp1_status_r )
588READ16_MEMBER(atarisy4_state::dsp1_status_r)
582589{
583   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
584   return state->m_csr[1];
590   return m_csr[1];
585591}
586592
587static WRITE16_HANDLER( dsp1_control_w )
593WRITE16_MEMBER(atarisy4_state::dsp1_control_w)
588594{
589   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
590   cputag_set_input_line(space->machine(), "dsp1", INPUT_LINE_RESET, data & 0x01 ? CLEAR_LINE : ASSERT_LINE);
591   cputag_set_input_line(space->machine(), "dsp1", 0, data & 0x02 ? ASSERT_LINE : CLEAR_LINE);
595   cputag_set_input_line(machine(), "dsp1", INPUT_LINE_RESET, data & 0x01 ? CLEAR_LINE : ASSERT_LINE);
596   cputag_set_input_line(machine(), "dsp1", 0, data & 0x02 ? ASSERT_LINE : CLEAR_LINE);
592597
593   state->m_csr[1] = data;
598   m_csr[1] = data;
594599}
595600
596static READ16_HANDLER( dsp1_bio_r )
601READ16_MEMBER(atarisy4_state::dsp1_bio_r)
597602{
598   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
599   return BIT(state->m_csr[1], 2);
603   return BIT(m_csr[1], 2);
600604}
601605
602static WRITE16_HANDLER( dsp1_bank_w )
606WRITE16_MEMBER(atarisy4_state::dsp1_bank_w)
603607{
604   atarisy4_state *state = space->machine().driver_data<atarisy4_state>();
605608   if (data & 0x4000)
606609   {
607610      /* Set TIDONE bit */
608      state->m_csr[1] |= 0x10;
611      m_csr[1] |= 0x10;
609612
610      if (BIT(state->m_csr[1], 5) == 1)
613      if (BIT(m_csr[1], 5) == 1)
611614         fatalerror("68000 interrupt enable was set!");
612615   }
613616
614617   data &= 0x3800;
615   memory_set_bankptr(space->machine(), "dsp1_bank1", &state->m_shared_ram[1][data]);
616   state->m_dsp_bank[1] = data;
618   memory_set_bankptr(machine(), "dsp1_bank1", &m_shared_ram[1][data]);
619   m_dsp_bank[1] = data;
617620}
618621
619622
r14845r14846
627630   AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_BASE(m_m68k_ram)
628631   AM_RANGE(0x010000, 0x01ffff) AM_RAM
629632   AM_RANGE(0x580000, 0x580001) AM_READ_PORT("JOYSTICK")
630   AM_RANGE(0x588000, 0x588001) AM_READ_LEGACY(analog_r)
633   AM_RANGE(0x588000, 0x588001) AM_READ(analog_r)
631634   AM_RANGE(0x598000, 0x598001) AM_NOP /* Sound board */
632   AM_RANGE(0x7c0000, 0x7c4fff) AM_READWRITE_LEGACY(m68k_shared_1_r, m68k_shared_1_w)
633   AM_RANGE(0x7c6000, 0x7c6001) AM_READWRITE_LEGACY(dsp1_status_r, dsp1_control_w)
634   AM_RANGE(0x7f0000, 0x7f4fff) AM_READWRITE_LEGACY(m68k_shared_0_r, m68k_shared_0_w)
635   AM_RANGE(0x7f6000, 0x7f6001) AM_READWRITE_LEGACY(dsp0_status_r, dsp0_control_w)
635   AM_RANGE(0x7c0000, 0x7c4fff) AM_READWRITE(m68k_shared_1_r, m68k_shared_1_w)
636   AM_RANGE(0x7c6000, 0x7c6001) AM_READWRITE(dsp1_status_r, dsp1_control_w)
637   AM_RANGE(0x7f0000, 0x7f4fff) AM_READWRITE(m68k_shared_0_r, m68k_shared_0_w)
638   AM_RANGE(0x7f6000, 0x7f6001) AM_READWRITE(dsp0_status_r, dsp0_control_w)
636639   AM_RANGE(0xa00400, 0xbfffff) AM_RAM AM_BASE(m_screen_ram)
637   AM_RANGE(0xff8000, 0xff8fff) AM_READWRITE_LEGACY(gpu_r, gpu_w)
640   AM_RANGE(0xff8000, 0xff8fff) AM_READWRITE(gpu_r, gpu_w)
638641ADDRESS_MAP_END
639642
640643
r14845r14846
651654ADDRESS_MAP_END
652655
653656static ADDRESS_MAP_START( dsp0_io_map, AS_IO, 16, atarisy4_state )
654   AM_RANGE(0x00, 0x01) AM_WRITE_LEGACY(dsp0_bank_w)
655   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(dsp0_bio_r)
657   AM_RANGE(0x00, 0x01) AM_WRITE(dsp0_bank_w)
658   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(dsp0_bio_r)
656659ADDRESS_MAP_END
657660
658661
r14845r14846
669672ADDRESS_MAP_END
670673
671674static ADDRESS_MAP_START( dsp1_io_map, AS_IO, 16, atarisy4_state )
672   AM_RANGE(0x00, 0x01) AM_WRITE_LEGACY(dsp1_bank_w)
673   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(dsp1_bio_r)
675   AM_RANGE(0x00, 0x01) AM_WRITE(dsp1_bank_w)
676   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(dsp1_bio_r)
674677ADDRESS_MAP_END
675678
676679
r14845r14846
680683 *
681684 *************************************/
682685
683 static READ16_HANDLER( analog_r )
686READ16_MEMBER(atarisy4_state::analog_r)
684687{
685   return (input_port_read(space->machine(), "STICKX") << 8) | input_port_read(space->machine(), "STICKY");
688   return (input_port_read(machine(), "STICKX") << 8) | input_port_read(machine(), "STICKY");
686689}
687690
688691static INPUT_PORTS_START( atarisy4 )
src/mame/drivers/missile.c
r14845r14846
367367   UINT8 m_flipscreen;
368368   UINT8 m_madsel_delay;
369369   UINT16 m_madsel_lastpc;
370   DECLARE_WRITE8_MEMBER(missile_w);
371   DECLARE_READ8_MEMBER(missile_r);
370372};
371373
372374
r14845r14846
707709 *
708710 *************************************/
709711
710static WRITE8_HANDLER( missile_w )
712WRITE8_MEMBER(missile_state::missile_w)
711713{
712   missile_state *state = space->machine().driver_data<missile_state>();
713   UINT8 *videoram = state->m_videoram;
714   UINT8 *videoram = m_videoram;
714715   /* if we're in MADSEL mode, write to video RAM */
715   if (get_madsel(space))
716   if (get_madsel(&space))
716717   {
717      write_vram(space, offset, data);
718      write_vram(&space, offset, data);
718719      return;
719720   }
720721
r14845r14846
727728
728729   /* POKEY */
729730   else if (offset < 0x4800)
730      pokey_w(space->machine().device("pokey"), offset & 0x0f, data);
731      pokey_w(machine().device("pokey"), offset & 0x0f, data);
731732
732733   /* OUT0 */
733734   else if (offset < 0x4900)
734735   {
735      state->m_flipscreen = ~data & 0x40;
736      coin_counter_w(space->machine(), 0, data & 0x20);
737      coin_counter_w(space->machine(), 1, data & 0x10);
738      coin_counter_w(space->machine(), 2, data & 0x08);
739      set_led_status(space->machine(), 1, ~data & 0x04);
740      set_led_status(space->machine(), 0, ~data & 0x02);
741      state->m_ctrld = data & 1;
736      m_flipscreen = ~data & 0x40;
737      coin_counter_w(machine(), 0, data & 0x20);
738      coin_counter_w(machine(), 1, data & 0x10);
739      coin_counter_w(machine(), 2, data & 0x08);
740      set_led_status(machine(), 1, ~data & 0x04);
741      set_led_status(machine(), 0, ~data & 0x02);
742      m_ctrld = data & 1;
742743   }
743744
744745   /* color RAM */
745746   else if (offset >= 0x4b00 && offset < 0x4c00)
746      palette_set_color_rgb(space->machine(), offset & 7, pal1bit(~data >> 3), pal1bit(~data >> 2), pal1bit(~data >> 1));
747      palette_set_color_rgb(machine(), offset & 7, pal1bit(~data >> 3), pal1bit(~data >> 2), pal1bit(~data >> 1));
747748
748749   /* watchdog */
749750   else if (offset >= 0x4c00 && offset < 0x4d00)
750      watchdog_reset(space->machine());
751      watchdog_reset(machine());
751752
752753   /* interrupt ack */
753754   else if (offset >= 0x4d00 && offset < 0x4e00)
754755   {
755      if (state->m_irq_state)
756      if (m_irq_state)
756757      {
757         cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
758         state->m_irq_state = 0;
758         cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
759         m_irq_state = 0;
759760      }
760761   }
761762
762763   /* anything else */
763764   else
764      logerror("%04X:Unknown write to %04X = %02X\n", cpu_get_pc(&space->device()), offset, data);
765      logerror("%04X:Unknown write to %04X = %02X\n", cpu_get_pc(&space.device()), offset, data);
765766}
766767
767768
768static READ8_HANDLER( missile_r )
769READ8_MEMBER(missile_state::missile_r)
769770{
770   missile_state *state = space->machine().driver_data<missile_state>();
771   UINT8 *videoram = state->m_videoram;
771   UINT8 *videoram = m_videoram;
772772   UINT8 result = 0xff;
773773
774774   /* if we're in MADSEL mode, read from video RAM */
775   if (get_madsel(space))
776      return read_vram(space, offset);
775   if (get_madsel(&space))
776      return read_vram(&space, offset);
777777
778778   /* otherwise, strip A15 and handle manually */
779779   offset &= 0x7fff;
r14845r14846
784784
785785   /* ROM */
786786   else if (offset >= 0x5000)
787      result = space->machine().region("maincpu")->base()[offset];
787      result = machine().region("maincpu")->base()[offset];
788788
789789   /* POKEY */
790790   else if (offset < 0x4800)
791      result = pokey_r(space->machine().device("pokey"), offset & 0x0f);
791      result = pokey_r(machine().device("pokey"), offset & 0x0f);
792792
793793   /* IN0 */
794794   else if (offset < 0x4900)
795795   {
796      if (state->m_ctrld)   /* trackball */
796      if (m_ctrld)   /* trackball */
797797      {
798         if (!state->m_flipscreen)
799             result = ((input_port_read(space->machine(), "TRACK0_Y") << 4) & 0xf0) | (input_port_read(space->machine(), "TRACK0_X") & 0x0f);
798         if (!m_flipscreen)
799             result = ((input_port_read(machine(), "TRACK0_Y") << 4) & 0xf0) | (input_port_read(machine(), "TRACK0_X") & 0x0f);
800800         else
801             result = ((input_port_read(space->machine(), "TRACK1_Y") << 4) & 0xf0) | (input_port_read(space->machine(), "TRACK1_X") & 0x0f);
801             result = ((input_port_read(machine(), "TRACK1_Y") << 4) & 0xf0) | (input_port_read(machine(), "TRACK1_X") & 0x0f);
802802      }
803803      else   /* buttons */
804         result = input_port_read(space->machine(), "IN0");
804         result = input_port_read(machine(), "IN0");
805805   }
806806
807807   /* IN1 */
808808   else if (offset < 0x4a00)
809      result = input_port_read(space->machine(), "IN1");
809      result = input_port_read(machine(), "IN1");
810810
811811   /* IN2 */
812812   else if (offset < 0x4b00)
813      result = input_port_read(space->machine(), "R10");
813      result = input_port_read(machine(), "R10");
814814
815815   /* anything else */
816816   else
817      logerror("%04X:Unknown read from %04X\n", cpu_get_pc(&space->device()), offset);
817      logerror("%04X:Unknown read from %04X\n", cpu_get_pc(&space.device()), offset);
818818   return result;
819819}
820820
r14845r14846
828828
829829/* complete memory map derived from schematics (implemented above) */
830830static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, missile_state )
831   AM_RANGE(0x0000, 0xffff) AM_READWRITE_LEGACY(missile_r, missile_w) AM_BASE(m_videoram)
831   AM_RANGE(0x0000, 0xffff) AM_READWRITE(missile_r, missile_w) AM_BASE(m_videoram)
832832ADDRESS_MAP_END
833833
834834
src/mame/drivers/go2000.c
r14845r14846
4747
4848   /* devices */
4949   device_t *m_soundcpu;
50   DECLARE_WRITE16_MEMBER(sound_cmd_w);
51   DECLARE_WRITE8_MEMBER(go2000_pcm_1_bankswitch_w);
5052};
5153
5254
53static WRITE16_HANDLER( sound_cmd_w )
55WRITE16_MEMBER(go2000_state::sound_cmd_w)
5456{
55   go2000_state *state = space->machine().driver_data<go2000_state>();
5657   soundlatch_w(space, offset, data & 0xff);
57   device_set_input_line(state->m_soundcpu, 0, HOLD_LINE);
58   device_set_input_line(m_soundcpu, 0, HOLD_LINE);
5859}
5960
6061static ADDRESS_MAP_START( go2000_map, AS_PROGRAM, 16, go2000_state )
r14845r14846
6566   AM_RANGE(0x800000, 0x800fff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
6667   AM_RANGE(0xa00000, 0xa00001) AM_READ_PORT("INPUTS")
6768   AM_RANGE(0xa00002, 0xa00003) AM_READ_PORT("DSW")
68   AM_RANGE(0x620002, 0x620003) AM_WRITE_LEGACY(sound_cmd_w)
69   AM_RANGE(0x620002, 0x620003) AM_WRITE(sound_cmd_w)
6970//  AM_RANGE(0xe00000, 0xe00001) AM_WRITENOP
7071//  AM_RANGE(0xe00010, 0xe00011) AM_WRITENOP
7172//  AM_RANGE(0xe00020, 0xe00021) AM_WRITENOP
7273ADDRESS_MAP_END
7374
74static WRITE8_HANDLER( go2000_pcm_1_bankswitch_w )
75WRITE8_MEMBER(go2000_state::go2000_pcm_1_bankswitch_w)
7576{
76   memory_set_bank(space->machine(), "bank1", data & 0x07);
77   memory_set_bank(machine(), "bank1", data & 0x07);
7778}
7879
7980static ADDRESS_MAP_START( go2000_sound_map, AS_PROGRAM, 8, go2000_state )
r14845r14846
8586   ADDRESS_MAP_GLOBAL_MASK(0xff)
8687   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(soundlatch_r)
8788   AM_RANGE(0x00, 0x00) AM_DEVWRITE_LEGACY("dac1", dac_w)
88   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(go2000_pcm_1_bankswitch_w)
89   AM_RANGE(0x03, 0x03) AM_WRITE(go2000_pcm_1_bankswitch_w)
8990ADDRESS_MAP_END
9091
9192
src/mame/drivers/deshoros.c
r14845r14846
2525   UINT8 *m_io_ram;
2626   char m_led_array[21];
2727   UINT8 m_bank;
28   DECLARE_READ8_MEMBER(io_r);
29   DECLARE_WRITE8_MEMBER(io_w);
30   void update_led_array(UINT8 new_data);
2831};
2932
3033
r14845r14846
4750}
4851
4952/*I don't know it this is 100% correct,might be different...*/
50static void update_led_array(deshoros_state *state, UINT8 new_data)
53void deshoros_state::update_led_array(UINT8 new_data)
5154{
5255   UINT8 i;
5356   /*scroll the data*/
5457   for(i=0;i<19;i++)
55      state->m_led_array[i] = state->m_led_array[i+1];
58      m_led_array[i] = m_led_array[i+1];
5659   /*update the data*/
57   state->m_led_array[19] = new_data;
60   m_led_array[19] = new_data;
5861}
5962
6063
r14845r14846
7275   }
7376}
7477
75static READ8_HANDLER( io_r )
78READ8_MEMBER(deshoros_state::io_r)
7679{
77   deshoros_state *state = space->machine().driver_data<deshoros_state>();
7880   switch(offset)
7981   {
8082      case 0x00: return 0xff; //printer read
81      case 0x03: return input_port_read(space->machine(), "KEY0" );
82      case 0x04: return input_port_read(space->machine(), "KEY1" );
83      case 0x05: return input_port_read(space->machine(), "SYSTEM" );
84      case 0x0a: return state->m_io_ram[offset]; //"buzzer" 0 read
85      case 0x0b: return state->m_io_ram[offset]; //"buzzer" 1 read
83      case 0x03: return input_port_read(machine(), "KEY0" );
84      case 0x04: return input_port_read(machine(), "KEY1" );
85      case 0x05: return input_port_read(machine(), "SYSTEM" );
86      case 0x0a: return m_io_ram[offset]; //"buzzer" 0 read
87      case 0x0b: return m_io_ram[offset]; //"buzzer" 1 read
8688   }
8789//  printf("R -> [%02x]\n",offset);
8890
89   return state->m_io_ram[offset];
91   return m_io_ram[offset];
9092}
9193
92static WRITE8_HANDLER( io_w )
94WRITE8_MEMBER(deshoros_state::io_w)
9395{
94   deshoros_state *state = space->machine().driver_data<deshoros_state>();
9596   switch(offset)
9697   {
9798      case 0x00: /*Printer data*/                  return;
98      case 0x02: update_led_array(state, data);              return;
99      case 0x05: coin_lockout_w(space->machine(), 0,state->m_io_ram[offset] & 1);return;
99      case 0x02: update_led_array(data);              return;
100      case 0x05: coin_lockout_w(machine(), 0,m_io_ram[offset] & 1);return;
100101      case 0x06: /*Printer IRQ enable*/             return;
101102//      case 0x0a: "buzzer" 0 write
102103//      case 0x0b: "buzzer" 1 write
103      case 0x0c: answer_bankswitch(space->machine(),data&0x03); return; //data & 0x10 enabled too,dunno if it is worth to shift the data...
104      case 0x0c: answer_bankswitch(machine(),data&0x03); return; //data & 0x10 enabled too,dunno if it is worth to shift the data...
104105   }
105   state->m_io_ram[offset] = data;
106   m_io_ram[offset] = data;
106107//  printf("%02x -> [%02x]\n",data,offset);
107108}
108109
109110static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, deshoros_state )
110111   AM_RANGE(0x0000, 0x5fff) AM_ROMBANK("bank1")
111112   AM_RANGE(0x8000, 0x87ff) AM_RAM
112   AM_RANGE(0x9000, 0x900f) AM_READWRITE_LEGACY(io_r,io_w) AM_BASE(m_io_ram) //i/o area
113   AM_RANGE(0x9000, 0x900f) AM_READWRITE(io_r,io_w) AM_BASE(m_io_ram) //i/o area
113114   AM_RANGE(0xc000, 0xffff) AM_ROM
114115ADDRESS_MAP_END
115116
src/mame/drivers/igs_m027.c
r14845r14846
3333   UINT32 *m_igs_palette32;
3434   tilemap_t *m_igs_tx_tilemap;
3535   tilemap_t *m_igs_bg_tilemap;
36   DECLARE_WRITE32_MEMBER(igs_cg_videoram_w);
37   DECLARE_WRITE32_MEMBER(igs_tx_videoram_w);
38   DECLARE_WRITE32_MEMBER(igs_bg_videoram_w);
39   DECLARE_WRITE32_MEMBER(igs_palette32_w);
3640};
3741
3842
r14845r14846
5256
5357
5458/* CGLayer */
55static WRITE32_HANDLER( igs_cg_videoram_w )
59WRITE32_MEMBER(igs_m027_state::igs_cg_videoram_w)
5660{
57   igs_m027_state *state = space->machine().driver_data<igs_m027_state>();
58   COMBINE_DATA(&state->m_igs_cg_videoram[offset]);
61   COMBINE_DATA(&m_igs_cg_videoram[offset]);
5962   //if(data!=0)
60   logerror("PC(%08X) CG @%x = %x!\n",cpu_get_pc(&space->device()),offset ,state->m_igs_cg_videoram[offset]);
63   logerror("PC(%08X) CG @%x = %x!\n",cpu_get_pc(&space.device()),offset ,m_igs_cg_videoram[offset]);
6164
6265
6366
r14845r14846
9699
97100
98101/* TX Layer */
99static WRITE32_HANDLER( igs_tx_videoram_w )
102WRITE32_MEMBER(igs_m027_state::igs_tx_videoram_w)
100103{
101   igs_m027_state *state = space->machine().driver_data<igs_m027_state>();
102   COMBINE_DATA(&state->m_igs_tx_videoram[offset]);
103   state->m_igs_tx_tilemap->mark_tile_dirty(offset);
104   COMBINE_DATA(&m_igs_tx_videoram[offset]);
105   m_igs_tx_tilemap->mark_tile_dirty(offset);
104106   //if(data!=0)
105   //logerror( "TX VIDEO RAM OFFSET %x ,data %x!\n",offset ,state->m_igs_tx_videoram[offset]);
107   //logerror( "TX VIDEO RAM OFFSET %x ,data %x!\n",offset ,m_igs_tx_videoram[offset]);
106108}
107109
108110static TILE_GET_INFO( get_tx_tilemap_tile_info )
r14845r14846
117119}
118120
119121/* BG Layer */
120static WRITE32_HANDLER( igs_bg_videoram_w )
122WRITE32_MEMBER(igs_m027_state::igs_bg_videoram_w)
121123{
122   igs_m027_state *state = space->machine().driver_data<igs_m027_state>();
123   COMBINE_DATA(&state->m_igs_bg_videoram[offset]);
124   state->m_igs_bg_tilemap->mark_tile_dirty(offset);
124   COMBINE_DATA(&m_igs_bg_videoram[offset]);
125   m_igs_bg_tilemap->mark_tile_dirty(offset);
125126   //if(data!=0)
126   logerror("BG VIDEO RAM OFFSET %x ,data %x!\n",offset ,state->m_igs_bg_videoram[offset]);
127   logerror("BG VIDEO RAM OFFSET %x ,data %x!\n",offset ,m_igs_bg_videoram[offset]);
127128}
128129
129130static TILE_GET_INFO( get_bg_tilemap_tile_info )
r14845r14846
139140
140141
141142/* Palette Layer */
142static WRITE32_HANDLER( igs_palette32_w )
143WRITE32_MEMBER(igs_m027_state::igs_palette32_w)
143144{
144   igs_m027_state *state = space->machine().driver_data<igs_m027_state>();
145   space->machine().generic.paletteram.u16=(UINT16 *)state->m_igs_palette32;
146   COMBINE_DATA(&state->m_igs_palette32[offset]);
147   //paletteram16_xGGGGGRRRRRBBBBB_word_w(offset*2,space->machine().generic.paletteram.u16[offset*2],0);
148   //paletteram16_xGGGGGRRRRRBBBBB_word_w(offset*2+1,space->machine().generic.paletteram.u16[offset*2+1],0);
145   machine().generic.paletteram.u16=(UINT16 *)m_igs_palette32;
146   COMBINE_DATA(&m_igs_palette32[offset]);
147   //paletteram16_xGGGGGRRRRRBBBBB_word_w(offset*2,machine().generic.paletteram.u16[offset*2],0);
148   //paletteram16_xGGGGGRRRRRBBBBB_word_w(offset*2+1,machine().generic.paletteram.u16[offset*2+1],0);
149149   //if(data!=0)
150   //fprintf(stdout,"PALETTE RAM OFFSET %x ,data %x!\n",offset ,state->m_igs_palette32[offset]);
150   //fprintf(stdout,"PALETTE RAM OFFSET %x ,data %x!\n",offset ,m_igs_palette32[offset]);
151151}
152152
153153
r14845r14846
197197   AM_RANGE(0x10000000, 0x100003ff) AM_RAM AM_BASE(m_igs_mainram)// main ram for asic?
198198   AM_RANGE(0x18000000, 0x18007fff) AM_RAM
199199
200   AM_RANGE(0x38001000, 0x380017ff) AM_RAM_WRITE_LEGACY(igs_cg_videoram_w) AM_BASE(m_igs_cg_videoram)      //0x200 * 1   CG PALETTE?
201   AM_RANGE(0x38001800, 0x38001fff) AM_RAM_WRITE_LEGACY(igs_palette32_w) AM_BASE(m_igs_palette32)      //0x200 * 1
200   AM_RANGE(0x38001000, 0x380017ff) AM_RAM_WRITE(igs_cg_videoram_w) AM_BASE(m_igs_cg_videoram)      //0x200 * 1   CG PALETTE?
201   AM_RANGE(0x38001800, 0x38001fff) AM_RAM_WRITE(igs_palette32_w) AM_BASE(m_igs_palette32)      //0x200 * 1
202202
203   AM_RANGE(0x38004000, 0x38005FFF) AM_RAM_WRITE_LEGACY(igs_tx_videoram_w) AM_BASE(m_igs_tx_videoram) /* Text Layer */
204   AM_RANGE(0x38006000, 0x38007FFF) AM_RAM_WRITE_LEGACY(igs_bg_videoram_w) AM_BASE(m_igs_bg_videoram) /* CG Layer */
203   AM_RANGE(0x38004000, 0x38005FFF) AM_RAM_WRITE(igs_tx_videoram_w) AM_BASE(m_igs_tx_videoram) /* Text Layer */
204   AM_RANGE(0x38006000, 0x38007FFF) AM_RAM_WRITE(igs_bg_videoram_w) AM_BASE(m_igs_bg_videoram) /* CG Layer */
205205
206206
207207   AM_RANGE(0x38002010, 0x38002017) AM_RAM      //??????????????
src/mame/drivers/subsino2.c
r14845r14846
9696   UINT8 *m_am188em_regs;
9797   UINT16 m_bishjan_sel;
9898   UINT16 m_bishjan_input;
99   DECLARE_WRITE8_MEMBER(ss9601_byte_lo_w);
100   DECLARE_WRITE8_MEMBER(ss9601_byte_lo2_w);
101   DECLARE_WRITE8_MEMBER(ss9601_videoram_0_hi_w);
102   DECLARE_WRITE8_MEMBER(ss9601_videoram_0_lo_w);
103   DECLARE_WRITE8_MEMBER(ss9601_videoram_0_hi_lo_w);
104   DECLARE_WRITE8_MEMBER(ss9601_videoram_0_hi_lo2_w);
105   DECLARE_READ8_MEMBER(ss9601_videoram_0_hi_r);
106   DECLARE_READ8_MEMBER(ss9601_videoram_0_lo_r);
107   DECLARE_WRITE8_MEMBER(ss9601_videoram_1_hi_w);
108   DECLARE_WRITE8_MEMBER(ss9601_videoram_1_lo_w);
109   DECLARE_WRITE8_MEMBER(ss9601_videoram_1_hi_lo_w);
110   DECLARE_WRITE8_MEMBER(ss9601_videoram_1_hi_lo2_w);
111   DECLARE_READ8_MEMBER(ss9601_videoram_1_hi_r);
112   DECLARE_READ8_MEMBER(ss9601_videoram_1_lo_r);
113   DECLARE_WRITE8_MEMBER(ss9601_reelram_hi_lo_w);
114   DECLARE_READ8_MEMBER(ss9601_reelram_hi_r);
115   DECLARE_READ8_MEMBER(ss9601_reelram_lo_r);
116   DECLARE_WRITE8_MEMBER(ss9601_scrollctrl_w);
117   DECLARE_WRITE8_MEMBER(ss9601_tilesize_w);
118   DECLARE_WRITE8_MEMBER(ss9601_scroll_w);
119   DECLARE_WRITE8_MEMBER(ss9601_scrollram_0_hi_w);
120   DECLARE_WRITE8_MEMBER(ss9601_scrollram_0_lo_w);
121   DECLARE_WRITE8_MEMBER(ss9601_scrollram_0_hi_lo_w);
122   DECLARE_READ8_MEMBER(ss9601_scrollram_0_hi_r);
123   DECLARE_READ8_MEMBER(ss9601_scrollram_0_lo_r);
124   DECLARE_WRITE8_MEMBER(ss9601_scrollram_1_hi_w);
125   DECLARE_WRITE8_MEMBER(ss9601_scrollram_1_lo_w);
126   DECLARE_WRITE8_MEMBER(ss9601_scrollram_1_hi_lo_w);
127   DECLARE_READ8_MEMBER(ss9601_scrollram_1_hi_r);
128   DECLARE_READ8_MEMBER(ss9601_scrollram_1_lo_r);
129   DECLARE_WRITE8_MEMBER(ss9601_disable_w);
130   DECLARE_WRITE8_MEMBER(hm86171_colorram_w);
131   DECLARE_WRITE8_MEMBER(dsw_mask_w);
132   DECLARE_READ8_MEMBER(dsw_r);
133   DECLARE_READ8_MEMBER(vblank_bit2_r);
134   DECLARE_READ8_MEMBER(vblank_bit6_r);
135   DECLARE_READ8_MEMBER(am188em_regs_r);
136   DECLARE_WRITE8_MEMBER(am188em_regs_w);
137   DECLARE_WRITE16_MEMBER(bishjan_sel_w);
138   DECLARE_READ16_MEMBER(bishjan_serial_r);
139   DECLARE_WRITE16_MEMBER(bishjan_input_w);
140   DECLARE_READ16_MEMBER(bishjan_input_r);
141   DECLARE_WRITE16_MEMBER(bishjan_outputs_w);
142   DECLARE_WRITE8_MEMBER(expcard_outputs_w);
143   DECLARE_WRITE8_MEMBER(mtrain_outputs_w);
144   DECLARE_WRITE8_MEMBER(mtrain_videoram_w);
145   DECLARE_WRITE8_MEMBER(mtrain_tilesize_w);
146   DECLARE_READ8_MEMBER(mtrain_prot_r);
147   DECLARE_WRITE8_MEMBER(saklove_outputs_w);
148   DECLARE_WRITE8_MEMBER(xplan_outputs_w);
149   DECLARE_WRITE8_MEMBER(xtrain_outputs_w);
99150};
100151
101152
r14845r14846
133184}
134185
135186
136static WRITE8_HANDLER( ss9601_byte_lo_w )
187WRITE8_MEMBER(subsino2_state::ss9601_byte_lo_w)
137188{
138   subsino2_state *state = space->machine().driver_data<subsino2_state>();
139   state->m_ss9601_byte_lo = data;
189   m_ss9601_byte_lo = data;
140190}
141static WRITE8_HANDLER( ss9601_byte_lo2_w )
191WRITE8_MEMBER(subsino2_state::ss9601_byte_lo2_w)
142192{
143   subsino2_state *state = space->machine().driver_data<subsino2_state>();
144   state->m_ss9601_byte_lo2 = data;
193   m_ss9601_byte_lo2 = data;
145194}
146195
147196
r14845r14846
172221}
173222
174223// Layer 0
175static WRITE8_HANDLER( ss9601_videoram_0_hi_w )
224WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_hi_w)
176225{
177   subsino2_state *state = space->machine().driver_data<subsino2_state>();
178   ss9601_videoram_w(&state->m_layers[0], VRAM_HI, space, offset, data);
226   ss9601_videoram_w(&m_layers[0], VRAM_HI, &space, offset, data);
179227}
180228
181static WRITE8_HANDLER( ss9601_videoram_0_lo_w )
229WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_lo_w)
182230{
183   subsino2_state *state = space->machine().driver_data<subsino2_state>();
184   ss9601_videoram_w(&state->m_layers[0], VRAM_LO, space, offset, data);
231   ss9601_videoram_w(&m_layers[0], VRAM_LO, &space, offset, data);
185232}
186233
187static WRITE8_HANDLER( ss9601_videoram_0_hi_lo_w )
234WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_hi_lo_w)
188235{
189   subsino2_state *state = space->machine().driver_data<subsino2_state>();
190   ss9601_videoram_w(&state->m_layers[0], VRAM_HI, space, offset, data);
191   ss9601_videoram_w(&state->m_layers[0], VRAM_LO, space, offset, state->m_ss9601_byte_lo);
236   ss9601_videoram_w(&m_layers[0], VRAM_HI, &space, offset, data);
237   ss9601_videoram_w(&m_layers[0], VRAM_LO, &space, offset, m_ss9601_byte_lo);
192238}
193239
194static WRITE8_HANDLER( ss9601_videoram_0_hi_lo2_w )
240WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_hi_lo2_w)
195241{
196   subsino2_state *state = space->machine().driver_data<subsino2_state>();
197   ss9601_videoram_w(&state->m_layers[0], VRAM_HI, space, offset, data);
198   ss9601_videoram_w(&state->m_layers[0], VRAM_LO, space, offset, state->m_ss9601_byte_lo2);
242   ss9601_videoram_w(&m_layers[0], VRAM_HI, &space, offset, data);
243   ss9601_videoram_w(&m_layers[0], VRAM_LO, &space, offset, m_ss9601_byte_lo2);
199244}
200245
201static READ8_HANDLER( ss9601_videoram_0_hi_r )
246READ8_MEMBER(subsino2_state::ss9601_videoram_0_hi_r)
202247{
203   subsino2_state *state = space->machine().driver_data<subsino2_state>();
204   return state->m_layers[0].videorams[VRAM_HI][offset];
248   return m_layers[0].videorams[VRAM_HI][offset];
205249}
206250
207static READ8_HANDLER( ss9601_videoram_0_lo_r )
251READ8_MEMBER(subsino2_state::ss9601_videoram_0_lo_r)
208252{
209   subsino2_state *state = space->machine().driver_data<subsino2_state>();
210   return state->m_layers[0].videorams[VRAM_LO][offset];
253   return m_layers[0].videorams[VRAM_LO][offset];
211254}
212255
213256// Layer 1
214static WRITE8_HANDLER( ss9601_videoram_1_hi_w )
257WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_hi_w)
215258{
216   subsino2_state *state = space->machine().driver_data<subsino2_state>();
217   ss9601_videoram_w(&state->m_layers[1], VRAM_HI, space, offset, data);
259   ss9601_videoram_w(&m_layers[1], VRAM_HI, &space, offset, data);
218260}
219261
220static WRITE8_HANDLER( ss9601_videoram_1_lo_w )
262WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_lo_w)
221263{
222   subsino2_state *state = space->machine().driver_data<subsino2_state>();
223   ss9601_videoram_w(&state->m_layers[1], VRAM_LO, space, offset, data);
264   ss9601_videoram_w(&m_layers[1], VRAM_LO, &space, offset, data);
224265}
225266
226static WRITE8_HANDLER( ss9601_videoram_1_hi_lo_w )
267WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_hi_lo_w)
227268{
228   subsino2_state *state = space->machine().driver_data<subsino2_state>();
229   ss9601_videoram_w(&state->m_layers[1], VRAM_HI, space, offset, data);
230   ss9601_videoram_w(&state->m_layers[1], VRAM_LO, space, offset, state->m_ss9601_byte_lo);
269   ss9601_videoram_w(&m_layers[1], VRAM_HI, &space, offset, data);
270   ss9601_videoram_w(&m_layers[1], VRAM_LO, &space, offset, m_ss9601_byte_lo);
231271}
232272
233static WRITE8_HANDLER( ss9601_videoram_1_hi_lo2_w )
273WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_hi_lo2_w)
234274{
235   subsino2_state *state = space->machine().driver_data<subsino2_state>();
236   ss9601_videoram_w(&state->m_layers[1], VRAM_HI, space, offset, data);
237   ss9601_videoram_w(&state->m_layers[1], VRAM_LO, space, offset, state->m_ss9601_byte_lo2);
275   ss9601_videoram_w(&m_layers[1], VRAM_HI, &space, offset, data);
276   ss9601_videoram_w(&m_layers[1], VRAM_LO, &space, offset, m_ss9601_byte_lo2);
238277}
239278
240static READ8_HANDLER( ss9601_videoram_1_hi_r )
279READ8_MEMBER(subsino2_state::ss9601_videoram_1_hi_r)
241280{
242   subsino2_state *state = space->machine().driver_data<subsino2_state>();
243   return state->m_layers[1].videorams[VRAM_HI][offset];
281   return m_layers[1].videorams[VRAM_HI][offset];
244282}
245283
246static READ8_HANDLER( ss9601_videoram_1_lo_r )
284READ8_MEMBER(subsino2_state::ss9601_videoram_1_lo_r)
247285{
248   subsino2_state *state = space->machine().driver_data<subsino2_state>();
249   return state->m_layers[1].videorams[VRAM_LO][offset];
286   return m_layers[1].videorams[VRAM_LO][offset];
250287}
251288
252289// Layer 0 Reels
253290
254static WRITE8_HANDLER( ss9601_reelram_hi_lo_w )
291WRITE8_MEMBER(subsino2_state::ss9601_reelram_hi_lo_w)
255292{
256   subsino2_state *state = space->machine().driver_data<subsino2_state>();
257   state->m_ss9601_reelrams[VRAM_HI][offset] = data;
258   state->m_ss9601_reelrams[VRAM_LO][offset] = state->m_ss9601_byte_lo;
293   m_ss9601_reelrams[VRAM_HI][offset] = data;
294   m_ss9601_reelrams[VRAM_LO][offset] = m_ss9601_byte_lo;
259295}
260static READ8_HANDLER( ss9601_reelram_hi_r )
296READ8_MEMBER(subsino2_state::ss9601_reelram_hi_r)
261297{
262   subsino2_state *state = space->machine().driver_data<subsino2_state>();
263   return state->m_ss9601_reelrams[VRAM_HI][offset];
298   return m_ss9601_reelrams[VRAM_HI][offset];
264299}
265static READ8_HANDLER( ss9601_reelram_lo_r )
300READ8_MEMBER(subsino2_state::ss9601_reelram_lo_r)
266301{
267   subsino2_state *state = space->machine().driver_data<subsino2_state>();
268   return state->m_ss9601_reelrams[VRAM_LO][offset];
302   return m_ss9601_reelrams[VRAM_LO][offset];
269303}
270304
271305
r14845r14846
374408
375409// These are written in sequence
376410
377static WRITE8_HANDLER( ss9601_scrollctrl_w )
411WRITE8_MEMBER(subsino2_state::ss9601_scrollctrl_w)
378412{
379   subsino2_state *state = space->machine().driver_data<subsino2_state>();
380   state->m_ss9601_scrollctrl = data;
413   m_ss9601_scrollctrl = data;
381414}
382415
383static WRITE8_HANDLER( ss9601_tilesize_w )
416WRITE8_MEMBER(subsino2_state::ss9601_tilesize_w)
384417{
385   subsino2_state *state = space->machine().driver_data<subsino2_state>();
386   state->m_ss9601_tilesize = data;
418   m_ss9601_tilesize = data;
387419
388420   tilesize_t sizes[2];
389421   switch (data)
r14845r14846
407439         sizes[0] = TILE_8x8;
408440         sizes[1] = TILE_8x8;
409441
410         logerror("%s: warning, unknown tilesize = %02x\n", space->machine().describe_context(), data);
442         logerror("%s: warning, unknown tilesize = %02x\n", machine().describe_context(), data);
411443         popmessage("UNKNOWN TILESIZE %02X", data);
412444         break;
413445   }
414446
415447   for (int i = 0; i < 2; i++)
416448   {
417      layer_t *l = &state->m_layers[i];
449      layer_t *l = &m_layers[i];
418450
419451      if (l->tilesize != sizes[i])
420452      {
r14845r14846
428460                              Tilemaps Scroll
429461***************************************************************************/
430462
431static WRITE8_HANDLER( ss9601_scroll_w )
463WRITE8_MEMBER(subsino2_state::ss9601_scroll_w)
432464{
433   subsino2_state *state = space->machine().driver_data<subsino2_state>();
434   layer_t *layers = state->m_layers;
465   layer_t *layers = m_layers;
435466   switch ( offset )
436467   {
437468      // Layer 0
r14845r14846
449480}
450481
451482// Layer 0
452static WRITE8_HANDLER( ss9601_scrollram_0_hi_w )
483WRITE8_MEMBER(subsino2_state::ss9601_scrollram_0_hi_w)
453484{
454   subsino2_state *state = space->machine().driver_data<subsino2_state>();
455   state->m_layers[0].scrollrams[VRAM_HI][offset] = data;
485   m_layers[0].scrollrams[VRAM_HI][offset] = data;
456486}
457487
458static WRITE8_HANDLER( ss9601_scrollram_0_lo_w )
488WRITE8_MEMBER(subsino2_state::ss9601_scrollram_0_lo_w)
459489{
460   subsino2_state *state = space->machine().driver_data<subsino2_state>();
461   state->m_layers[0].scrollrams[VRAM_LO][offset] = data;
490   m_layers[0].scrollrams[VRAM_LO][offset] = data;
462491}
463492
464static WRITE8_HANDLER( ss9601_scrollram_0_hi_lo_w )
493WRITE8_MEMBER(subsino2_state::ss9601_scrollram_0_hi_lo_w)
465494{
466   subsino2_state *state = space->machine().driver_data<subsino2_state>();
467   state->m_layers[0].scrollrams[VRAM_HI][offset] = data;
468   state->m_layers[0].scrollrams[VRAM_LO][offset] = state->m_ss9601_byte_lo;
495   m_layers[0].scrollrams[VRAM_HI][offset] = data;
496   m_layers[0].scrollrams[VRAM_LO][offset] = m_ss9601_byte_lo;
469497}
470498
471static READ8_HANDLER ( ss9601_scrollram_0_hi_r )
499READ8_MEMBER(subsino2_state::ss9601_scrollram_0_hi_r)
472500{
473   subsino2_state *state = space->machine().driver_data<subsino2_state>();
474   return state->m_layers[0].scrollrams[VRAM_HI][offset];
501   return m_layers[0].scrollrams[VRAM_HI][offset];
475502}
476503
477static READ8_HANDLER ( ss9601_scrollram_0_lo_r )
504READ8_MEMBER(subsino2_state::ss9601_scrollram_0_lo_r)
478505{
479   subsino2_state *state = space->machine().driver_data<subsino2_state>();
480   return state->m_layers[0].scrollrams[VRAM_LO][offset];
506   return m_layers[0].scrollrams[VRAM_LO][offset];
481507}
482508
483509// Layer 1
484static WRITE8_HANDLER( ss9601_scrollram_1_hi_w )
510WRITE8_MEMBER(subsino2_state::ss9601_scrollram_1_hi_w)
485511{
486   subsino2_state *state = space->machine().driver_data<subsino2_state>();
487   state->m_layers[1].scrollrams[VRAM_HI][offset] = data;
512   m_layers[1].scrollrams[VRAM_HI][offset] = data;
488513}
489514
490static WRITE8_HANDLER( ss9601_scrollram_1_lo_w )
515WRITE8_MEMBER(subsino2_state::ss9601_scrollram_1_lo_w)
491516{
492   subsino2_state *state = space->machine().driver_data<subsino2_state>();
493   state->m_layers[1].scrollrams[VRAM_LO][offset] = data;
517   m_layers[1].scrollrams[VRAM_LO][offset] = data;
494518}
495519
496static WRITE8_HANDLER( ss9601_scrollram_1_hi_lo_w )
520WRITE8_MEMBER(subsino2_state::ss9601_scrollram_1_hi_lo_w)
497521{
498   subsino2_state *state = space->machine().driver_data<subsino2_state>();
499   state->m_layers[1].scrollrams[VRAM_HI][offset] = data;
500   state->m_layers[1].scrollrams[VRAM_LO][offset] = state->m_ss9601_byte_lo;
522   m_layers[1].scrollrams[VRAM_HI][offset] = data;
523   m_layers[1].scrollrams[VRAM_LO][offset] = m_ss9601_byte_lo;
501524}
502525
503static READ8_HANDLER ( ss9601_scrollram_1_hi_r )
526READ8_MEMBER(subsino2_state::ss9601_scrollram_1_hi_r)
504527{
505   subsino2_state *state = space->machine().driver_data<subsino2_state>();
506   return state->m_layers[1].scrollrams[VRAM_HI][offset];
528   return m_layers[1].scrollrams[VRAM_HI][offset];
507529}
508530
509static READ8_HANDLER ( ss9601_scrollram_1_lo_r )
531READ8_MEMBER(subsino2_state::ss9601_scrollram_1_lo_r)
510532{
511   subsino2_state *state = space->machine().driver_data<subsino2_state>();
512   return state->m_layers[1].scrollrams[VRAM_LO][offset];
533   return m_layers[1].scrollrams[VRAM_LO][offset];
513534}
514535
515536
r14845r14846
517538                              Tilemaps Disable
518539***************************************************************************/
519540
520static WRITE8_HANDLER( ss9601_disable_w )
541WRITE8_MEMBER(subsino2_state::ss9601_disable_w)
521542{
522   subsino2_state *state = space->machine().driver_data<subsino2_state>();
523   state->m_ss9601_disable = data;
543   m_ss9601_disable = data;
524544}
525545
526546
r14845r14846
724744***************************************************************************/
725745
726746
727static WRITE8_HANDLER( hm86171_colorram_w )
747WRITE8_MEMBER(subsino2_state::hm86171_colorram_w)
728748{
729   subsino2_state *state = space->machine().driver_data<subsino2_state>();
730749   switch (offset)
731750   {
732751      case 0:
733         state->m_hm86171_offs = data * 3;
752         m_hm86171_offs = data * 3;
734753         break;
735754
736755      case 1:
737         state->m_hm86171_colorram[state->m_hm86171_offs] = data;
738         palette_set_color_rgb(space->machine(), state->m_hm86171_offs/3,
739            pal6bit(state->m_hm86171_colorram[(state->m_hm86171_offs/3)*3+0]),
740            pal6bit(state->m_hm86171_colorram[(state->m_hm86171_offs/3)*3+1]),
741            pal6bit(state->m_hm86171_colorram[(state->m_hm86171_offs/3)*3+2])
756         m_hm86171_colorram[m_hm86171_offs] = data;
757         palette_set_color_rgb(machine(), m_hm86171_offs/3,
758            pal6bit(m_hm86171_colorram[(m_hm86171_offs/3)*3+0]),
759            pal6bit(m_hm86171_colorram[(m_hm86171_offs/3)*3+1]),
760            pal6bit(m_hm86171_colorram[(m_hm86171_offs/3)*3+2])
742761         );
743         state->m_hm86171_offs = (state->m_hm86171_offs+1) % (256*3);
762         m_hm86171_offs = (m_hm86171_offs+1) % (256*3);
744763         break;
745764
746765      case 2:
r14845r14846
757776                                Input / Output
758777***************************************************************************/
759778
760static WRITE8_HANDLER( dsw_mask_w )
779WRITE8_MEMBER(subsino2_state::dsw_mask_w)
761780{
762   subsino2_state *state = space->machine().driver_data<subsino2_state>();
763   state->m_dsw_mask = data;
781   m_dsw_mask = data;
764782}
765783
766static READ8_HANDLER( dsw_r )
784READ8_MEMBER(subsino2_state::dsw_r)
767785{
768   subsino2_state *state = space->machine().driver_data<subsino2_state>();
769   return   ( (input_port_read(space->machine(), "DSW1") & state->m_dsw_mask) ? 0x01 : 0 ) |
770         ( (input_port_read(space->machine(), "DSW2") & state->m_dsw_mask) ? 0x02 : 0 ) |
771         ( (input_port_read(space->machine(), "DSW3") & state->m_dsw_mask) ? 0x04 : 0 ) |
772         ( (input_port_read(space->machine(), "DSW4") & state->m_dsw_mask) ? 0x08 : 0 ) ;
786   return   ( (input_port_read(machine(), "DSW1") & m_dsw_mask) ? 0x01 : 0 ) |
787         ( (input_port_read(machine(), "DSW2") & m_dsw_mask) ? 0x02 : 0 ) |
788         ( (input_port_read(machine(), "DSW3") & m_dsw_mask) ? 0x04 : 0 ) |
789         ( (input_port_read(machine(), "DSW4") & m_dsw_mask) ? 0x08 : 0 ) ;
773790}
774791
775792
776static READ8_HANDLER( vblank_bit2_r )
793READ8_MEMBER(subsino2_state::vblank_bit2_r)
777794{
778      return space->machine().primary_screen->vblank() ? 0x04 : 0x00;
795   return machine().primary_screen->vblank() ? 0x04 : 0x00;
779796}
780static READ8_HANDLER( vblank_bit6_r )
797READ8_MEMBER(subsino2_state::vblank_bit6_r)
781798{
782   return space->machine().primary_screen->vblank() ? 0x40 : 0x00;
799   return machine().primary_screen->vblank() ? 0x40 : 0x00;
783800}
784801
785802static WRITE8_DEVICE_HANDLER( oki_bank_bit0_w )
r14845r14846
810827   AM188EM_I0CON = 0x38
811828};
812829
813static READ8_HANDLER( am188em_regs_r )
830READ8_MEMBER(subsino2_state::am188em_regs_r)
814831{
815   subsino2_state *state = space->machine().driver_data<subsino2_state>();
816   return state->m_am188em_regs[offset];
832   return m_am188em_regs[offset];
817833}
818834
819static WRITE8_HANDLER( am188em_regs_w )
835WRITE8_MEMBER(subsino2_state::am188em_regs_w)
820836{
821   subsino2_state *state = space->machine().driver_data<subsino2_state>();
822   state->m_am188em_regs[offset] = data;
837   m_am188em_regs[offset] = data;
823838}
824839
825840static MACHINE_RESET( am188em )
r14845r14846
867882***************************************************************************/
868883
869884
870static WRITE16_HANDLER( bishjan_sel_w )
885WRITE16_MEMBER(subsino2_state::bishjan_sel_w)
871886{
872   subsino2_state *state = space->machine().driver_data<subsino2_state>();
873887   if (ACCESSING_BITS_8_15)
874      state->m_bishjan_sel = data >> 8;
888      m_bishjan_sel = data >> 8;
875889}
876890
877static READ16_HANDLER( bishjan_serial_r )
891READ16_MEMBER(subsino2_state::bishjan_serial_r)
878892{
879   subsino2_state *state = space->machine().driver_data<subsino2_state>();
880893   return
881      (space->machine().rand() & 0x9800)   |   // bit 7 - serial communication
882      (((state->m_bishjan_sel==0x12) ? 0x40:0x00) << 8) |
894      (machine().rand() & 0x9800)   |   // bit 7 - serial communication
895      (((m_bishjan_sel==0x12) ? 0x40:0x00) << 8) |
883896//      (machine.rand() & 0xff);
884//      (((space->machine().primary_screen->frame_number()%60)==0)?0x18:0x00);
897//      (((machine().primary_screen->frame_number()%60)==0)?0x18:0x00);
885898      0x18;
886899}
887900
888static WRITE16_HANDLER( bishjan_input_w )
901WRITE16_MEMBER(subsino2_state::bishjan_input_w)
889902{
890   subsino2_state *state = space->machine().driver_data<subsino2_state>();
891903   if (ACCESSING_BITS_8_15)
892      state->m_bishjan_input = data >> 8;
904      m_bishjan_input = data >> 8;
893905}
894906
895static READ16_HANDLER( bishjan_input_r )
907READ16_MEMBER(subsino2_state::bishjan_input_r)
896908{
897   subsino2_state *state = space->machine().driver_data<subsino2_state>();
898909   int i;
899910   UINT16 res = 0xff;
900911   static const char *const port[] = { "KEYB_0", "KEYB_1", "KEYB_2", "KEYB_3", "KEYB_4" };
901912
902913   for (i = 0; i < 5; i++)
903      if (state->m_bishjan_input & (1 << i))
904         res = input_port_read(space->machine(), port[i]);
914      if (m_bishjan_input & (1 << i))
915         res = input_port_read(machine(), port[i]);
905916
906917   return   (res << 8) |                           // high byte
907         input_port_read(space->machine(), "SYSTEM") |      // low byte
908         (ticket_dispenser_r(space->machine().device("hopper"), 0) ? 0x00 : 0x04)   // bit 2: hopper sensor
918         input_port_read(machine(), "SYSTEM") |      // low byte
919         (ticket_dispenser_r(machine().device("hopper"), 0) ? 0x00 : 0x04)   // bit 2: hopper sensor
909920   ;
910921}
911922
912static WRITE16_HANDLER( bishjan_outputs_w )
923WRITE16_MEMBER(subsino2_state::bishjan_outputs_w)
913924{
914   subsino2_state *state = space->machine().driver_data<subsino2_state>();
915   state->m_outputs16[offset] = data;
925   m_outputs16[offset] = data;
916926
917927   switch (offset)
918928   {
r14845r14846
920930         if (ACCESSING_BITS_0_7)
921931         {
922932            // coin out         data & 0x01;
923            ticket_dispenser_w(space->machine().device("hopper"), 0, (data & 0x0002) ? 0x80 : 0);   // hopper
924            coin_counter_w(space->machine(), 0,   data & 0x0010 );
933            ticket_dispenser_w(machine().device("hopper"), 0, (data & 0x0002) ? 0x80 : 0);   // hopper
934            coin_counter_w(machine(), 0,   data & 0x0010 );
925935         }
926936         break;
927937   }
928938
929//  popmessage("0: %04x", state->m_outputs16[0]);
939//  popmessage("0: %04x", m_outputs16[0]);
930940}
931941
932942
r14845r14846
939949   AM_RANGE( 0x200000, 0x207fff ) AM_RAM AM_SHARE("nvram")   // battery
940950
941951   // read lo (L1)   (only half tilemap?)
942   AM_RANGE( 0x412000, 0x412fff ) AM_READ8_LEGACY(ss9601_videoram_1_lo_r, 0xffff )
943   AM_RANGE( 0x413000, 0x4131ff ) AM_READWRITE8_LEGACY(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w, 0xffff )
952   AM_RANGE( 0x412000, 0x412fff ) AM_READ8(ss9601_videoram_1_lo_r, 0xffff )
953   AM_RANGE( 0x413000, 0x4131ff ) AM_READWRITE8(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w, 0xffff )
944954   // read lo (REEL)
945   AM_RANGE( 0x416000, 0x416fff ) AM_READ8_LEGACY(ss9601_reelram_lo_r, 0xffff )
946   AM_RANGE( 0x417000, 0x4171ff ) AM_READWRITE8_LEGACY(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w, 0xffff )
955   AM_RANGE( 0x416000, 0x416fff ) AM_READ8(ss9601_reelram_lo_r, 0xffff )
956   AM_RANGE( 0x417000, 0x4171ff ) AM_READWRITE8(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w, 0xffff )
947957
948958   // read hi (L1)
949   AM_RANGE( 0x422000, 0x422fff ) AM_READ8_LEGACY(ss9601_videoram_1_hi_r, 0xffff )
950   AM_RANGE( 0x423000, 0x4231ff ) AM_READWRITE8_LEGACY(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w, 0xffff )
959   AM_RANGE( 0x422000, 0x422fff ) AM_READ8(ss9601_videoram_1_hi_r, 0xffff )
960   AM_RANGE( 0x423000, 0x4231ff ) AM_READWRITE8(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w, 0xffff )
951961   // read hi (REEL)
952   AM_RANGE( 0x426000, 0x426fff ) AM_READ8_LEGACY(ss9601_reelram_hi_r, 0xffff )
953   AM_RANGE( 0x427000, 0x4271ff ) AM_READWRITE8_LEGACY(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w, 0xffff )
962   AM_RANGE( 0x426000, 0x426fff ) AM_READ8(ss9601_reelram_hi_r, 0xffff )
963   AM_RANGE( 0x427000, 0x4271ff ) AM_READWRITE8(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w, 0xffff )
954964
955965   // write both (L1)
956   AM_RANGE( 0x430000, 0x431fff ) AM_WRITE8_LEGACY(ss9601_videoram_1_hi_lo_w, 0xffff )
957   AM_RANGE( 0x432000, 0x432fff ) AM_WRITE8_LEGACY(ss9601_videoram_1_hi_lo_w, 0xffff )
958   AM_RANGE( 0x433000, 0x4331ff ) AM_WRITE8_LEGACY(ss9601_scrollram_1_hi_lo_w, 0xffff )
966   AM_RANGE( 0x430000, 0x431fff ) AM_WRITE8(ss9601_videoram_1_hi_lo_w, 0xffff )
967   AM_RANGE( 0x432000, 0x432fff ) AM_WRITE8(ss9601_videoram_1_hi_lo_w, 0xffff )
968   AM_RANGE( 0x433000, 0x4331ff ) AM_WRITE8(ss9601_scrollram_1_hi_lo_w, 0xffff )
959969   // write both (L0 & REEL)
960   AM_RANGE( 0x434000, 0x435fff ) AM_WRITE8_LEGACY(ss9601_videoram_0_hi_lo_w, 0xffff )
961   AM_RANGE( 0x436000, 0x436fff ) AM_WRITE8_LEGACY(ss9601_reelram_hi_lo_w, 0xffff )
962   AM_RANGE( 0x437000, 0x4371ff ) AM_WRITE8_LEGACY(ss9601_scrollram_0_hi_lo_w, 0xffff )
970   AM_RANGE( 0x434000, 0x435fff ) AM_WRITE8(ss9601_videoram_0_hi_lo_w, 0xffff )
971   AM_RANGE( 0x436000, 0x436fff ) AM_WRITE8(ss9601_reelram_hi_lo_w, 0xffff )
972   AM_RANGE( 0x437000, 0x4371ff ) AM_WRITE8(ss9601_scrollram_0_hi_lo_w, 0xffff )
963973
964   AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE_LEGACY(bishjan_sel_w )
965   AM_RANGE( 0x600040, 0x600041 ) AM_WRITE8_LEGACY(ss9601_scrollctrl_w, 0xff00 )
966   AM_RANGE( 0x600060, 0x600063 ) AM_WRITE8_LEGACY(hm86171_colorram_w, 0xffff )
967   AM_RANGE( 0x600080, 0x600081 ) AM_WRITE8_LEGACY(ss9601_tilesize_w, 0xff00 )
968   AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE8_LEGACY(ss9601_byte_lo_w, 0xff00 )
974   AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE(bishjan_sel_w )
975   AM_RANGE( 0x600040, 0x600041 ) AM_WRITE8(ss9601_scrollctrl_w, 0xff00 )
976   AM_RANGE( 0x600060, 0x600063 ) AM_WRITE8(hm86171_colorram_w, 0xffff )
977   AM_RANGE( 0x600080, 0x600081 ) AM_WRITE8(ss9601_tilesize_w, 0xff00 )
978   AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE8(ss9601_byte_lo_w, 0xff00 )
969979
970   AM_RANGE( 0xa0001e, 0xa0001f ) AM_WRITE8_LEGACY(ss9601_disable_w, 0x00ff )
980   AM_RANGE( 0xa0001e, 0xa0001f ) AM_WRITE8(ss9601_disable_w, 0x00ff )
971981
972   AM_RANGE( 0xa00020, 0xa00025 ) AM_WRITE8_LEGACY(ss9601_scroll_w, 0xffff )
982   AM_RANGE( 0xa00020, 0xa00025 ) AM_WRITE8(ss9601_scroll_w, 0xffff )
973983
974984   AM_RANGE( 0xc00000, 0xc00001 ) AM_READ_PORT("DSW")                        // SW1
975   AM_RANGE( 0xc00002, 0xc00003 ) AM_READ_PORT("JOY") AM_WRITE_LEGACY(bishjan_input_w )   // IN C
976   AM_RANGE( 0xc00004, 0xc00005 ) AM_READ_LEGACY(bishjan_input_r )                  // IN A & B
977   AM_RANGE( 0xc00006, 0xc00007 ) AM_READ_LEGACY(bishjan_serial_r )                  // IN D
978   AM_RANGE( 0xc00008, 0xc00009 ) AM_READ_PORT("RESET") AM_WRITE_LEGACY(bishjan_outputs_w ) AM_BASE(m_outputs16 )
985   AM_RANGE( 0xc00002, 0xc00003 ) AM_READ_PORT("JOY") AM_WRITE(bishjan_input_w )   // IN C
986   AM_RANGE( 0xc00004, 0xc00005 ) AM_READ(bishjan_input_r )                  // IN A & B
987   AM_RANGE( 0xc00006, 0xc00007 ) AM_READ(bishjan_serial_r )                  // IN D
988   AM_RANGE( 0xc00008, 0xc00009 ) AM_READ_PORT("RESET") AM_WRITE(bishjan_outputs_w ) AM_BASE(m_outputs16 )
979989ADDRESS_MAP_END
980990
981991/***************************************************************************
982992                       Express Card / Top Card
983993***************************************************************************/
984994
985static WRITE8_HANDLER( expcard_outputs_w )
995WRITE8_MEMBER(subsino2_state::expcard_outputs_w)
986996{
987   subsino2_state *state = space->machine().driver_data<subsino2_state>();
988   state->m_outputs[offset] = data;
997   m_outputs[offset] = data;
989998
990999   switch (offset)
9911000   {
r14845r14846
9941003         break;
9951004
9961005      case 1:   // C
997         set_led_status(space->machine(), 0,   data & 0x02);   // raise
1006         set_led_status(machine(), 0,   data & 0x02);   // raise
9981007         break;
9991008
10001009      case 2:   // B
1001         set_led_status(space->machine(), 1,   data & 0x04);   // hold 4 / small & hold 5 / big ?
1002         set_led_status(space->machine(), 2,   data & 0x08);   // hold 1 / bet
1003         set_led_status(space->machine(), 3,   data & 0x10);   // hold 2 / take ?
1004         set_led_status(space->machine(), 4,   data & 0x20);   // hold 3 / double up ?
1010         set_led_status(machine(), 1,   data & 0x04);   // hold 4 / small & hold 5 / big ?
1011         set_led_status(machine(), 2,   data & 0x08);   // hold 1 / bet
1012         set_led_status(machine(), 3,   data & 0x10);   // hold 2 / take ?
1013         set_led_status(machine(), 4,   data & 0x20);   // hold 3 / double up ?
10051014         break;
10061015
10071016      case 3:   // A
1008         coin_counter_w(space->machine(), 0,   data & 0x01 );   // coin in
1009         coin_counter_w(space->machine(), 1,   data & 0x02 );   // key in
1017         coin_counter_w(machine(), 0,   data & 0x01 );   // coin in
1018         coin_counter_w(machine(), 1,   data & 0x02 );   // key in
10101019
1011         set_led_status(space->machine(), 5,   data & 0x10);   // start
1020         set_led_status(machine(), 5,   data & 0x10);   // start
10121021         break;
10131022   }
10141023
1015//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", state->m_outputs[0], state->m_outputs[1], state->m_outputs[2], state->m_outputs[3]);
1024//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
10161025}
10171026
10181027/***************************************************************************
10191028                                Magic Train
10201029***************************************************************************/
10211030
1022static WRITE8_HANDLER( mtrain_outputs_w )
1031WRITE8_MEMBER(subsino2_state::mtrain_outputs_w)
10231032{
1024   subsino2_state *state = space->machine().driver_data<subsino2_state>();
1025   state->m_outputs[offset] = data;
1033   m_outputs[offset] = data;
10261034
10271035   switch (offset)
10281036   {
10291037      case 0:
1030         coin_counter_w(space->machine(), 0,   data & 0x01 );   // key in
1031         coin_counter_w(space->machine(), 1,   data & 0x02 );   // coin in
1032         coin_counter_w(space->machine(), 2,   data & 0x10 );   // pay out
1033//          coin_counter_w(space->machine(), 3,   data & 0x20 );  // hopper motor
1038         coin_counter_w(machine(), 0,   data & 0x01 );   // key in
1039         coin_counter_w(machine(), 1,   data & 0x02 );   // coin in
1040         coin_counter_w(machine(), 2,   data & 0x10 );   // pay out
1041//          coin_counter_w(machine(), 3,   data & 0x20 );  // hopper motor
10341042         break;
10351043
10361044      case 1:
1037         set_led_status(space->machine(), 0,   data & 0x01);   // stop reel?
1038         set_led_status(space->machine(), 1,   data & 0x02);   // stop reel? (double or take)
1039         set_led_status(space->machine(), 2,   data & 0x04);   // start all
1040         set_led_status(space->machine(), 3,   data & 0x08);   // bet / stop all
1041         set_led_status(space->machine(), 4,   data & 0x20);   // stop reel? (double or take)
1045         set_led_status(machine(), 0,   data & 0x01);   // stop reel?
1046         set_led_status(machine(), 1,   data & 0x02);   // stop reel? (double or take)
1047         set_led_status(machine(), 2,   data & 0x04);   // start all
1048         set_led_status(machine(), 3,   data & 0x08);   // bet / stop all
1049         set_led_status(machine(), 4,   data & 0x20);   // stop reel? (double or take)
10421050         break;
10431051
10441052      case 2:
r14845r14846
10481056         break;
10491057   }
10501058
1051//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", state->m_outputs[0], state->m_outputs[1], state->m_outputs[2], state->m_outputs[3]);
1059//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
10521060}
10531061
1054static WRITE8_HANDLER( mtrain_videoram_w )
1062WRITE8_MEMBER(subsino2_state::mtrain_videoram_w)
10551063{
1056   subsino2_state *state = space->machine().driver_data<subsino2_state>();
1057   vram_t vram = (state->m_ss9601_byte_lo & 0x08) ? VRAM_HI : VRAM_LO;
1058   switch (state->m_ss9601_byte_lo & (~0x08))
1064   vram_t vram = (m_ss9601_byte_lo & 0x08) ? VRAM_HI : VRAM_LO;
1065   switch (m_ss9601_byte_lo & (~0x08))
10591066   {
1060      case 0x00:   ss9601_videoram_w(&state->m_layers[1], vram, space, offset,        data);
1061               ss9601_videoram_w(&state->m_layers[1], vram, space, offset+0x1000, data);   break;
1067      case 0x00:   ss9601_videoram_w(&m_layers[1], vram, &space, offset,        data);
1068               ss9601_videoram_w(&m_layers[1], vram, &space, offset+0x1000, data);   break;
10621069
1063      case 0x04:   ss9601_videoram_w(&state->m_layers[0], vram, space, offset,        data);
1064               ss9601_videoram_w(&state->m_layers[0], vram, space, offset+0x1000, data);   break;
1070      case 0x04:   ss9601_videoram_w(&m_layers[0], vram, &space, offset,        data);
1071               ss9601_videoram_w(&m_layers[0], vram, &space, offset+0x1000, data);   break;
10651072
1066      case 0x06:   state->m_ss9601_reelrams[vram][offset] = data;   break;
1073      case 0x06:   m_ss9601_reelrams[vram][offset] = data;   break;
10671074   }
10681075}
10691076
1070static WRITE8_HANDLER( mtrain_tilesize_w )
1077WRITE8_MEMBER(subsino2_state::mtrain_tilesize_w)
10711078{
1072   subsino2_state *state = space->machine().driver_data<subsino2_state>();
1073   state->m_ss9601_tilesize = data;
1079   m_ss9601_tilesize = data;
10741080
10751081   tilesize_t sizes[2];
10761082   switch (data)
r14845r14846
10891095         sizes[0] = TILE_8x8;
10901096         sizes[1] = TILE_8x8;
10911097
1092         logerror("%s: warning, unknown tilesize = %02x\n", space->machine().describe_context(), data);
1098         logerror("%s: warning, unknown tilesize = %02x\n", machine().describe_context(), data);
10931099         popmessage("UNKNOWN TILESIZE %02X", data);
10941100         break;
10951101   }
10961102
10971103   for (int i = 0; i < 2; i++)
10981104   {
1099      layer_t *l = &state->m_layers[i];
1105      layer_t *l = &m_layers[i];
11001106
11011107      if (l->tilesize != sizes[i])
11021108      {
r14845r14846
11061112   }
11071113}
11081114
1109static READ8_HANDLER( mtrain_prot_r )
1115READ8_MEMBER(subsino2_state::mtrain_prot_r)
11101116{
11111117   return "SUBSION"[offset];
11121118}
r14845r14846
11161122
11171123   AM_RANGE( 0x07800, 0x07fff ) AM_RAM AM_SHARE("nvram")   // battery
11181124
1119   AM_RANGE( 0x08000, 0x08fff ) AM_WRITE_LEGACY(mtrain_videoram_w )
1125   AM_RANGE( 0x08000, 0x08fff ) AM_WRITE(mtrain_videoram_w )
11201126
1121   AM_RANGE( 0x0911f, 0x0911f ) AM_WRITE_LEGACY(ss9601_disable_w )
1122   AM_RANGE( 0x09120, 0x09125 ) AM_WRITE_LEGACY(ss9601_scroll_w )
1127   AM_RANGE( 0x0911f, 0x0911f ) AM_WRITE(ss9601_disable_w )
1128   AM_RANGE( 0x09120, 0x09125 ) AM_WRITE(ss9601_scroll_w )
11231129
1124   AM_RANGE( 0x0912f, 0x0912f ) AM_WRITE_LEGACY(ss9601_byte_lo_w )
1130   AM_RANGE( 0x0912f, 0x0912f ) AM_WRITE(ss9601_byte_lo_w )
11251131
1126   AM_RANGE( 0x09140, 0x09142 ) AM_WRITE_LEGACY(mtrain_outputs_w ) AM_BASE(m_outputs )
1132   AM_RANGE( 0x09140, 0x09142 ) AM_WRITE(mtrain_outputs_w ) AM_BASE(m_outputs )
11271133   AM_RANGE( 0x09143, 0x09143 ) AM_READ_PORT( "IN D" )   // (not shown in system test) 0x40 serial out, 0x80 serial in
11281134   AM_RANGE( 0x09144, 0x09144 ) AM_READ_PORT( "IN A" )   // A
11291135   AM_RANGE( 0x09145, 0x09145 ) AM_READ_PORT( "IN B" )   // B
11301136   AM_RANGE( 0x09146, 0x09146 ) AM_READ_PORT( "IN C" )   // C
1131   AM_RANGE( 0x09147, 0x09147 ) AM_READ_LEGACY(dsw_r )
1132   AM_RANGE( 0x09148, 0x09148 ) AM_WRITE_LEGACY(dsw_mask_w )
1137   AM_RANGE( 0x09147, 0x09147 ) AM_READ(dsw_r )
1138   AM_RANGE( 0x09148, 0x09148 ) AM_WRITE(dsw_mask_w )
11331139
1134   AM_RANGE( 0x09152, 0x09152 ) AM_WRITE_LEGACY(vblank_bit2_r ) AM_DEVWRITE_LEGACY("oki", oki_bank_bit0_w )
1140   AM_RANGE( 0x09152, 0x09152 ) AM_READ(vblank_bit2_r ) AM_DEVWRITE_LEGACY("oki", oki_bank_bit0_w )
11351141
1136   AM_RANGE( 0x09158, 0x0915e ) AM_READ_LEGACY(mtrain_prot_r )
1142   AM_RANGE( 0x09158, 0x0915e ) AM_READ(mtrain_prot_r )
11371143
1138   AM_RANGE( 0x09160, 0x09163 ) AM_WRITE_LEGACY(hm86171_colorram_w )
1144   AM_RANGE( 0x09160, 0x09163 ) AM_WRITE(hm86171_colorram_w )
11391145   AM_RANGE( 0x09164, 0x09164 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
1140   AM_RANGE( 0x09168, 0x09168 ) AM_WRITE_LEGACY(mtrain_tilesize_w )
1146   AM_RANGE( 0x09168, 0x09168 ) AM_WRITE(mtrain_tilesize_w )
11411147
11421148   AM_RANGE( 0x09800, 0x09fff ) AM_RAM
11431149
r14845r14846
11521158                          Sakura Love - Ying Hua Lian
11531159***************************************************************************/
11541160
1155static WRITE8_HANDLER( saklove_outputs_w )
1161WRITE8_MEMBER(subsino2_state::saklove_outputs_w)
11561162{
1157   subsino2_state *state = space->machine().driver_data<subsino2_state>();
1158   state->m_outputs[offset] = data;
1163   m_outputs[offset] = data;
11591164
11601165   switch (offset)
11611166   {
11621167      case 0:
1163         coin_counter_w(space->machine(), 0,   data & 0x01 );   // coin in
1164         coin_counter_w(space->machine(), 1,   data & 0x02 );   // key in
1168         coin_counter_w(machine(), 0,   data & 0x01 );   // coin in
1169         coin_counter_w(machine(), 1,   data & 0x02 );   // key in
11651170         break;
11661171
11671172      case 1:
r14845r14846
11751180         break;
11761181   }
11771182
1178//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", state->m_outputs[0], state->m_outputs[1], state->m_outputs[2], state->m_outputs[3]);
1183//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
11791184}
11801185
11811186static ADDRESS_MAP_START( saklove_map, AS_PROGRAM, 8, subsino2_state )
11821187   AM_RANGE(0x00000, 0x07fff) AM_RAM AM_SHARE("nvram")   // battery
11831188
11841189   // read lo (L1)   (only half tilemap?)
1185   AM_RANGE(0x12000, 0x12fff) AM_READWRITE_LEGACY(ss9601_videoram_1_lo_r,  ss9601_videoram_1_lo_w )
1186   AM_RANGE(0x13000, 0x131ff) AM_READWRITE_LEGACY(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w )
1190   AM_RANGE(0x12000, 0x12fff) AM_READWRITE(ss9601_videoram_1_lo_r,  ss9601_videoram_1_lo_w )
1191   AM_RANGE(0x13000, 0x131ff) AM_READWRITE(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w )
11871192   // read lo (L0)
1188   AM_RANGE(0x16000, 0x16fff) AM_READWRITE_LEGACY(ss9601_videoram_0_lo_r,  ss9601_videoram_0_lo_w )
1189   AM_RANGE(0x17000, 0x171ff) AM_READWRITE_LEGACY(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w )
1193   AM_RANGE(0x16000, 0x16fff) AM_READWRITE(ss9601_videoram_0_lo_r,  ss9601_videoram_0_lo_w )
1194   AM_RANGE(0x17000, 0x171ff) AM_READWRITE(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w )
11901195
11911196   // read hi (L1)
1192   AM_RANGE(0x22000, 0x22fff) AM_READWRITE_LEGACY(ss9601_videoram_1_hi_r,  ss9601_videoram_1_hi_w )
1193   AM_RANGE(0x23000, 0x231ff) AM_READWRITE_LEGACY(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w )
1197   AM_RANGE(0x22000, 0x22fff) AM_READWRITE(ss9601_videoram_1_hi_r,  ss9601_videoram_1_hi_w )
1198   AM_RANGE(0x23000, 0x231ff) AM_READWRITE(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w )
11941199   // read hi (L0)
1195   AM_RANGE(0x26000, 0x26fff) AM_READWRITE_LEGACY(ss9601_videoram_0_hi_r,  ss9601_videoram_0_hi_w )
1196   AM_RANGE(0x27000, 0x271ff) AM_READWRITE_LEGACY(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w )
1200   AM_RANGE(0x26000, 0x26fff) AM_READWRITE(ss9601_videoram_0_hi_r,  ss9601_videoram_0_hi_w )
1201   AM_RANGE(0x27000, 0x271ff) AM_READWRITE(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w )
11971202
11981203   // write both (L1)
1199   AM_RANGE(0x30000, 0x31fff) AM_READWRITE_LEGACY(ss9601_videoram_1_hi_r, ss9601_videoram_1_hi_lo_w )
1204   AM_RANGE(0x30000, 0x31fff) AM_READWRITE(ss9601_videoram_1_hi_r, ss9601_videoram_1_hi_lo_w )
12001205   // write both (L0)
1201   AM_RANGE(0x34000, 0x35fff) AM_READWRITE_LEGACY(ss9601_videoram_0_hi_r, ss9601_videoram_0_hi_lo_w )
1206   AM_RANGE(0x34000, 0x35fff) AM_READWRITE(ss9601_videoram_0_hi_r, ss9601_videoram_0_hi_lo_w )
12021207
12031208   AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION("maincpu",0)
12041209ADDRESS_MAP_END
12051210
12061211static ADDRESS_MAP_START( saklove_io, AS_IO, 8, subsino2_state )
1207   AM_RANGE(0x0000, 0x0000) AM_WRITE_LEGACY(ss9601_scrollctrl_w )
1212   AM_RANGE(0x0000, 0x0000) AM_WRITE(ss9601_scrollctrl_w )
12081213
12091214   AM_RANGE(0x0020, 0x0020) AM_DEVREADWRITE("oki", okim6295_device, read, write)
12101215   AM_RANGE(0x0040, 0x0041) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w )
12111216
1212   AM_RANGE(0x0060, 0x0063) AM_WRITE_LEGACY(hm86171_colorram_w )
1217   AM_RANGE(0x0060, 0x0063) AM_WRITE(hm86171_colorram_w )
12131218
1214   AM_RANGE(0x0080, 0x0080) AM_WRITE_LEGACY(ss9601_tilesize_w )
1215   AM_RANGE(0x00a0, 0x00a0) AM_WRITE_LEGACY(ss9601_byte_lo_w )
1216   AM_RANGE(0x021f, 0x021f) AM_WRITE_LEGACY(ss9601_disable_w )
1217   AM_RANGE(0x0220, 0x0225) AM_WRITE_LEGACY(ss9601_scroll_w )
1219   AM_RANGE(0x0080, 0x0080) AM_WRITE(ss9601_tilesize_w )
1220   AM_RANGE(0x00a0, 0x00a0) AM_WRITE(ss9601_byte_lo_w )
1221   AM_RANGE(0x021f, 0x021f) AM_WRITE(ss9601_disable_w )
1222   AM_RANGE(0x0220, 0x0225) AM_WRITE(ss9601_scroll_w )
12181223
1219   AM_RANGE(0x0300, 0x0303) AM_WRITE_LEGACY(saklove_outputs_w ) AM_BASE(m_outputs )
1224   AM_RANGE(0x0300, 0x0303) AM_WRITE(saklove_outputs_w ) AM_BASE(m_outputs )
12201225   AM_RANGE(0x0303, 0x0303) AM_READ_PORT( "IN D" )   // 0x40 serial out, 0x80 serial in
12211226   AM_RANGE(0x0304, 0x0304) AM_READ_PORT( "IN A" )
12221227   AM_RANGE(0x0305, 0x0305) AM_READ_PORT( "IN B" )
12231228   AM_RANGE(0x0306, 0x0306) AM_READ_PORT( "IN C" )
12241229
1225   AM_RANGE(0x0307, 0x0307) AM_READ_LEGACY(dsw_r )
1226   AM_RANGE(0x0308, 0x0308) AM_WRITE_LEGACY(dsw_mask_w )
1230   AM_RANGE(0x0307, 0x0307) AM_READ(dsw_r )
1231   AM_RANGE(0x0308, 0x0308) AM_WRITE(dsw_mask_w )
12271232
1228   AM_RANGE(0x0312, 0x0312) AM_READ_LEGACY(vblank_bit2_r ) AM_DEVWRITE_LEGACY("oki", oki_bank_bit0_w )
1233   AM_RANGE(0x0312, 0x0312) AM_READ(vblank_bit2_r ) AM_DEVWRITE_LEGACY("oki", oki_bank_bit0_w )
12291234
12301235   // Peripheral Control Block
1231   AM_RANGE(0xff00, 0xffff) AM_READWRITE_LEGACY(am188em_regs_r, am188em_regs_w ) AM_BASE(m_am188em_regs )
1236   AM_RANGE(0xff00, 0xffff) AM_READWRITE(am188em_regs_r, am188em_regs_w ) AM_BASE(m_am188em_regs )
12321237ADDRESS_MAP_END
12331238
12341239/***************************************************************************
12351240                                X-Plan
12361241***************************************************************************/
12371242
1238static WRITE8_HANDLER( xplan_outputs_w )
1243WRITE8_MEMBER(subsino2_state::xplan_outputs_w)
12391244{
1240   subsino2_state *state = space->machine().driver_data<subsino2_state>();
1241   state->m_outputs[offset] = data;
1245   m_outputs[offset] = data;
12421246
12431247   switch (offset)
12441248   {
r14845r14846
12471251         break;
12481252
12491253      case 1:
1250         set_led_status(space->machine(), 0,   data & 0x02);   // raise
1254         set_led_status(machine(), 0,   data & 0x02);   // raise
12511255         break;
12521256
12531257      case 2:   // B
1254         set_led_status(space->machine(), 1,   data & 0x04);   // hold 1 / big ?
1255         set_led_status(space->machine(), 2,   data & 0x08);   // hold 5 / bet
1256         set_led_status(space->machine(), 3,   data & 0x10);   // hold 4 ?
1257         set_led_status(space->machine(), 4,   data & 0x20);   // hold 2 / double up
1258         set_led_status(space->machine(), 5,   data & 0x40);   // hold 3 / small ?
1258         set_led_status(machine(), 1,   data & 0x04);   // hold 1 / big ?
1259         set_led_status(machine(), 2,   data & 0x08);   // hold 5 / bet
1260         set_led_status(machine(), 3,   data & 0x10);   // hold 4 ?
1261         set_led_status(machine(), 4,   data & 0x20);   // hold 2 / double up
1262         set_led_status(machine(), 5,   data & 0x40);   // hold 3 / small ?
12591263         break;
12601264
12611265      case 3:   // A
1262         coin_counter_w(space->machine(), 0,   data & 0x01 );
1263         coin_counter_w(space->machine(), 1,   data & 0x02 );
1266         coin_counter_w(machine(), 0,   data & 0x01 );
1267         coin_counter_w(machine(), 1,   data & 0x02 );
12641268
1265         set_led_status(space->machine(), 6,   data & 0x10);   // start / take
1269         set_led_status(machine(), 6,   data & 0x10);   // start / take
12661270         break;
12671271   }
12681272
1269//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", state->m_outputs[0], state->m_outputs[1], state->m_outputs[2], state->m_outputs[3]);
1273//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
12701274}
12711275
12721276static ADDRESS_MAP_START( xplan_map, AS_PROGRAM, 8, subsino2_state )
12731277   AM_RANGE(0x00000, 0x07fff) AM_RAM AM_SHARE("nvram")   // battery
12741278
12751279   // write both (L1, byte_lo2)
1276   AM_RANGE( 0x10000, 0x11fff ) AM_WRITE_LEGACY(ss9601_videoram_1_hi_lo2_w )
1280   AM_RANGE( 0x10000, 0x11fff ) AM_WRITE(ss9601_videoram_1_hi_lo2_w )
12771281   // read lo (L1)   (only half tilemap?)
1278   AM_RANGE( 0x12000, 0x12fff ) AM_READ_LEGACY(ss9601_videoram_1_lo_r )
1279   AM_RANGE( 0x13000, 0x131ff ) AM_READWRITE_LEGACY(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w )
1282   AM_RANGE( 0x12000, 0x12fff ) AM_READ(ss9601_videoram_1_lo_r )
1283   AM_RANGE( 0x13000, 0x131ff ) AM_READWRITE(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w )
12801284
12811285   // write both (L0, byte_lo2)
1282   AM_RANGE( 0x14000, 0x15fff ) AM_WRITE_LEGACY(ss9601_videoram_0_hi_lo2_w )
1286   AM_RANGE( 0x14000, 0x15fff ) AM_WRITE(ss9601_videoram_0_hi_lo2_w )
12831287   // read lo (REEL)
1284   AM_RANGE( 0x16000, 0x16fff ) AM_READ_LEGACY(ss9601_reelram_lo_r )
1285   AM_RANGE( 0x17000, 0x171ff ) AM_READWRITE_LEGACY(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w )
1288   AM_RANGE( 0x16000, 0x16fff ) AM_READ(ss9601_reelram_lo_r )
1289   AM_RANGE( 0x17000, 0x171ff ) AM_READWRITE(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w )
12861290
12871291   // read hi (L1)
1288   AM_RANGE( 0x22000, 0x22fff ) AM_READ_LEGACY(ss9601_videoram_1_hi_r )
1289   AM_RANGE( 0x23000, 0x231ff ) AM_READWRITE_LEGACY(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w )
1292   AM_RANGE( 0x22000, 0x22fff ) AM_READ(ss9601_videoram_1_hi_r )
1293   AM_RANGE( 0x23000, 0x231ff ) AM_READWRITE(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w )
12901294   // read hi (REEL)
1291   AM_RANGE( 0x26000, 0x26fff ) AM_READ_LEGACY(ss9601_reelram_hi_r )
1292   AM_RANGE( 0x27000, 0x271ff ) AM_READWRITE_LEGACY(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w )
1295   AM_RANGE( 0x26000, 0x26fff ) AM_READ(ss9601_reelram_hi_r )
1296   AM_RANGE( 0x27000, 0x271ff ) AM_READWRITE(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w )
12931297
12941298   // write both (L1, byte_lo)
1295   AM_RANGE( 0x30000, 0x31fff ) AM_WRITE_LEGACY(ss9601_videoram_1_hi_lo_w )
1296   AM_RANGE( 0x32000, 0x32fff ) AM_WRITE_LEGACY(ss9601_videoram_1_hi_lo_w )
1297   AM_RANGE( 0x33000, 0x331ff ) AM_WRITE_LEGACY(ss9601_scrollram_1_hi_lo_w )
1299   AM_RANGE( 0x30000, 0x31fff ) AM_WRITE(ss9601_videoram_1_hi_lo_w )
1300   AM_RANGE( 0x32000, 0x32fff ) AM_WRITE(ss9601_videoram_1_hi_lo_w )
1301   AM_RANGE( 0x33000, 0x331ff ) AM_WRITE(ss9601_scrollram_1_hi_lo_w )
12981302   // write both (L0 & REEL, byte_lo)
1299   AM_RANGE( 0x34000, 0x35fff ) AM_WRITE_LEGACY(ss9601_videoram_0_hi_lo_w )
1300   AM_RANGE( 0x36000, 0x36fff ) AM_WRITE_LEGACY(ss9601_reelram_hi_lo_w )
1301   AM_RANGE( 0x37000, 0x371ff ) AM_WRITE_LEGACY(ss9601_scrollram_0_hi_lo_w )
1303   AM_RANGE( 0x34000, 0x35fff ) AM_WRITE(ss9601_videoram_0_hi_lo_w )
1304   AM_RANGE( 0x36000, 0x36fff ) AM_WRITE(ss9601_reelram_hi_lo_w )
1305   AM_RANGE( 0x37000, 0x371ff ) AM_WRITE(ss9601_scrollram_0_hi_lo_w )
13021306
13031307   AM_RANGE(0xc0000, 0xfffff) AM_ROM AM_REGION("maincpu",0)
13041308ADDRESS_MAP_END
r14845r14846
13061310static ADDRESS_MAP_START( xplan_io, AS_IO, 8, subsino2_state )
13071311   AM_RANGE(0x0000, 0x0000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
13081312
1309   AM_RANGE(0x0020, 0x0020) AM_WRITE_LEGACY(ss9601_byte_lo2_w )
1313   AM_RANGE(0x0020, 0x0020) AM_WRITE(ss9601_byte_lo2_w )
13101314
1311   AM_RANGE(0x0040, 0x0040) AM_WRITE_LEGACY(ss9601_scrollctrl_w )
1315   AM_RANGE(0x0040, 0x0040) AM_WRITE(ss9601_scrollctrl_w )
13121316
1313   AM_RANGE(0x0060, 0x0063) AM_WRITE_LEGACY(hm86171_colorram_w )
1314   AM_RANGE(0x0080, 0x0080) AM_WRITE_LEGACY(ss9601_tilesize_w )
1315   AM_RANGE(0x00a0, 0x00a0) AM_WRITE_LEGACY(ss9601_byte_lo_w )
1317   AM_RANGE(0x0060, 0x0063) AM_WRITE(hm86171_colorram_w )
1318   AM_RANGE(0x0080, 0x0080) AM_WRITE(ss9601_tilesize_w )
1319   AM_RANGE(0x00a0, 0x00a0) AM_WRITE(ss9601_byte_lo_w )
13161320
1317   AM_RANGE(0x021f, 0x021f) AM_WRITE_LEGACY(ss9601_disable_w )
1318   AM_RANGE(0x0220, 0x0225) AM_WRITE_LEGACY(ss9601_scroll_w )
1321   AM_RANGE(0x021f, 0x021f) AM_WRITE(ss9601_disable_w )
1322   AM_RANGE(0x0220, 0x0225) AM_WRITE(ss9601_scroll_w )
13191323
13201324   AM_RANGE(0x0235, 0x0235) AM_NOP   // INT0 Ack.?
13211325
1322   AM_RANGE(0x0300, 0x0300) AM_READ_LEGACY(vblank_bit6_r ) AM_DEVWRITE_LEGACY("oki", oki_bank_bit4_w )
1323   AM_RANGE(0x0301, 0x0301) AM_WRITE_LEGACY(dsw_mask_w )
1324   AM_RANGE(0x0302, 0x0302) AM_READ_LEGACY(dsw_r )
1326   AM_RANGE(0x0300, 0x0300) AM_READ(vblank_bit6_r ) AM_DEVWRITE_LEGACY("oki", oki_bank_bit4_w )
1327   AM_RANGE(0x0301, 0x0301) AM_WRITE(dsw_mask_w )
1328   AM_RANGE(0x0302, 0x0302) AM_READ(dsw_r )
13251329   AM_RANGE(0x0303, 0x0303) AM_READ_PORT( "IN C" )
13261330   AM_RANGE(0x0304, 0x0304) AM_READ_PORT( "IN B" )
13271331   AM_RANGE(0x0305, 0x0305) AM_READ_PORT( "IN A" )
13281332   AM_RANGE(0x0306, 0x0306) AM_READ_PORT( "IN D" )   // 0x40 serial out, 0x80 serial in
13291333
13301334   // 306 = d, 307 = c, 308 = b, 309 = a
1331   AM_RANGE(0x0306, 0x0309) AM_WRITE_LEGACY(xplan_outputs_w ) AM_BASE(m_outputs )
1335   AM_RANGE(0x0306, 0x0309) AM_WRITE(xplan_outputs_w ) AM_BASE(m_outputs )
13321336
13331337   // Peripheral Control Block
1334   AM_RANGE(0xff00, 0xffff) AM_READWRITE_LEGACY(am188em_regs_r, am188em_regs_w ) AM_BASE(m_am188em_regs )
1338   AM_RANGE(0xff00, 0xffff) AM_READWRITE(am188em_regs_r, am188em_regs_w ) AM_BASE(m_am188em_regs )
13351339ADDRESS_MAP_END
13361340
13371341/***************************************************************************
13381342                                X-Train
13391343***************************************************************************/
13401344
1341static WRITE8_HANDLER( xtrain_outputs_w )
1345WRITE8_MEMBER(subsino2_state::xtrain_outputs_w)
13421346{
1343   subsino2_state *state = space->machine().driver_data<subsino2_state>();
1344   state->m_outputs[offset] = data;
1347   m_outputs[offset] = data;
13451348
13461349   switch (offset)
13471350   {
r14845r14846
13501353         break;
13511354
13521355      case 1:   // C
1353         set_led_status(space->machine(), 0,   data & 0x02);   // re-double
1354         set_led_status(space->machine(), 1,   data & 0x04);   // half double
1356         set_led_status(machine(), 0,   data & 0x02);   // re-double
1357         set_led_status(machine(), 1,   data & 0x04);   // half double
13551358         break;
13561359
13571360      case 2:   // B
1358         set_led_status(space->machine(), 2,   data & 0x02);   // hold 3 / small
1359         set_led_status(space->machine(), 3,   data & 0x04);   // hold 2 / big
1360         set_led_status(space->machine(), 4,   data & 0x08);   // bet
1361         set_led_status(space->machine(), 5,   data & 0x10);   // hold1 / take
1362         set_led_status(space->machine(), 6,   data & 0x20);   // double up
1361         set_led_status(machine(), 2,   data & 0x02);   // hold 3 / small
1362         set_led_status(machine(), 3,   data & 0x04);   // hold 2 / big
1363         set_led_status(machine(), 4,   data & 0x08);   // bet
1364         set_led_status(machine(), 5,   data & 0x10);   // hold1 / take
1365         set_led_status(machine(), 6,   data & 0x20);   // double up
13631366         break;
13641367
13651368      case 3:   // A
1366         coin_counter_w(space->machine(), 0,   data & 0x01 );   // coin in
1367         coin_counter_w(space->machine(), 1,   data & 0x02 );   // key in
1369         coin_counter_w(machine(), 0,   data & 0x01 );   // coin in
1370         coin_counter_w(machine(), 1,   data & 0x02 );   // key in
13681371
1369         set_led_status(space->machine(), 7,   data & 0x10);   // start
1372         set_led_status(machine(), 7,   data & 0x10);   // start
13701373         break;
13711374   }
13721375
1373//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", state->m_outputs[0], state->m_outputs[1], state->m_outputs[2], state->m_outputs[3]);
1376//  popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
13741377}
13751378
13761379static ADDRESS_MAP_START( expcard_io, AS_IO, 8, subsino2_state )
13771380   // 306 = d, 307 = c, 308 = b, 309 = a
1378   AM_RANGE(0x0306, 0x0309) AM_WRITE_LEGACY(expcard_outputs_w ) AM_BASE(m_outputs )
1381   AM_RANGE(0x0306, 0x0309) AM_WRITE(expcard_outputs_w ) AM_BASE(m_outputs )
13791382
13801383   AM_IMPORT_FROM( xplan_io )
13811384ADDRESS_MAP_END
13821385
13831386static ADDRESS_MAP_START( xtrain_io, AS_IO, 8, subsino2_state )
13841387   // 306 = d, 307 = c, 308 = b, 309 = a
1385   AM_RANGE(0x0306, 0x0309) AM_WRITE_LEGACY(xtrain_outputs_w ) AM_BASE(m_outputs )
1388   AM_RANGE(0x0306, 0x0309) AM_WRITE(xtrain_outputs_w ) AM_BASE(m_outputs )
13861389
13871390   AM_IMPORT_FROM( xplan_io )
13881391ADDRESS_MAP_END
src/mame/drivers/buster.c
r14845r14846
1919      : driver_device(mconfig, type, tag) { }
2020
2121   UINT8 *m_vram;
22   DECLARE_READ8_MEMBER(test_r);
2223};
2324
2425
r14845r14846
5051}
5152
5253#if 0
53static READ8_HANDLER( test_r )
54READ8_MEMBER(buster_state::test_r)
5455{
55   return space->machine().rand();
56   return machine().rand();
5657}
5758#endif
5859
r14845r14846
7172   AM_RANGE(0x7c8c, 0x7c8c) AM_READ_PORT("IN6")
7273   AM_RANGE(0x7c8e, 0x7c8e) AM_READ_PORT("IN7")
7374   AM_RANGE(0x7c00, 0x7cff) AM_RAM // ???
74   AM_RANGE(0x8800, 0x8fff) AM_RAM AM_SHARE("wram")//AM_READ_LEGACY(test_r) // ???
75   AM_RANGE(0x8800, 0x8fff) AM_RAM AM_SHARE("wram")//AM_READ(test_r) // ???
7576   AM_RANGE(0xa000, 0xa0ff) AM_RAM // nvram?
7677ADDRESS_MAP_END
7778
src/mame/drivers/m63.c
r14845r14846
155155   device_t *m_ay1;
156156   device_t *m_ay2;
157157   samples_device *m_samples;
158   DECLARE_WRITE8_MEMBER(m63_videoram_w);
159   DECLARE_WRITE8_MEMBER(m63_colorram_w);
160   DECLARE_WRITE8_MEMBER(m63_videoram2_w);
161   DECLARE_WRITE8_MEMBER(m63_palbank_w);
162   DECLARE_WRITE8_MEMBER(m63_flipscreen_w);
163   DECLARE_WRITE8_MEMBER(fghtbskt_flipscreen_w);
164   DECLARE_WRITE8_MEMBER(coin_w);
165   DECLARE_WRITE8_MEMBER(snd_irq_w);
166   DECLARE_WRITE8_MEMBER(snddata_w);
167   DECLARE_WRITE8_MEMBER(p1_w);
168   DECLARE_WRITE8_MEMBER(p2_w);
169   DECLARE_READ8_MEMBER(snd_status_r);
170   DECLARE_READ8_MEMBER(irq_r);
171   DECLARE_READ8_MEMBER(snddata_r);
172   DECLARE_WRITE8_MEMBER(fghtbskt_samples_w);
173   DECLARE_WRITE8_MEMBER(nmi_mask_w);
158174};
159175
160176
r14845r14846
213229   }
214230}
215231
216static WRITE8_HANDLER( m63_videoram_w )
232WRITE8_MEMBER(m63_state::m63_videoram_w)
217233{
218   m63_state *state = space->machine().driver_data<m63_state>();
219234
220   state->m_videoram[offset] = data;
221   state->m_bg_tilemap->mark_tile_dirty(offset);
235   m_videoram[offset] = data;
236   m_bg_tilemap->mark_tile_dirty(offset);
222237}
223238
224static WRITE8_HANDLER( m63_colorram_w )
239WRITE8_MEMBER(m63_state::m63_colorram_w)
225240{
226   m63_state *state = space->machine().driver_data<m63_state>();
227241
228   state->m_colorram[offset] = data;
229   state->m_bg_tilemap->mark_tile_dirty(offset);
242   m_colorram[offset] = data;
243   m_bg_tilemap->mark_tile_dirty(offset);
230244}
231245
232static WRITE8_HANDLER( m63_videoram2_w )
246WRITE8_MEMBER(m63_state::m63_videoram2_w)
233247{
234   m63_state *state = space->machine().driver_data<m63_state>();
235248
236   state->m_videoram2[offset] = data;
237   state->m_fg_tilemap->mark_tile_dirty(offset);
249   m_videoram2[offset] = data;
250   m_fg_tilemap->mark_tile_dirty(offset);
238251}
239252
240static WRITE8_HANDLER( m63_palbank_w )
253WRITE8_MEMBER(m63_state::m63_palbank_w)
241254{
242   m63_state *state = space->machine().driver_data<m63_state>();
243255
244   if (state->m_pal_bank != (data & 0x01))
256   if (m_pal_bank != (data & 0x01))
245257   {
246      state->m_pal_bank = data & 0x01;
247      state->m_bg_tilemap->mark_all_dirty();
258      m_pal_bank = data & 0x01;
259      m_bg_tilemap->mark_all_dirty();
248260   }
249261}
250262
251static WRITE8_HANDLER( m63_flipscreen_w )
263WRITE8_MEMBER(m63_state::m63_flipscreen_w)
252264{
253   if (flip_screen_get(space->machine()) != (~data & 0x01))
265   if (flip_screen_get(machine()) != (~data & 0x01))
254266   {
255      flip_screen_set(space->machine(), ~data & 0x01);
256      space->machine().tilemap().mark_all_dirty();
267      flip_screen_set(machine(), ~data & 0x01);
268      machine().tilemap().mark_all_dirty();
257269   }
258270}
259271
260static WRITE8_HANDLER( fghtbskt_flipscreen_w )
272WRITE8_MEMBER(m63_state::fghtbskt_flipscreen_w)
261273{
262   m63_state *state = space->machine().driver_data<m63_state>();
263274
264   flip_screen_set(space->machine(), data);
265   state->m_fg_flag = flip_screen_get(space->machine()) ? TILE_FLIPX : 0;
275   flip_screen_set(machine(), data);
276   m_fg_flag = flip_screen_get(machine()) ? TILE_FLIPX : 0;
266277}
267278
268279
r14845r14846
354365}
355366
356367
357static WRITE8_HANDLER( coin_w )
368WRITE8_MEMBER(m63_state::coin_w)
358369{
359   coin_counter_w(space->machine(), offset, data & 0x01);
370   coin_counter_w(machine(), offset, data & 0x01);
360371}
361372
362static WRITE8_HANDLER( snd_irq_w )
373WRITE8_MEMBER(m63_state::snd_irq_w)
363374{
364   m63_state *state = space->machine().driver_data<m63_state>();
365   device_set_input_line(state->m_soundcpu, 0, ASSERT_LINE);
366   space->machine().scheduler().synchronize();
375   device_set_input_line(m_soundcpu, 0, ASSERT_LINE);
376   machine().scheduler().synchronize();
367377}
368378
369static WRITE8_HANDLER( snddata_w )
379WRITE8_MEMBER(m63_state::snddata_w)
370380{
371   m63_state *state = space->machine().driver_data<m63_state>();
372381
373   if ((state->m_p2 & 0xf0) == 0xe0)
374      ay8910_address_w(state->m_ay1, 0, offset);
375   else if ((state->m_p2 & 0xf0) == 0xa0)
376      ay8910_data_w(state->m_ay1, 0, offset);
377   else if (state->m_ay2 != NULL && (state->m_p1 & 0xe0) == 0x60)
378      ay8910_address_w(state->m_ay2, 0, offset);
379   else if (state->m_ay2 != NULL && (state->m_p1 & 0xe0) == 0x40)
380       ay8910_data_w(state->m_ay2, 0, offset);
381   else if ((state->m_p2 & 0xf0) == 0x70 )
382      state->m_sound_status = offset;
382   if ((m_p2 & 0xf0) == 0xe0)
383      ay8910_address_w(m_ay1, 0, offset);
384   else if ((m_p2 & 0xf0) == 0xa0)
385      ay8910_data_w(m_ay1, 0, offset);
386   else if (m_ay2 != NULL && (m_p1 & 0xe0) == 0x60)
387      ay8910_address_w(m_ay2, 0, offset);
388   else if (m_ay2 != NULL && (m_p1 & 0xe0) == 0x40)
389       ay8910_data_w(m_ay2, 0, offset);
390   else if ((m_p2 & 0xf0) == 0x70 )
391      m_sound_status = offset;
383392}
384393
385static WRITE8_HANDLER( p1_w )
394WRITE8_MEMBER(m63_state::p1_w)
386395{
387   m63_state *state = space->machine().driver_data<m63_state>();
388   state->m_p1 = data;
396   m_p1 = data;
389397}
390398
391static WRITE8_HANDLER( p2_w )
399WRITE8_MEMBER(m63_state::p2_w)
392400{
393   m63_state *state = space->machine().driver_data<m63_state>();
394401
395   state->m_p2 = data;
396   if((state->m_p2 & 0xf0) == 0x50)
402   m_p2 = data;
403   if((m_p2 & 0xf0) == 0x50)
397404   {
398      device_set_input_line(state->m_soundcpu, 0, CLEAR_LINE);
405      device_set_input_line(m_soundcpu, 0, CLEAR_LINE);
399406   }
400407}
401408
402static READ8_HANDLER( snd_status_r )
409READ8_MEMBER(m63_state::snd_status_r)
403410{
404   m63_state *state = space->machine().driver_data<m63_state>();
405   return state->m_sound_status;
411   return m_sound_status;
406412}
407413
408static READ8_HANDLER( irq_r )
414READ8_MEMBER(m63_state::irq_r)
409415{
410   m63_state *state = space->machine().driver_data<m63_state>();
411416
412   if (state->m_sound_irq)
417   if (m_sound_irq)
413418   {
414      state->m_sound_irq = 0;
419      m_sound_irq = 0;
415420      return 1;
416421   }
417422   return 0;
418423}
419424
420static READ8_HANDLER( snddata_r )
425READ8_MEMBER(m63_state::snddata_r)
421426{
422   m63_state *state = space->machine().driver_data<m63_state>();
423   switch (state->m_p2 & 0xf0)
427   switch (m_p2 & 0xf0)
424428   {
425429      case 0x60:   return soundlatch_r(space, 0); ;
426      case 0x70:   return space->machine().region("user1")->base()[((state->m_p1 & 0x1f) << 8) | offset];
430      case 0x70:   return machine().region("user1")->base()[((m_p1 & 0x1f) << 8) | offset];
427431   }
428432   return 0xff;
429433}
430434
431static WRITE8_HANDLER( fghtbskt_samples_w )
435WRITE8_MEMBER(m63_state::fghtbskt_samples_w)
432436{
433   m63_state *state = space->machine().driver_data<m63_state>();
434437
435438   if (data & 1)
436      state->m_samples->start_raw(0, state->m_samplebuf + ((data & 0xf0) << 8), 0x2000, 8000);
439      m_samples->start_raw(0, m_samplebuf + ((data & 0xf0) << 8), 0x2000, 8000);
437440}
438441
439static WRITE8_HANDLER( nmi_mask_w )
442WRITE8_MEMBER(m63_state::nmi_mask_w)
440443{
441   m63_state *state = space->machine().driver_data<m63_state>();
442444
443   state->m_nmi_mask = data & 1;
445   m_nmi_mask = data & 1;
444446}
445447
446448
r14845r14846
450452   AM_RANGE(0xe000, 0xe1ff) AM_RAM
451453   AM_RANGE(0xe200, 0xe2ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
452454   AM_RANGE(0xe300, 0xe3ff) AM_RAM AM_BASE(m_scrollram)
453   AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE_LEGACY(m63_videoram2_w) AM_BASE(m_videoram2)
454   AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE_LEGACY(m63_videoram_w) AM_BASE(m_videoram)
455   AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE_LEGACY(m63_colorram_w) AM_BASE(m_colorram)
456   AM_RANGE(0xf000, 0xf000) AM_WRITE_LEGACY(nmi_mask_w)
457   AM_RANGE(0xf002, 0xf002) AM_WRITE_LEGACY(m63_flipscreen_w)
458   AM_RANGE(0xf003, 0xf003) AM_WRITE_LEGACY(m63_palbank_w)
459   AM_RANGE(0xf006, 0xf007) AM_WRITE_LEGACY(coin_w)
455   AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE(m_videoram2)
456   AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_BASE(m_videoram)
457   AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_BASE(m_colorram)
458   AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_mask_w)
459   AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
460   AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_w)
461   AM_RANGE(0xf006, 0xf007) AM_WRITE(coin_w)
460462   AM_RANGE(0xf800, 0xf800) AM_READ_PORT("P1") AM_WRITE_LEGACY(soundlatch_w)
461463   AM_RANGE(0xf801, 0xf801) AM_READ_PORT("P2") AM_WRITENOP   /* continues game when in stop mode (cleared by NMI handler) */
462464   AM_RANGE(0xf802, 0xf802) AM_READ_PORT("DSW1")
463   AM_RANGE(0xf803, 0xf803) AM_WRITE_LEGACY(snd_irq_w)
465   AM_RANGE(0xf803, 0xf803) AM_WRITE(snd_irq_w)
464466   AM_RANGE(0xf806, 0xf806) AM_READ_PORT("DSW2")
465467ADDRESS_MAP_END
466468
r14845r14846
471473   AM_RANGE(0xd000, 0xd1ff) AM_RAM
472474   AM_RANGE(0xd200, 0xd2ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
473475   AM_RANGE(0xd300, 0xd3ff) AM_RAM AM_BASE(m_scrollram)
474   AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE_LEGACY(m63_videoram2_w) AM_BASE(m_videoram2)
475   AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE_LEGACY(m63_videoram_w) AM_BASE(m_videoram)
476   AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE_LEGACY(m63_colorram_w) AM_BASE(m_colorram)
477   AM_RANGE(0xf000, 0xf000) AM_READ_LEGACY(snd_status_r)
476   AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE(m_videoram2)
477   AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(m63_videoram_w) AM_BASE(m_videoram)
478   AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(m63_colorram_w) AM_BASE(m_colorram)
479   AM_RANGE(0xf000, 0xf000) AM_READ(snd_status_r)
478480   AM_RANGE(0xf001, 0xf001) AM_READ_PORT("P1")
479481   AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P2")
480482   AM_RANGE(0xf003, 0xf003) AM_READ_PORT("DSW")
481   AM_RANGE(0xf000, 0xf000) AM_WRITE_LEGACY(snd_irq_w)
483   AM_RANGE(0xf000, 0xf000) AM_WRITE(snd_irq_w)
482484   AM_RANGE(0xf001, 0xf001) AM_WRITENOP
483485   AM_RANGE(0xf002, 0xf002) AM_WRITE_LEGACY(soundlatch_w)
484486   AM_RANGE(0xf800, 0xf800) AM_WRITENOP
485   AM_RANGE(0xf801, 0xf801) AM_WRITE_LEGACY(nmi_mask_w)
486   AM_RANGE(0xf802, 0xf802) AM_WRITE_LEGACY(fghtbskt_flipscreen_w)
487   AM_RANGE(0xf801, 0xf801) AM_WRITE(nmi_mask_w)
488   AM_RANGE(0xf802, 0xf802) AM_WRITE(fghtbskt_flipscreen_w)
487489   AM_RANGE(0xf803, 0xf803) AM_WRITENOP
488490   AM_RANGE(0xf804, 0xf804) AM_WRITENOP
489491   AM_RANGE(0xf805, 0xf805) AM_WRITENOP
490492   AM_RANGE(0xf806, 0xf806) AM_WRITENOP
491   AM_RANGE(0xf807, 0xf807) AM_WRITE_LEGACY(fghtbskt_samples_w)
493   AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w)
492494ADDRESS_MAP_END
493495
494496static ADDRESS_MAP_START( i8039_map, AS_PROGRAM, 8, m63_state )
r14845r14846
497499
498500
499501static ADDRESS_MAP_START( i8039_port_map, AS_IO, 8, m63_state )
500   AM_RANGE(0x00, 0xff) AM_READWRITE_LEGACY(snddata_r, snddata_w)
501   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE_LEGACY(p1_w)
502   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE_LEGACY(p2_w)
503   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ_LEGACY(irq_r)
502   AM_RANGE(0x00, 0xff) AM_READWRITE(snddata_r, snddata_w)
503   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE(p1_w)
504   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(p2_w)
505   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(irq_r)
504506ADDRESS_MAP_END
505507
506508
src/mame/drivers/ggconnie.c
r14845r14846
2929   ggconnie_state(const machine_config &mconfig, device_type type, const char *tag)
3030      : driver_device(mconfig, type, tag) { }
3131
32   DECLARE_WRITE8_MEMBER(lamp_w);
33   DECLARE_WRITE8_MEMBER(output_w);
3234};
3335
3436
r14845r14846
113115
114116INPUT_PORTS_END
115117
116static WRITE8_HANDLER(lamp_w)
118WRITE8_MEMBER(ggconnie_state::lamp_w)
117119{
118120   output_set_value("lamp", !BIT(data,0));
119121}
120122
121static WRITE8_HANDLER(output_w)
123WRITE8_MEMBER(ggconnie_state::output_w)
122124{
123125   // written in "Output Test" in test mode
124126}
r14845r14846
132134   AM_RANGE( 0x1f7100, 0x1f7100) AM_READ_PORT("SWB")
133135   AM_RANGE( 0x1f7200, 0x1f7200) AM_READ_PORT("SWC")
134136   AM_RANGE( 0x1f7700, 0x1f7700) AM_READ_PORT("IN1")
135   AM_RANGE( 0x1f7800, 0x1f7800) AM_WRITE_LEGACY(output_w)
137   AM_RANGE( 0x1f7800, 0x1f7800) AM_WRITE(output_w)
136138   AM_RANGE( 0x1fe000, 0x1fe007) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w) AM_MIRROR(0x03e0)
137139   AM_RANGE( 0x1fe008, 0x1fe00f) AM_READWRITE_LEGACY(vpc_r, vpc_w) AM_MIRROR(0x03e0)
138140   AM_RANGE( 0x1fe010, 0x1fe017) AM_READWRITE_LEGACY(vdc_1_r, vdc_1_w) AM_MIRROR(0x03e0)
139141   AM_RANGE( 0x1fe400, 0x1fe7ff) AM_READWRITE_LEGACY(vce_r, vce_w)
140142   AM_RANGE( 0x1fe800, 0x1febff) AM_DEVREADWRITE_LEGACY("c6280", c6280_r, c6280_w)
141143   AM_RANGE( 0x1fec00, 0x1fefff) AM_READWRITE_LEGACY(h6280_timer_r, h6280_timer_w)
142   AM_RANGE( 0x1ff000, 0x1ff000) AM_READ_PORT("IN0") AM_WRITE_LEGACY(lamp_w)
144   AM_RANGE( 0x1ff000, 0x1ff000) AM_READ_PORT("IN0") AM_WRITE(lamp_w)
143145   AM_RANGE( 0x1ff400, 0x1ff7ff) AM_READWRITE_LEGACY(h6280_irq_status_r, h6280_irq_status_w )
144146ADDRESS_MAP_END
145147
src/mame/drivers/toratora.c
r14845r14846
4343   pia6821_device *m_pia_u1;
4444   pia6821_device *m_pia_u2;
4545   pia6821_device *m_pia_u3;
46   DECLARE_WRITE8_MEMBER(clear_tv_w);
47   DECLARE_READ8_MEMBER(timer_r);
48   DECLARE_WRITE8_MEMBER(clear_timer_w);
4649};
4750
4851
r14845r14846
98101}
99102
100103
101static WRITE8_HANDLER( clear_tv_w )
104WRITE8_MEMBER(toratora_state::clear_tv_w)
102105{
103   toratora_state *state = space->machine().driver_data<toratora_state>();
104   state->m_clear_tv = 1;
106   m_clear_tv = 1;
105107}
106108
107109
r14845r14846
156158   state->m_pia_u1->ca2_w(input_port_read(device->machine(), "INPUT") & 0x20);
157159}
158160
159static READ8_HANDLER( timer_r )
161READ8_MEMBER(toratora_state::timer_r)
160162{
161   toratora_state *state = space->machine().driver_data<toratora_state>();
162   return state->m_timer;
163   return m_timer;
163164}
164165
165static WRITE8_HANDLER( clear_timer_w )
166WRITE8_MEMBER(toratora_state::clear_timer_w)
166167{
167   toratora_state *state = space->machine().driver_data<toratora_state>();
168   state->m_timer = 0;
168   m_timer = 0;
169169}
170170
171171
r14845r14846
314314   AM_RANGE(0x8000, 0x9fff) AM_RAM AM_BASE_SIZE(m_videoram, m_videoram_size)
315315   AM_RANGE(0xa000, 0xf047) AM_NOP
316316   AM_RANGE(0xf048, 0xf049) AM_NOP
317   AM_RANGE(0xf04a, 0xf04a) AM_WRITE_LEGACY(clear_tv_w)   /* the read is mark *LEDEN, but not used */
318   AM_RANGE(0xf04b, 0xf04b) AM_READWRITE_LEGACY(timer_r, clear_timer_w)
317   AM_RANGE(0xf04a, 0xf04a) AM_WRITE(clear_tv_w)   /* the read is mark *LEDEN, but not used */
318   AM_RANGE(0xf04b, 0xf04b) AM_READWRITE(timer_r, clear_timer_w)
319319   AM_RANGE(0xa04c, 0xf09f) AM_NOP
320320   AM_RANGE(0xf0a0, 0xf0a3) AM_DEVREADWRITE("pia_u1", pia6821_device, read, write)
321321   AM_RANGE(0xf0a4, 0xf0a7) AM_DEVREADWRITE("pia_u3", pia6821_device, read, write)
src/mame/drivers/r2dtank.c
r14845r14846
6161   UINT32 m_ttl74123_output;
6262   UINT8 m_AY8910_selected;
6363   pen_t m_pens[NUM_PENS];
64   DECLARE_READ8_MEMBER(audio_command_r);
65   DECLARE_WRITE8_MEMBER(audio_command_w);
66   DECLARE_READ8_MEMBER(audio_answer_r);
67   DECLARE_WRITE8_MEMBER(audio_answer_w);
6468};
6569
6670
r14845r14846
99103 *
100104 *************************************/
101105
102static READ8_HANDLER( audio_command_r )
106READ8_MEMBER(r2dtank_state::audio_command_r)
103107{
104108   UINT8 ret = soundlatch_r(space, 0);
105109
106if (LOG_AUDIO_COMM) logerror("%08X  CPU#1  Audio Command Read: %x\n", cpu_get_pc(&space->device()), ret);
110if (LOG_AUDIO_COMM) logerror("%08X  CPU#1  Audio Command Read: %x\n", cpu_get_pc(&space.device()), ret);
107111
108112   return ret;
109113}
110114
111115
112static WRITE8_HANDLER( audio_command_w )
116WRITE8_MEMBER(r2dtank_state::audio_command_w)
113117{
114118   soundlatch_w(space, 0, ~data);
115   cputag_set_input_line(space->machine(), "audiocpu", M6800_IRQ_LINE, HOLD_LINE);
119   cputag_set_input_line(machine(), "audiocpu", M6800_IRQ_LINE, HOLD_LINE);
116120
117if (LOG_AUDIO_COMM) logerror("%08X   CPU#0  Audio Command Write: %x\n", cpu_get_pc(&space->device()), data^0xff);
121if (LOG_AUDIO_COMM) logerror("%08X   CPU#0  Audio Command Write: %x\n", cpu_get_pc(&space.device()), data^0xff);
118122}
119123
120124
121static READ8_HANDLER( audio_answer_r )
125READ8_MEMBER(r2dtank_state::audio_answer_r)
122126{
123127   UINT8 ret = soundlatch2_r(space, 0);
124if (LOG_AUDIO_COMM) logerror("%08X  CPU#0  Audio Answer Read: %x\n", cpu_get_pc(&space->device()), ret);
128if (LOG_AUDIO_COMM) logerror("%08X  CPU#0  Audio Answer Read: %x\n", cpu_get_pc(&space.device()), ret);
125129
126130   return ret;
127131}
128132
129133
130static WRITE8_HANDLER( audio_answer_w )
134WRITE8_MEMBER(r2dtank_state::audio_answer_w)
131135{
132136   /* HACK - prevents lock-up, but causes game to end some in-between sreens prematurely */
133   if (cpu_get_pc(&space->device()) == 0xfb12)
137   if (cpu_get_pc(&space.device()) == 0xfb12)
134138      data = 0x00;
135139
136140   soundlatch2_w(space, 0, data);
137   cputag_set_input_line(space->machine(), "maincpu", M6809_IRQ_LINE, HOLD_LINE);
141   cputag_set_input_line(machine(), "maincpu", M6809_IRQ_LINE, HOLD_LINE);
138142
139if (LOG_AUDIO_COMM) logerror("%08X  CPU#1  Audio Answer Write: %x\n", cpu_get_pc(&space->device()), data);
143if (LOG_AUDIO_COMM) logerror("%08X  CPU#1  Audio Answer Write: %x\n", cpu_get_pc(&space.device()), data);
140144}
141145
142146
r14845r14846
416420   AM_RANGE(0x4000, 0x5fff) AM_RAM AM_BASE(m_colorram)
417421   AM_RANGE(0x6000, 0x7fff) AM_RAM
418422   AM_RANGE(0x8000, 0x8003) AM_DEVREAD("pia_main", pia6821_device, read) AM_DEVWRITE_LEGACY("pia_main", pia_comp_w)
419   AM_RANGE(0x8004, 0x8004) AM_READWRITE_LEGACY(audio_answer_r, audio_command_w)
423   AM_RANGE(0x8004, 0x8004) AM_READWRITE(audio_answer_r, audio_command_w)
420424   AM_RANGE(0xb000, 0xb000) AM_DEVWRITE("crtc", mc6845_device, address_w)
421425   AM_RANGE(0xb001, 0xb001) AM_DEVWRITE("crtc", mc6845_device, register_w)
422426   AM_RANGE(0xc000, 0xc007) AM_RAM AM_SHARE("nvram")
r14845r14846
427431static ADDRESS_MAP_START( r2dtank_audio_map, AS_PROGRAM, 8, r2dtank_state )
428432   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
429433   AM_RANGE(0xd000, 0xd003) AM_DEVREADWRITE("pia_audio", pia6821_device, read, write)
430   AM_RANGE(0xf000, 0xf000) AM_READWRITE_LEGACY(audio_command_r, audio_answer_w)
434   AM_RANGE(0xf000, 0xf000) AM_READWRITE(audio_command_r, audio_answer_w)
431435   AM_RANGE(0xf800, 0xffff) AM_ROM
432436ADDRESS_MAP_END
433437
src/mame/drivers/mastboy.c
r14845r14846
459459   int m_m5205_part;
460460   int m_m5205_sambit0;
461461   int m_m5205_sambit1;
462   DECLARE_READ8_MEMBER(banked_ram_r);
463   DECLARE_WRITE8_MEMBER(banked_ram_w);
464   DECLARE_WRITE8_MEMBER(mastboy_bank_w);
465   DECLARE_READ8_MEMBER(mastboy_backupram_r);
466   DECLARE_WRITE8_MEMBER(mastboy_backupram_w);
467   DECLARE_WRITE8_MEMBER(backupram_enable_w);
468   DECLARE_WRITE8_MEMBER(msm5205_mastboy_m5205_sambit0_w);
469   DECLARE_WRITE8_MEMBER(msm5205_mastboy_m5205_sambit1_w);
470   DECLARE_WRITE8_MEMBER(mastboy_msm5205_data_w);
471   DECLARE_WRITE8_MEMBER(mastboy_irq0_ack_w);
472   DECLARE_READ8_MEMBER(mastboy_port_38_read);
473   DECLARE_READ8_MEMBER(mastboy_nmi_read);
462474};
463475
464476
r14845r14846
517529
518530/* Access to Banked RAM */
519531
520static READ8_HANDLER(banked_ram_r)
532READ8_MEMBER(mastboy_state::banked_ram_r)
521533{
522   mastboy_state *state = space->machine().driver_data<mastboy_state>();
523   if ((state->m_bank&0x80) == 0x00)
534   if ((m_bank&0x80) == 0x00)
524535   {
525536      int bank;
526      bank = state->m_bank & 0x07;
527      //if (state->m_bank&0xf8) printf("invalid bank bits in vram/vrom read\n");
537      bank = m_bank & 0x07;
538      //if (m_bank&0xf8) printf("invalid bank bits in vram/vrom read\n");
528539
529540      if (bank>0x3) // ROM access
530541      {
531         UINT8 *src    = space->machine().region( "gfx1" )->base();
542         UINT8 *src    = machine().region( "gfx1" )->base();
532543         bank &=0x3;
533544         return src[offset+(bank*0x4000)];
534545      }
r14845r14846
536547      {
537548         bank &=0x3;
538549         /* we have to invert the data for the GFX decode */
539         return state->m_vram[offset+(bank*0x4000)]^0xff;
550         return m_vram[offset+(bank*0x4000)]^0xff;
540551      }
541552   }
542553   else
543554   {
544555      UINT8 *src;
545556      int bank;
546      bank = state->m_bank & 0x7f;
547      src = space->machine().region       ( "user1" )->base() + bank * 0x4000;
557      bank = m_bank & 0x7f;
558      src = machine().region       ( "user1" )->base() + bank * 0x4000;
548559      return src[offset];
549560   }
550561}
551562
552static WRITE8_HANDLER( banked_ram_w )
563WRITE8_MEMBER(mastboy_state::banked_ram_w)
553564{
554   mastboy_state *state = space->machine().driver_data<mastboy_state>();
555   if ((state->m_bank&0x80) == 0x00)
565   if ((m_bank&0x80) == 0x00)
556566   {
557567      int bank;
558      bank = state->m_bank & 0x07;
568      bank = m_bank & 0x07;
559569      //if (data&0xf8) printf("invalid bank bits in vram/vrom write\n");
560570
561571      if (bank>0x3) // ROM access
r14845r14846
571581         offs = offset+(bank*0x4000);
572582
573583         /* we have to invert the data for the GFX decode */
574         state->m_vram[offs] = data^0xff;
584         m_vram[offs] = data^0xff;
575585
576586         /* Decode the new tile */
577         gfx_element_mark_dirty(space->machine().gfx[0], offs/32);
587         gfx_element_mark_dirty(machine().gfx[0], offs/32);
578588      }
579589   }
580590   else
r14845r14846
583593   }
584594}
585595
586static WRITE8_HANDLER( mastboy_bank_w )
596WRITE8_MEMBER(mastboy_state::mastboy_bank_w)
587597{
588   mastboy_state *state = space->machine().driver_data<mastboy_state>();
589598   // controls access to banked ram / rom
590   state->m_bank = data;
599   m_bank = data;
591600}
592601
593602/* Backup RAM access */
594603
595static READ8_HANDLER( mastboy_backupram_r )
604READ8_MEMBER(mastboy_state::mastboy_backupram_r)
596605{
597   mastboy_state *state = space->machine().driver_data<mastboy_state>();
598   return state->m_nvram[offset];
606   return m_nvram[offset];
599607}
600608
601static WRITE8_HANDLER( mastboy_backupram_w )
609WRITE8_MEMBER(mastboy_state::mastboy_backupram_w)
602610{
603   mastboy_state *state = space->machine().driver_data<mastboy_state>();
604//  if (state->m_backupram_enabled)
611//  if (m_backupram_enabled)
605612//  {
606      state->m_nvram[offset] = data;
613      m_nvram[offset] = data;
607614//  }
608615//  else
609616//  {
r14845r14846
611618//  }
612619}
613620
614static WRITE8_HANDLER( backupram_enable_w )
621WRITE8_MEMBER(mastboy_state::backupram_enable_w)
615622{
616   mastboy_state *state = space->machine().driver_data<mastboy_state>();
617623   /* This is some kind of enable / disable control for backup ram (see Charles's notes) but I'm not
618624       sure how it works in practice, if we use it then it writes a lot of data with it disabled */
619   state->m_backupram_enabled = data&1;
625   m_backupram_enabled = data&1;
620626}
621627
622628/* MSM5205 Related */
623629
624static WRITE8_HANDLER( msm5205_mastboy_m5205_sambit0_w )
630WRITE8_MEMBER(mastboy_state::msm5205_mastboy_m5205_sambit0_w)
625631{
626   mastboy_state *state = space->machine().driver_data<mastboy_state>();
627   device_t *adpcm = space->machine().device("msm");
632   device_t *adpcm = machine().device("msm");
628633
629   state->m_m5205_sambit0 = data & 1;
630   msm5205_playmode_w(adpcm,  (1 << 2) | (state->m_m5205_sambit1 << 1) | (state->m_m5205_sambit0) );
634   m_m5205_sambit0 = data & 1;
635   msm5205_playmode_w(adpcm,  (1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
631636
632637   logerror("msm5205 samplerate bit 0, set to %02x\n",data);
633638}
634639
635static WRITE8_HANDLER( msm5205_mastboy_m5205_sambit1_w )
640WRITE8_MEMBER(mastboy_state::msm5205_mastboy_m5205_sambit1_w)
636641{
637   mastboy_state *state = space->machine().driver_data<mastboy_state>();
638   device_t *adpcm = space->machine().device("msm");
642   device_t *adpcm = machine().device("msm");
639643
640   state->m_m5205_sambit1 = data & 1;
644   m_m5205_sambit1 = data & 1;
641645
642   msm5205_playmode_w(adpcm,  (1 << 2) | (state->m_m5205_sambit1 << 1) | (state->m_m5205_sambit0) );
646   msm5205_playmode_w(adpcm,  (1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
643647
644648   logerror("msm5205 samplerate bit 0, set to %02x\n",data);
645649}
r14845r14846
651655   msm5205_reset_w(device,data&1);
652656}
653657
654static WRITE8_HANDLER( mastboy_msm5205_data_w )
658WRITE8_MEMBER(mastboy_state::mastboy_msm5205_data_w)
655659{
656   mastboy_state *state = space->machine().driver_data<mastboy_state>();
657   state->m_m5205_next = data;
660   m_m5205_next = data;
658661}
659662
660663static void mastboy_adpcm_int(device_t *device)
r14845r14846
677680
678681/* Interrupt Handling */
679682
680static WRITE8_HANDLER( mastboy_irq0_ack_w )
683WRITE8_MEMBER(mastboy_state::mastboy_irq0_ack_w)
681684{
682   mastboy_state *state = space->machine().driver_data<mastboy_state>();
683   state->m_irq0_ack = data;
685   m_irq0_ack = data;
684686   if ((data & 1) == 1)
685      cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
687      cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
686688}
687689
688690static INTERRUPT_GEN( mastboy_interrupt )
r14845r14846
704706   AM_RANGE(0x9000, 0x9fff) AM_RAM AM_BASE(m_tileram)// tilemap ram
705707   AM_RANGE(0xa000, 0xa1ff) AM_RAM AM_BASE(m_colram) AM_MIRROR(0x0e00)  // colour ram
706708
707   AM_RANGE(0xc000, 0xffff) AM_READWRITE_LEGACY(banked_ram_r,banked_ram_w) // mastboy bank area read / write
709   AM_RANGE(0xc000, 0xffff) AM_READWRITE(banked_ram_r,banked_ram_w) // mastboy bank area read / write
708710
709   AM_RANGE(0xff000, 0xff7ff) AM_READWRITE_LEGACY(mastboy_backupram_r,mastboy_backupram_w) AM_SHARE("nvram")
711   AM_RANGE(0xff000, 0xff7ff) AM_READWRITE(mastboy_backupram_r,mastboy_backupram_w) AM_SHARE("nvram")
710712
711713   AM_RANGE(0xff800, 0xff807) AM_READ_PORT("P1")
712714   AM_RANGE(0xff808, 0xff80f) AM_READ_PORT("P2")
713715   AM_RANGE(0xff810, 0xff817) AM_READ_PORT("DSW1")
714716   AM_RANGE(0xff818, 0xff81f) AM_READ_PORT("DSW2")
715717
716   AM_RANGE(0xff820, 0xff827) AM_WRITE_LEGACY(mastboy_bank_w)
718   AM_RANGE(0xff820, 0xff827) AM_WRITE(mastboy_bank_w)
717719   AM_RANGE(0xff828, 0xff828) AM_DEVWRITE_LEGACY("saa", saa1099_data_w)
718720   AM_RANGE(0xff829, 0xff829) AM_DEVWRITE_LEGACY("saa", saa1099_control_w)
719   AM_RANGE(0xff830, 0xff830) AM_WRITE_LEGACY(mastboy_msm5205_data_w)
720   AM_RANGE(0xff838, 0xff838) AM_WRITE_LEGACY(mastboy_irq0_ack_w)
721   AM_RANGE(0xff839, 0xff839) AM_WRITE_LEGACY(msm5205_mastboy_m5205_sambit0_w)
722   AM_RANGE(0xff83a, 0xff83a) AM_WRITE_LEGACY(msm5205_mastboy_m5205_sambit1_w)
721   AM_RANGE(0xff830, 0xff830) AM_WRITE(mastboy_msm5205_data_w)
722   AM_RANGE(0xff838, 0xff838) AM_WRITE(mastboy_irq0_ack_w)
723   AM_RANGE(0xff839, 0xff839) AM_WRITE(msm5205_mastboy_m5205_sambit0_w)
724   AM_RANGE(0xff83a, 0xff83a) AM_WRITE(msm5205_mastboy_m5205_sambit1_w)
723725   AM_RANGE(0xff83b, 0xff83b) AM_DEVWRITE_LEGACY("msm", mastboy_msm5205_reset_w)
724   AM_RANGE(0xff83c, 0xff83c) AM_WRITE_LEGACY(backupram_enable_w)
726   AM_RANGE(0xff83c, 0xff83c) AM_WRITE(backupram_enable_w)
725727
726728   AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM
727729ADDRESS_MAP_END
728730
729731/* Ports */
730732
731static READ8_HANDLER( mastboy_port_38_read )
733READ8_MEMBER(mastboy_state::mastboy_port_38_read)
732734{
733735   return 0x00;
734736}
735737
736static READ8_HANDLER( mastboy_nmi_read )
738READ8_MEMBER(mastboy_state::mastboy_nmi_read)
737739{
738740   // this is read in the NMI, it's related to the Z180 MMU I think, must return right value or game jumps to 0000
739741   return 0x00;
740742}
741743
742744static ADDRESS_MAP_START( mastboy_io_map, AS_IO, 8, mastboy_state )
743   AM_RANGE(0x38, 0x38) AM_READ_LEGACY(mastboy_port_38_read)
744   AM_RANGE(0x39, 0x39) AM_READ_LEGACY(mastboy_nmi_read)
745   AM_RANGE(0x38, 0x38) AM_READ(mastboy_port_38_read)
746   AM_RANGE(0x39, 0x39) AM_READ(mastboy_nmi_read)
745747ADDRESS_MAP_END
746748
747749/* Input Ports */
src/mame/drivers/rmhaihai.c
r14845r14846
4545   UINT8 *m_colorram;
4646   tilemap_t *m_bg_tilemap;
4747   int m_keyboard_cmd;
48   DECLARE_WRITE8_MEMBER(rmhaihai_videoram_w);
49   DECLARE_WRITE8_MEMBER(rmhaihai_colorram_w);
50   DECLARE_READ8_MEMBER(keyboard_r);
51   DECLARE_WRITE8_MEMBER(keyboard_w);
52   DECLARE_READ8_MEMBER(samples_r);
53   DECLARE_WRITE8_MEMBER(ctrl_w);
54   DECLARE_WRITE8_MEMBER(themj_rombank_w);
4855};
4956
5057
5158
52static WRITE8_HANDLER( rmhaihai_videoram_w )
59WRITE8_MEMBER(rmhaihai_state::rmhaihai_videoram_w)
5360{
54   rmhaihai_state *state = space->machine().driver_data<rmhaihai_state>();
55   state->m_videoram[offset] = data;
56   state->m_bg_tilemap->mark_tile_dirty(offset);
61   m_videoram[offset] = data;
62   m_bg_tilemap->mark_tile_dirty(offset);
5763}
5864
59static WRITE8_HANDLER( rmhaihai_colorram_w )
65WRITE8_MEMBER(rmhaihai_state::rmhaihai_colorram_w)
6066{
61   rmhaihai_state *state = space->machine().driver_data<rmhaihai_state>();
62   state->m_colorram[offset] = data;
63   state->m_bg_tilemap->mark_tile_dirty(offset);
67   m_colorram[offset] = data;
68   m_bg_tilemap->mark_tile_dirty(offset);
6469}
6570
6671static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
9095
9196
9297
93static READ8_HANDLER( keyboard_r )
98READ8_MEMBER(rmhaihai_state::keyboard_r)
9499{
95   rmhaihai_state *state = space->machine().driver_data<rmhaihai_state>();
96100   static const char *const keynames[] = { "KEY0", "KEY1" };
97101
98   logerror("%04x: keyboard_r\n",cpu_get_pc(&space->device()));
99   switch(cpu_get_pc(&space->device()))
102   logerror("%04x: keyboard_r\n",cpu_get_pc(&space.device()));
103   switch(cpu_get_pc(&space.device()))
100104   {
101105      /* read keyboard */
102106      case 0x0aba:   // rmhaihai, rmhaisei
r14845r14846
108112
109113         for (i = 0; i < 31; i++)
110114         {
111            if (input_port_read(space->machine(), keynames[i/16]) & (1 << (i & 15))) return i+1;
115            if (input_port_read(machine(), keynames[i/16]) & (1 << (i & 15))) return i+1;
112116         }
113         if (input_port_read(space->machine(), "KEY1") & 0x8000) return 0x80;   // coin
117         if (input_port_read(machine(), "KEY1") & 0x8000) return 0x80;   // coin
114118         return 0;
115119      }
116120      case 0x5c7b:   // rmhaihai, rmhaisei, rmhaijin
r14845r14846
120124
121125
122126      case 0x13a:   // additional checks done by rmhaijin
123         if (state->m_keyboard_cmd == 0x3b) return 0xdd;
124         if (state->m_keyboard_cmd == 0x85) return 0xdc;
125         if (state->m_keyboard_cmd == 0xf2) return 0xd6;
126         if (state->m_keyboard_cmd == 0xc1) return 0x8f;
127         if (state->m_keyboard_cmd == 0xd0) return 0x08;
127         if (m_keyboard_cmd == 0x3b) return 0xdd;
128         if (m_keyboard_cmd == 0x85) return 0xdc;
129         if (m_keyboard_cmd == 0xf2) return 0xd6;
130         if (m_keyboard_cmd == 0xc1) return 0x8f;
131         if (m_keyboard_cmd == 0xd0) return 0x08;
128132         return 0;
129133
130134      case 0x140:   // additional checks done by rmhaisei
131135      case 0x155:   // additional checks done by themj, but they are patched out!
132         if (state->m_keyboard_cmd == 0x11) return 0x57;
133         if (state->m_keyboard_cmd == 0x3e) return 0xda;
134         if (state->m_keyboard_cmd == 0x48) return 0x74;
135         if (state->m_keyboard_cmd == 0x5d) return 0x46;
136         if (state->m_keyboard_cmd == 0xd0) return 0x08;
136         if (m_keyboard_cmd == 0x11) return 0x57;
137         if (m_keyboard_cmd == 0x3e) return 0xda;
138         if (m_keyboard_cmd == 0x48) return 0x74;
139         if (m_keyboard_cmd == 0x5d) return 0x46;
140         if (m_keyboard_cmd == 0xd0) return 0x08;
137141         return 0;
138142   }
139143
r14845r14846
141145   return 0;
142146}
143147
144static WRITE8_HANDLER( keyboard_w )
148WRITE8_MEMBER(rmhaihai_state::keyboard_w)
145149{
146   rmhaihai_state *state = space->machine().driver_data<rmhaihai_state>();
147logerror("%04x: keyboard_w %02x\n",cpu_get_pc(&space->device()),data);
148   state->m_keyboard_cmd = data;
150logerror("%04x: keyboard_w %02x\n",cpu_get_pc(&space.device()),data);
151   m_keyboard_cmd = data;
149152}
150153
151static READ8_HANDLER( samples_r )
154READ8_MEMBER(rmhaihai_state::samples_r)
152155{
153   return space->machine().region("adpcm")->base()[offset];
156   return machine().region("adpcm")->base()[offset];
154157}
155158
156159static WRITE8_DEVICE_HANDLER( adpcm_w )
r14845r14846
160163   msm5205_vclk_w (device,(data>>4)&1); /* bit4     */
161164}
162165
163static WRITE8_HANDLER( ctrl_w )
166WRITE8_MEMBER(rmhaihai_state::ctrl_w)
164167{
165   rmhaihai_state *state = space->machine().driver_data<rmhaihai_state>();
166   flip_screen_set(space->machine(), data & 0x01);
168   flip_screen_set(machine(), data & 0x01);
167169
168170   // (data & 0x02) is switched on and off in service mode
169171
170   coin_lockout_w(space->machine(), 0, ~data & 0x04);
171   coin_counter_w(space->machine(), 0, data & 0x08);
172   coin_lockout_w(machine(), 0, ~data & 0x04);
173   coin_counter_w(machine(), 0, data & 0x08);
172174
173175   // (data & 0x10) is medal in service mode
174176
175   state->m_gfxbank = (data & 0x40) >> 6;   /* rmhaisei only */
177   m_gfxbank = (data & 0x40) >> 6;   /* rmhaisei only */
176178}
177179
178static WRITE8_HANDLER( themj_rombank_w )
180WRITE8_MEMBER(rmhaihai_state::themj_rombank_w)
179181{
180   UINT8 *rom = space->machine().region("maincpu")->base() + 0x10000;
182   UINT8 *rom = machine().region("maincpu")->base() + 0x10000;
181183   int bank = data & 0x03;
182184logerror("banksw %d\n",bank);
183   memory_set_bankptr(space->machine(), "bank1", rom + bank*0x4000);
184   memory_set_bankptr(space->machine(), "bank2", rom + bank*0x4000 + 0x2000);
185   memory_set_bankptr(machine(), "bank1", rom + bank*0x4000);
186   memory_set_bankptr(machine(), "bank2", rom + bank*0x4000 + 0x2000);
185187}
186188
187189static MACHINE_RESET( themj )
188190{
189   themj_rombank_w(machine.device("maincpu")->memory().space(AS_IO), 0, 0);
191   rmhaihai_state *state = machine.driver_data<rmhaihai_state>();
192   state->themj_rombank_w(*machine.device("maincpu")->memory().space(AS_IO), 0, 0);
190193}
191194
192195
r14845r14846
194197static ADDRESS_MAP_START( rmhaihai_map, AS_PROGRAM, 8, rmhaihai_state )
195198   AM_RANGE(0x0000, 0x9fff) AM_ROM
196199   AM_RANGE(0xa000, 0xa7ff) AM_RAM
197   AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE_LEGACY(rmhaihai_colorram_w) AM_BASE(m_colorram)
198   AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE_LEGACY(rmhaihai_videoram_w) AM_BASE(m_videoram)
200   AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE(rmhaihai_colorram_w) AM_BASE(m_colorram)
201   AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE(rmhaihai_videoram_w) AM_BASE(m_videoram)
199202   AM_RANGE(0xb83c, 0xb83c) AM_WRITENOP   // ??
200203   AM_RANGE(0xbc00, 0xbc00) AM_WRITENOP   // ??
201204   AM_RANGE(0xc000, 0xdfff) AM_ROM
r14845r14846
203206ADDRESS_MAP_END
204207
205208static ADDRESS_MAP_START( rmhaihai_io_map, AS_IO, 8, rmhaihai_state )
206   AM_RANGE(0x0000, 0x7fff) AM_READ_LEGACY(samples_r)
207   AM_RANGE(0x8000, 0x8000) AM_READ_LEGACY(keyboard_r) AM_WRITENOP   // ??
208   AM_RANGE(0x8001, 0x8001) AM_READNOP AM_WRITE_LEGACY(keyboard_w)   // ??
209   AM_RANGE(0x0000, 0x7fff) AM_READ(samples_r)
210   AM_RANGE(0x8000, 0x8000) AM_READ(keyboard_r) AM_WRITENOP   // ??
211   AM_RANGE(0x8001, 0x8001) AM_READNOP AM_WRITE(keyboard_w)   // ??
209212   AM_RANGE(0x8020, 0x8020) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
210213   AM_RANGE(0x8020, 0x8021) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
211214   AM_RANGE(0x8040, 0x8040) AM_DEVWRITE_LEGACY("msm", adpcm_w)
212   AM_RANGE(0x8060, 0x8060) AM_WRITE_LEGACY(ctrl_w)
215   AM_RANGE(0x8060, 0x8060) AM_WRITE(ctrl_w)
213216   AM_RANGE(0x8080, 0x8080) AM_WRITENOP   // ??
214217   AM_RANGE(0xbc04, 0xbc04) AM_WRITENOP   // ??
215218   AM_RANGE(0xbc0c, 0xbc0c) AM_WRITENOP   // ??
r14845r14846
219222   AM_RANGE(0x0000, 0x7fff) AM_ROM
220223   AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
221224   AM_RANGE(0xa000, 0xa7ff) AM_RAM
222   AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE_LEGACY(rmhaihai_colorram_w) AM_BASE(m_colorram)
223   AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE_LEGACY(rmhaihai_videoram_w) AM_BASE(m_videoram)
225   AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE(rmhaihai_colorram_w) AM_BASE(m_colorram)
226   AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE(rmhaihai_videoram_w) AM_BASE(m_videoram)
224227   AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("bank2")
225228   AM_RANGE(0xe000, 0xffff) AM_ROM
226229ADDRESS_MAP_END
227230
228231static ADDRESS_MAP_START( themj_io_map, AS_IO, 8, rmhaihai_state )
229   AM_RANGE(0x0000, 0x7fff) AM_READ_LEGACY(samples_r)
230   AM_RANGE(0x8000, 0x8000) AM_READ_LEGACY(keyboard_r) AM_WRITENOP   // ??
231   AM_RANGE(0x8001, 0x8001) AM_READNOP AM_WRITE_LEGACY(keyboard_w)   // ??
232   AM_RANGE(0x0000, 0x7fff) AM_READ(samples_r)
233   AM_RANGE(0x8000, 0x8000) AM_READ(keyboard_r) AM_WRITENOP   // ??
234   AM_RANGE(0x8001, 0x8001) AM_READNOP AM_WRITE(keyboard_w)   // ??
232235   AM_RANGE(0x8020, 0x8020) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
233236   AM_RANGE(0x8020, 0x8021) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
234237   AM_RANGE(0x8040, 0x8040) AM_DEVWRITE_LEGACY("msm", adpcm_w)
235   AM_RANGE(0x8060, 0x8060) AM_WRITE_LEGACY(ctrl_w)
238   AM_RANGE(0x8060, 0x8060) AM_WRITE(ctrl_w)
236239   AM_RANGE(0x8080, 0x8080) AM_WRITENOP   // ??
237   AM_RANGE(0x80a0, 0x80a0) AM_WRITE_LEGACY(themj_rombank_w)
240   AM_RANGE(0x80a0, 0x80a0) AM_WRITE(themj_rombank_w)
238241   AM_RANGE(0xbc04, 0xbc04) AM_WRITENOP   // ??
239242   AM_RANGE(0xbc0c, 0xbc0c) AM_WRITENOP   // ??
240243ADDRESS_MAP_END
src/mame/drivers/albazc.c
r14845r14846
2525   UINT8 *  m_spriteram2;
2626   UINT8 *  m_spriteram3;
2727   UINT8 m_flip_bit;
28   DECLARE_WRITE8_MEMBER(hanaroku_out_0_w);
29   DECLARE_WRITE8_MEMBER(hanaroku_out_1_w);
30   DECLARE_WRITE8_MEMBER(hanaroku_out_2_w);
31   DECLARE_WRITE8_MEMBER(albazc_vregs_w);
2832};
2933
3034
r14845r14846
8488   return 0;
8589}
8690
87static WRITE8_HANDLER( hanaroku_out_0_w )
91WRITE8_MEMBER(albazc_state::hanaroku_out_0_w)
8892{
8993   /*
9094        bit     description
r14845r14846
99103         7      meter5 (start)
100104    */
101105
102   coin_counter_w(space->machine(), 0, data & 0x01);
103   coin_counter_w(space->machine(), 1, data & 0x02);
104   coin_counter_w(space->machine(), 2, data & 0x04);
105   coin_counter_w(space->machine(), 3, data & 0x08);
106   coin_counter_w(space->machine(), 4, data & 0x80);
106   coin_counter_w(machine(), 0, data & 0x01);
107   coin_counter_w(machine(), 1, data & 0x02);
108   coin_counter_w(machine(), 2, data & 0x04);
109   coin_counter_w(machine(), 3, data & 0x08);
110   coin_counter_w(machine(), 4, data & 0x80);
107111}
108112
109static WRITE8_HANDLER( hanaroku_out_1_w )
113WRITE8_MEMBER(albazc_state::hanaroku_out_1_w)
110114{
111115   /*
112116        bit     description
r14845r14846
122126    */
123127}
124128
125static WRITE8_HANDLER( hanaroku_out_2_w )
129WRITE8_MEMBER(albazc_state::hanaroku_out_2_w)
126130{
127131   // unused
128132}
129133
130static WRITE8_HANDLER( albazc_vregs_w )
134WRITE8_MEMBER(albazc_state::albazc_vregs_w)
131135{
132   albazc_state *state = space->machine().driver_data<albazc_state>();
133136
134137   #ifdef UNUSED_FUNCTION
135138   {
r14845r14846
142145   if(offset == 0)
143146   {
144147      /* core bug with this? */
145      //flip_screen_set(space->machine(), (data & 0x40) >> 6);
146      state->m_flip_bit = (data & 0x40) >> 6;
148      //flip_screen_set(machine(), (data & 0x40) >> 6);
149      m_flip_bit = (data & 0x40) >> 6;
147150   }
148151}
149152
r14845r14846
155158   AM_RANGE(0x9000, 0x97ff) AM_RAM AM_BASE(m_spriteram2)
156159   AM_RANGE(0xa000, 0xa1ff) AM_RAM AM_BASE(m_spriteram3)
157160   AM_RANGE(0xa200, 0xa2ff) AM_WRITENOP   // ??? written once during P.O.S.T.
158   AM_RANGE(0xa300, 0xa304) AM_WRITE_LEGACY(albazc_vregs_w)   // ???
161   AM_RANGE(0xa300, 0xa304) AM_WRITE(albazc_vregs_w)   // ???
159162   AM_RANGE(0xb000, 0xb000) AM_WRITENOP   // ??? always 0x40
160163   AM_RANGE(0xc000, 0xc3ff) AM_RAM         // main ram
161164   AM_RANGE(0xc400, 0xc4ff) AM_RAM         // ???
162165   AM_RANGE(0xd000, 0xd000) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
163166   AM_RANGE(0xd000, 0xd001) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
164   AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE_LEGACY(hanaroku_out_0_w)
167   AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(hanaroku_out_0_w)
165168   AM_RANGE(0xe001, 0xe001) AM_READ_PORT("IN1")
166   AM_RANGE(0xe002, 0xe002) AM_READ_PORT("IN2") AM_WRITE_LEGACY(hanaroku_out_1_w)
167   AM_RANGE(0xe004, 0xe004) AM_READ_PORT("DSW3") AM_WRITE_LEGACY(hanaroku_out_2_w)
169   AM_RANGE(0xe002, 0xe002) AM_READ_PORT("IN2") AM_WRITE(hanaroku_out_1_w)
170   AM_RANGE(0xe004, 0xe004) AM_READ_PORT("DSW3") AM_WRITE(hanaroku_out_2_w)
168171ADDRESS_MAP_END
169172
170173
src/mame/drivers/midas.c
r14845r14846
6666   UINT16 *m_gfxram;
6767   UINT16 *m_gfxregs;
6868   tilemap_t *m_tmap;
69   DECLARE_READ16_MEMBER(ret_ffff);
70   DECLARE_WRITE16_MEMBER(midas_gfxregs_w);
71   DECLARE_WRITE16_MEMBER(livequiz_coin_w);
72   DECLARE_READ16_MEMBER(hammer_sensor_r);
73   DECLARE_WRITE16_MEMBER(hammer_coin_w);
74   DECLARE_WRITE16_MEMBER(hammer_motor_w);
75   DECLARE_WRITE16_MEMBER(hammer_led_w);
6976};
7077
7178
r14845r14846
214221   }
215222}
216223
217static READ16_HANDLER( ret_ffff )
224READ16_MEMBER(midas_state::ret_ffff)
218225{
219226   return 0xffff;
220227}
221228
222static WRITE16_HANDLER( midas_gfxregs_w )
229WRITE16_MEMBER(midas_state::midas_gfxregs_w)
223230{
224   midas_state *state = space->machine().driver_data<midas_state>();
225   COMBINE_DATA( state->m_gfxregs + offset );
231   COMBINE_DATA( m_gfxregs + offset );
226232
227233   switch( offset )
228234   {
229235      case 1:
230236      {
231         UINT16 addr = state->m_gfxregs[0];
232         state->m_gfxram[addr] = data;
233         state->m_gfxregs[0] += state->m_gfxregs[2];
237         UINT16 addr = m_gfxregs[0];
238         m_gfxram[addr] = data;
239         m_gfxregs[0] += m_gfxregs[2];
234240
235         if ( addr >= 0x7000 && addr <= 0x7fff )   state->m_tmap->mark_tile_dirty(addr - 0x7000);
241         if ( addr >= 0x7000 && addr <= 0x7fff )   m_tmap->mark_tile_dirty(addr - 0x7000);
236242
237243         break;
238244      }
r14845r14846
243249                                       Live Quiz Show
244250***************************************************************************************/
245251
246static WRITE16_HANDLER( livequiz_coin_w )
252WRITE16_MEMBER(midas_state::livequiz_coin_w)
247253{
248254   if (ACCESSING_BITS_0_7)
249255   {
250      coin_counter_w(space->machine(), 0, data & 0x0001);
256      coin_counter_w(machine(), 0, data & 0x0001);
251257   }
252258#ifdef MAME_DEBUG
253259//  popmessage("coin %04X", data);
r14845r14846
262268   AM_RANGE(0x940000, 0x940001) AM_READ_PORT("PLAYER2")
263269   AM_RANGE(0x980000, 0x980001) AM_READ_PORT("START")
264270
265   AM_RANGE(0x980000, 0x980001) AM_WRITE_LEGACY(livequiz_coin_w )
271   AM_RANGE(0x980000, 0x980001) AM_WRITE(livequiz_coin_w )
266272
267273   AM_RANGE(0x9a0000, 0x9a0001) AM_DEVWRITE_LEGACY("eeprom", midas_eeprom_w )
268274
269   AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE_LEGACY(midas_gfxregs_w ) AM_BASE(m_gfxregs )
275   AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE(midas_gfxregs_w ) AM_BASE(m_gfxregs )
270276
271277   AM_RANGE(0xa00000, 0xa3ffff) AM_RAM_WRITE_LEGACY(paletteram16_xrgb_word_be_w ) AM_BASE_GENERIC( paletteram )
272278   AM_RANGE(0xa40000, 0xa7ffff) AM_RAM
273279
274   AM_RANGE(0xb00000, 0xb00001) AM_READ_LEGACY(ret_ffff )
275   AM_RANGE(0xb20000, 0xb20001) AM_READ_LEGACY(ret_ffff )
276   AM_RANGE(0xb40000, 0xb40001) AM_READ_LEGACY(ret_ffff )
277   AM_RANGE(0xb60000, 0xb60001) AM_READ_LEGACY(ret_ffff )
280   AM_RANGE(0xb00000, 0xb00001) AM_READ(ret_ffff )
281   AM_RANGE(0xb20000, 0xb20001) AM_READ(ret_ffff )
282   AM_RANGE(0xb40000, 0xb40001) AM_READ(ret_ffff )
283   AM_RANGE(0xb60000, 0xb60001) AM_READ(ret_ffff )
278284
279285   AM_RANGE(0xb80008, 0xb8000b) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0x00ff )
280286
r14845r14846
290296                                          Hammer
291297***************************************************************************************/
292298
293static READ16_HANDLER( hammer_sensor_r )
299READ16_MEMBER(midas_state::hammer_sensor_r)
294300{
295   if (input_port_read(space->machine(), "HAMMER") & 0x80)
301   if (input_port_read(machine(), "HAMMER") & 0x80)
296302      return 0xffff;
297303
298   return (input_port_read(space->machine(), "SENSORY") << 8) | input_port_read(space->machine(), "SENSORX");
304   return (input_port_read(machine(), "SENSORY") << 8) | input_port_read(machine(), "SENSORX");
299305}
300306
301static WRITE16_HANDLER( hammer_coin_w )
307WRITE16_MEMBER(midas_state::hammer_coin_w)
302308{
303309   if (ACCESSING_BITS_0_7)
304310   {
305      coin_counter_w(space->machine(), 0, data & 0x0001);
306      coin_counter_w(space->machine(), 1, data & 0x0002);
311      coin_counter_w(machine(), 0, data & 0x0001);
312      coin_counter_w(machine(), 1, data & 0x0002);
307313   }
308314#ifdef MAME_DEBUG
309315//  popmessage("coin %04X", data);
310316#endif
311317}
312318
313static WRITE16_HANDLER( hammer_motor_w )
319WRITE16_MEMBER(midas_state::hammer_motor_w)
314320{
315321   if (ACCESSING_BITS_0_7)
316322   {
317      ticket_dispenser_w(space->machine().device("prize1"), 0, (data & 0x0001) << 7);
318      ticket_dispenser_w(space->machine().device("prize2"), 0, (data & 0x0002) << 6);
319      ticket_dispenser_w(space->machine().device("ticket"), 0, (data & 0x0010) << 3);
323      ticket_dispenser_w(machine().device("prize1"), 0, (data & 0x0001) << 7);
324      ticket_dispenser_w(machine().device("prize2"), 0, (data & 0x0002) << 6);
325      ticket_dispenser_w(machine().device("ticket"), 0, (data & 0x0010) << 3);
320326      // data & 0x0080 ?
321327   }
322328#ifdef MAME_DEBUG
r14845r14846
324330#endif
325331}
326332
327static WRITE16_HANDLER( hammer_led_w )
333WRITE16_MEMBER(midas_state::hammer_led_w)
328334{
329335#ifdef MAME_DEBUG
330336//  popmessage("led %04X", data);
r14845r14846
339345   AM_RANGE(0x940000, 0x940001) AM_READ_PORT("IN0")
340346   AM_RANGE(0x980000, 0x980001) AM_READ_PORT("TILT")
341347
342   AM_RANGE(0x980000, 0x980001) AM_WRITE_LEGACY(hammer_coin_w )
348   AM_RANGE(0x980000, 0x980001) AM_WRITE(hammer_coin_w )
343349   AM_RANGE(0x9c000c, 0x9c000d) AM_WRITENOP   // IRQ Ack
344   AM_RANGE(0x9c000e, 0x9c000f) AM_WRITE_LEGACY(hammer_led_w )
350   AM_RANGE(0x9c000e, 0x9c000f) AM_WRITE(hammer_led_w )
345351
346352   AM_RANGE(0x9a0000, 0x9a0001) AM_DEVWRITE_LEGACY("eeprom", midas_eeprom_w )
347353
348   AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE_LEGACY(midas_gfxregs_w ) AM_BASE(m_gfxregs )
354   AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE(midas_gfxregs_w ) AM_BASE(m_gfxregs )
349355
350356   AM_RANGE(0xa00000, 0xa3ffff) AM_RAM_WRITE_LEGACY(paletteram16_xrgb_word_be_w ) AM_BASE_GENERIC( paletteram )
351357   AM_RANGE(0xa40000, 0xa7ffff) AM_RAM
352358
353   AM_RANGE(0xb00000, 0xb00001) AM_READ_LEGACY(ret_ffff )
354   AM_RANGE(0xb20000, 0xb20001) AM_READ_LEGACY(ret_ffff )
355   AM_RANGE(0xb40000, 0xb40001) AM_READ_LEGACY(ret_ffff )
356   AM_RANGE(0xb60000, 0xb60001) AM_READ_LEGACY(ret_ffff )
359   AM_RANGE(0xb00000, 0xb00001) AM_READ(ret_ffff )
360   AM_RANGE(0xb20000, 0xb20001) AM_READ(ret_ffff )
361   AM_RANGE(0xb40000, 0xb40001) AM_READ(ret_ffff )
362   AM_RANGE(0xb60000, 0xb60001) AM_READ(ret_ffff )
357363
358364   AM_RANGE(0xb80008, 0xb8000b) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0x00ff )
359365
360366   AM_RANGE(0xba0000, 0xba0001) AM_READ_PORT("IN1")
361367   AM_RANGE(0xbc0000, 0xbc0001) AM_READ_PORT("HAMMER")
362368
363   AM_RANGE(0xbc0002, 0xbc0003) AM_WRITE_LEGACY(hammer_motor_w )
369   AM_RANGE(0xbc0002, 0xbc0003) AM_WRITE(hammer_motor_w )
364370
365   AM_RANGE(0xbc0004, 0xbc0005) AM_READ_LEGACY(hammer_sensor_r )
371   AM_RANGE(0xbc0004, 0xbc0005) AM_READ(hammer_sensor_r )
366372
367373   AM_RANGE(0xd00000, 0xd1ffff) AM_RAM   // zoom table?
368374
src/mame/drivers/aristmk4.c
r14845r14846
282282   int m_insnote;
283283   int m_cashcade_c;
284284   int m_printer_motor;
285   DECLARE_READ8_MEMBER(ldsw);
286   DECLARE_READ8_MEMBER(cgdrr);
287   DECLARE_WRITE8_MEMBER(cgdrw);
288   DECLARE_WRITE8_MEMBER(u3_p0);
289   DECLARE_READ8_MEMBER(u3_p2);
290   DECLARE_READ8_MEMBER(u3_p3);
291   DECLARE_READ8_MEMBER(bv_p0);
292   DECLARE_READ8_MEMBER(bv_p1);
293   DECLARE_READ8_MEMBER(mkiv_pia_ina);
294   DECLARE_WRITE8_MEMBER(mkiv_pia_outa);
295   DECLARE_WRITE8_MEMBER(mlamps);
296   DECLARE_READ8_MEMBER(cashcade_r);
297   DECLARE_WRITE8_MEMBER(mk4_printer_w);
298   DECLARE_READ8_MEMBER(mk4_printer_r);
285299};
286300
287301/* Partial Cashcade protocol */
r14845r14846
362376   return 0;
363377}
364378
365static READ8_HANDLER(ldsw)
379READ8_MEMBER(aristmk4_state::ldsw)
366380{
367   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
368381
369   int U3_p2_ret= input_port_read(space->machine(), "5002");
382   int U3_p2_ret= input_port_read(machine(), "5002");
370383   if(U3_p2_ret & 0x1)
371384   {
372385   return 0;
373386   }
374   return state->m_cgdrsw = input_port_read(space->machine(), "5005");
387   return m_cgdrsw = input_port_read(machine(), "5005");
375388}
376389
377static READ8_HANDLER(cgdrr)
390READ8_MEMBER(aristmk4_state::cgdrr)
378391{
379   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
380392
381   if(state->m_cgdrsw) // is the LC closed
393   if(m_cgdrsw) // is the LC closed
382394   {
383   return state->m_ripple; // return a positive value from the ripple counter
395   return m_ripple; // return a positive value from the ripple counter
384396   }
385397   return 0x0; // otherwise the counter outputs are set low.
386398}
387399
388static WRITE8_HANDLER(cgdrw)
400WRITE8_MEMBER(aristmk4_state::cgdrw)
389401{
390   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
391402
392   state->m_ripple = data;
403   m_ripple = data;
393404}
394405
395static WRITE8_HANDLER(u3_p0)
406WRITE8_MEMBER(aristmk4_state::u3_p0)
396407{
397   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
398408
399   state->m_u3_p0_w = data;
409   m_u3_p0_w = data;
400410
401411   if ((data&0x80)==0) //Printer Motor Off
402412   {
403      state->m_printer_motor = 1; // Set this so the next read of u3_p3 returns PTRHOM as OFF.
413      m_printer_motor = 1; // Set this so the next read of u3_p3 returns PTRHOM as OFF.
404414   }
405415
406   //logerror("u3_p0_w: %02X\n",state->m_u3_p0_w);
416   //logerror("u3_p0_w: %02X\n",m_u3_p0_w);
407417}
408418
409static READ8_HANDLER(u3_p2)
419READ8_MEMBER(aristmk4_state::u3_p2)
410420{
411   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
412421
413   int u3_p2_ret= input_port_read(space->machine(), "5002");
414   int u3_p3_ret= input_port_read(space->machine(), "5003");
422   int u3_p2_ret= input_port_read(machine(), "5002");
423   int u3_p3_ret= input_port_read(machine(), "5003");
415424
416425   output_set_lamp_value(19, (u3_p2_ret >> 4) & 1); //auditkey light
417426   output_set_lamp_value(20, (u3_p3_ret >> 2) & 1); //jackpotkey light
418427
419   if (state->m_u3_p0_w&0x20) // DOPTE on
428   if (m_u3_p0_w&0x20) // DOPTE on
420429   {
421430   if (u3_p3_ret&0x02) // door closed
422431      u3_p2_ret = u3_p2_ret^0x08; // DOPTI on
423432   }
424433
425   if (state->m_inscrd==0)
434   if (m_inscrd==0)
426435   {
427      state->m_inscrd=input_port_read(space->machine(), "insertcoin");
436      m_inscrd=input_port_read(machine(), "insertcoin");
428437   }
429438
430   if (state->m_inscrd==1)
439   if (m_inscrd==1)
431440      u3_p2_ret=u3_p2_ret^0x02;
432441
433442   return u3_p2_ret;
434443}
435444
436static READ8_HANDLER(u3_p3)
445READ8_MEMBER(aristmk4_state::u3_p3)
437446{
438    aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
439447
440    int u3_p3_ret= input_port_read(space->machine(), "5003");
448    int u3_p3_ret= input_port_read(machine(), "5003");
441449
442    if ((state->m_printer_motor)==1) // Printer Motor Off
450    if ((m_printer_motor)==1) // Printer Motor Off
443451
444452    {
445453        u3_p3_ret = u3_p3_ret^0x80; // Printer Home Off
446     state->m_printer_motor=0;
454     m_printer_motor=0;
447455
448456    }
449457
r14845r14846
457465   state->m_insnote=0; //reset note input after 150msec
458466}
459467
460static READ8_HANDLER(bv_p0)
468READ8_MEMBER(aristmk4_state::bv_p0)
461469{
462   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
463470
464471   int bv_p0_ret=0x00;
465472
466   switch(state->m_insnote)
473   switch(m_insnote)
467474   {
468475   case 0x01:
469      bv_p0_ret=input_port_read(space->machine(), "NS")+0x81; //check note selector
470      state->m_insnote++;
476      bv_p0_ret=input_port_read(machine(), "NS")+0x81; //check note selector
477      m_insnote++;
471478      break;
472479   case 0x02:
473480      bv_p0_ret=0x89;
474      state->m_insnote++;
475      space->machine().scheduler().timer_set(attotime::from_msec(150), FUNC(note_input_reset));
481      m_insnote++;
482      machine().scheduler().timer_set(attotime::from_msec(150), FUNC(note_input_reset));
476483      break;
477484   default:
478485      break; //timer will reset the input
r14845r14846
482489
483490}
484491
485static READ8_HANDLER(bv_p1)
492READ8_MEMBER(aristmk4_state::bv_p1)
486493{
487   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
488494
489495   int bv_p1_ret=0x00;
490496
491   if (state->m_insnote==0)
492      state->m_insnote=input_port_read(space->machine(), "insertnote");
497   if (m_insnote==0)
498      m_insnote=input_port_read(machine(), "insertnote");
493499
494   if (state->m_insnote==1)
500   if (m_insnote==1)
495501         bv_p1_ret=0x08;
496502
497   if (state->m_insnote==2)
503   if (m_insnote==2)
498504         bv_p1_ret=0x08;
499505
500506   return bv_p1_ret;
r14845r14846
516522******************************************************************************/
517523
518524//input a
519static READ8_HANDLER(mkiv_pia_ina)
525READ8_MEMBER(aristmk4_state::mkiv_pia_ina)
520526{
521527   /* uncomment this code once RTC is fixed */
522528
523   //return space->machine().device<mc146818_device>("rtc")->read(*space,1);
529   //return machine().device<mc146818_device>("rtc")->read(*&space,1);
524530   return 0;   // OK for now, the aussie version has no RTC on the MB so this is valid.
525531}
526532
527533//output a
528static WRITE8_HANDLER(mkiv_pia_outa)
534WRITE8_MEMBER(aristmk4_state::mkiv_pia_outa)
529535{
530   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
531   mc146818_device *mc = space->machine().device<mc146818_device>("rtc");
532   if(state->m_rtc_data_strobe)
536   mc146818_device *mc = machine().device<mc146818_device>("rtc");
537   if(m_rtc_data_strobe)
533538   {
534      mc->write(*space,1,data);
539      mc->write(*&space,1,data);
535540      //logerror("rtc protocol write data: %02X\n",data);
536541   }
537542   else
538543   {
539      mc->write(*space,0,data);
544      mc->write(*&space,0,data);
540545      //logerror("rtc protocol write address: %02X\n",data);
541546   }
542547}
r14845r14846
832837   //logerror("Lights port B: %02X\n",data);
833838}
834839
835static WRITE8_HANDLER(mlamps)
840WRITE8_MEMBER(aristmk4_state::mlamps)
836841{
837842   /* TAKE WIN AND GAMBLE LAMPS */
838843   output_set_lamp_value(18, (data >> 5) & 1);
r14845r14846
847852}
848853
849854
850static READ8_HANDLER(cashcade_r)
855READ8_MEMBER(aristmk4_state::cashcade_r)
851856{
852   aristmk4_state *state = space->machine().driver_data<aristmk4_state>();
853857   /* work around for cashcade games */
854   return cashcade_p[(state->m_cashcade_c++)%15];
858   return cashcade_p[(m_cashcade_c++)%15];
855859}
856860
857static WRITE8_HANDLER(mk4_printer_w)
861WRITE8_MEMBER(aristmk4_state::mk4_printer_w)
858862{
859863   //logerror("Printer: %c %d\n",data,data);
860864}
861865
862static READ8_HANDLER(mk4_printer_r)
866READ8_MEMBER(aristmk4_state::mk4_printer_r)
863867{
864868   return 0;
865869}
r14845r14846
875879   AM_RANGE(0x0800, 0x17ff) AM_RAM
876880   AM_RANGE(0x1800, 0x1800) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w)
877881   AM_RANGE(0x1801, 0x1801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
878   AM_RANGE(0x1c00, 0x1cff) AM_WRITE_LEGACY(mk4_printer_w)
879   AM_RANGE(0x1900, 0x19ff) AM_READ_LEGACY(mk4_printer_r)
882   AM_RANGE(0x1c00, 0x1cff) AM_WRITE(mk4_printer_w)
883   AM_RANGE(0x1900, 0x19ff) AM_READ(mk4_printer_r)
880884   AM_RANGE(0x2000, 0x3fff) AM_ROM  // graphics rom map
881885   AM_RANGE(0x4000, 0x4fff) AM_RAMBANK("bank1") AM_SHARE("nvram")
882886
883   AM_RANGE(0x5000, 0x5000) AM_WRITE_LEGACY(u3_p0)
884   AM_RANGE(0x5002, 0x5002) AM_READ_LEGACY(u3_p2)
885   AM_RANGE(0x5003, 0x5003) AM_READ_LEGACY(u3_p3)
886   AM_RANGE(0x5005, 0x5005) AM_READ_LEGACY(ldsw)
887   AM_RANGE(0x5000, 0x5000) AM_WRITE(u3_p0)
888   AM_RANGE(0x5002, 0x5002) AM_READ(u3_p2)
889   AM_RANGE(0x5003, 0x5003) AM_READ(u3_p3)
890   AM_RANGE(0x5005, 0x5005) AM_READ(ldsw)
887891   AM_RANGE(0x500d, 0x500d) AM_READ_PORT("500d")
888892   AM_RANGE(0x500e, 0x500e) AM_READ_PORT("500e")
889893   AM_RANGE(0x500f, 0x500f) AM_READ_PORT("500f")
890894   AM_RANGE(0x5010, 0x501f) AM_DEVREADWRITE("via6522_0",via6522_device,read,write)
891   AM_RANGE(0x5200, 0x5200) AM_READ_LEGACY(cashcade_r)
895   AM_RANGE(0x5200, 0x5200) AM_READ(cashcade_r)
892896   AM_RANGE(0x5201, 0x5201) AM_READ_PORT("5201")
893   AM_RANGE(0x52c0, 0x52c0) AM_READ_LEGACY(bv_p0)
894   AM_RANGE(0x52c1, 0x52c1) AM_READ_LEGACY(bv_p1)
897   AM_RANGE(0x52c0, 0x52c0) AM_READ(bv_p0)
898   AM_RANGE(0x52c1, 0x52c1) AM_READ(bv_p1)
895899   AM_RANGE(0x527f, 0x5281) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
896900   AM_RANGE(0x5300, 0x5300) AM_READ_PORT("5300")
897901   AM_RANGE(0x5380, 0x5383) AM_DEVREADWRITE("pia6821_0", pia6821_device, read, write)  // RTC data - PORT A , mechanical meters - PORTB ??
898   AM_RANGE(0x5440, 0x5440) AM_WRITE_LEGACY(mlamps) // take win and gamble lamps
899   AM_RANGE(0x5468, 0x5468) AM_READWRITE_LEGACY(cgdrr,cgdrw) // 4020 ripple counter outputs
902   AM_RANGE(0x5440, 0x5440) AM_WRITE(mlamps) // take win and gamble lamps
903   AM_RANGE(0x5468, 0x5468) AM_READWRITE(cgdrr,cgdrw) // 4020 ripple counter outputs
900904   AM_RANGE(0x6000, 0xffff) AM_ROM  // game roms
901905ADDRESS_MAP_END
902906
r14845r14846
919923   AM_RANGE(0x0800, 0x17ff) AM_RAM
920924   AM_RANGE(0x1800, 0x1800) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w)
921925   AM_RANGE(0x1801, 0x1801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
922   AM_RANGE(0x1c00, 0x1cff) AM_WRITE_LEGACY(mk4_printer_w)
923   AM_RANGE(0x1900, 0x19ff) AM_READ_LEGACY(mk4_printer_r)
926   AM_RANGE(0x1c00, 0x1cff) AM_WRITE(mk4_printer_w)
927   AM_RANGE(0x1900, 0x19ff) AM_READ(mk4_printer_r)
924928   AM_RANGE(0x4000, 0x4fff) AM_RAMBANK("bank1") AM_SHARE("nvram")
925929
926   AM_RANGE(0x5000, 0x5000) AM_WRITE_LEGACY(u3_p0)
927   AM_RANGE(0x5002, 0x5002) AM_READ_LEGACY(u3_p2)
930   AM_RANGE(0x5000, 0x5000) AM_WRITE(u3_p0)
931   AM_RANGE(0x5002, 0x5002) AM_READ(u3_p2)
928932   AM_RANGE(0x5003, 0x5003) AM_READ_PORT("5003")
929   AM_RANGE(0x5005, 0x5005) AM_READ_LEGACY(ldsw)
933   AM_RANGE(0x5005, 0x5005) AM_READ(ldsw)
930934   AM_RANGE(0x500d, 0x500d) AM_READ_PORT("500d")
931935   AM_RANGE(0x500e, 0x500e) AM_READ_PORT("500e")
932936   AM_RANGE(0x500f, 0x500f) AM_READ_PORT("500f")
933937   AM_RANGE(0x5010, 0x501f) AM_DEVREADWRITE("via6522_0",via6522_device,read,write)
934   AM_RANGE(0x5200, 0x5200) AM_READ_LEGACY(cashcade_r)
938   AM_RANGE(0x5200, 0x5200) AM_READ(cashcade_r)
935939   AM_RANGE(0x5201, 0x5201) AM_READ_PORT("5201")
936   AM_RANGE(0x52c0, 0x52c0) AM_READ_LEGACY(bv_p0)
937   AM_RANGE(0x52c1, 0x52c1) AM_READ_LEGACY(bv_p1)
940   AM_RANGE(0x52c0, 0x52c0) AM_READ(bv_p0)
941   AM_RANGE(0x52c1, 0x52c1) AM_READ(bv_p1)
938942   AM_RANGE(0x527f, 0x5281) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
939943   AM_RANGE(0x5300, 0x5300) AM_READ_PORT("5300")
940944   AM_RANGE(0x5380, 0x5383) AM_DEVREADWRITE("pia6821_0", pia6821_device, read, write)  // RTC data - PORT A , mechanical meters - PORTB ??
941   AM_RANGE(0x5440, 0x5440) AM_WRITE_LEGACY(mlamps) // take win and gamble lamps
942   AM_RANGE(0x5468, 0x5468) AM_READWRITE_LEGACY(cgdrr,cgdrw) // 4020 ripple counter outputs
945   AM_RANGE(0x5440, 0x5440) AM_WRITE(mlamps) // take win and gamble lamps
946   AM_RANGE(0x5468, 0x5468) AM_READWRITE(cgdrr,cgdrw) // 4020 ripple counter outputs
943947   AM_RANGE(0x6000, 0x7fff) AM_ROM  // graphics rom map
944948   AM_RANGE(0x8000, 0xffff) AM_ROM  // game roms
945949ADDRESS_MAP_END
r14845r14846
15211525
15221526static const pia6821_interface aristmk4_pia1_intf =
15231527{
1524   DEVCB_MEMORY_HANDLER("maincpu",PROGRAM,mkiv_pia_ina),   // port A in
1528   DEVCB_DRIVER_MEMBER(aristmk4_state, mkiv_pia_ina),   // port A in
15251529   DEVCB_NULL,   // port B in
15261530   DEVCB_NULL,   // line CA1 in
15271531   DEVCB_NULL,   // line CB1 in
15281532   DEVCB_NULL,   // line CA2 in
15291533   DEVCB_NULL,   // line CB2 in
1530   DEVCB_MEMORY_HANDLER("maincpu",PROGRAM,mkiv_pia_outa),   // port A out
1534   DEVCB_DRIVER_MEMBER(aristmk4_state, mkiv_pia_outa),   // port A out
15311535   DEVCB_HANDLER(mkiv_pia_outb),   // port B out
15321536   DEVCB_HANDLER(mkiv_pia_ca2),   // line CA2 out
15331537   DEVCB_HANDLER(mkiv_pia_cb2),   // port CB2 out
src/mame/drivers/galaxi.c
r14845r14846
7171   int       m_hopper;
7272   int       m_ticket;
7373   UINT16    m_out[3];
74   DECLARE_WRITE16_MEMBER(galaxi_bg1_w);
75   DECLARE_WRITE16_MEMBER(galaxi_bg2_w);
76   DECLARE_WRITE16_MEMBER(galaxi_bg3_w);
77   DECLARE_WRITE16_MEMBER(galaxi_bg4_w);
78   DECLARE_WRITE16_MEMBER(galaxi_fg_w);
79   DECLARE_WRITE16_MEMBER(galaxi_500000_w);
80   DECLARE_WRITE16_MEMBER(galaxi_500002_w);
81   DECLARE_WRITE16_MEMBER(galaxi_500004_w);
7482};
7583
7684
r14845r14846
113121   SET_TILE_INFO(1, code, 0x20 + (code >> 12), 0);
114122}
115123
116static WRITE16_HANDLER( galaxi_bg1_w )
124WRITE16_MEMBER(galaxi_state::galaxi_bg1_w)
117125{
118   galaxi_state *state = space->machine().driver_data<galaxi_state>();
119   COMBINE_DATA(&state->m_bg1_ram[offset]);
120   state->m_bg1_tmap->mark_tile_dirty(offset);
126   COMBINE_DATA(&m_bg1_ram[offset]);
127   m_bg1_tmap->mark_tile_dirty(offset);
121128}
122129
123static WRITE16_HANDLER( galaxi_bg2_w )
130WRITE16_MEMBER(galaxi_state::galaxi_bg2_w)
124131{
125   galaxi_state *state = space->machine().driver_data<galaxi_state>();
126   COMBINE_DATA(&state->m_bg2_ram[offset]);
127   state->m_bg2_tmap->mark_tile_dirty(offset);
132   COMBINE_DATA(&m_bg2_ram[offset]);
133   m_bg2_tmap->mark_tile_dirty(offset);
128134}
129135
130static WRITE16_HANDLER( galaxi_bg3_w )
136WRITE16_MEMBER(galaxi_state::galaxi_bg3_w)
131137{
132   galaxi_state *state = space->machine().driver_data<galaxi_state>();
133   COMBINE_DATA(&state->m_bg3_ram[offset]);
134   state->m_bg3_tmap->mark_tile_dirty(offset);
138   COMBINE_DATA(&m_bg3_ram[offset]);
139   m_bg3_tmap->mark_tile_dirty(offset);
135140}
136141
137static WRITE16_HANDLER( galaxi_bg4_w )
142WRITE16_MEMBER(galaxi_state::galaxi_bg4_w)
138143{
139   galaxi_state *state = space->machine().driver_data<galaxi_state>();
140   COMBINE_DATA(&state->m_bg4_ram[offset]);
141   state->m_bg4_tmap->mark_tile_dirty(offset);
144   COMBINE_DATA(&m_bg4_ram[offset]);
145   m_bg4_tmap->mark_tile_dirty(offset);
142146}
143147
144static WRITE16_HANDLER( galaxi_fg_w )
148WRITE16_MEMBER(galaxi_state::galaxi_fg_w)
145149{
146   galaxi_state *state = space->machine().driver_data<galaxi_state>();
147   COMBINE_DATA(&state->m_fg_ram[offset]);
148   state->m_fg_tmap->mark_tile_dirty(offset);
150   COMBINE_DATA(&m_fg_ram[offset]);
151   m_fg_tmap->mark_tile_dirty(offset);
149152}
150153
151154static VIDEO_START(galaxi)
r14845r14846
208211//  popmessage("%04x %04x %04x", state->m_out[0], state->m_out[1], state->m_out[2]);
209212}
210213
211static WRITE16_HANDLER( galaxi_500000_w )
214WRITE16_MEMBER(galaxi_state::galaxi_500000_w)
212215{
213   galaxi_state *state = space->machine().driver_data<galaxi_state>();
214   COMBINE_DATA(&state->m_out[0]);
215   show_out(space->machine());
216   COMBINE_DATA(&m_out[0]);
217   show_out(machine());
216218}
217219
218static WRITE16_HANDLER( galaxi_500002_w )
220WRITE16_MEMBER(galaxi_state::galaxi_500002_w)
219221{
220   galaxi_state *state = space->machine().driver_data<galaxi_state>();
221   COMBINE_DATA(&state->m_out[1]);
222   show_out(space->machine());
222   COMBINE_DATA(&m_out[1]);
223   show_out(machine());
223224}
224225
225static WRITE16_HANDLER( galaxi_500004_w )
226WRITE16_MEMBER(galaxi_state::galaxi_500004_w)
226227{
227   galaxi_state *state = space->machine().driver_data<galaxi_state>();
228228
229229   if (ACCESSING_BITS_0_7)
230230   {
r14845r14846
250250   }
251251   if (ACCESSING_BITS_8_15)
252252   {
253      state->m_ticket = data & 0x0100;
254      state->m_hopper = data & 0x1000;
255      coin_counter_w(space->machine(), 0, data & 0x2000);   // coins
253      m_ticket = data & 0x0100;
254      m_hopper = data & 0x1000;
255      coin_counter_w(machine(), 0, data & 0x2000);   // coins
256256   }
257257
258   COMBINE_DATA(&state->m_out[2]);
259   show_out(space->machine());
258   COMBINE_DATA(&m_out[2]);
259   show_out(machine());
260260}
261261
262262static CUSTOM_INPUT( ticket_r )
r14845r14846
275275static ADDRESS_MAP_START( galaxi_map, AS_PROGRAM, 16, galaxi_state )
276276   AM_RANGE(0x000000, 0x03ffff) AM_ROM
277277
278   AM_RANGE(0x100000, 0x1003ff) AM_RAM_WRITE_LEGACY(galaxi_bg1_w) AM_BASE(m_bg1_ram)
279   AM_RANGE(0x100400, 0x1007ff) AM_RAM_WRITE_LEGACY(galaxi_bg2_w) AM_BASE(m_bg2_ram)
280   AM_RANGE(0x100800, 0x100bff) AM_RAM_WRITE_LEGACY(galaxi_bg3_w) AM_BASE(m_bg3_ram)
281   AM_RANGE(0x100c00, 0x100fff) AM_RAM_WRITE_LEGACY(galaxi_bg4_w) AM_BASE(m_bg4_ram)
278   AM_RANGE(0x100000, 0x1003ff) AM_RAM_WRITE(galaxi_bg1_w) AM_BASE(m_bg1_ram)
279   AM_RANGE(0x100400, 0x1007ff) AM_RAM_WRITE(galaxi_bg2_w) AM_BASE(m_bg2_ram)
280   AM_RANGE(0x100800, 0x100bff) AM_RAM_WRITE(galaxi_bg3_w) AM_BASE(m_bg3_ram)
281   AM_RANGE(0x100c00, 0x100fff) AM_RAM_WRITE(galaxi_bg4_w) AM_BASE(m_bg4_ram)
282282
283   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(galaxi_fg_w ) AM_BASE(m_fg_ram)
283   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(galaxi_fg_w ) AM_BASE(m_fg_ram)
284284   AM_RANGE(0x102000, 0x1047ff) AM_READNOP   // unknown
285285
286286   AM_RANGE(0x300000, 0x3007ff) AM_RAM_WRITE_LEGACY(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
287287
288288   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("INPUTS")
289   AM_RANGE(0x500000, 0x500001) AM_WRITE_LEGACY(galaxi_500000_w)
290   AM_RANGE(0x500002, 0x500003) AM_WRITE_LEGACY(galaxi_500002_w)
291   AM_RANGE(0x500004, 0x500005) AM_WRITE_LEGACY(galaxi_500004_w)
289   AM_RANGE(0x500000, 0x500001) AM_WRITE(galaxi_500000_w)
290   AM_RANGE(0x500002, 0x500003) AM_WRITE(galaxi_500002_w)
291   AM_RANGE(0x500004, 0x500005) AM_WRITE(galaxi_500004_w)
292292
293293   AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
294294
src/mame/drivers/sothello.c
r14845r14846
5353   int m_soundcpu_busy;
5454   int m_msm_data;
5555   required_device<v9938_device> m_v9938;
56   DECLARE_WRITE8_MEMBER(bank_w);
57   DECLARE_READ8_MEMBER(subcpu_halt_set);
58   DECLARE_READ8_MEMBER(subcpu_halt_clear);
59   DECLARE_READ8_MEMBER(subcpu_comm_status);
60   DECLARE_READ8_MEMBER(soundcpu_status_r);
61   DECLARE_WRITE8_MEMBER(msm_data_w);
62   DECLARE_WRITE8_MEMBER(soundcpu_busyflag_set_w);
63   DECLARE_WRITE8_MEMBER(soundcpu_busyflag_reset_w);
64   DECLARE_WRITE8_MEMBER(soundcpu_int_clear_w);
65   DECLARE_WRITE8_MEMBER(subcpu_status_w);
66   DECLARE_READ8_MEMBER(subcpu_status_r);
5667};
5768
5869
r14845r14846
6778
6879/* main Z80 */
6980
70static WRITE8_HANDLER(bank_w)
81WRITE8_MEMBER(sothello_state::bank_w)
7182{
72    UINT8 *RAM = space->machine().region("maincpu")->base();
83    UINT8 *RAM = machine().region("maincpu")->base();
7384    int bank=0;
7485    switch(data^0xff)
7586    {
r14845r14846
7889        case 4: bank=2; break;
7990        case 8: bank=3; break;
8091    }
81    memory_set_bankptr(space->machine(),"bank1",&RAM[bank*0x4000+0x10000]);
92    memory_set_bankptr(machine(),"bank1",&RAM[bank*0x4000+0x10000]);
8293}
8394
8495static TIMER_CALLBACK( subcpu_suspend )
r14845r14846
92103    cputag_set_input_line(machine, "sub", INPUT_LINE_NMI, PULSE_LINE);
93104}
94105
95static READ8_HANDLER( subcpu_halt_set )
106READ8_MEMBER(sothello_state::subcpu_halt_set)
96107{
97   sothello_state *state = space->machine().driver_data<sothello_state>();
98    space->machine().scheduler().synchronize(FUNC(subcpu_suspend));
99    state->m_subcpu_status|=2;
108    machine().scheduler().synchronize(FUNC(subcpu_suspend));
109    m_subcpu_status|=2;
100110    return 0;
101111}
102112
103static READ8_HANDLER( subcpu_halt_clear )
113READ8_MEMBER(sothello_state::subcpu_halt_clear)
104114{
105   sothello_state *state = space->machine().driver_data<sothello_state>();
106    space->machine().scheduler().synchronize(FUNC(subcpu_resume));
107    state->m_subcpu_status&=~1;
108    state->m_subcpu_status&=~2;
115    machine().scheduler().synchronize(FUNC(subcpu_resume));
116    m_subcpu_status&=~1;
117    m_subcpu_status&=~2;
109118    return 0;
110119}
111120
112static READ8_HANDLER(subcpu_comm_status )
121READ8_MEMBER(sothello_state::subcpu_comm_status)
113122{
114   sothello_state *state = space->machine().driver_data<sothello_state>();
115    return state->m_subcpu_status;
123    return m_subcpu_status;
116124}
117125
118static READ8_HANDLER( soundcpu_status_r )
126READ8_MEMBER(sothello_state::soundcpu_status_r)
119127{
120   sothello_state *state = space->machine().driver_data<sothello_state>();
121    return state->m_soundcpu_busy;
128    return m_soundcpu_busy;
122129}
123130
124131static ADDRESS_MAP_START( maincpu_mem_map, AS_PROGRAM, 8, sothello_state )
r14845r14846
133140    AM_RANGE( 0x00, 0x0f) AM_READ_PORT("INPUT1")
134141    AM_RANGE( 0x10, 0x1f) AM_READ_PORT("INPUT2")
135142    AM_RANGE( 0x20, 0x2f) AM_READ_PORT("SYSTEM")
136    AM_RANGE( 0x30, 0x30) AM_READ_LEGACY(subcpu_halt_set)
137    AM_RANGE( 0x31, 0x31) AM_READ_LEGACY(subcpu_halt_clear)
138    AM_RANGE( 0x32, 0x32) AM_READ_LEGACY(subcpu_comm_status)
139    AM_RANGE( 0x33, 0x33) AM_READ_LEGACY(soundcpu_status_r)
143    AM_RANGE( 0x30, 0x30) AM_READ(subcpu_halt_set)
144    AM_RANGE( 0x31, 0x31) AM_READ(subcpu_halt_clear)
145    AM_RANGE( 0x32, 0x32) AM_READ(subcpu_comm_status)
146    AM_RANGE( 0x33, 0x33) AM_READ(soundcpu_status_r)
140147    AM_RANGE( 0x40, 0x4f) AM_WRITE_LEGACY(soundlatch_w)
141    AM_RANGE( 0x50, 0x50) AM_WRITE_LEGACY(bank_w)
148    AM_RANGE( 0x50, 0x50) AM_WRITE(bank_w)
142149    AM_RANGE( 0x60, 0x61) AM_MIRROR(0x02) AM_DEVREADWRITE_LEGACY("ymsnd", ym2203_r, ym2203_w)
143150                  /* not sure, but the A1 line is ignored, code @ $8b8 */
144151    AM_RANGE( 0x70, 0x73) AM_DEVREADWRITE( "v9938", v9938_device, read, write )
r14845r14846
158165    msm5205_reset_w(device,data&1);
159166}
160167
161static WRITE8_HANDLER( msm_data_w )
168WRITE8_MEMBER(sothello_state::msm_data_w)
162169{
163   sothello_state *state = space->machine().driver_data<sothello_state>();
164    state->m_msm_data = data;
170    m_msm_data = data;
165171
166172}
167173
168static WRITE8_HANDLER(soundcpu_busyflag_set_w)
174WRITE8_MEMBER(sothello_state::soundcpu_busyflag_set_w)
169175{
170   sothello_state *state = space->machine().driver_data<sothello_state>();
171    state->m_soundcpu_busy=1;
176    m_soundcpu_busy=1;
172177}
173178
174static WRITE8_HANDLER(soundcpu_busyflag_reset_w)
179WRITE8_MEMBER(sothello_state::soundcpu_busyflag_reset_w)
175180{
176   sothello_state *state = space->machine().driver_data<sothello_state>();
177    state->m_soundcpu_busy=0;
181    m_soundcpu_busy=0;
178182}
179183
180static WRITE8_HANDLER(soundcpu_int_clear_w)
184WRITE8_MEMBER(sothello_state::soundcpu_int_clear_w)
181185{
182    cputag_set_input_line(space->machine(), "soundcpu", 0, CLEAR_LINE );
186    cputag_set_input_line(machine(), "soundcpu", 0, CLEAR_LINE );
183187}
184188
185189static ADDRESS_MAP_START( soundcpu_mem_map, AS_PROGRAM, 8, sothello_state )
r14845r14846
190194static ADDRESS_MAP_START( soundcpu_io_map, AS_IO, 8, sothello_state )
191195    ADDRESS_MAP_GLOBAL_MASK(0xff)
192196    AM_RANGE(0x00, 0x00) AM_READ_LEGACY(soundlatch_r)
193    AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(msm_data_w)
197    AM_RANGE(0x01, 0x01) AM_WRITE(msm_data_w)
194198    AM_RANGE(0x02, 0x02) AM_DEVWRITE_LEGACY("msm", msm_cfg_w)
195    AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(soundcpu_busyflag_set_w)
196    AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(soundcpu_busyflag_reset_w)
197    AM_RANGE(0x05, 0x05) AM_WRITE_LEGACY(soundcpu_int_clear_w)
199    AM_RANGE(0x03, 0x03) AM_WRITE(soundcpu_busyflag_set_w)
200    AM_RANGE(0x04, 0x04) AM_WRITE(soundcpu_busyflag_reset_w)
201    AM_RANGE(0x05, 0x05) AM_WRITE(soundcpu_int_clear_w)
198202ADDRESS_MAP_END
199203
200204/* sub 6809 */
r14845r14846
212216    }
213217}
214218
215static WRITE8_HANDLER(subcpu_status_w)
219WRITE8_MEMBER(sothello_state::subcpu_status_w)
216220{
217    unlock_shared_ram(space);
221    unlock_shared_ram(&space);
218222}
219223
220static READ8_HANDLER(subcpu_status_r)
224READ8_MEMBER(sothello_state::subcpu_status_r)
221225{
222    unlock_shared_ram(space);
226    unlock_shared_ram(&space);
223227    return 0;
224228}
225229
226230static ADDRESS_MAP_START( subcpu_mem_map, AS_PROGRAM, 8, sothello_state )
227    AM_RANGE(0x0000, 0x1fff) AM_READWRITE_LEGACY(subcpu_status_r,subcpu_status_w)
231    AM_RANGE(0x0000, 0x1fff) AM_READWRITE(subcpu_status_r,subcpu_status_w)
228232    AM_RANGE(0x2000, 0x77ff) AM_RAM
229233    AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE("share1")  /* upper 0x800 of 6264 is shared  with main cpu */
230234    AM_RANGE(0x8000, 0xffff) AM_ROM
src/mame/drivers/taitotz.c
r14845r14846
9999   UINT32 video_ram_ptr;
100100
101101   bitmap_rgb32 framebuffer;
102   DECLARE_WRITE64_MEMBER(video_chip_w);
103   DECLARE_READ64_MEMBER(ppc_common_r);
104   DECLARE_WRITE64_MEMBER(ppc_common_w);
102105};
103106
104107
r14845r14846
234237// 0xB1000000, size 0x800000  : texture RAM
235238
236239
237static WRITE64_HANDLER(video_chip_w)
240WRITE64_MEMBER(taitotz_state::video_chip_w)
238241{
239   taitotz_state *state = space->machine().driver_data<taitotz_state>();
240242
241   //printf("unk_w: %08X, %08X%08X, %08X%08X at %08X\n", offset, (UINT32)(data >> 32), (UINT32)(data), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask), cpu_get_pc(space->cpu));
243   //printf("unk_w: %08X, %08X%08X, %08X%08X at %08X\n", offset, (UINT32)(data >> 32), (UINT32)(data), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask), cpu_get_pc(cpu));
242244
243245   UINT32 reg = offset * 8;
244246   UINT32 regdata;
r14845r14846
257259   {
258260      case 0:
259261         {
260            video_reg_w(space->machine(), state->video_reg, regdata);
262            video_reg_w(machine(), video_reg, regdata);
261263            break;
262264         }
263265      case 0x8:
264266         {
265            state->video_reg = regdata;
267            video_reg = regdata;
266268
267            if ((state->video_reg & 0xf0000000) == 0xb0000000)
269            if ((video_reg & 0xf0000000) == 0xb0000000)
268270            {
269               state->video_ram_ptr = 0;
271               video_ram_ptr = 0;
270272
271               switch (state->video_reg & 0x0fffffff)
273               switch (video_reg & 0x0fffffff)
272274               {
273                  case 0x0980000: state->video_ram = state->video_char_ram; break;
274                  case 0x09c0000: state->video_ram = state->video_tile_ram; break;
275                  case 0x1800000: state->video_ram = state->video_screen_ram; break;
275                  case 0x0980000: video_ram = video_char_ram; break;
276                  case 0x09c0000: video_ram = video_tile_ram; break;
277                  case 0x1800000: video_ram = video_screen_ram; break;
276278                  default:
277279                     {
278                        fatalerror("video_chip_ram sel %08X\n", state->video_reg & 0x0fffffff);
280                        fatalerror("video_chip_ram sel %08X\n", video_reg & 0x0fffffff);
279281                        break;
280282                     }
281283               }
r14845r14846
290292   }
291293}
292294
293static READ64_HANDLER(ppc_common_r)
295READ64_MEMBER(taitotz_state::ppc_common_r)
294296{
295297   if (offset == 0x7ff)
296298   {
r14845r14846
303305   return 0;
304306}
305307
306static WRITE64_HANDLER(ppc_common_w)
308WRITE64_MEMBER(taitotz_state::ppc_common_w)
307309{
308310   if (offset == 0x7ff)
309311   {
310      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
312      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
311313   }
312314}
313315
r14845r14846
328330static ADDRESS_MAP_START( ppc603e_mem, AS_PROGRAM, 64, taitotz_state )
329331   //AM_RANGE(0x00000000, 0x00000007) AM_RAM   // Register/RAM access port? - Written 128k+256k times on boot
330332   //AM_RANGE(0x00000008, 0x0000000f) AM_RAM   // Register/RAM address port?
331   AM_RANGE(0x00000000, 0x0000000f) AM_WRITE_LEGACY(video_chip_w)
333   AM_RANGE(0x00000000, 0x0000000f) AM_WRITE(video_chip_w)
332334   AM_RANGE(0x40000000, 0x400fffff) AM_RAM   // Work RAM
333   AM_RANGE(0xa8000000, 0xa8003fff) AM_READWRITE_LEGACY(ppc_common_r, ppc_common_w)   // Common RAM (with TLCS-900)
335   AM_RANGE(0xa8000000, 0xa8003fff) AM_READWRITE(ppc_common_r, ppc_common_w)   // Common RAM (with TLCS-900)
334336   //AM_RANGE(0xa8003ff8, 0xa8003fff) AM_RAM   // TLCS-900 related?
335337   AM_RANGE(0xac000000, 0xac0fffff) AM_ROM AM_REGION("user1", 0)
336338   AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("user1", 0)
src/mame/drivers/cabaret.c
r14845r14846
4040   tilemap_t *m_fg_tilemap;
4141   int m_nmi_enable;
4242   UINT8 m_out[3];
43   DECLARE_WRITE8_MEMBER(bg_scroll_w);
44   DECLARE_WRITE8_MEMBER(bg_tile_w);
45   DECLARE_WRITE8_MEMBER(fg_tile_w);
46   DECLARE_WRITE8_MEMBER(fg_color_w);
47   DECLARE_WRITE8_MEMBER(cabaret_nmi_and_coins_w);
48   void show_out();
4349};
4450
4551
r14845r14846
5157
5258
5359
54static WRITE8_HANDLER( bg_scroll_w )
60WRITE8_MEMBER(cabaret_state::bg_scroll_w)
5561{
56   cabaret_state *state = space->machine().driver_data<cabaret_state>();
57   state->m_bg_scroll[offset] = data;
58   state->m_bg_tilemap->set_scrolly(offset,data);
62   m_bg_scroll[offset] = data;
63   m_bg_tilemap->set_scrolly(offset,data);
5964}
6065
61static WRITE8_HANDLER( bg_tile_w )
66WRITE8_MEMBER(cabaret_state::bg_tile_w)
6267{
63   cabaret_state *state = space->machine().driver_data<cabaret_state>();
64   state->m_bg_tile_ram[offset] = data;
65   state->m_bg_tilemap->mark_tile_dirty(offset);
68   m_bg_tile_ram[offset] = data;
69   m_bg_tilemap->mark_tile_dirty(offset);
6670}
6771
6872static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
8084   SET_TILE_INFO(0, code, tile != 0x1fff ? ((code >> 12) & 0xe) + 1 : 0, 0);
8185}
8286
83static WRITE8_HANDLER( fg_tile_w )
87WRITE8_MEMBER(cabaret_state::fg_tile_w)
8488{
85   cabaret_state *state = space->machine().driver_data<cabaret_state>();
86   state->m_fg_tile_ram[offset] = data;
87   state->m_fg_tilemap->mark_tile_dirty(offset);
89   m_fg_tile_ram[offset] = data;
90   m_fg_tilemap->mark_tile_dirty(offset);
8891}
8992
90static WRITE8_HANDLER( fg_color_w )
93WRITE8_MEMBER(cabaret_state::fg_color_w)
9194{
92   cabaret_state *state = space->machine().driver_data<cabaret_state>();
93   state->m_fg_color_ram[offset] = data;
94   state->m_fg_tilemap->mark_tile_dirty(offset);
95   m_fg_color_ram[offset] = data;
96   m_fg_tilemap->mark_tile_dirty(offset);
9597}
9698
9799static VIDEO_START(cabaret)
r14845r14846
122124
123125
124126
125static void show_out(cabaret_state *state)
127void cabaret_state::show_out()
126128{
127129#ifdef MAME_DEBUG
128   popmessage("%02x %02x %02x", state->m_out[0], state->m_out[1], state->m_out[2]);
130   popmessage("%02x %02x %02x",m_out[0], m_out[1], m_out[2]);
129131#endif
130132}
131133
132static WRITE8_HANDLER( cabaret_nmi_and_coins_w )
134WRITE8_MEMBER(cabaret_state::cabaret_nmi_and_coins_w)
133135{
134   cabaret_state *state = space->machine().driver_data<cabaret_state>();
135   if ((state->m_nmi_enable ^ data) & (~0xdd))
136   if ((m_nmi_enable ^ data) & (~0xdd))
136137   {
137      logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space->device()),data);
138      logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space.device()),data);
138139//      popmessage("%02x",data);
139140   }
140141
141   coin_counter_w(space->machine(), 0,      data & 0x01);   // coin_a
142   coin_counter_w(space->machine(), 1,      data & 0x04);   // coin_c
143   coin_counter_w(space->machine(), 2,      data & 0x08);   // key in
144   coin_counter_w(space->machine(), 3,      data & 0x10);   // coin state->m_out mech
142   coin_counter_w(machine(), 0,      data & 0x01);   // coin_a
143   coin_counter_w(machine(), 1,      data & 0x04);   // coin_c
144   coin_counter_w(machine(), 2,      data & 0x08);   // key in
145   coin_counter_w(machine(), 3,      data & 0x10);   // coin m_out mech
145146
146   set_led_status(space->machine(), 6,      data & 0x40);   // led for coin state->m_out / hopper active
147   set_led_status(machine(), 6,      data & 0x40);   // led for coin m_out / hopper active
147148
148   state->m_nmi_enable = data;   //  data & 0x80     // nmi enable?
149   m_nmi_enable = data;   //  data & 0x80     // nmi enable?
149150
150   state->m_out[0] = data;
151   show_out(state);
151   m_out[0] = data;
152   show_out();
152153}
153154
154155
r14845r14846
165166   AM_RANGE( 0x0081, 0x0081 ) AM_READ_PORT( "SERVICE" )
166167   AM_RANGE( 0x0082, 0x0082 ) AM_READ_PORT( "COINS" )
167168   AM_RANGE( 0x0090, 0x0090 ) AM_READ_PORT( "BUTTONS1" )
168   AM_RANGE( 0x00a0, 0x00a0 ) AM_WRITE_LEGACY(cabaret_nmi_and_coins_w )
169   AM_RANGE( 0x00a0, 0x00a0 ) AM_WRITE(cabaret_nmi_and_coins_w )
169170
170171   AM_RANGE( 0x00a1, 0x00a1 ) AM_READ_PORT("DSW1")         /* DSW1 */
171172   AM_RANGE( 0x00a2, 0x00a2 ) AM_READ_PORT("DSW2")         /* DSW2 */
r14845r14846
173174
174175   AM_RANGE( 0x00e0, 0x00e1 ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
175176
176   AM_RANGE( 0x2000, 0x27ff ) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
177   AM_RANGE( 0x2800, 0x2fff ) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
177   AM_RANGE( 0x2000, 0x27ff ) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
178   AM_RANGE( 0x2800, 0x2fff ) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
178179
179180   AM_RANGE( 0x3000, 0x37ff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split1_w ) AM_BASE_GENERIC( paletteram )
180181   AM_RANGE( 0x3800, 0x3fff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split2_w ) AM_BASE_GENERIC( paletteram2 )
181182
182   AM_RANGE( 0x1000, 0x103f ) AM_RAM_WRITE_LEGACY(bg_scroll_w ) AM_BASE(m_bg_scroll )
183   AM_RANGE( 0x1000, 0x103f ) AM_RAM_WRITE(bg_scroll_w ) AM_BASE(m_bg_scroll )
183184
184   AM_RANGE( 0x1800, 0x19ff ) AM_RAM_WRITE_LEGACY(bg_tile_w )  AM_BASE(m_bg_tile_ram )
185   AM_RANGE( 0x1800, 0x19ff ) AM_RAM_WRITE(bg_tile_w )  AM_BASE(m_bg_tile_ram )
185186   AM_RANGE( 0x8000, 0xffff ) AM_ROM AM_REGION("gfx3", 0)
186187ADDRESS_MAP_END
187188
src/mame/drivers/olibochu.c
r14845r14846
7575
7676   /* misc */
7777   int m_cmd;
78   DECLARE_WRITE8_MEMBER(olibochu_videoram_w);
79   DECLARE_WRITE8_MEMBER(olibochu_colorram_w);
80   DECLARE_WRITE8_MEMBER(olibochu_flipscreen_w);
81   DECLARE_WRITE8_MEMBER(sound_command_w);
7882};
7983
8084
r14845r14846
116120   }
117121}
118122
119static WRITE8_HANDLER( olibochu_videoram_w )
123WRITE8_MEMBER(olibochu_state::olibochu_videoram_w)
120124{
121   olibochu_state *state = space->machine().driver_data<olibochu_state>();
122   state->m_videoram[offset] = data;
123   state->m_bg_tilemap->mark_tile_dirty(offset);
125   m_videoram[offset] = data;
126   m_bg_tilemap->mark_tile_dirty(offset);
124127}
125128
126static WRITE8_HANDLER( olibochu_colorram_w )
129WRITE8_MEMBER(olibochu_state::olibochu_colorram_w)
127130{
128   olibochu_state *state = space->machine().driver_data<olibochu_state>();
129   state->m_colorram[offset] = data;
130   state->m_bg_tilemap->mark_tile_dirty(offset);
131   m_colorram[offset] = data;
132   m_bg_tilemap->mark_tile_dirty(offset);
131133}
132134
133static WRITE8_HANDLER( olibochu_flipscreen_w )
135WRITE8_MEMBER(olibochu_state::olibochu_flipscreen_w)
134136{
135   if (flip_screen_get(space->machine()) != (data & 0x80))
137   if (flip_screen_get(machine()) != (data & 0x80))
136138   {
137      flip_screen_set(space->machine(), data & 0x80);
138      space->machine().tilemap().mark_all_dirty();
139      flip_screen_set(machine(), data & 0x80);
140      machine().tilemap().mark_all_dirty();
139141   }
140142
141143   /* other bits are used, but unknown */
r14845r14846
227229}
228230
229231
230static WRITE8_HANDLER( sound_command_w )
232WRITE8_MEMBER(olibochu_state::sound_command_w)
231233{
232   olibochu_state *state = space->machine().driver_data<olibochu_state>();
233234   int c;
234235
235236   if (offset == 0)
236      state->m_cmd = (state->m_cmd & 0x00ff) | (data << 8);
237      m_cmd = (m_cmd & 0x00ff) | (data << 8);
237238   else
238      state->m_cmd = (state->m_cmd & 0xff00) | data;
239      m_cmd = (m_cmd & 0xff00) | data;
239240
240241   for (c = 15; c >= 0; c--)
241      if (state->m_cmd & (1 << c)) break;
242      if (m_cmd & (1 << c)) break;
242243
243244   if (c >= 0) soundlatch_w(space, 0, 15 - c);
244245}
r14845r14846
246247
247248static ADDRESS_MAP_START( olibochu_map, AS_PROGRAM, 8, olibochu_state )
248249   AM_RANGE(0x0000, 0x7fff) AM_ROM
249   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE_LEGACY(olibochu_videoram_w) AM_BASE(m_videoram)
250   AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE_LEGACY(olibochu_colorram_w) AM_BASE(m_colorram)
250   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(olibochu_videoram_w) AM_BASE(m_videoram)
251   AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(olibochu_colorram_w) AM_BASE(m_colorram)
251252   AM_RANGE(0x9000, 0x903f) AM_RAM //???
252253   AM_RANGE(0x9800, 0x983f) AM_RAM //???
253254   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0")
r14845r14846
256257   AM_RANGE(0xa003, 0xa003) AM_READ_PORT("DSW0")
257258   AM_RANGE(0xa004, 0xa004) AM_READ_PORT("DSW1")
258259   AM_RANGE(0xa005, 0xa005) AM_READ_PORT("DSW2")
259   AM_RANGE(0xa800, 0xa801) AM_WRITE_LEGACY(sound_command_w)
260   AM_RANGE(0xa802, 0xa802) AM_WRITE_LEGACY(olibochu_flipscreen_w)   /* bit 6 = enable sound? */
260   AM_RANGE(0xa800, 0xa801) AM_WRITE(sound_command_w)
261   AM_RANGE(0xa802, 0xa802) AM_WRITE(olibochu_flipscreen_w)   /* bit 6 = enable sound? */
261262   AM_RANGE(0xf400, 0xf41f) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
262263   AM_RANGE(0xf440, 0xf47f) AM_RAM AM_BASE_SIZE(m_spriteram2, m_spriteram2_size)
263264   AM_RANGE(0xf000, 0xffff) AM_RAM
src/mame/drivers/tugboat.c
r14845r14846
4040   int m_reg0;
4141   int m_reg1;
4242   int m_ctrl;
43   DECLARE_WRITE8_MEMBER(tugboat_hd46505_0_w);
44   DECLARE_WRITE8_MEMBER(tugboat_hd46505_1_w);
45   DECLARE_WRITE8_MEMBER(tugboat_score_w);
4346};
4447
4548
r14845r14846
6972
7073/* see mc6845.c. That file is only a placeholder, I process the writes here
7174   because I need the start_addr register to handle scrolling */
72static WRITE8_HANDLER( tugboat_hd46505_0_w )
75WRITE8_MEMBER(tugboat_state::tugboat_hd46505_0_w)
7376{
74   tugboat_state *state = space->machine().driver_data<tugboat_state>();
75   if (offset == 0) state->m_reg0 = data & 0x0f;
76   else if (state->m_reg0 < 18) state->m_hd46505_0_reg[state->m_reg0] = data;
77   if (offset == 0) m_reg0 = data & 0x0f;
78   else if (m_reg0 < 18) m_hd46505_0_reg[m_reg0] = data;
7779}
78static WRITE8_HANDLER( tugboat_hd46505_1_w )
80WRITE8_MEMBER(tugboat_state::tugboat_hd46505_1_w)
7981{
80   tugboat_state *state = space->machine().driver_data<tugboat_state>();
81   if (offset == 0) state->m_reg1 = data & 0x0f;
82   else if (state->m_reg1 < 18) state->m_hd46505_1_reg[state->m_reg1] = data;
82   if (offset == 0) m_reg1 = data & 0x0f;
83   else if (m_reg1 < 18) m_hd46505_1_reg[m_reg1] = data;
8384}
8485
8586
86static WRITE8_HANDLER( tugboat_score_w )
87WRITE8_MEMBER(tugboat_state::tugboat_score_w)
8788{
88   tugboat_state *state = space->machine().driver_data<tugboat_state>();
89      if (offset>=0x8) state->m_ram[0x291d + 32*offset + 32*(1-8)] = data ^ 0x0f;
90      if (offset<0x8 ) state->m_ram[0x291d + 32*offset + 32*9] = data ^ 0x0f;
89      if (offset>=0x8) m_ram[0x291d + 32*offset + 32*(1-8)] = data ^ 0x0f;
90      if (offset<0x8 ) m_ram[0x291d + 32*offset + 32*9] = data ^ 0x0f;
9191}
9292
9393static void draw_tilemap(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,
r14845r14846
213213static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tugboat_state )
214214   AM_RANGE(0x0000, 0x01ff) AM_RAM AM_BASE(m_ram)
215215   AM_RANGE(0x1060, 0x1061) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
216   AM_RANGE(0x10a0, 0x10a1) AM_WRITE_LEGACY(tugboat_hd46505_0_w)   /* scrolling is performed changing the start_addr register (0C/0D) */
217   AM_RANGE(0x10c0, 0x10c1) AM_WRITE_LEGACY(tugboat_hd46505_1_w)
216   AM_RANGE(0x10a0, 0x10a1) AM_WRITE(tugboat_hd46505_0_w)   /* scrolling is performed changing the start_addr register (0C/0D) */
217   AM_RANGE(0x10c0, 0x10c1) AM_WRITE(tugboat_hd46505_1_w)
218218   AM_RANGE(0x11e4, 0x11e7) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
219219   AM_RANGE(0x11e8, 0x11eb) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
220220   //AM_RANGE(0x1700, 0x1fff) AM_RAM
221   AM_RANGE(0x18e0, 0x18ef) AM_WRITE_LEGACY(tugboat_score_w)
221   AM_RANGE(0x18e0, 0x18ef) AM_WRITE(tugboat_score_w)
222222   AM_RANGE(0x2000, 0x2fff) AM_RAM   /* tilemap RAM */
223223   AM_RANGE(0x4000, 0x7fff) AM_ROM
224224   AM_RANGE(0xfff0, 0xffff) AM_ROM   /* vectors */
src/mame/drivers/kingdrby.c
r14845r14846
9090   UINT8 m_p2_hopper;
9191   UINT8 m_mux_data;
9292   UINT8 *m_spriteram;
93   DECLARE_WRITE8_MEMBER(sc0_vram_w);
94   DECLARE_WRITE8_MEMBER(sc0_attr_w);
95   DECLARE_WRITE8_MEMBER(led_array_w);
96   DECLARE_WRITE8_MEMBER(kingdrbb_lamps_w);
9397};
9498
9599
r14845r14846
233237   return 0;
234238}
235239
236static WRITE8_HANDLER( sc0_vram_w )
240WRITE8_MEMBER(kingdrby_state::sc0_vram_w)
237241{
238   kingdrby_state *state = space->machine().driver_data<kingdrby_state>();
239   state->m_vram[offset] = data;
240   state->m_sc0_tilemap->mark_tile_dirty(offset);
241   state->m_sc0w_tilemap->mark_tile_dirty(offset);
242   state->m_sc1_tilemap->mark_tile_dirty(offset);
242   m_vram[offset] = data;
243   m_sc0_tilemap->mark_tile_dirty(offset);
244   m_sc0w_tilemap->mark_tile_dirty(offset);
245   m_sc1_tilemap->mark_tile_dirty(offset);
243246}
244247
245static WRITE8_HANDLER( sc0_attr_w )
248WRITE8_MEMBER(kingdrby_state::sc0_attr_w)
246249{
247   kingdrby_state *state = space->machine().driver_data<kingdrby_state>();
248   state->m_attr[offset] = data;
249   state->m_sc0_tilemap->mark_tile_dirty(offset);
250   state->m_sc0w_tilemap->mark_tile_dirty(offset);
251   state->m_sc1_tilemap->mark_tile_dirty(offset);
250   m_attr[offset] = data;
251   m_sc0_tilemap->mark_tile_dirty(offset);
252   m_sc0w_tilemap->mark_tile_dirty(offset);
253   m_sc1_tilemap->mark_tile_dirty(offset);
252254}
253255
254256/*************************************
r14845r14846
361363static const UINT8 led_map[16] =
362364   { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x00 };
363365
364static WRITE8_HANDLER( led_array_w )
366WRITE8_MEMBER(kingdrby_state::led_array_w)
365367{
366368   /*
367369    offset = directly tied with the button (i.e. offset 1 = 1-2, offset 2 = 1-3 etc.)
r14845r14846
384386static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, kingdrby_state )
385387   AM_RANGE(0x0000, 0x2fff) AM_ROM
386388   AM_RANGE(0x3000, 0x33ff) AM_RAM AM_MIRROR(0xc00) AM_SHARE("share1")
387   AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE_LEGACY(sc0_vram_w) AM_BASE(m_vram)
388   AM_RANGE(0x5000, 0x53ff) AM_RAM_WRITE_LEGACY(sc0_attr_w) AM_BASE(m_attr)
389   AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(sc0_vram_w) AM_BASE(m_vram)
390   AM_RANGE(0x5000, 0x53ff) AM_RAM_WRITE(sc0_attr_w) AM_BASE(m_attr)
389391ADDRESS_MAP_END
390392
391393static ADDRESS_MAP_START( master_io_map, AS_IO, 8, kingdrby_state )
r14845r14846
403405   AM_RANGE(0x7400, 0x74ff) AM_RAM AM_BASE(m_spriteram)
404406   AM_RANGE(0x7600, 0x7600) AM_DEVWRITE("crtc", mc6845_device, address_w)
405407   AM_RANGE(0x7601, 0x7601) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
406   AM_RANGE(0x7801, 0x780f) AM_WRITE_LEGACY(led_array_w)
408   AM_RANGE(0x7801, 0x780f) AM_WRITE(led_array_w)
407409   AM_RANGE(0x7a00, 0x7a00) AM_RAM //buffer for the key matrix
408410   AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("DSW")
409411ADDRESS_MAP_END
410412
411static WRITE8_HANDLER( kingdrbb_lamps_w )
413WRITE8_MEMBER(kingdrby_state::kingdrbb_lamps_w)
412414{
413415   // (same as the inputs but active high)
414416}
r14845r14846
427429    AM_RANGE(0x7801, 0x7801) AM_READ_PORT("KEY1")
428430   AM_RANGE(0x7802, 0x7802) AM_READ_PORT("KEY2")
429431   AM_RANGE(0x7803, 0x7803) AM_READ_PORT("KEY3")
430   AM_RANGE(0x7800, 0x7803) AM_WRITE_LEGACY(kingdrbb_lamps_w)
432   AM_RANGE(0x7800, 0x7803) AM_WRITE(kingdrbb_lamps_w)
431433   AM_RANGE(0x7a00, 0x7a00) AM_READ_PORT("SYSTEM")
432434   AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("DSW")
433435ADDRESS_MAP_END
src/mame/drivers/r2dx_v33.c
r14845r14846
3232      : driver_device(mconfig, type, tag) { }
3333
3434   UINT16 *m_spriteram;
35   DECLARE_WRITE16_MEMBER(rdx_bg_vram_w);
36   DECLARE_WRITE16_MEMBER(rdx_md_vram_w);
37   DECLARE_WRITE16_MEMBER(rdx_fg_vram_w);
38   DECLARE_WRITE16_MEMBER(rdx_tx_vram_w);
39   DECLARE_READ16_MEMBER(rdx_v33_unknown_r);
40   DECLARE_WRITE16_MEMBER(mcu_xval_w);
41   DECLARE_WRITE16_MEMBER(mcu_yval_w);
42   DECLARE_WRITE16_MEMBER(mcu_table_w);
43   DECLARE_WRITE16_MEMBER(mcu_table2_w);
44   DECLARE_READ16_MEMBER(nzerotea_sound_comms_r);
45   DECLARE_WRITE16_MEMBER(nzerotea_sound_comms_w);
3546};
3647
3748
r14845r14846
285296   mcu_prog_offs = data;
286297}
287298
288static WRITE16_HANDLER( rdx_bg_vram_w )
299WRITE16_MEMBER(r2dx_v33_state::rdx_bg_vram_w)
289300{
290301   COMBINE_DATA(&bg_vram[offset]);
291302   bg_tilemap->mark_tile_dirty(offset);
292303}
293304
294static WRITE16_HANDLER( rdx_md_vram_w )
305WRITE16_MEMBER(r2dx_v33_state::rdx_md_vram_w)
295306{
296307   COMBINE_DATA(&md_vram[offset]);
297308   md_tilemap->mark_tile_dirty(offset);
298309}
299310
300static WRITE16_HANDLER( rdx_fg_vram_w )
311WRITE16_MEMBER(r2dx_v33_state::rdx_fg_vram_w)
301312{
302313   COMBINE_DATA(&fg_vram[offset]);
303314   fg_tilemap->mark_tile_dirty(offset);
304315}
305316
306static WRITE16_HANDLER( rdx_tx_vram_w )
317WRITE16_MEMBER(r2dx_v33_state::rdx_tx_vram_w)
307318{
308319   COMBINE_DATA(&tx_vram[offset]);
309320   tx_tilemap->mark_tile_dirty(offset);
310321}
311322
312static READ16_HANDLER( rdx_v33_unknown_r )
323READ16_MEMBER(r2dx_v33_state::rdx_v33_unknown_r)
313324{
314   return space->machine().rand();
325   return machine().rand();
315326}
316327
317328
318329static UINT16 mcu_xval,mcu_yval;
319330
320331/* something sent to the MCU for X/Y global screen calculating ... */
321static WRITE16_HANDLER( mcu_xval_w )
332WRITE16_MEMBER(r2dx_v33_state::mcu_xval_w)
322333{
323334   mcu_xval = data;
324335   //popmessage("%04x %04x",mcu_xval,mcu_yval);
325336}
326337
327static WRITE16_HANDLER( mcu_yval_w )
338WRITE16_MEMBER(r2dx_v33_state::mcu_yval_w)
328339{
329340   mcu_yval = data;
330341   //popmessage("%04x %04x",mcu_xval,mcu_yval);
r14845r14846
333344static UINT16 mcu_data[9];
334345
335346/* 0x400-0x407 seems some DMA hook-up, 0x420-0x427 looks like some x/y sprite calculation routine */
336static WRITE16_HANDLER( mcu_table_w )
347WRITE16_MEMBER(r2dx_v33_state::mcu_table_w)
337348{
338349   mcu_data[offset] = data;
339350
340351   //popmessage("%04x %04x %04x %04x | %04x %04x %04x %04x",mcu_data[0/2],mcu_data[2/2],mcu_data[4/2],mcu_data[6/2],mcu_data[8/2],mcu_data[0xa/2],mcu_data[0xc/2],mcu_data[0xe/2]);
341352}
342353
343static WRITE16_HANDLER( mcu_table2_w )
354WRITE16_MEMBER(r2dx_v33_state::mcu_table2_w)
344355{
345356   mcu_data[offset+4] = data;
346357
r14845r14846
351362static ADDRESS_MAP_START( rdx_v33_map, AS_PROGRAM, 16, r2dx_v33_state )
352363   AM_RANGE(0x00000, 0x003ff) AM_RAM // vectors copied here
353364
354   AM_RANGE(0x00400, 0x00407) AM_WRITE_LEGACY(mcu_table_w)
355   AM_RANGE(0x00420, 0x00429) AM_WRITE_LEGACY(mcu_table2_w)
365   AM_RANGE(0x00400, 0x00407) AM_WRITE(mcu_table_w)
366   AM_RANGE(0x00420, 0x00429) AM_WRITE(mcu_table2_w)
356367
357368   /* results from cop? */
358   AM_RANGE(0x00430, 0x00431) AM_READ_LEGACY(rdx_v33_unknown_r)
359   AM_RANGE(0x00432, 0x00433) AM_READ_LEGACY(rdx_v33_unknown_r)
360   AM_RANGE(0x00434, 0x00435) AM_READ_LEGACY(rdx_v33_unknown_r)
361   AM_RANGE(0x00436, 0x00437) AM_READ_LEGACY(rdx_v33_unknown_r)
369   AM_RANGE(0x00430, 0x00431) AM_READ(rdx_v33_unknown_r)
370   AM_RANGE(0x00432, 0x00433) AM_READ(rdx_v33_unknown_r)
371   AM_RANGE(0x00434, 0x00435) AM_READ(rdx_v33_unknown_r)
372   AM_RANGE(0x00436, 0x00437) AM_READ(rdx_v33_unknown_r)
362373
363374   AM_RANGE(0x00600, 0x0064f) AM_RAM AM_BASE_LEGACY(&seibu_crtc_regs)
364375   AM_RANGE(0x00650, 0x0068f) AM_RAM //???
r14845r14846
370381//  AM_RANGE(0x006b6, 0x006b7) AM_WRITENOP
371382   AM_RANGE(0x006bc, 0x006bd) AM_WRITE_LEGACY(mcu_prog_offs_w)
372383   AM_RANGE(0x006be, 0x006bf) AM_WRITENOP // MCU program related
373   AM_RANGE(0x006d8, 0x006d9) AM_WRITE_LEGACY(mcu_xval_w)
374   AM_RANGE(0x006da, 0x006db) AM_WRITE_LEGACY(mcu_yval_w)
384   AM_RANGE(0x006d8, 0x006d9) AM_WRITE(mcu_xval_w)
385   AM_RANGE(0x006da, 0x006db) AM_WRITE(mcu_yval_w)
375386//  AM_RANGE(0x006dc, 0x006dd) AM_READ_LEGACY(rdx_v33_unknown2_r)
376387//  AM_RANGE(0x006de, 0x006df) AM_WRITE_LEGACY(mcu_unkaa_w) // mcu command related?
377388
r14845r14846
388399
389400   AM_RANGE(0x0c000, 0x0c7ff) AM_RAM AM_BASE(m_spriteram)
390401   AM_RANGE(0x0c800, 0x0cfff) AM_RAM
391   AM_RANGE(0x0d000, 0x0d7ff) AM_RAM_WRITE_LEGACY(rdx_bg_vram_w) AM_BASE_LEGACY(&bg_vram)
392   AM_RANGE(0x0d800, 0x0dfff) AM_RAM_WRITE_LEGACY(rdx_md_vram_w) AM_BASE_LEGACY(&md_vram)
393   AM_RANGE(0x0e000, 0x0e7ff) AM_RAM_WRITE_LEGACY(rdx_fg_vram_w) AM_BASE_LEGACY(&fg_vram)
394   AM_RANGE(0x0e800, 0x0f7ff) AM_RAM_WRITE_LEGACY(rdx_tx_vram_w) AM_BASE_LEGACY(&tx_vram)
402   AM_RANGE(0x0d000, 0x0d7ff) AM_RAM_WRITE(rdx_bg_vram_w) AM_BASE_LEGACY(&bg_vram)
403   AM_RANGE(0x0d800, 0x0dfff) AM_RAM_WRITE(rdx_md_vram_w) AM_BASE_LEGACY(&md_vram)
404   AM_RANGE(0x0e000, 0x0e7ff) AM_RAM_WRITE(rdx_fg_vram_w) AM_BASE_LEGACY(&fg_vram)
405   AM_RANGE(0x0e800, 0x0f7ff) AM_RAM_WRITE(rdx_tx_vram_w) AM_BASE_LEGACY(&tx_vram)
395406   AM_RANGE(0x0f800, 0x0ffff) AM_RAM /* Stack area */
396407   AM_RANGE(0x10000, 0x1efff) AM_RAM
397408   AM_RANGE(0x1f000, 0x1ffff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
r14845r14846
400411   AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000 )
401412ADDRESS_MAP_END
402413
403static READ16_HANDLER( nzerotea_sound_comms_r )
414READ16_MEMBER(r2dx_v33_state::nzerotea_sound_comms_r)
404415{
405416   switch(offset+0x780)
406417   {
407      case (0x788/2):   return seibu_main_word_r(space,2,0xffff);
408      case (0x78c/2):   return seibu_main_word_r(space,3,0xffff);
409      case (0x794/2): return seibu_main_word_r(space,5,0xffff);
418      case (0x788/2):   return seibu_main_word_r(&space,2,0xffff);
419      case (0x78c/2):   return seibu_main_word_r(&space,3,0xffff);
420      case (0x794/2): return seibu_main_word_r(&space,5,0xffff);
410421   }
411422
412423   return 0xffff;
413424}
414425
415426
416static WRITE16_HANDLER( nzerotea_sound_comms_w )
427WRITE16_MEMBER(r2dx_v33_state::nzerotea_sound_comms_w)
417428{
418429   switch(offset+0x780)
419430   {
420      case (0x780/2): { seibu_main_word_w(space,0,data,0x00ff); break; }
421      case (0x784/2): { seibu_main_word_w(space,1,data,0x00ff); break; }
422      //case (0x790/2): { seibu_main_word_w(space,4,data,0x00ff); break; }
423      case (0x794/2): { seibu_main_word_w(space,4,data,0x00ff); break; }
424      case (0x798/2): { seibu_main_word_w(space,6,data,0x00ff); break; }
431      case (0x780/2): { seibu_main_word_w(&space,0,data,0x00ff); break; }
432      case (0x784/2): { seibu_main_word_w(&space,1,data,0x00ff); break; }
433      //case (0x790/2): { seibu_main_word_w(&space,4,data,0x00ff); break; }
434      case (0x794/2): { seibu_main_word_w(&space,4,data,0x00ff); break; }
435      case (0x798/2): { seibu_main_word_w(&space,6,data,0x00ff); break; }
425436   }
426437}
427438
r14845r14846
429440   AM_RANGE(0x00000, 0x003ff) AM_RAM //stack area
430441
431442   /* results from cop? */
432   AM_RANGE(0x00430, 0x00431) AM_READ_LEGACY(rdx_v33_unknown_r)
433   AM_RANGE(0x00432, 0x00433) AM_READ_LEGACY(rdx_v33_unknown_r)
434   AM_RANGE(0x00434, 0x00435) AM_READ_LEGACY(rdx_v33_unknown_r)
435   AM_RANGE(0x00436, 0x00437) AM_READ_LEGACY(rdx_v33_unknown_r)
443   AM_RANGE(0x00430, 0x00431) AM_READ(rdx_v33_unknown_r)
444   AM_RANGE(0x00432, 0x00433) AM_READ(rdx_v33_unknown_r)
445   AM_RANGE(0x00434, 0x00435) AM_READ(rdx_v33_unknown_r)
446   AM_RANGE(0x00436, 0x00437) AM_READ(rdx_v33_unknown_r)
436447
437   AM_RANGE(0x00400, 0x00407) AM_WRITE_LEGACY(mcu_table_w)
438   AM_RANGE(0x00420, 0x00427) AM_WRITE_LEGACY(mcu_table2_w)
448   AM_RANGE(0x00400, 0x00407) AM_WRITE(mcu_table_w)
449   AM_RANGE(0x00420, 0x00427) AM_WRITE(mcu_table2_w)
439450
440451   AM_RANGE(0x00600, 0x0064f) AM_RAM AM_BASE_LEGACY(&seibu_crtc_regs)
441452
r14845r14846
454465   AM_RANGE(0x0074c, 0x0074d) AM_READ_PORT("SYSTEM")
455466//  AM_RANGE(0x00762, 0x00763) AM_READ_LEGACY(nzerotea_unknown_r)
456467
457   AM_RANGE(0x00780, 0x0079f) AM_READWRITE_LEGACY(nzerotea_sound_comms_r,nzerotea_sound_comms_w)
468   AM_RANGE(0x00780, 0x0079f) AM_READWRITE(nzerotea_sound_comms_r,nzerotea_sound_comms_w)
458469
459470   AM_RANGE(0x00800, 0x00fff) AM_RAM
460471   AM_RANGE(0x01000, 0x0bfff) AM_RAM
461472
462473   AM_RANGE(0x0c000, 0x0c7ff) AM_RAM AM_BASE(m_spriteram)
463474   AM_RANGE(0x0c800, 0x0cfff) AM_RAM
464   AM_RANGE(0x0d000, 0x0d7ff) AM_RAM_WRITE_LEGACY(rdx_bg_vram_w) AM_BASE_LEGACY(&bg_vram)
465   AM_RANGE(0x0d800, 0x0dfff) AM_RAM_WRITE_LEGACY(rdx_md_vram_w) AM_BASE_LEGACY(&md_vram)
466   AM_RANGE(0x0e000, 0x0e7ff) AM_RAM_WRITE_LEGACY(rdx_fg_vram_w) AM_BASE_LEGACY(&fg_vram)
467   AM_RANGE(0x0e800, 0x0f7ff) AM_RAM_WRITE_LEGACY(rdx_tx_vram_w) AM_BASE_LEGACY(&tx_vram)
475   AM_RANGE(0x0d000, 0x0d7ff) AM_RAM_WRITE(rdx_bg_vram_w) AM_BASE_LEGACY(&bg_vram)
476   AM_RANGE(0x0d800, 0x0dfff) AM_RAM_WRITE(rdx_md_vram_w) AM_BASE_LEGACY(&md_vram)
477   AM_RANGE(0x0e000, 0x0e7ff) AM_RAM_WRITE(rdx_fg_vram_w) AM_BASE_LEGACY(&fg_vram)
478   AM_RANGE(0x0e800, 0x0f7ff) AM_RAM_WRITE(rdx_tx_vram_w) AM_BASE_LEGACY(&tx_vram)
468479   AM_RANGE(0x0f800, 0x0ffff) AM_RAM /* Stack area */
469480   AM_RANGE(0x10000, 0x1efff) AM_RAM
470481   AM_RANGE(0x1f000, 0x1ffff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
src/mame/drivers/lastfght.c
r14845r14846
102102
103103   /* memory */
104104   UINT8   m_colorram[256 * 3];
105   DECLARE_WRITE16_MEMBER(colordac_w);
106   DECLARE_WRITE16_MEMBER(lastfght_hi_w);
107   DECLARE_WRITE16_MEMBER(lastfght_x_w);
108   DECLARE_WRITE16_MEMBER(lastfght_yw_w);
109   DECLARE_WRITE16_MEMBER(lastfght_h_w);
110   DECLARE_WRITE16_MEMBER(lastfght_sx_w);
111   DECLARE_WRITE16_MEMBER(lastfght_sy_w);
112   DECLARE_WRITE16_MEMBER(lastfght_sr_w);
113   DECLARE_WRITE16_MEMBER(lastfght_sd_w);
114   DECLARE_WRITE16_MEMBER(lastfght_blit_w);
115   DECLARE_WRITE16_MEMBER(lastfght_dest_w);
116   DECLARE_READ16_MEMBER(lastfght_c00000_r);
117   DECLARE_READ16_MEMBER(lastfght_c00002_r);
118   DECLARE_READ16_MEMBER(lastfght_c00004_r);
119   DECLARE_READ16_MEMBER(lastfght_c00006_r);
120   DECLARE_WRITE16_MEMBER(lastfght_c00006_w);
121   DECLARE_READ16_MEMBER(lastfght_sound_r);
122   DECLARE_WRITE16_MEMBER(lastfght_sound_w);
105123};
106124
107125
r14845r14846
165183
166184// Palette: HMC HM86171 VGA 256 colour RAMDAC
167185
168static WRITE16_HANDLER( colordac_w )
186WRITE16_MEMBER(lastfght_state::colordac_w)
169187{
170   lastfght_state *state = space->machine().driver_data<lastfght_state>();
171188
172189   if (ACCESSING_BITS_0_7)
173190   {
174      state->m_colorram[state->m_clr_offset] = data;
175      palette_set_color_rgb(space->machine(), state->m_clr_offset / 3,
176         pal6bit(state->m_colorram[(state->m_clr_offset / 3) * 3 + 0]),
177         pal6bit(state->m_colorram[(state->m_clr_offset / 3) * 3 + 1]),
178         pal6bit(state->m_colorram[(state->m_clr_offset / 3) * 3 + 2])
191      m_colorram[m_clr_offset] = data;
192      palette_set_color_rgb(machine(), m_clr_offset / 3,
193         pal6bit(m_colorram[(m_clr_offset / 3) * 3 + 0]),
194         pal6bit(m_colorram[(m_clr_offset / 3) * 3 + 1]),
195         pal6bit(m_colorram[(m_clr_offset / 3) * 3 + 2])
179196      );
180      state->m_clr_offset = (state->m_clr_offset + 1) % (256 * 3);
197      m_clr_offset = (m_clr_offset + 1) % (256 * 3);
181198   }
182199   if (ACCESSING_BITS_8_15)
183200   {
184      state->m_clr_offset = (data >> 8) * 3;
201      m_clr_offset = (data >> 8) * 3;
185202   }
186203}
187204
188205//  Blitter (supports zooming)
189206
190207// high byte of a 16 bit register
191static WRITE16_HANDLER( lastfght_hi_w )
208WRITE16_MEMBER(lastfght_state::lastfght_hi_w)
192209{
193   lastfght_state *state = space->machine().driver_data<lastfght_state>();
194210
195211   if (ACCESSING_BITS_8_15)
196      logerror("%06x: 600000.b = %02x\n", cpu_get_pc(&space->device()), data >> 8);
212      logerror("%06x: 600000.b = %02x\n", cpu_get_pc(&space.device()), data >> 8);
197213   if (ACCESSING_BITS_0_7)
198214   {
199      state->m_hi = data << 8;
200      //logerror("%06x: lastfght_hi  = %02x\n", cpu_get_pc(&space->device()), data);
215      m_hi = data << 8;
216      //logerror("%06x: lastfght_hi  = %02x\n", cpu_get_pc(&space.device()), data);
201217   }
202218}
203219
204220// screen x
205static WRITE16_HANDLER( lastfght_x_w )
221WRITE16_MEMBER(lastfght_state::lastfght_x_w)
206222{
207   lastfght_state *state = space->machine().driver_data<lastfght_state>();
208223
209224   if (ACCESSING_BITS_8_15)
210      logerror("%06x: 800008.b = %02x\n", cpu_get_pc(&space->device()), data >> 8);
225      logerror("%06x: 800008.b = %02x\n", cpu_get_pc(&space.device()), data >> 8);
211226   if (ACCESSING_BITS_0_7)
212227   {
213      state->m_x = state->m_hi | data;
214      //logerror("%06x: lastfght_x   = %02x\n", cpu_get_pc(&space->device()),data);
228      m_x = m_hi | data;
229      //logerror("%06x: lastfght_x   = %02x\n", cpu_get_pc(&space.device()),data);
215230   }
216231}
217232
218233// screen y, screen width - 1
219static WRITE16_HANDLER( lastfght_yw_w )
234WRITE16_MEMBER(lastfght_state::lastfght_yw_w)
220235{
221   lastfght_state *state = space->machine().driver_data<lastfght_state>();
222236
223237   if (ACCESSING_BITS_8_15)
224238   {
225      state->m_y = state->m_hi | (data >> 8);
226      //logerror("%06x: lastfght_y   = %02x\n", cpu_get_pc(&space->device()), data >> 8);
239      m_y = m_hi | (data >> 8);
240      //logerror("%06x: lastfght_y   = %02x\n", cpu_get_pc(&space.device()), data >> 8);
227241   }
228242   if (ACCESSING_BITS_0_7)
229243   {
230      state->m_w = state->m_hi | data;
231      //logerror("%06x: lastfght_w   = %02x\n", cpu_get_pc(&space->device()), data);
244      m_w = m_hi | data;
245      //logerror("%06x: lastfght_w   = %02x\n", cpu_get_pc(&space.device()), data);
232246   }
233247}
234248
235249// screen height - 1
236static WRITE16_HANDLER( lastfght_h_w )
250WRITE16_MEMBER(lastfght_state::lastfght_h_w)
237251{
238   lastfght_state *state = space->machine().driver_data<lastfght_state>();
239252
240253   if (ACCESSING_BITS_8_15)
241254   {
242      state->m_h = state->m_hi | (data >> 8);
243      //logerror("%06x: lastfght_h   = %02x\n", cpu_get_pc(&space->device()), data >> 8);
255      m_h = m_hi | (data >> 8);
256      //logerror("%06x: lastfght_h   = %02x\n", cpu_get_pc(&space.device()), data >> 8);
244257   }
245258   if (ACCESSING_BITS_0_7)
246      logerror("%06x: 80000d.b = %02x\n", cpu_get_pc(&space->device()), data);
259      logerror("%06x: 80000d.b = %02x\n", cpu_get_pc(&space.device()), data);
247260}
248261
249262// source delta x << 6, source x << 6
250static WRITE16_HANDLER( lastfght_sx_w )
263WRITE16_MEMBER(lastfght_state::lastfght_sx_w)
251264{
252   lastfght_state *state = space->machine().driver_data<lastfght_state>();
253265
254266   if (ACCESSING_BITS_8_15)
255267   {
256      state->m_dsx = state->m_hi | (data >> 8);
257      //logerror("%06x: lastfght_dsx = %02x\n", cpu_get_pc(&space->device()), data >> 8);
268      m_dsx = m_hi | (data >> 8);
269      //logerror("%06x: lastfght_dsx = %02x\n", cpu_get_pc(&space.device()), data >> 8);
258270   }
259271   if (ACCESSING_BITS_0_7)
260272   {
261      state->m_sx = state->m_hi | data;
262      //logerror("%06x: lastfght_sx  = %02x\n", cpu_get_pc(&space->device()), data);
273      m_sx = m_hi | data;
274      //logerror("%06x: lastfght_sx  = %02x\n", cpu_get_pc(&space.device()), data);
263275   }
264276}
265277
266278// source y << 6, source y1 << 6
267static WRITE16_HANDLER( lastfght_sy_w )
279WRITE16_MEMBER(lastfght_state::lastfght_sy_w)
268280{
269   lastfght_state *state = space->machine().driver_data<lastfght_state>();
270281
271282   if (ACCESSING_BITS_8_15)
272283   {
273      state->m_sy = state->m_hi | (data >> 8);
274      //logerror("%06x: lastfght_sy  = %02x\n", cpu_get_pc(&space->device()), data >> 8);
284      m_sy = m_hi | (data >> 8);
285      //logerror("%06x: lastfght_sy  = %02x\n", cpu_get_pc(&space.device()), data >> 8);
275286   }
276287   if (ACCESSING_BITS_0_7)
277288   {
278      state->m_sy1 = state->m_hi | data;
279      //logerror("%06x: lastfght_sy1 = %02x\n", cpu_get_pc(&space->device()), data);
289      m_sy1 = m_hi | data;
290      //logerror("%06x: lastfght_sy1 = %02x\n", cpu_get_pc(&space.device()), data);
280291   }
281292}
282293
283294// source rom (0x200000 bytes), source page (512x256 bytes)
284static WRITE16_HANDLER( lastfght_sr_w )
295WRITE16_MEMBER(lastfght_state::lastfght_sr_w)
285296{
286   lastfght_state *state = space->machine().driver_data<lastfght_state>();
287297
288298   if (ACCESSING_BITS_8_15)
289299   {
290      state->m_sp = (state->m_hi >> 8) >> 4;
291      //logerror("%06x: lastfght_sp  = %02x\n", cpu_get_pc(&space->device()), data >> 8);
300      m_sp = (m_hi >> 8) >> 4;
301      //logerror("%06x: lastfght_sp  = %02x\n", cpu_get_pc(&space.device()), data >> 8);
292302   }
293303   if (ACCESSING_BITS_0_7)
294304   {
295      state->m_sr = data;
296      //logerror("%06x: lastfght_sr  = %02x\n", cpu_get_pc(&space->device()), data);
305      m_sr = data;
306      //logerror("%06x: lastfght_sr  = %02x\n", cpu_get_pc(&space.device()), data);
297307   }
298308}
299309
300310// source x1 << 6, source delta y << 6
301static WRITE16_HANDLER( lastfght_sd_w )
311WRITE16_MEMBER(lastfght_state::lastfght_sd_w)
302312{
303   lastfght_state *state = space->machine().driver_data<lastfght_state>();
304313
305314   if (ACCESSING_BITS_8_15)
306315   {
307      state->m_sx1 = state->m_hi | (data >> 8);
308      //logerror("%06x: lastfght_sx1 = %02x\n", cpu_get_pc(&space->device()), data >> 8);
316      m_sx1 = m_hi | (data >> 8);
317      //logerror("%06x: lastfght_sx1 = %02x\n", cpu_get_pc(&space.device()), data >> 8);
309318   }
310319   if (ACCESSING_BITS_0_7)
311320   {
312      state->m_dsy = state->m_hi | data;
313      //logerror("%06x: lastfght_dsy = %02x\n", cpu_get_pc(&space->device()), data);
321      m_dsy = m_hi | data;
322      //logerror("%06x: lastfght_dsy = %02x\n", cpu_get_pc(&space.device()), data);
314323   }
315324}
316325
317326// start blit
318static WRITE16_HANDLER( lastfght_blit_w )
327WRITE16_MEMBER(lastfght_state::lastfght_blit_w)
319328{
320   lastfght_state *state = space->machine().driver_data<lastfght_state>();
321329
322330   if (ACCESSING_BITS_8_15)
323331   {
324332      int x, y, addr;
325      UINT8 *gfxdata = space->machine().region( "gfx1" )->base();
326      bitmap_ind16 &dest = state->m_bitmap[state->m_dest];
333      UINT8 *gfxdata = machine().region( "gfx1" )->base();
334      bitmap_ind16 &dest = m_bitmap[m_dest];
327335
328336#if 0
329      logerror("%06x: blit x %03x, y %03x, w %03x, h %03x, sx %03x.%02x, sx1 %03x.%02x, dsx %03x.%02x, sy %03x.%02x, sy1 %03x.%02x, dsy %03x.%02x, sp %02x, sr %02x, data %02x\n", cpu_get_pc(&space->device()),
330            state->m_x, state->m_y, state->m_w + 1, state->m_h + 1,
331            state->m_sx >> 6, state->m_sx & 0x3f, state->m_sx1 >> 6, state->m_dsx & 0x3f, state->m_sx1 >> 6, state->m_sx1 & 0x3f,
332            state->m_sy >> 6, state->m_sy & 0x3f, state->m_sy1 >> 6, state->m_dsy & 0x3f, state->m_sy1 >> 6, state->m_sy1 & 0x3f,
333            state->m_sp, state->m_sr,
337      logerror("%06x: blit x %03x, y %03x, w %03x, h %03x, sx %03x.%02x, sx1 %03x.%02x, dsx %03x.%02x, sy %03x.%02x, sy1 %03x.%02x, dsy %03x.%02x, sp %02x, sr %02x, data %02x\n", cpu_get_pc(&space.device()),
338            m_x, m_y, m_w + 1, m_h + 1,
339            m_sx >> 6, m_sx & 0x3f, m_sx1 >> 6, m_dsx & 0x3f, m_sx1 >> 6, m_sx1 & 0x3f,
340            m_sy >> 6, m_sy & 0x3f, m_sy1 >> 6, m_dsy & 0x3f, m_sy1 >> 6, m_sy1 & 0x3f,
341            m_sp, m_sr,
334342            data >> 8);
335343#endif
336344
337      for (y = 0; y <= state->m_h; y++)
345      for (y = 0; y <= m_h; y++)
338346      {
339         for (x = 0; x <= state->m_w; x++)
347         for (x = 0; x <= m_w; x++)
340348         {
341            addr = (((state->m_sx + state->m_sx1 + state->m_dsx * x) >> 6) & 0x1ff) +
342                     (((state->m_sy + state->m_sy1 + state->m_dsy * y) >> 6) & 0xff) * 0x200 +
343                     state->m_sp * 0x200 * 0x100 + state->m_sr * 0x200000;
349            addr = (((m_sx + m_sx1 + m_dsx * x) >> 6) & 0x1ff) +
350                     (((m_sy + m_sy1 + m_dsy * y) >> 6) & 0xff) * 0x200 +
351                     m_sp * 0x200 * 0x100 + m_sr * 0x200000;
344352
345353            data = gfxdata[addr];
346354
347            if (data && (state->m_x + x >= 0) && (state->m_x + x < 512) && (state->m_y + y >= 0) && (state->m_y + y < 256))
348               dest.pix16(state->m_y + y, state->m_x + x) = data;
355            if (data && (m_x + x >= 0) && (m_x + x < 512) && (m_y + y >= 0) && (m_y + y < 256))
356               dest.pix16(m_y + y, m_x + x) = data;
349357         }
350358      }
351359   }
352360   if (ACCESSING_BITS_0_7)
353      logerror("%06x: 600007.b = %02x\n", cpu_get_pc(&space->device()), data);
361      logerror("%06x: 600007.b = %02x\n", cpu_get_pc(&space.device()), data);
354362}
355363
356364// toggle framebuffer
357static WRITE16_HANDLER( lastfght_dest_w )
365WRITE16_MEMBER(lastfght_state::lastfght_dest_w)
358366{
359   lastfght_state *state = space->machine().driver_data<lastfght_state>();
360367
361368   if (ACCESSING_BITS_0_7)
362      state->m_dest ^= 1;
369      m_dest ^= 1;
363370}
364371
365static READ16_HANDLER( lastfght_c00000_r )
372READ16_MEMBER(lastfght_state::lastfght_c00000_r)
366373{
367374   // high byte:
368375   // bit 7 = blitter busy
r14845r14846
371378
372379}
373380
374static READ16_HANDLER( lastfght_c00002_r )
381READ16_MEMBER(lastfght_state::lastfght_c00002_r)
375382{
376383   // high byte:
377384   // mask 0x1c: from sound?
378   return (space->machine().rand() & 0x1c00) | input_port_read(space->machine(), "IN0");
385   return (machine().rand() & 0x1c00) | input_port_read(machine(), "IN0");
379386}
380387
381static READ16_HANDLER( lastfght_c00004_r )
388READ16_MEMBER(lastfght_state::lastfght_c00004_r)
382389{
383   return input_port_read(space->machine(), "IN1");
390   return input_port_read(machine(), "IN1");
384391}
385392
386static READ16_HANDLER( lastfght_c00006_r )
393READ16_MEMBER(lastfght_state::lastfght_c00006_r)
387394{
388395   // low byte:
389396   // bit 7 = protection?
390397   // bit 5 = blitter?
391   return input_port_read(space->machine(), "IN2");
398   return input_port_read(machine(), "IN2");
392399}
393400
394static WRITE16_HANDLER( lastfght_c00006_w )
401WRITE16_MEMBER(lastfght_state::lastfght_c00006_w)
395402{
396   lastfght_state *state = space->machine().driver_data<lastfght_state>();
397   COMBINE_DATA(&state->m_c00006);
398   //  popmessage("%04x", state->m_c00006);
403   COMBINE_DATA(&m_c00006);
404   //  popmessage("%04x", m_c00006);
399405}
400406
401static READ16_HANDLER( lastfght_sound_r )
407READ16_MEMBER(lastfght_state::lastfght_sound_r)
402408{
403409   // low byte:
404410   // bit 3
405411   return 8;
406412}
407413
408static WRITE16_HANDLER( lastfght_sound_w )
414WRITE16_MEMBER(lastfght_state::lastfght_sound_w)
409415{
410416   if (ACCESSING_BITS_8_15)
411      logerror("%06x: sound_w msb = %02x\n", cpu_get_pc(&space->device()), data >> 8);
417      logerror("%06x: sound_w msb = %02x\n", cpu_get_pc(&space.device()), data >> 8);
412418   if (ACCESSING_BITS_0_7)
413      logerror("%06x: sound_w lsb = %02x\n", cpu_get_pc(&space->device()), data);
419      logerror("%06x: sound_w lsb = %02x\n", cpu_get_pc(&space.device()), data);
414420}
415421
416422/***************************************************************************
r14845r14846
425431
426432   AM_RANGE( 0x200000, 0x20ffff ) AM_RAM AM_SHARE("nvram")   // battery
427433
428   AM_RANGE( 0x600000, 0x600001 ) AM_WRITE_LEGACY(lastfght_hi_w )
429   AM_RANGE( 0x600002, 0x600003 ) AM_READWRITE_LEGACY(lastfght_sound_r, lastfght_sound_w )
430   AM_RANGE( 0x600006, 0x600007 ) AM_WRITE_LEGACY(lastfght_blit_w )
431   AM_RANGE( 0x600008, 0x600009 ) AM_WRITE_LEGACY(colordac_w )
434   AM_RANGE( 0x600000, 0x600001 ) AM_WRITE(lastfght_hi_w )
435   AM_RANGE( 0x600002, 0x600003 ) AM_READWRITE(lastfght_sound_r, lastfght_sound_w )
436   AM_RANGE( 0x600006, 0x600007 ) AM_WRITE(lastfght_blit_w )
437   AM_RANGE( 0x600008, 0x600009 ) AM_WRITE(colordac_w )
432438   AM_RANGE( 0x60000a, 0x60000b ) AM_WRITENOP   // colordac?
433439
434   AM_RANGE( 0x800000, 0x800001 ) AM_WRITE_LEGACY(lastfght_sx_w )
435   AM_RANGE( 0x800002, 0x800003 ) AM_WRITE_LEGACY(lastfght_sd_w )
436   AM_RANGE( 0x800004, 0x800005 ) AM_WRITE_LEGACY(lastfght_sy_w )
437   AM_RANGE( 0x800006, 0x800007 ) AM_WRITE_LEGACY(lastfght_sr_w )
438   AM_RANGE( 0x800008, 0x800009 ) AM_WRITE_LEGACY(lastfght_x_w )
439   AM_RANGE( 0x80000a, 0x80000b ) AM_WRITE_LEGACY(lastfght_yw_w )
440   AM_RANGE( 0x80000c, 0x80000d ) AM_WRITE_LEGACY(lastfght_h_w )
440   AM_RANGE( 0x800000, 0x800001 ) AM_WRITE(lastfght_sx_w )
441   AM_RANGE( 0x800002, 0x800003 ) AM_WRITE(lastfght_sd_w )
442   AM_RANGE( 0x800004, 0x800005 ) AM_WRITE(lastfght_sy_w )
443   AM_RANGE( 0x800006, 0x800007 ) AM_WRITE(lastfght_sr_w )
444   AM_RANGE( 0x800008, 0x800009 ) AM_WRITE(lastfght_x_w )
445   AM_RANGE( 0x80000a, 0x80000b ) AM_WRITE(lastfght_yw_w )
446   AM_RANGE( 0x80000c, 0x80000d ) AM_WRITE(lastfght_h_w )
441447
442   AM_RANGE( 0x800014, 0x800015 ) AM_WRITE_LEGACY(lastfght_dest_w )
448   AM_RANGE( 0x800014, 0x800015 ) AM_WRITE(lastfght_dest_w )
443449
444   AM_RANGE( 0xc00000, 0xc00001 ) AM_READ_LEGACY(lastfght_c00000_r )
445   AM_RANGE( 0xc00002, 0xc00003 ) AM_READ_LEGACY(lastfght_c00002_r )
446   AM_RANGE( 0xc00004, 0xc00005 ) AM_READ_LEGACY(lastfght_c00004_r )
447   AM_RANGE( 0xc00006, 0xc00007 ) AM_READWRITE_LEGACY(lastfght_c00006_r, lastfght_c00006_w )
450   AM_RANGE( 0xc00000, 0xc00001 ) AM_READ(lastfght_c00000_r )
451   AM_RANGE( 0xc00002, 0xc00003 ) AM_READ(lastfght_c00002_r )
452   AM_RANGE( 0xc00004, 0xc00005 ) AM_READ(lastfght_c00004_r )
453   AM_RANGE( 0xc00006, 0xc00007 ) AM_READWRITE(lastfght_c00006_r, lastfght_c00006_w )
448454
449455   AM_RANGE( 0xff0000, 0xffffff ) AM_RAM
450456ADDRESS_MAP_END
src/mame/drivers/embargo.c
r14845r14846
2222   UINT8    m_dial_enable_1;
2323   UINT8    m_dial_enable_2;
2424   UINT8    m_input_select;
25   DECLARE_READ8_MEMBER(input_port_bit_r);
26   DECLARE_READ8_MEMBER(dial_r);
27   DECLARE_WRITE8_MEMBER(port_1_w);
28   DECLARE_WRITE8_MEMBER(port_2_w);
29   DECLARE_WRITE8_MEMBER(input_select_w);
2530};
2631
2732
r14845r14846
6570 *
6671 *************************************/
6772
68static READ8_HANDLER( input_port_bit_r )
73READ8_MEMBER(embargo_state::input_port_bit_r)
6974{
70   embargo_state *state = space->machine().driver_data<embargo_state>();
71   return (input_port_read(space->machine(), "IN1") << (7 - state->m_input_select)) & 0x80;
75   return (input_port_read(machine(), "IN1") << (7 - m_input_select)) & 0x80;
7276}
7377
7478
75static READ8_HANDLER( dial_r )
79READ8_MEMBER(embargo_state::dial_r)
7680{
77   embargo_state *state = space->machine().driver_data<embargo_state>();
7881
7982   UINT8 lo = 0;
8083   UINT8 hi = 0;
r14845r14846
9295      0x09, 0x0a, 0x08, 0x09, 0x08, 0x05, 0x07, 0x06
9396   };
9497
95   if (state->m_dial_enable_1 && !state->m_dial_enable_2)
98   if (m_dial_enable_1 && !m_dial_enable_2)
9699   {
97      lo = input_port_read(space->machine(), "DIAL0");
98      hi = input_port_read(space->machine(), "DIAL1");
100      lo = input_port_read(machine(), "DIAL0");
101      hi = input_port_read(machine(), "DIAL1");
99102   }
100103
101   if (state->m_dial_enable_2 && !state->m_dial_enable_1)
104   if (m_dial_enable_2 && !m_dial_enable_1)
102105   {
103      lo = input_port_read(space->machine(), "DIAL2");
104      hi = input_port_read(space->machine(), "DIAL3");
106      lo = input_port_read(machine(), "DIAL2");
107      hi = input_port_read(machine(), "DIAL3");
105108   }
106109
107110   lo = 12 * lo / 256;
r14845r14846
124127}
125128
126129
127static WRITE8_HANDLER( port_1_w )
130WRITE8_MEMBER(embargo_state::port_1_w)
128131{
129   embargo_state *state = space->machine().driver_data<embargo_state>();
130   state->m_dial_enable_1 = data & 0x01; /* other bits unknown */
132   m_dial_enable_1 = data & 0x01; /* other bits unknown */
131133}
132134
133135
134static WRITE8_HANDLER( port_2_w )
136WRITE8_MEMBER(embargo_state::port_2_w)
135137{
136   embargo_state *state = space->machine().driver_data<embargo_state>();
137   state->m_dial_enable_2 = data & 0x01; /* other bits unknown */
138   m_dial_enable_2 = data & 0x01; /* other bits unknown */
138139}
139140
140141
141static WRITE8_HANDLER( input_select_w )
142WRITE8_MEMBER(embargo_state::input_select_w)
142143{
143   embargo_state *state = space->machine().driver_data<embargo_state>();
144   state->m_input_select = data & 0x07;
144   m_input_select = data & 0x07;
145145}
146146
147147
r14845r14846
167167 *************************************/
168168
169169static ADDRESS_MAP_START( main_io_map, AS_IO, 8, embargo_state )
170   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITE_LEGACY(port_1_w)
171   AM_RANGE(0x02, 0x02) AM_READWRITE_LEGACY(dial_r, port_2_w)
170   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITE(port_1_w)
171   AM_RANGE(0x02, 0x02) AM_READWRITE(dial_r, port_2_w)
172172   AM_RANGE(0x03, 0x03) AM_WRITENOP /* always 0xFE */
173173   AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ_PORT("IN2")
174   AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE_LEGACY(input_port_bit_r, input_select_w)
174   AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(input_port_bit_r, input_select_w)
175175ADDRESS_MAP_END
176176
177177
src/mame/drivers/warpsped.c
r14845r14846
9797   tilemap_t   *m_starfield_tilemap;
9898   UINT8      *m_workram;
9999   UINT8      m_regs[0x28];
100   DECLARE_WRITE8_MEMBER(warpspeed_hardware_w);
101   DECLARE_WRITE8_MEMBER(warpspeed_vidram_w);
100102};
101103
102static WRITE8_HANDLER( warpspeed_hardware_w )
104WRITE8_MEMBER(warpspeed_state::warpspeed_hardware_w)
103105{
104   warpspeed_state *state = space->machine().driver_data<warpspeed_state>();
105   state->m_regs[offset] = data;
106   m_regs[offset] = data;
106107}
107108
108109static TILE_GET_INFO( get_warpspeed_text_tile_info )
r14845r14846
123124   SET_TILE_INFO(1, code, 0, 0);
124125}
125126
126static WRITE8_HANDLER( warpspeed_vidram_w )
127WRITE8_MEMBER(warpspeed_state::warpspeed_vidram_w)
127128{
128   warpspeed_state *state = space->machine().driver_data<warpspeed_state>();
129129
130   state->m_videoram[offset] = data;
131   state->m_text_tilemap->mark_tile_dirty(offset);
130   m_videoram[offset] = data;
131   m_text_tilemap->mark_tile_dirty(offset);
132132}
133133
134134static VIDEO_START( warpspeed )
r14845r14846
215215
216216static ADDRESS_MAP_START( warpspeed_map, AS_PROGRAM, 8, warpspeed_state )
217217   AM_RANGE(0x0000, 0x0dff) AM_ROM
218   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(warpspeed_vidram_w ) AM_BASE(m_videoram)
218   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(warpspeed_vidram_w ) AM_BASE(m_videoram)
219219   AM_RANGE(0x1c00, 0x1cff) AM_RAM AM_BASE(m_workram)
220220ADDRESS_MAP_END
221221
r14845r14846
225225   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1")
226226   AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW")
227227   AM_RANGE(0x03, 0x03) AM_READ_PORT("IN2")
228   AM_RANGE(0x00, 0x27) AM_WRITE_LEGACY(warpspeed_hardware_w )
228   AM_RANGE(0x00, 0x27) AM_WRITE(warpspeed_hardware_w )
229229ADDRESS_MAP_END
230230
231231static INPUT_PORTS_START( warpspeed )
src/mame/drivers/spaceg.c
r14845r14846
183183   UINT8 *  m_colorram;
184184   UINT8 *  m_io9400;
185185   UINT8 *  m_io9401;
186   DECLARE_WRITE8_MEMBER(zvideoram_w);
187   DECLARE_READ8_MEMBER(spaceg_colorram_r);
186188};
187189
188190/*************************************
r14845r14846
218220   palette_set_color (machine, 15, MAKE_RGB(0x7f,0x7f,0x7f));//???
219221}
220222
221static WRITE8_HANDLER( zvideoram_w )
223WRITE8_MEMBER(spaceg_state::zvideoram_w)
222224{
223   spaceg_state *state = space->machine().driver_data<spaceg_state>();
224   int col = state->m_colorram[0x400];
225   int xoff = *state->m_io9400 >> 5 & 7;
225   int col = m_colorram[0x400];
226   int xoff = *m_io9400 >> 5 & 7;
226227   UINT16 offset2 = (offset + 0x100) & 0x1fff;
227228   UINT16 sdata = data << (8 - xoff);
228   UINT16 vram_data = state->m_videoram[offset] << 8 | (state->m_videoram[offset2]);
229   UINT16 vram_data = m_videoram[offset] << 8 | (m_videoram[offset2]);
229230
230231   if (col > 0x0f) popmessage("color > 0x0f = %2d", col);
231232   col &= 0x0f;
232233
233   switch (*state->m_io9401)
234   switch (*m_io9401)
234235   {
235236      // draw
236237      case 0:
r14845r14846
240241         vram_data |= sdata;
241242
242243         // update colorram
243         if (sdata&0xff00) state->m_colorram[offset] = col;
244         if (sdata&0x00ff) state->m_colorram[offset2] = col;
244         if (sdata&0xff00) m_colorram[offset] = col;
245         if (sdata&0x00ff) m_colorram[offset2] = col;
245246         break;
246247
247248      // erase
r14845r14846
250251         break;
251252
252253      default:
253         logerror("mode = %02x pc = %04x\n", *state->m_io9401, cpu_get_pc(&space->device()));
254         popmessage("mode = %02x pc = %04x\n", *state->m_io9401, cpu_get_pc(&space->device()));
254         logerror("mode = %02x pc = %04x\n", *m_io9401, cpu_get_pc(&space.device()));
255         popmessage("mode = %02x pc = %04x\n", *m_io9401, cpu_get_pc(&space.device()));
255256         return;
256257   }
257258
258   state->m_videoram[offset]=vram_data>>8;
259   state->m_videoram[offset2]=vram_data&0xff;
259   m_videoram[offset]=vram_data>>8;
260   m_videoram[offset2]=vram_data&0xff;
260261}
261262
262263
263static READ8_HANDLER(spaceg_colorram_r)
264READ8_MEMBER(spaceg_state::spaceg_colorram_r)
264265{
265   spaceg_state *state = space->machine().driver_data<spaceg_state>();
266266   int rgbcolor;
267267
268268   if (offset < 0x400)
269269   {
270      rgbcolor = (state->m_colorram[offset] << 1) | ((offset &0x100) >> 8);
270      rgbcolor = (m_colorram[offset] << 1) | ((offset &0x100) >> 8);
271271
272272      if ((offset >= 0x200) && (offset < 0x220)) /* 0xa200- 0xa21f */
273273      {
274274         /* palette 1 */
275275         int col_ind = offset & 0x1f;
276         palette_set_color_rgb(space->machine(), 0x10 + 0x00 + col_ind, pal3bit(rgbcolor >> 0), pal3bit(rgbcolor >> 6), pal3bit(rgbcolor >> 3));
276         palette_set_color_rgb(machine(), 0x10 + 0x00 + col_ind, pal3bit(rgbcolor >> 0), pal3bit(rgbcolor >> 6), pal3bit(rgbcolor >> 3));
277277      }
278278      else if ((offset >= 0x300) && (offset < 0x320)) /* 0xa300- 0xa31f */
279279      {
280280         /* palette 2 */
281281         int col_ind = offset & 0x1f;
282         palette_set_color_rgb(space->machine(), 0x10 + 0x00 + col_ind, pal3bit(rgbcolor >> 0), pal3bit(rgbcolor >> 6), pal3bit(rgbcolor >> 3));
282         palette_set_color_rgb(machine(), 0x10 + 0x00 + col_ind, pal3bit(rgbcolor >> 0), pal3bit(rgbcolor >> 6), pal3bit(rgbcolor >> 3));
283283      }
284284      else
285285         logerror("palette? read from colorram offset = %04x\n",offset);
286286   }
287287
288   if (*state->m_io9401 != 0x40)
289      logerror("colorram read in mode: 9401 = %02x (offset = %04x)\n", *state->m_io9401, offset);
288   if (*m_io9401 != 0x40)
289      logerror("colorram read in mode: 9401 = %02x (offset = %04x)\n", *m_io9401, offset);
290290
291   return state->m_colorram[offset];
291   return m_colorram[offset];
292292}
293293
294294
r14845r14846
328328   AM_RANGE(0x3000, 0x3fff) AM_ROM
329329   AM_RANGE(0x7000, 0x77ff) AM_RAM
330330
331   AM_RANGE(0xa000, 0xbfff) AM_RAM_READ_LEGACY(spaceg_colorram_r) AM_BASE(m_colorram)
332   AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE_LEGACY(zvideoram_w) AM_BASE(m_videoram)
331   AM_RANGE(0xa000, 0xbfff) AM_RAM_READ(spaceg_colorram_r) AM_BASE(m_colorram)
332   AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(zvideoram_w) AM_BASE(m_videoram)
333333
334334   AM_RANGE(0x9400, 0x9400) AM_WRITEONLY AM_BASE(m_io9400) /* gfx ctrl */
335335   AM_RANGE(0x9401, 0x9401) AM_WRITEONLY AM_BASE(m_io9401) /* gfx ctrl */
src/mame/drivers/gei.c
r14845r14846
9292   int m_signature_answer;
9393   int m_signature_pos;
9494   UINT8 m_nmi_mask;
95   DECLARE_WRITE8_MEMBER(gei_drawctrl_w);
96   DECLARE_WRITE8_MEMBER(gei_bitmap_w);
97   DECLARE_READ8_MEMBER(catchall);
98   DECLARE_WRITE8_MEMBER(banksel_main_w);
99   DECLARE_WRITE8_MEMBER(banksel_1_w);
100   DECLARE_WRITE8_MEMBER(banksel_2_w);
101   DECLARE_WRITE8_MEMBER(banksel_3_w);
102   DECLARE_WRITE8_MEMBER(banksel_4_w);
103   DECLARE_WRITE8_MEMBER(banksel_5_w);
104   DECLARE_WRITE8_MEMBER(banksel_1_1_w);
105   DECLARE_WRITE8_MEMBER(banksel_2_1_w);
106   DECLARE_WRITE8_MEMBER(banksel_3_1_w);
107   DECLARE_WRITE8_MEMBER(banksel_4_1_w);
108   DECLARE_WRITE8_MEMBER(banksel_5_1_w);
109   DECLARE_WRITE8_MEMBER(banksel_1_2_w);
110   DECLARE_WRITE8_MEMBER(banksel_2_2_w);
111   DECLARE_WRITE8_MEMBER(banksel_3_2_w);
112   DECLARE_WRITE8_MEMBER(banksel_4_2_w);
113   DECLARE_WRITE8_MEMBER(banksel_5_2_w);
114   DECLARE_WRITE8_MEMBER(geimulti_bank_w);
115   DECLARE_READ8_MEMBER(banksel_1_r);
116   DECLARE_READ8_MEMBER(banksel_2_r);
117   DECLARE_READ8_MEMBER(banksel_3_r);
118   DECLARE_READ8_MEMBER(banksel_4_r);
119   DECLARE_READ8_MEMBER(banksel_5_r);
120   DECLARE_READ8_MEMBER(signature_r);
121   DECLARE_WRITE8_MEMBER(signature_w);
122   DECLARE_WRITE8_MEMBER(signature2_w);
95123};
96124
97125
98static WRITE8_HANDLER( gei_drawctrl_w )
126WRITE8_MEMBER(gei_state::gei_drawctrl_w)
99127{
100   gei_state *state = space->machine().driver_data<gei_state>();
101   state->m_drawctrl[offset] = data;
128   m_drawctrl[offset] = data;
102129   if (offset == 2)
103130   {
104131      int i;
105132      for (i = 0; i < 8; i++)
106         if (BIT(state->m_drawctrl[1],i)) state->m_color[i] = state->m_drawctrl[0] & 7;
133         if (BIT(m_drawctrl[1],i)) m_color[i] = m_drawctrl[0] & 7;
107134   }
108135}
109136
110static WRITE8_HANDLER( gei_bitmap_w )
137WRITE8_MEMBER(gei_state::gei_bitmap_w)
111138{
112   gei_state *state = space->machine().driver_data<gei_state>();
113139   int sx,sy;
114140   int i;
115141
116   state->m_yadd = (offset==state->m_prevoffset) ? (state->m_yadd+1):0;
117   state->m_prevoffset = offset;
142   m_yadd = (offset==m_prevoffset) ? (m_yadd+1):0;
143   m_prevoffset = offset;
118144
119145   sx = 8 * (offset % 64);
120146   sy = offset / 64;
121   sy = (sy + state->m_yadd) & 0xff;
147   sy = (sy + m_yadd) & 0xff;
122148
123149
124150   for (i = 0; i < 8; i++)
125      state->m_bitmap.pix16(sy, sx+i) = state->m_color[8-i-1];
151      m_bitmap.pix16(sy, sx+i) = m_color[8-i-1];
126152}
127153
128154static PALETTE_INIT(gei)
r14845r14846
226252   state->m_nmi_mask = data & 0x40;
227253}
228254
229static READ8_HANDLER( catchall )
255READ8_MEMBER(gei_state::catchall)
230256{
231   int pc = cpu_get_pc(&space->device());
257   int pc = cpu_get_pc(&space.device());
232258
233259   if (pc != 0x3c74 && pc != 0x0364 && pc != 0x036d)   /* weed out spurious blit reads */
234260      logerror("%04x: unmapped memory read from %04x\n",pc,offset);
r14845r14846
241267   return 4;
242268}
243269
244static WRITE8_HANDLER( banksel_main_w )
270WRITE8_MEMBER(gei_state::banksel_main_w)
245271{
246   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x8000);
272   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x8000);
247273}
248static WRITE8_HANDLER( banksel_1_w )
274WRITE8_MEMBER(gei_state::banksel_1_w)
249275{
250   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x10000);
276   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x10000);
251277}
252static WRITE8_HANDLER( banksel_2_w )
278WRITE8_MEMBER(gei_state::banksel_2_w)
253279{
254   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x18000);
280   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x18000);
255281}
256static WRITE8_HANDLER( banksel_3_w )
282WRITE8_MEMBER(gei_state::banksel_3_w)
257283{
258   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x20000);
284   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x20000);
259285}
260static WRITE8_HANDLER( banksel_4_w )
286WRITE8_MEMBER(gei_state::banksel_4_w)
261287{
262   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x28000);
288   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x28000);
263289}
264static WRITE8_HANDLER( banksel_5_w )
290WRITE8_MEMBER(gei_state::banksel_5_w)
265291{
266   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x30000);
292   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x30000);
267293}
268294
269static WRITE8_HANDLER( banksel_1_1_w )
295WRITE8_MEMBER(gei_state::banksel_1_1_w)
270296{
271   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x10000);
297   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x10000);
272298}
273static WRITE8_HANDLER( banksel_2_1_w )
299WRITE8_MEMBER(gei_state::banksel_2_1_w)
274300{
275   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x14000);
301   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x14000);
276302}
277static WRITE8_HANDLER( banksel_3_1_w )
303WRITE8_MEMBER(gei_state::banksel_3_1_w)
278304{
279   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x18000);
305   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x18000);
280306}
281static WRITE8_HANDLER( banksel_4_1_w )
307WRITE8_MEMBER(gei_state::banksel_4_1_w)
282308{
283   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x1c000);
309   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x1c000);
284310}
285static WRITE8_HANDLER( banksel_5_1_w )
311WRITE8_MEMBER(gei_state::banksel_5_1_w)
286312{
287   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x20000);
313   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x20000);
288314}
289static WRITE8_HANDLER( banksel_1_2_w )
315WRITE8_MEMBER(gei_state::banksel_1_2_w)
290316{
291   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x12000);
317   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x12000);
292318}
293static WRITE8_HANDLER( banksel_2_2_w )
319WRITE8_MEMBER(gei_state::banksel_2_2_w)
294320{
295   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x16000);
321   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x16000);
296322}
297static WRITE8_HANDLER( banksel_3_2_w )
323WRITE8_MEMBER(gei_state::banksel_3_2_w)
298324{
299   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x1a000);
325   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x1a000);
300326}
301static WRITE8_HANDLER( banksel_4_2_w )
327WRITE8_MEMBER(gei_state::banksel_4_2_w)
302328{
303   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x1e000);
329   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x1e000);
304330}
305static WRITE8_HANDLER( banksel_5_2_w )
331WRITE8_MEMBER(gei_state::banksel_5_2_w)
306332{
307   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x22000);
333   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x22000);
308334}
309335
310static WRITE8_HANDLER(geimulti_bank_w)
336WRITE8_MEMBER(gei_state::geimulti_bank_w)
311337{
312338   int bank = -1;
313339
r14845r14846
332358   }
333359
334360   if (bank != -1)
335      memory_set_bankptr(space->machine(), "bank1", space->machine().region("bank")->base() + bank*0x8000);
361      memory_set_bankptr(machine(), "bank1", machine().region("bank")->base() + bank*0x8000);
336362}
337363
338static READ8_HANDLER(banksel_1_r)
364READ8_MEMBER(gei_state::banksel_1_r)
339365{
340   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x10000);
366   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x10000);
341367   return 0x03;
342368};
343369
344static READ8_HANDLER(banksel_2_r)
370READ8_MEMBER(gei_state::banksel_2_r)
345371{
346   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x18000);
372   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x18000);
347373   return 0x03;
348374}
349375
350static READ8_HANDLER(banksel_3_r)
376READ8_MEMBER(gei_state::banksel_3_r)
351377{
352   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x20000);
378   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x20000);
353379   return 0x03;
354380}
355381
356static READ8_HANDLER(banksel_4_r)
382READ8_MEMBER(gei_state::banksel_4_r)
357383{
358   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x28000);
384   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x28000);
359385   return 0x03;
360386}
361387
362static READ8_HANDLER(banksel_5_r)
388READ8_MEMBER(gei_state::banksel_5_r)
363389{
364   memory_set_bankptr(space->machine(), "bank1",space->machine().region("maincpu")->base() + 0x30000);
390   memory_set_bankptr(machine(), "bank1",machine().region("maincpu")->base() + 0x30000);
365391   return 0x03;
366392}
367393
368394/* This signature is used to validate the ROMs in sportauth. Simple protection check? */
369395
370static READ8_HANDLER( signature_r )
396READ8_MEMBER(gei_state::signature_r)
371397{
372   gei_state *state = space->machine().driver_data<gei_state>();
373   return state->m_signature_answer;
398   return m_signature_answer;
374399}
375400
376static WRITE8_HANDLER( signature_w )
401WRITE8_MEMBER(gei_state::signature_w)
377402{
378   gei_state *state = space->machine().driver_data<gei_state>();
379   if (data == 0) state->m_signature_pos = 0;
403   if (data == 0) m_signature_pos = 0;
380404   else
381405   {
382406      static const UINT8 signature[8] = { 0xff, 0x01, 0xfd, 0x05, 0xf5, 0x15, 0xd5, 0x55 };
383407
384      state->m_signature_answer = signature[state->m_signature_pos++];
408      m_signature_answer = signature[m_signature_pos++];
385409
386      state->m_signature_pos &= 7;   /* safety; shouldn't happen */
410      m_signature_pos &= 7;   /* safety; shouldn't happen */
387411   }
388412}
389413
390static WRITE8_HANDLER( signature2_w )
414WRITE8_MEMBER(gei_state::signature2_w)
391415{
392   gei_state *state = space->machine().driver_data<gei_state>();
393   if (data == 0) state->m_signature_pos = 0;
416   if (data == 0) m_signature_pos = 0;
394417   else
395418   {
396419      static const UINT8 signature[8] = { 0xff, 0x01, 0xf7, 0x11, 0xd7, 0x51, 0x57, 0x51 };
397420
398      state->m_signature_answer = signature[state->m_signature_pos++];
421      m_signature_answer = signature[m_signature_pos++];
399422
400      state->m_signature_pos &= 7;   /* safety; shouldn't happen */
423      m_signature_pos &= 7;   /* safety; shouldn't happen */
401424   }
402425}
403426
r14845r14846
407430   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("nvram")
408431   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
409432   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
410   AM_RANGE(0x600f, 0x600f) AM_WRITE_LEGACY(banksel_5_1_w)
411   AM_RANGE(0x6017, 0x6017) AM_WRITE_LEGACY(banksel_4_1_w)
412   AM_RANGE(0x601b, 0x601b) AM_WRITE_LEGACY(banksel_3_1_w)
413   AM_RANGE(0x601d, 0x601d) AM_WRITE_LEGACY(banksel_2_1_w)
414   AM_RANGE(0x601e, 0x601e) AM_WRITE_LEGACY(banksel_1_1_w)
415   AM_RANGE(0x608f, 0x608f) AM_WRITE_LEGACY(banksel_5_2_w)
416   AM_RANGE(0x6097, 0x6097) AM_WRITE_LEGACY(banksel_4_2_w)
417   AM_RANGE(0x609b, 0x609b) AM_WRITE_LEGACY(banksel_3_2_w)
418   AM_RANGE(0x609d, 0x609d) AM_WRITE_LEGACY(banksel_2_2_w)
419   AM_RANGE(0x609e, 0x609e) AM_WRITE_LEGACY(banksel_1_2_w)
420   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
433   AM_RANGE(0x600f, 0x600f) AM_WRITE(banksel_5_1_w)
434   AM_RANGE(0x6017, 0x6017) AM_WRITE(banksel_4_1_w)
435   AM_RANGE(0x601b, 0x601b) AM_WRITE(banksel_3_1_w)
436   AM_RANGE(0x601d, 0x601d) AM_WRITE(banksel_2_1_w)
437   AM_RANGE(0x601e, 0x601e) AM_WRITE(banksel_1_1_w)
438   AM_RANGE(0x608f, 0x608f) AM_WRITE(banksel_5_2_w)
439   AM_RANGE(0x6097, 0x6097) AM_WRITE(banksel_4_2_w)
440   AM_RANGE(0x609b, 0x609b) AM_WRITE(banksel_3_2_w)
441   AM_RANGE(0x609d, 0x609d) AM_WRITE(banksel_2_2_w)
442   AM_RANGE(0x609e, 0x609e) AM_WRITE(banksel_1_2_w)
443   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
421444   AM_RANGE(0x8000, 0x9fff) AM_ROM /* space for diagnostic ROM? */
422445   AM_RANGE(0xa000, 0xbfff) AM_ROM
423   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
446   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
424447ADDRESS_MAP_END
425448
426449static ADDRESS_MAP_START( gselect_map, AS_PROGRAM, 8, gei_state )
427450   AM_RANGE(0x0000, 0x1fff) AM_ROM
428451   AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1")
429452   AM_RANGE(0x4000, 0x40ff) AM_RAM AM_SHARE("nvram")
430   AM_RANGE(0x4400, 0x4400) AM_WRITE_LEGACY(banksel_1_1_w)
431   AM_RANGE(0x4401, 0x4401) AM_WRITE_LEGACY(banksel_1_2_w)
432   AM_RANGE(0x4402, 0x4402) AM_WRITE_LEGACY(banksel_2_1_w)
433   AM_RANGE(0x4403, 0x4403) AM_WRITE_LEGACY(banksel_2_2_w)
453   AM_RANGE(0x4400, 0x4400) AM_WRITE(banksel_1_1_w)
454   AM_RANGE(0x4401, 0x4401) AM_WRITE(banksel_1_2_w)
455   AM_RANGE(0x4402, 0x4402) AM_WRITE(banksel_2_1_w)
456   AM_RANGE(0x4403, 0x4403) AM_WRITE(banksel_2_2_w)
434457   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
435458   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
436   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
437   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
459   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
460   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
438461ADDRESS_MAP_END
439462
440463// TODO: where are mapped the lower 0x2000 bytes of the banks?
r14845r14846
444467   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("nvram")
445468   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
446469   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
447   AM_RANGE(0x606f, 0x606f) AM_WRITE_LEGACY(banksel_5_1_w)
448   AM_RANGE(0x6077, 0x6077) AM_WRITE_LEGACY(banksel_4_1_w)
449   AM_RANGE(0x607b, 0x607b) AM_WRITE_LEGACY(banksel_3_1_w)
450   AM_RANGE(0x607d, 0x607d) AM_WRITE_LEGACY(banksel_2_1_w)
451   AM_RANGE(0x607e, 0x607e) AM_WRITE_LEGACY(banksel_1_1_w)
452   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
470   AM_RANGE(0x606f, 0x606f) AM_WRITE(banksel_5_1_w)
471   AM_RANGE(0x6077, 0x6077) AM_WRITE(banksel_4_1_w)
472   AM_RANGE(0x607b, 0x607b) AM_WRITE(banksel_3_1_w)
473   AM_RANGE(0x607d, 0x607d) AM_WRITE(banksel_2_1_w)
474   AM_RANGE(0x607e, 0x607e) AM_WRITE(banksel_1_1_w)
475   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
453476   AM_RANGE(0x8000, 0xbfff) AM_ROM
454   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
477   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
455478ADDRESS_MAP_END
456479
457480static ADDRESS_MAP_START( gepoker_map, AS_PROGRAM, 8, gei_state )
r14845r14846
460483   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("nvram")
461484   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
462485   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
463   AM_RANGE(0x60ef, 0x60ef) AM_WRITE_LEGACY(banksel_3_1_w)
464   AM_RANGE(0x60f7, 0x60f7) AM_WRITE_LEGACY(banksel_2_2_w)
465   AM_RANGE(0x60fb, 0x60fb) AM_WRITE_LEGACY(banksel_2_1_w)
466   AM_RANGE(0x60fd, 0x60fd) AM_WRITE_LEGACY(banksel_1_2_w)
467   AM_RANGE(0x60fe, 0x60fe) AM_WRITE_LEGACY(banksel_1_1_w)
468   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
486   AM_RANGE(0x60ef, 0x60ef) AM_WRITE(banksel_3_1_w)
487   AM_RANGE(0x60f7, 0x60f7) AM_WRITE(banksel_2_2_w)
488   AM_RANGE(0x60fb, 0x60fb) AM_WRITE(banksel_2_1_w)
489   AM_RANGE(0x60fd, 0x60fd) AM_WRITE(banksel_1_2_w)
490   AM_RANGE(0x60fe, 0x60fe) AM_WRITE(banksel_1_1_w)
491   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
469492   AM_RANGE(0x8000, 0xbfff) AM_ROM /* space for diagnostic ROM? */
470493   AM_RANGE(0xe000, 0xffff) AM_ROM
471   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
494   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
472495ADDRESS_MAP_END
473496
474497static ADDRESS_MAP_START( amuse1_map, AS_PROGRAM, 8, gei_state )
475498   AM_RANGE(0x0000, 0x1fff) AM_ROM
476499   AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1")
477500   AM_RANGE(0x4000, 0x43ff) AM_RAM AM_SHARE("nvram")
478   AM_RANGE(0x4400, 0x4400) AM_WRITE_LEGACY(banksel_1_1_w)
479   AM_RANGE(0x4401, 0x4401) AM_WRITE_LEGACY(banksel_2_1_w)
480   AM_RANGE(0x4402, 0x4402) AM_WRITE_LEGACY(banksel_3_1_w)
481   AM_RANGE(0x4403, 0x4403) AM_WRITE_LEGACY(banksel_4_1_w)
501   AM_RANGE(0x4400, 0x4400) AM_WRITE(banksel_1_1_w)
502   AM_RANGE(0x4401, 0x4401) AM_WRITE(banksel_2_1_w)
503   AM_RANGE(0x4402, 0x4402) AM_WRITE(banksel_3_1_w)
504   AM_RANGE(0x4403, 0x4403) AM_WRITE(banksel_4_1_w)
482505   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
483506   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
484507   AM_RANGE(0x5800, 0x5fff) AM_ROM
485   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
508   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
486509   AM_RANGE(0x8000, 0xbfff) AM_ROM /* space for diagnostic ROM? */
487510   AM_RANGE(0xe000, 0xffff) AM_ROM
488   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
511   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
489512ADDRESS_MAP_END
490513
491514static ADDRESS_MAP_START( findout_map, AS_PROGRAM, 8, gei_state )
r14845r14846
494517   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r,ppi8255_w)
495518   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r,ppi8255_w)
496519   /* banked ROMs are enabled by low 6 bits of the address */
497   AM_RANGE(0x601f, 0x601f) AM_WRITE_LEGACY(banksel_main_w)
498   AM_RANGE(0x602f, 0x602f) AM_WRITE_LEGACY(banksel_5_w)
499   AM_RANGE(0x6037, 0x6037) AM_WRITE_LEGACY(banksel_4_w)
500   AM_RANGE(0x603b, 0x603b) AM_WRITE_LEGACY(banksel_3_w)
501   AM_RANGE(0x603d, 0x603d) AM_WRITE_LEGACY(banksel_2_w)
502   AM_RANGE(0x603e, 0x603e) AM_WRITE_LEGACY(banksel_1_w)
503   AM_RANGE(0x6200, 0x6200) AM_WRITE_LEGACY(signature_w)
504   AM_RANGE(0x6400, 0x6400) AM_READ_LEGACY(signature_r)
520   AM_RANGE(0x601f, 0x601f) AM_WRITE(banksel_main_w)
521   AM_RANGE(0x602f, 0x602f) AM_WRITE(banksel_5_w)
522   AM_RANGE(0x6037, 0x6037) AM_WRITE(banksel_4_w)
523   AM_RANGE(0x603b, 0x603b) AM_WRITE(banksel_3_w)
524   AM_RANGE(0x603d, 0x603d) AM_WRITE(banksel_2_w)
525   AM_RANGE(0x603e, 0x603e) AM_WRITE(banksel_1_w)
526   AM_RANGE(0x6200, 0x6200) AM_WRITE(signature_w)
527   AM_RANGE(0x6400, 0x6400) AM_READ(signature_r)
505528   AM_RANGE(0x7800, 0x7fff) AM_ROM /*space for diagnostic ROM?*/
506529   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
507   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
508   AM_RANGE(0xc000, 0xffff) AM_WRITE_LEGACY(gei_bitmap_w)
509   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(catchall)
530   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
531   AM_RANGE(0xc000, 0xffff) AM_WRITE(gei_bitmap_w)
532   AM_RANGE(0x0000, 0xffff) AM_READ(catchall)
510533ADDRESS_MAP_END
511534
512535static ADDRESS_MAP_START( quizvid_map, AS_PROGRAM, 8, gei_state )
r14845r14846
515538   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r,ppi8255_w)
516539   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r,ppi8255_w)
517540   /* banked ROMs are enabled by low 6 bits of the address */
518   AM_RANGE(0x602f, 0x602f) AM_READ_LEGACY(banksel_5_r)
519   AM_RANGE(0x6037, 0x6037) AM_READ_LEGACY(banksel_4_r)
520   AM_RANGE(0x603b, 0x603b) AM_READ_LEGACY(banksel_3_r)
521   AM_RANGE(0x603d, 0x603d) AM_READ_LEGACY(banksel_2_r)
522   AM_RANGE(0x603e, 0x603e) AM_READ_LEGACY(banksel_1_r)
541   AM_RANGE(0x602f, 0x602f) AM_READ(banksel_5_r)
542   AM_RANGE(0x6037, 0x6037) AM_READ(banksel_4_r)
543   AM_RANGE(0x603b, 0x603b) AM_READ(banksel_3_r)
544   AM_RANGE(0x603d, 0x603d) AM_READ(banksel_2_r)
545   AM_RANGE(0x603e, 0x603e) AM_READ(banksel_1_r)
523546   AM_RANGE(0x7800, 0x7fff) AM_ROM /*space for diagnostic ROM?*/
524547   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
525   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
526   AM_RANGE(0xc000, 0xffff) AM_WRITE_LEGACY(gei_bitmap_w)
527   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(catchall)
548   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
549   AM_RANGE(0xc000, 0xffff) AM_WRITE(gei_bitmap_w)
550   AM_RANGE(0x0000, 0xffff) AM_READ(catchall)
528551ADDRESS_MAP_END
529552
530553static ADDRESS_MAP_START( suprpokr_map, AS_PROGRAM, 8, gei_state )
r14845r14846
532555   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("nvram")
533556   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
534557   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
535   AM_RANGE(0x6200, 0x6200) AM_WRITE_LEGACY(signature2_w)
536   AM_RANGE(0x6400, 0x6400) AM_READ_LEGACY(signature_r)
537   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
538   AM_RANGE(0xc000, 0xffff) AM_WRITE_LEGACY(gei_bitmap_w)
558   AM_RANGE(0x6200, 0x6200) AM_WRITE(signature2_w)
559   AM_RANGE(0x6400, 0x6400) AM_READ(signature_r)
560   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
561   AM_RANGE(0xc000, 0xffff) AM_WRITE(gei_bitmap_w)
539562   AM_RANGE(0x8000, 0xffff) AM_ROM
540563ADDRESS_MAP_END
541564
r14845r14846
545568   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
546569   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
547570   AM_RANGE(0x5800, 0x5fff) AM_ROM
548   AM_RANGE(0x5a00, 0x5cff) AM_WRITE_LEGACY(geimulti_bank_w)
571   AM_RANGE(0x5a00, 0x5cff) AM_WRITE(geimulti_bank_w)
549572   AM_RANGE(0x6000, 0x7fff) AM_ROM
550   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
573   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
551574   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
552   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
575   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
553576ADDRESS_MAP_END
554577
555578static ADDRESS_MAP_START( sprtauth_map, AS_PROGRAM, 8, gei_state )
r14845r14846
557580   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("nvram")
558581   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
559582   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
560   AM_RANGE(0x5600, 0x5600) AM_READ_LEGACY(signature_r)
561   AM_RANGE(0x5800, 0x5800) AM_WRITE_LEGACY(signature_w)
562   AM_RANGE(0x5a00, 0x5cff) AM_WRITE_LEGACY(geimulti_bank_w)
583   AM_RANGE(0x5600, 0x5600) AM_READ(signature_r)
584   AM_RANGE(0x5800, 0x5800) AM_WRITE(signature_w)
585   AM_RANGE(0x5a00, 0x5cff) AM_WRITE(geimulti_bank_w)
563586   AM_RANGE(0x6000, 0x7fff) AM_ROM
564   AM_RANGE(0x8000, 0x8002) AM_WRITE_LEGACY(gei_drawctrl_w)
587   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
565588   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
566   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE_LEGACY(gei_bitmap_w)
589   AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(gei_bitmap_w)
567590ADDRESS_MAP_END
568591
569592static INPUT_PORTS_START(reelfun_standard)
src/mame/drivers/looping.c
r14845r14846
113113   UINT8      m_sound[8];
114114
115115   int      m_last;
116   DECLARE_WRITE8_MEMBER(flip_screen_x_w);
117   DECLARE_WRITE8_MEMBER(flip_screen_y_w);
118   DECLARE_WRITE8_MEMBER(looping_videoram_w);
119   DECLARE_WRITE8_MEMBER(looping_colorram_w);
120   DECLARE_WRITE8_MEMBER(level2_irq_set);
121   DECLARE_WRITE8_MEMBER(main_irq_ack_w);
122   DECLARE_WRITE8_MEMBER(looping_souint_clr);
123   DECLARE_WRITE8_MEMBER(looping_soundlatch_w);
124   DECLARE_WRITE8_MEMBER(ballon_enable_w);
125   DECLARE_WRITE8_MEMBER(out_0_w);
126   DECLARE_WRITE8_MEMBER(out_2_w);
127   DECLARE_READ8_MEMBER(adc_r);
128   DECLARE_WRITE8_MEMBER(adc_w);
129   DECLARE_WRITE8_MEMBER(plr2_w);
130   DECLARE_READ8_MEMBER(cop_io_r);
131   DECLARE_WRITE8_MEMBER(cop_io_w);
132   DECLARE_READ8_MEMBER(protection_r);
116133};
117134
118135
r14845r14846
195212 *
196213 *************************************/
197214
198static WRITE8_HANDLER( flip_screen_x_w )
215WRITE8_MEMBER(looping_state::flip_screen_x_w)
199216{
200   looping_state *state = space->machine().driver_data<looping_state>();
201   flip_screen_x_set(space->machine(), ~data & 0x01);
202   state->m_bg_tilemap->set_scrollx(0, flip_screen_get(space->machine()) ? 128 : 0);
217   flip_screen_x_set(machine(), ~data & 0x01);
218   m_bg_tilemap->set_scrollx(0, flip_screen_get(machine()) ? 128 : 0);
203219}
204220
205221
206static WRITE8_HANDLER( flip_screen_y_w )
222WRITE8_MEMBER(looping_state::flip_screen_y_w)
207223{
208   looping_state *state = space->machine().driver_data<looping_state>();
209   flip_screen_y_set(space->machine(), ~data & 0x01);
210   state->m_bg_tilemap->set_scrollx(0, flip_screen_get(space->machine()) ? 128 : 0);
224   flip_screen_y_set(machine(), ~data & 0x01);
225   m_bg_tilemap->set_scrollx(0, flip_screen_get(machine()) ? 128 : 0);
211226}
212227
213228
214static WRITE8_HANDLER( looping_videoram_w )
229WRITE8_MEMBER(looping_state::looping_videoram_w)
215230{
216   looping_state *state = space->machine().driver_data<looping_state>();
217   state->m_videoram[offset] = data;
218   state->m_bg_tilemap->mark_tile_dirty(offset);
231   m_videoram[offset] = data;
232   m_bg_tilemap->mark_tile_dirty(offset);
219233}
220234
221235
222static WRITE8_HANDLER( looping_colorram_w )
236WRITE8_MEMBER(looping_state::looping_colorram_w)
223237{
224   looping_state *state = space->machine().driver_data<looping_state>();
225238   int i;
226239
227   state->m_colorram[offset] = data;
240   m_colorram[offset] = data;
228241
229242   /* odd bytes are column color attribute */
230243   if (offset & 1)
r14845r14846
232245      /* mark the whole column dirty */
233246      offs_t offs = (offset/2);
234247      for (i = 0; i < 0x20; i++)
235         state->m_bg_tilemap->mark_tile_dirty(i * 0x20 + offs);
248         m_bg_tilemap->mark_tile_dirty(i * 0x20 + offs);
236249   }
237250
238251   /* even bytes are column scroll */
239252   else
240      state->m_bg_tilemap->set_scrolly(offset/2, data);
253      m_bg_tilemap->set_scrolly(offset/2, data);
241254}
242255
243256
r14845r14846
316329}
317330
318331
319static WRITE8_HANDLER( level2_irq_set )
332WRITE8_MEMBER(looping_state::level2_irq_set)
320333{
321334   if (!(data & 1))
322      cputag_set_input_line_and_vector(space->machine(), "maincpu", 0, ASSERT_LINE, 4);
335      cputag_set_input_line_and_vector(machine(), "maincpu", 0, ASSERT_LINE, 4);
323336}
324337
325338
326static WRITE8_HANDLER( main_irq_ack_w )
339WRITE8_MEMBER(looping_state::main_irq_ack_w)
327340{
328341   if (data == 0)
329      cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
342      cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
330343}
331344
332345
333static WRITE8_HANDLER( looping_souint_clr )
346WRITE8_MEMBER(looping_state::looping_souint_clr)
334347{
335348   if (data == 0)
336      cputag_set_input_line(space->machine(), "audiocpu", 0, CLEAR_LINE);
349      cputag_set_input_line(machine(), "audiocpu", 0, CLEAR_LINE);
337350}
338351
339352
r14845r14846
343356}
344357
345358
346static WRITE8_HANDLER( looping_soundlatch_w )
359WRITE8_MEMBER(looping_state::looping_soundlatch_w)
347360{
348361   soundlatch_w(space, offset, data);
349   cputag_set_input_line_and_vector(space->machine(), "audiocpu", 0, ASSERT_LINE, 4);
362   cputag_set_input_line_and_vector(machine(), "audiocpu", 0, ASSERT_LINE, 4);
350363}
351364
352365
r14845r14846
402415}
403416
404417
405static WRITE8_HANDLER( ballon_enable_w )
418WRITE8_MEMBER(looping_state::ballon_enable_w)
406419{
407   looping_state *state = space->machine().driver_data<looping_state>();
408   if (state->m_last != data)
420   if (m_last != data)
409421      mame_printf_debug("ballon_enable_w = %d\n", data);
410   state->m_last = data;
422   m_last = data;
411423}
412424
413425
r14845r14846
418430 *
419431 *************************************/
420432
421static WRITE8_HANDLER( out_0_w ) { mame_printf_debug("out0 = %02X\n", data); }
422static WRITE8_HANDLER( out_2_w ) { mame_printf_debug("out2 = %02X\n", data); }
433WRITE8_MEMBER(looping_state::out_0_w){ mame_printf_debug("out0 = %02X\n", data); }
434WRITE8_MEMBER(looping_state::out_2_w){ mame_printf_debug("out2 = %02X\n", data); }
423435
424static READ8_HANDLER( adc_r )  { mame_printf_debug("%04X:ADC read\n", cpu_get_pc(&space->device())); return 0xff; }
425static WRITE8_HANDLER( adc_w ) { mame_printf_debug("%04X:ADC write = %02X\n", cpu_get_pc(&space->device()), data); }
436READ8_MEMBER(looping_state::adc_r){ mame_printf_debug("%04X:ADC read\n", cpu_get_pc(&space.device())); return 0xff; }
437WRITE8_MEMBER(looping_state::adc_w){ mame_printf_debug("%04X:ADC write = %02X\n", cpu_get_pc(&space.device()), data); }
426438
427static WRITE8_HANDLER( plr2_w )
439WRITE8_MEMBER(looping_state::plr2_w)
428440{
429441   /* set to 1 after IDLE, cleared to 0 during processing */
430442   /* is this an LED on the PCB? */
r14845r14846
438450 *
439451 *************************************/
440452
441static READ8_HANDLER( cop_io_r )
453READ8_MEMBER(looping_state::cop_io_r)
442454{
443   //looping_state *state = space->machine().driver_data<looping_state>();
444   // if (offset == 1) return space->machine().rand() & 0x01;
445   return 1; // state->m_cop_io[offset];
455   // if (offset == 1) return machine().rand() & 0x01;
456   return 1; // m_cop_io[offset];
446457}
447458
448static WRITE8_HANDLER( cop_io_w )
459WRITE8_MEMBER(looping_state::cop_io_w)
449460{
450   looping_state *state = space->machine().driver_data<looping_state>();
451   state->m_cop_io[offset] = data;
461   m_cop_io[offset] = data;
452462if (offset == 0) logerror("%02x  ",data);
453463}
454464
455static READ8_HANDLER( protection_r )
465READ8_MEMBER(looping_state::protection_r)
456466{
457   looping_state *state = space->machine().driver_data<looping_state>();
458467//        The code reads ($7002) ($7004) alternately
459468//        The result must change at least once every 10 reads
460469//        A read from ($34b0 + result) must == $01
r14845r14846
473482//        cop write randomly fc (unfortunatly) but 61,67,b7,bf,db,e1,f3,fd,ff too and only these values
474483
475484   // missing something
476   if(state->m_cop_io[0] != 0xfc) return state->m_cop_io[0];
485   if(m_cop_io[0] != 0xfc) return m_cop_io[0];
477486   return 0xff;
478487}
479488
r14845r14846
487496static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state )
488497   AM_RANGE(0x0000, 0x7fff) AM_ROM
489498
490   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE_LEGACY(looping_videoram_w) AM_BASE(m_videoram)
499   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(looping_videoram_w) AM_BASE(m_videoram)
491500
492   AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM_WRITE_LEGACY(looping_colorram_w) AM_BASE(m_colorram)
501   AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM_WRITE(looping_colorram_w) AM_BASE(m_colorram)
493502   AM_RANGE(0x9840, 0x987f) AM_MIRROR(0x0700) AM_RAM AM_BASE(m_spriteram)
494503   AM_RANGE(0x9880, 0x98ff) AM_MIRROR(0x0700) AM_RAM
495504
496   AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x07f8) AM_WRITE_LEGACY(level2_irq_set)
497   AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE_LEGACY(flip_screen_x_w)
498   AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE_LEGACY(flip_screen_y_w)
505   AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x07f8) AM_WRITE(level2_irq_set)
506   AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_x_w)
507   AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_y_w)
499508
500509   AM_RANGE(0xe000, 0xefff) AM_RAM
501   AM_RANGE(0xf800, 0xf800) AM_MIRROR(0x03fc) AM_READ_PORT("P1") AM_WRITE_LEGACY(out_0_w)               /* /OUT0 */
502   AM_RANGE(0xf801, 0xf801) AM_MIRROR(0x03fc) AM_READ_PORT("P2") AM_WRITE_LEGACY(looping_soundlatch_w)   /* /OUT1 */
503   AM_RANGE(0xf802, 0xf802) AM_MIRROR(0x03fc) AM_READ_PORT("DSW") AM_WRITE_LEGACY(out_2_w)            /* /OUT2 */
504   AM_RANGE(0xf803, 0xf803) AM_MIRROR(0x03fc) AM_READWRITE_LEGACY(adc_r, adc_w)
510   AM_RANGE(0xf800, 0xf800) AM_MIRROR(0x03fc) AM_READ_PORT("P1") AM_WRITE(out_0_w)               /* /OUT0 */
511   AM_RANGE(0xf801, 0xf801) AM_MIRROR(0x03fc) AM_READ_PORT("P2") AM_WRITE(looping_soundlatch_w)   /* /OUT1 */
512   AM_RANGE(0xf802, 0xf802) AM_MIRROR(0x03fc) AM_READ_PORT("DSW") AM_WRITE(out_2_w)            /* /OUT2 */
513   AM_RANGE(0xf803, 0xf803) AM_MIRROR(0x03fc) AM_READWRITE(adc_r, adc_w)
505514ADDRESS_MAP_END
506515
507516static ADDRESS_MAP_START( looping_io_map, AS_IO, 8, looping_state )
508517   /* 400 = A16 */
509518   /* 401 = A17 */
510519   /* 402 = COLOR 9 */
511   AM_RANGE(0x403, 0x403) AM_WRITE_LEGACY(plr2_w)
520   AM_RANGE(0x403, 0x403) AM_WRITE(plr2_w)
512521   /* 404 = C0 */
513522   /* 405 = C1 */
514   AM_RANGE(0x406, 0x406) AM_WRITE_LEGACY(main_irq_ack_w)
523   AM_RANGE(0x406, 0x406) AM_WRITE(main_irq_ack_w)
515524   AM_RANGE(0x407, 0x407) AM_WRITE_LEGACY(watchdog_reset_w)
516525
517526   AM_RANGE(0x10000, 0x10000) AM_NOP      /* external IDLE signal -- we can ignore it */
r14845r14846
532541ADDRESS_MAP_END
533542
534543static ADDRESS_MAP_START( looping_sound_io_map, AS_IO, 8, looping_state )
535   AM_RANGE(0x000, 0x000) AM_WRITE_LEGACY(looping_souint_clr)
544   AM_RANGE(0x000, 0x000) AM_WRITE(looping_souint_clr)
536545   AM_RANGE(0x001, 0x007) AM_DEVWRITE_LEGACY("dac", looping_sound_sw)
537546   AM_RANGE(0x008, 0x008) AM_DEVWRITE_LEGACY("aysnd", ay_enable_w)
538547   AM_RANGE(0x009, 0x009) AM_DEVWRITE_LEGACY("tms", speech_enable_w)
539   AM_RANGE(0x00a, 0x00a) AM_WRITE_LEGACY(ballon_enable_w)
548   AM_RANGE(0x00a, 0x00a) AM_WRITE(ballon_enable_w)
540549   AM_RANGE(0x00b, 0x00f) AM_NOP
541550ADDRESS_MAP_END
542551
r14845r14846
551560ADDRESS_MAP_END
552561
553562static ADDRESS_MAP_START( looping_cop_io_map, AS_IO, 8, looping_state )
554   AM_RANGE(0x0100, 0x0107) AM_READWRITE_LEGACY(cop_io_r, cop_io_w)
563   AM_RANGE(0x0100, 0x0107) AM_READWRITE(cop_io_r, cop_io_w)
555564ADDRESS_MAP_END
556565
557566
r14845r14846
898907      rom[i] = BITSWAP8(rom[i], 0,1,2,3,4,5,6,7);
899908
900909   /* install protection handlers */
901   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x7000, 0x7007, FUNC(protection_r));
910   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x7000, 0x7007, read8_delegate(FUNC(looping_state::protection_r), state));
902911}
903912
904913
src/mame/drivers/1945kiii.c
r14845r14846
6767   /* devices */
6868   required_device<okim6295_device> m_oki1;
6969   required_device<okim6295_device> m_oki2;
70   DECLARE_WRITE16_MEMBER(k3_bgram_w);
71   DECLARE_WRITE16_MEMBER(k3_scrollx_w);
72   DECLARE_WRITE16_MEMBER(k3_scrolly_w);
73   DECLARE_WRITE16_MEMBER(k3_soundbanks_w);
7074};
7175
7276
73static WRITE16_HANDLER( k3_bgram_w )
77WRITE16_MEMBER(k3_state::k3_bgram_w)
7478{
75   k3_state *state = space->machine().driver_data<k3_state>();
76   COMBINE_DATA(&state->m_bgram[offset]);
77   state->m_bg_tilemap->mark_tile_dirty(offset);
79   COMBINE_DATA(&m_bgram[offset]);
80   m_bg_tilemap->mark_tile_dirty(offset);
7881}
7982
8083static TILE_GET_INFO( get_k3_bg_tile_info )
r14845r14846
125128}
126129
127130
128static WRITE16_HANDLER( k3_scrollx_w )
131WRITE16_MEMBER(k3_state::k3_scrollx_w)
129132{
130   k3_state *state = space->machine().driver_data<k3_state>();
131   state->m_bg_tilemap->set_scrollx(0, data);
133   m_bg_tilemap->set_scrollx(0, data);
132134}
133135
134static WRITE16_HANDLER( k3_scrolly_w )
136WRITE16_MEMBER(k3_state::k3_scrolly_w)
135137{
136   k3_state *state = space->machine().driver_data<k3_state>();
137   state->m_bg_tilemap->set_scrolly(0, data);
138   m_bg_tilemap->set_scrolly(0, data);
138139}
139140
140static WRITE16_HANDLER( k3_soundbanks_w )
141WRITE16_MEMBER(k3_state::k3_soundbanks_w)
141142{
142   k3_state *state = space->machine().driver_data<k3_state>();
143   state->m_oki1->set_bank_base((data & 4) ? 0x40000 : 0);
144   state->m_oki2->set_bank_base((data & 2) ? 0x40000 : 0);
143   m_oki1->set_bank_base((data & 4) ? 0x40000 : 0);
144   m_oki2->set_bank_base((data & 2) ? 0x40000 : 0);
145145}
146146
147147static ADDRESS_MAP_START( k3_map, AS_PROGRAM, 16, k3_state )
r14845r14846
153153   AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)   // palette
154154   AM_RANGE(0x240000, 0x240fff) AM_RAM AM_BASE(m_spriteram_1)
155155   AM_RANGE(0x280000, 0x280fff) AM_RAM AM_BASE(m_spriteram_2)
156   AM_RANGE(0x2c0000, 0x2c0fff) AM_RAM_WRITE_LEGACY(k3_bgram_w) AM_BASE(m_bgram)
157   AM_RANGE(0x340000, 0x340001) AM_WRITE_LEGACY(k3_scrollx_w)
158   AM_RANGE(0x380000, 0x380001) AM_WRITE_LEGACY(k3_scrolly_w)
159   AM_RANGE(0x3c0000, 0x3c0001) AM_WRITE_LEGACY(k3_soundbanks_w)
156   AM_RANGE(0x2c0000, 0x2c0fff) AM_RAM_WRITE(k3_bgram_w) AM_BASE(m_bgram)
157   AM_RANGE(0x340000, 0x340001) AM_WRITE(k3_scrollx_w)
158   AM_RANGE(0x380000, 0x380001) AM_WRITE(k3_scrolly_w)
159   AM_RANGE(0x3c0000, 0x3c0001) AM_WRITE(k3_soundbanks_w)
160160   AM_RANGE(0x400000, 0x400001) AM_READ_PORT("INPUTS")
161161   AM_RANGE(0x440000, 0x440001) AM_READ_PORT("SYSTEM")
162162   AM_RANGE(0x480000, 0x480001) AM_READ_PORT("DSW")
src/mame/drivers/astinvad.c
r14845r14846
6262   device_t *m_ppi8255_0;
6363   device_t *m_ppi8255_1;
6464   samples_device *m_samples;
65   DECLARE_WRITE8_MEMBER(color_latch_w);
66   DECLARE_WRITE8_MEMBER(spaceint_videoram_w);
67   DECLARE_READ8_MEMBER(kamikaze_ppi_r);
68   DECLARE_WRITE8_MEMBER(kamikaze_ppi_w);
69   DECLARE_WRITE8_MEMBER(spaceint_sound1_w);
70   DECLARE_WRITE8_MEMBER(spaceint_sound2_w);
6571};
6672
6773
r14845r14846
112118}
113119
114120
115static WRITE8_HANDLER( color_latch_w )
121WRITE8_MEMBER(astinvad_state::color_latch_w)
116122{
117   astinvad_state *state = space->machine().driver_data<astinvad_state>();
118   state->m_color_latch = data & 0x0f;
123   m_color_latch = data & 0x0f;
119124}
120125
121126
122static WRITE8_HANDLER( spaceint_videoram_w )
127WRITE8_MEMBER(astinvad_state::spaceint_videoram_w)
123128{
124   astinvad_state *state = space->machine().driver_data<astinvad_state>();
125   state->m_videoram[offset] = data;
126   state->m_colorram[offset] = state->m_color_latch;
129   m_videoram[offset] = data;
130   m_colorram[offset] = m_color_latch;
127131}
128132
129133
r14845r14846
288292 *
289293 *************************************/
290294
291static READ8_HANDLER( kamikaze_ppi_r )
295READ8_MEMBER(astinvad_state::kamikaze_ppi_r)
292296{
293   astinvad_state *state = space->machine().driver_data<astinvad_state>();
294297   UINT8 result = 0xff;
295298
296299   /* the address lines are used for /CS; yes, they can overlap! */
297300   if (!(offset & 4))
298      result &= ppi8255_r(state->m_ppi8255_0, offset);
301      result &= ppi8255_r(m_ppi8255_0, offset);
299302   if (!(offset & 8))
300      result &= ppi8255_r(state->m_ppi8255_1, offset);
303      result &= ppi8255_r(m_ppi8255_1, offset);
301304   return result;
302305}
303306
304307
305static WRITE8_HANDLER( kamikaze_ppi_w )
308WRITE8_MEMBER(astinvad_state::kamikaze_ppi_w)
306309{
307   astinvad_state *state = space->machine().driver_data<astinvad_state>();
308310
309311   /* the address lines are used for /CS; yes, they can overlap! */
310312   if (!(offset & 4))
311      ppi8255_w(state->m_ppi8255_0, offset, data);
313      ppi8255_w(m_ppi8255_0, offset, data);
312314   if (!(offset & 8))
313      ppi8255_w(state->m_ppi8255_1, offset, data);
315      ppi8255_w(m_ppi8255_1, offset, data);
314316}
315317
316318
r14845r14846
354356}
355357
356358
357static WRITE8_HANDLER( spaceint_sound1_w )
359WRITE8_MEMBER(astinvad_state::spaceint_sound1_w)
358360{
359   astinvad_state *state = space->machine().driver_data<astinvad_state>();
360   int bits_gone_hi = data & ~state->m_sound_state[0];
361   state->m_sound_state[0] = data;
361   int bits_gone_hi = data & ~m_sound_state[0];
362   m_sound_state[0] = data;
362363
363   if (bits_gone_hi & 0x01) state->m_samples->start(1, SND_SHOT);
364   if (bits_gone_hi & 0x02) state->m_samples->start(2, SND_BASEHIT);
365   if (bits_gone_hi & 0x04) state->m_samples->start(4, SND_UFOHIT);
366   if (bits_gone_hi & 0x08) state->m_samples->start(0, SND_UFO, true);
367   if (!(data & 0x08))      state->m_samples->stop(0);
364   if (bits_gone_hi & 0x01) m_samples->start(1, SND_SHOT);
365   if (bits_gone_hi & 0x02) m_samples->start(2, SND_BASEHIT);
366   if (bits_gone_hi & 0x04) m_samples->start(4, SND_UFOHIT);
367   if (bits_gone_hi & 0x08) m_samples->start(0, SND_UFO, true);
368   if (!(data & 0x08))      m_samples->stop(0);
368369
369   if (bits_gone_hi & 0x10) state->m_samples->start(5, SND_FLEET1);
370   if (bits_gone_hi & 0x20) state->m_samples->start(5, SND_FLEET2);
371   if (bits_gone_hi & 0x40) state->m_samples->start(5, SND_FLEET3);
372   if (bits_gone_hi & 0x80) state->m_samples->start(5, SND_FLEET4);
370   if (bits_gone_hi & 0x10) m_samples->start(5, SND_FLEET1);
371   if (bits_gone_hi & 0x20) m_samples->start(5, SND_FLEET2);
372   if (bits_gone_hi & 0x40) m_samples->start(5, SND_FLEET3);
373   if (bits_gone_hi & 0x80) m_samples->start(5, SND_FLEET4);
373374}
374375
375376
376static WRITE8_HANDLER( spaceint_sound2_w )
377WRITE8_MEMBER(astinvad_state::spaceint_sound2_w)
377378{
378   astinvad_state *state = space->machine().driver_data<astinvad_state>();
379   int bits_gone_hi = data & ~state->m_sound_state[1];
380   state->m_sound_state[1] = data;
379   int bits_gone_hi = data & ~m_sound_state[1];
380   m_sound_state[1] = data;
381381
382   space->machine().sound().system_enable(data & 0x02);
382   machine().sound().system_enable(data & 0x02);
383383
384   if (bits_gone_hi & 0x04) state->m_samples->start(3, SND_INVADERHIT);
384   if (bits_gone_hi & 0x04) m_samples->start(3, SND_INVADERHIT);
385385
386   state->m_screen_flip = (input_port_read(space->machine(), "CABINET") & data & 0x80) ? 0xff : 0x00;
386   m_screen_flip = (input_port_read(machine(), "CABINET") & data & 0x80) ? 0xff : 0x00;
387387}
388388
389389
r14845r14846
405405static ADDRESS_MAP_START( spaceint_map, AS_PROGRAM, 8, astinvad_state )
406406   AM_RANGE(0x0000, 0x1fff) AM_ROM
407407   AM_RANGE(0x2000, 0x23ff) AM_RAM
408   AM_RANGE(0x4000, 0x5fff) AM_RAM_WRITE_LEGACY(spaceint_videoram_w) AM_BASE_SIZE(m_videoram, m_videoram_size)
408   AM_RANGE(0x4000, 0x5fff) AM_RAM_WRITE(spaceint_videoram_w) AM_BASE_SIZE(m_videoram, m_videoram_size)
409409ADDRESS_MAP_END
410410
411411
412412static ADDRESS_MAP_START( kamikaze_portmap, AS_IO, 8, astinvad_state )
413413   ADDRESS_MAP_GLOBAL_MASK(0xff)
414   AM_RANGE(0x00, 0xff) AM_READWRITE_LEGACY(kamikaze_ppi_r, kamikaze_ppi_w)
414   AM_RANGE(0x00, 0xff) AM_READWRITE(kamikaze_ppi_r, kamikaze_ppi_w)
415415ADDRESS_MAP_END
416416
417417
r14845r14846
419419   ADDRESS_MAP_GLOBAL_MASK(0xff)
420420   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0")
421421   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1")
422   AM_RANGE(0x02, 0x02) AM_WRITE_LEGACY(spaceint_sound1_w)
423   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(color_latch_w)
424   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(spaceint_sound2_w)
422   AM_RANGE(0x02, 0x02) AM_WRITE(spaceint_sound1_w)
423   AM_RANGE(0x03, 0x03) AM_WRITE(color_latch_w)
424   AM_RANGE(0x04, 0x04) AM_WRITE(spaceint_sound2_w)
425425ADDRESS_MAP_END
426426
427427
src/mame/drivers/supertnk.c
r14845r14846
115115   UINT8 m_rom_bank;
116116   UINT8 m_bitplane_select;
117117   pen_t m_pens[NUM_PENS];
118   DECLARE_WRITE8_MEMBER(supertnk_bankswitch_0_w);
119   DECLARE_WRITE8_MEMBER(supertnk_bankswitch_1_w);
120   DECLARE_WRITE8_MEMBER(supertnk_interrupt_ack_w);
121   DECLARE_WRITE8_MEMBER(supertnk_videoram_w);
122   DECLARE_READ8_MEMBER(supertnk_videoram_r);
123   DECLARE_WRITE8_MEMBER(supertnk_bitplane_select_0_w);
124   DECLARE_WRITE8_MEMBER(supertnk_bitplane_select_1_w);
118125};
119126
120127
r14845r14846
125132 *
126133 *************************************/
127134
128static WRITE8_HANDLER( supertnk_bankswitch_0_w )
135WRITE8_MEMBER(supertnk_state::supertnk_bankswitch_0_w)
129136{
130   supertnk_state *state = space->machine().driver_data<supertnk_state>();
131137   offs_t bank_address;
132138
133   state->m_rom_bank = (state->m_rom_bank & 0x02) | ((data << 0) & 0x01);
139   m_rom_bank = (m_rom_bank & 0x02) | ((data << 0) & 0x01);
134140
135   bank_address = 0x10000 + (state->m_rom_bank * 0x1000);
141   bank_address = 0x10000 + (m_rom_bank * 0x1000);
136142
137   memory_set_bankptr(space->machine(), "bank1", &space->machine().region("maincpu")->base()[bank_address]);
143   memory_set_bankptr(machine(), "bank1", &machine().region("maincpu")->base()[bank_address]);
138144}
139145
140146
141static WRITE8_HANDLER( supertnk_bankswitch_1_w )
147WRITE8_MEMBER(supertnk_state::supertnk_bankswitch_1_w)
142148{
143   supertnk_state *state = space->machine().driver_data<supertnk_state>();
144149   offs_t bank_address;
145150
146   state->m_rom_bank = (state->m_rom_bank & 0x01) | ((data << 1) & 0x02);
151   m_rom_bank = (m_rom_bank & 0x01) | ((data << 1) & 0x02);
147152
148   bank_address = 0x10000 + (state->m_rom_bank * 0x1000);
153   bank_address = 0x10000 + (m_rom_bank * 0x1000);
149154
150   memory_set_bankptr(space->machine(), "bank1", &space->machine().region("maincpu")->base()[bank_address]);
155   memory_set_bankptr(machine(), "bank1", &machine().region("maincpu")->base()[bank_address]);
151156}
152157
153158
r14845r14846
165170}
166171
167172
168static WRITE8_HANDLER( supertnk_interrupt_ack_w )
173WRITE8_MEMBER(supertnk_state::supertnk_interrupt_ack_w)
169174{
170   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
175   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
171176}
172177
173178
r14845r14846
197202}
198203
199204
200static WRITE8_HANDLER( supertnk_videoram_w )
205WRITE8_MEMBER(supertnk_state::supertnk_videoram_w)
201206{
202   supertnk_state *state = space->machine().driver_data<supertnk_state>();
203207
204   if (state->m_bitplane_select > 2)
208   if (m_bitplane_select > 2)
205209   {
206      state->m_videoram[0][offset] = 0;
207      state->m_videoram[1][offset] = 0;
208      state->m_videoram[2][offset] = 0;
210      m_videoram[0][offset] = 0;
211      m_videoram[1][offset] = 0;
212      m_videoram[2][offset] = 0;
209213   }
210214   else
211215   {
212      state->m_videoram[state->m_bitplane_select][offset] = data;
216      m_videoram[m_bitplane_select][offset] = data;
213217   }
214218}
215219
216220
217static READ8_HANDLER( supertnk_videoram_r )
221READ8_MEMBER(supertnk_state::supertnk_videoram_r)
218222{
219   supertnk_state *state = space->machine().driver_data<supertnk_state>();
220223   UINT8 ret = 0x00;
221224
222   if (state->m_bitplane_select < 3)
223      ret = state->m_videoram[state->m_bitplane_select][offset];
225   if (m_bitplane_select < 3)
226      ret = m_videoram[m_bitplane_select][offset];
224227
225228   return ret;
226229}
227230
228231
229static WRITE8_HANDLER( supertnk_bitplane_select_0_w )
232WRITE8_MEMBER(supertnk_state::supertnk_bitplane_select_0_w)
230233{
231   supertnk_state *state = space->machine().driver_data<supertnk_state>();
232234
233   state->m_bitplane_select = (state->m_bitplane_select & 0x02) | ((data << 0) & 0x01);
235   m_bitplane_select = (m_bitplane_select & 0x02) | ((data << 0) & 0x01);
234236}
235237
236238
237static WRITE8_HANDLER( supertnk_bitplane_select_1_w )
239WRITE8_MEMBER(supertnk_state::supertnk_bitplane_select_1_w)
238240{
239   supertnk_state *state = space->machine().driver_data<supertnk_state>();
240241
241   state->m_bitplane_select = (state->m_bitplane_select & 0x01) | ((data << 1) & 0x02);
242   m_bitplane_select = (m_bitplane_select & 0x01) | ((data << 1) & 0x02);
242243}
243244
244245
r14845r14846
284285
285286static MACHINE_RESET( supertnk )
286287{
288   supertnk_state *state = machine.driver_data<supertnk_state>();
287289   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
288   supertnk_bankswitch_0_w(space, 0, 0);
289   supertnk_bankswitch_1_w(space, 0, 0);
290   state->supertnk_bankswitch_0_w(*space, 0, 0);
291   state->supertnk_bankswitch_1_w(*space, 0, 0);
290292
291   supertnk_bitplane_select_0_w(space, 0, 0);
292   supertnk_bitplane_select_1_w(space, 0, 0);
293   state->supertnk_bitplane_select_0_w(*space, 0, 0);
294   state->supertnk_bitplane_select_1_w(*space, 0, 0);
293295}
294296
295297
r14845r14846
309311   AM_RANGE(0x1efe, 0x1eff) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
310312   AM_RANGE(0x1efe, 0x1efe) AM_READ_PORT("DSW")
311313   AM_RANGE(0x1eff, 0x1eff) AM_READ_PORT("UNK")
312   AM_RANGE(0x2000, 0x3fff) AM_READWRITE_LEGACY(supertnk_videoram_r, supertnk_videoram_w)
314   AM_RANGE(0x2000, 0x3fff) AM_READWRITE(supertnk_videoram_r, supertnk_videoram_w)
313315ADDRESS_MAP_END
314316
315317
r14845r14846
322324
323325static ADDRESS_MAP_START( supertnk_io_map, AS_IO, 8, supertnk_state )
324326   AM_RANGE(0x0000, 0x0000) AM_WRITENOP
325   AM_RANGE(0x0400, 0x0400) AM_WRITE_LEGACY(supertnk_bitplane_select_0_w)
326   AM_RANGE(0x0401, 0x0401) AM_WRITE_LEGACY(supertnk_bitplane_select_1_w)
327   AM_RANGE(0x0402, 0x0402) AM_WRITE_LEGACY(supertnk_bankswitch_0_w)
328   AM_RANGE(0x0404, 0x0404) AM_WRITE_LEGACY(supertnk_bankswitch_1_w)
329   AM_RANGE(0x0406, 0x0406) AM_WRITE_LEGACY(supertnk_interrupt_ack_w)
327   AM_RANGE(0x0400, 0x0400) AM_WRITE(supertnk_bitplane_select_0_w)
328   AM_RANGE(0x0401, 0x0401) AM_WRITE(supertnk_bitplane_select_1_w)
329   AM_RANGE(0x0402, 0x0402) AM_WRITE(supertnk_bankswitch_0_w)
330   AM_RANGE(0x0404, 0x0404) AM_WRITE(supertnk_bankswitch_1_w)
331   AM_RANGE(0x0406, 0x0406) AM_WRITE(supertnk_interrupt_ack_w)
330332   AM_RANGE(0x0407, 0x0407) AM_WRITE_LEGACY(watchdog_reset_w)
331333ADDRESS_MAP_END
332334
src/mame/drivers/neodrvr.c
r14845r14846
500500    . NEO-AEG PROG4096 B
501501    . NEO-AEG PROGGS
502502    . NEO-AEG PROGTOP2
503    . NEO-AEG PROGEOP (1999.4.2)
503504    . NEO-AEG PROGLBA (1999.7.6)
504505    . NEO-AEG PROGRK
505506    . NEO-AEG PROGRKB
r14845r14846
57745775 . NGM-2410
57755776 NEO-MVS PROGBK1 / NEO-MVS CHA512Y
57765777 . NGH-2410
5778 NEO-AEG PROGBK1Y / NEO-AEG CHA512Y
57775779****************************************/
57785780
5779ROM_START( mslug2 )
5781ROM_START( mslug2 ) /* MVS AND AES VERSION */
57805782   ROM_REGION( 0x300000, "maincpu", 0 )
57815783   ROM_LOAD16_WORD_SWAP( "241-p1.p1",  0x000000, 0x100000, CRC(2a53c5da) SHA1(5a6aba482cac588a6c2c51179c95b487c6e11899) ) /* TC538200 */
57825784   ROM_LOAD16_WORD_SWAP( "241-p2.sp2", 0x100000, 0x200000, CRC(38883f44) SHA1(fcf34b8c6e37774741542393b963635412484a27) ) /* TC5316200 */
r14845r14846
61266128/****************************************
61276129 ID-0250
61286130 . NGM-2500
6129 NEO-MVS PROGEOP / NEO-MVS CHA512Y
6131 NEO-MVS PROGEOP (1999.2.2) / NEO-MVS CHA512Y
61306132 . NGH-2500
6133 NEO-AEG PROGEOP (1999.4.2) / NEO-AEG CHA512Y
61316134****************************************/
61326135
6133ROM_START( mslugx )
6136ROM_START( mslugx ) /* MVS AND AES VERSION */
61346137   ROM_REGION( 0x500000, "maincpu", 0 )
61356138   ROM_LOAD16_WORD_SWAP( "250-p1.p1",  0x000000, 0x100000, CRC(81f1f60b) SHA1(4c19f2e9824e606178ac1c9d4b0516fbaa625035) ) /* TC538200 */
61366139   ROM_LOAD16_WORD_SWAP( "250-p2.ep1", 0x100000, 0x400000, CRC(1fda2e12) SHA1(18aaa7a3ba8da99f78c430e9be69ccde04bc04d9) ) /* TC5332205 */
r14845r14846
63806383 . NGM-2530
63816384 NEO-MVS PROGLBA (NEO-SMA) (LBA-SUB) / NEO-MVS CHAFIO (1999.6.14) (NEO-CMC 7042)
63826385 . NGH-2530
6386 NEO-AEG PROGLBA (NEO-SMA) / NEO-AEG CHAFIO (1999.8.10) (NEO-CMC 7042)
63836387****************************************/
63846388
6385ROM_START( garou ) /* Original Version - Encrypted GFX */ /* later revision */
6389ROM_START( garou ) /* Original Version - Encrypted GFX */ /* MVS VERSION - later revision */
63866390   ROM_REGION( 0x900000, "maincpu", 0 )
63876391   ROM_LOAD16_WORD_SWAP( "kf.neo-sma", 0x0c0000, 0x040000, CRC(98bc93dc) SHA1(01fe3d18b50f770e131e8d8eeff4c630ba8c9551) )   /* stored in the custom chip */
63886392   ROM_LOAD16_WORD_SWAP( "253-ep1.p1", 0x100000, 0x200000, CRC(ea3171a4) SHA1(bbda40f652baa0dc5fc6a006c001a1bdb0df43f6) ) /* M27C160 */
r14845r14846
64206424   ROM_LOAD16_BYTE( "253-c8.c8", 0x3000001, 0x800000, CRC(21a11303) SHA1(fd61221ad257c185ef5c1f9694bd6b840b591af3) ) /* Plane 2,3 */ /* TC5364205 */
64216425ROM_END
64226426
6423ROM_START( garouo ) /* Original Version - Encrypted GFX */ /* earlier revision */
6427ROM_START( garouh ) /* Original Version - Encrypted GFX */ /* MVS AND AES VERSION - earlier revision */
64246428   ROM_REGION( 0x900000, "maincpu", 0 )
64256429   ROM_LOAD16_WORD_SWAP( "ke.neo-sma", 0x0c0000, 0x040000, CRC(96c72233) SHA1(29e19effd40fdf7e5144332396857f4ad0eff13e) )   /* stored in the custom chip */
64266430   ROM_LOAD16_WORD_SWAP( "253-p1.p1",  0x100000, 0x400000, CRC(18ae5d7e) SHA1(bdb58ec9137d8653979b47132f2d10e1cc6aaa24) ) /* mask rom TC5332205 */
r14845r14846
76817685ROM_END
76827686
76837687
7688   /* Vektorlogic games, unlicensed */
7689
7690
7691/****************************************
7692 NSBP ??
7693 PROGRAM CART REVISION 2.0 (C) VEKTORLOGIC 2004 / GRAPHICS CART REVISION 1.2 (C) VEKTORLOGIC 2004
7694****************************************/
7695
7696// this doesn't boot, protection like kof98?
7697// you can force it to boot with a simple debugger trick, but then it resets when starting a game
7698ROM_START( sbp ) /* Unlicensed, no official game ID # */ /* MVS ONLY VERSION */
7699   ROM_REGION( 0x100000, "maincpu", 0 )
7700   ROM_LOAD16_WORD_SWAP( "001-003-02a.u2", 0x000000, 0x080000, CRC(d054d264) SHA1(d1b4bc626d000e0679def0545940fa75035921ab) ) /* HN27C4096HG */
7701
7702   ROM_REGION( 0x20000, "fixed", 0 )
7703   ROM_LOAD( "001-003-02b.u2", 0x000000, 0x20000, CRC(2fd04b2a) SHA1(1acb446704ab56d0a33df7c48855aa8d00fd5a3c) ) /* M27C4001 */
7704   ROM_IGNORE(0x20000)
7705   ROM_IGNORE(0x20000)
7706   ROM_IGNORE(0x20000)
7707
7708   ROM_REGION( 0x20000, "fixedbios", 0 )
7709   ROM_LOAD( "sfix.sfix", 0x000000, 0x20000, CRC(c2ea0cfd) SHA1(fd4a618cdcdbf849374f0a50dd8efe9dbab706c3) )
7710   ROM_Y_ZOOM
7711
7712   NEO_BIOS_AUDIO_512K( "001-003-01b.u1", CRC(7b1f86f7) SHA1(15b6af7f9fbd0f1f6a1ecd912200ca8d0af2da2a) ) /* M27C4001 */
7713
7714   ROM_REGION( 0x800000, "ymsnd", 0 )
7715   ROM_LOAD( "001-003-12a.u12", 0x000000, 0x400000, CRC(c96723b9) SHA1(52eec88550781d45f84efbf9b905d7e7912e96fa) ) /* M27C322 */
7716   ROM_LOAD( "001-003-13a.u13", 0x400000, 0x400000, CRC(08c339a5) SHA1(badc9510ae243ef2a7877977eb36efa81b1489fe) ) /* M27C322 */
7717
7718   NO_DELTAT_REGION
7719
7720   ROM_REGION( 0x400000, "sprites", 0 )
7721   ROM_LOAD16_BYTE( "001-003-03b.u3", 0x000000, 0x200000, CRC(44791317) SHA1(9e773eb9aae5ee767213bd17348ff8a312e9cb16) ) /* Plane 0,1 */ /* M27C160 */
7722   ROM_LOAD16_BYTE( "001-003-04b.u4", 0x000001, 0x200000, CRC(a3a1c0df) SHA1(3b1e5be673f7cbb04199a805b0e0de93dad8cb8c) ) /* Plane 2,3 */ /* M27C160 */
7723ROM_END
7724
7725
76847726   /* Jamma PCB sets */
76857727
76867728
r14845r14846
88738915   ROM_LOAD16_BYTE( "dig-c2.bin", 0x000001, 0x080000, CRC(3e632161) SHA1(83711c4286fb1d9f3f91414ac6e5fed36618033e) ) /* Plane 2,3 */
88748916ROM_END
88758917
8876// this doesn't boot, protection like kof98?
8877// you can force it to boot with a simple debugger trick, but then it resets when starting a game
8878ROM_START( sbp ) /* Unlicensed, no official game ID # */
8879   ROM_REGION( 0x100000, "maincpu", 0 )
8880   ROM_LOAD16_WORD_SWAP( "2a.bin", 0x000000, 0x080000, CRC(d054d264) SHA1(d1b4bc626d000e0679def0545940fa75035921ab) )
88818918
8882   ROM_REGION( 0x20000, "fixed", 0 )
8883   ROM_LOAD( "2b.bin",       0x000000, 0x20000, CRC(2fd04b2a) SHA1(1acb446704ab56d0a33df7c48855aa8d00fd5a3c) )
8884   ROM_IGNORE(0x20000)
8885   ROM_IGNORE(0x20000)
8886   ROM_IGNORE(0x20000)
8887
8888   ROM_REGION( 0x20000, "fixedbios", 0 )
8889   ROM_LOAD( "sfix.sfix", 0x000000, 0x20000, CRC(c2ea0cfd) SHA1(fd4a618cdcdbf849374f0a50dd8efe9dbab706c3) )
8890   ROM_Y_ZOOM
8891
8892   NEO_BIOS_AUDIO_512K( "1b.bin", CRC(7b1f86f7) SHA1(15b6af7f9fbd0f1f6a1ecd912200ca8d0af2da2a) )
8893
8894   ROM_REGION( 0x800000, "ymsnd", 0 )
8895   ROM_LOAD( "12a.bin", 0x000000, 0x400000, CRC(c96723b9) SHA1(52eec88550781d45f84efbf9b905d7e7912e96fa) )
8896   ROM_LOAD( "13a.bin", 0x400000, 0x400000, CRC(08c339a5) SHA1(badc9510ae243ef2a7877977eb36efa81b1489fe) )
8897
8898   NO_DELTAT_REGION
8899
8900   ROM_REGION( 0x400000, "sprites", 0 )
8901   ROM_LOAD16_BYTE( "3b.bin", 0x000000, 0x200000, CRC(44791317) SHA1(9e773eb9aae5ee767213bd17348ff8a312e9cb16) ) /* Plane 0,1 */
8902   ROM_LOAD16_BYTE( "4b.bin", 0x000001, 0x200000, CRC(a3a1c0df) SHA1(3b1e5be673f7cbb04199a805b0e0de93dad8cb8c) ) /* Plane 2,3 */
8903ROM_END
8904
8905
89068919/****************************************************************************/
89078920
89088921   /* Game specific input definitions */
r14845r14846
92529265   garou_install_protection(machine);
92539266}
92549267
9255static DRIVER_INIT( garouo )
9268static DRIVER_INIT( garouh )
92569269{
92579270   neogeo_state *state = machine.driver_data<neogeo_state>();
92589271   DRIVER_INIT_CALL(neogeo);
9259   garouo_decrypt_68k(machine);
9272   garouh_decrypt_68k(machine);
92609273   state->m_fixed_layer_bank_type = 1;
92619274   kof99_neogeo_gfx_decrypt(machine, 0x06);
9262   garouo_install_protection(machine);
9275   garouh_install_protection(machine);
92639276}
92649277
92659278static DRIVER_INIT( garoubl )
r14845r14846
99019914      else if(strcmp(crypt_feature,"kof99_prot") == 0)   { neo_gameinit = driver_init_kof99; }
99029915      else if(strcmp(crypt_feature,"kof99k_prot") == 0)   { neo_gameinit = driver_init_kof99k; }
99039916      else if(strcmp(crypt_feature,"garou_prot") == 0)   { neo_gameinit = driver_init_garou; }
9904      else if(strcmp(crypt_feature,"garouo_prot") == 0)   { neo_gameinit = driver_init_garouo; }
9917      else if(strcmp(crypt_feature,"garouh_prot") == 0)   { neo_gameinit = driver_init_garouh; }
99059918      else if(strcmp(crypt_feature,"garoubl_prot") == 0)   { neo_gameinit = driver_init_garoubl; }
99069919      else if(strcmp(crypt_feature,"mslug3_prot") == 0)   { neo_gameinit = driver_init_mslug3; }
99079920      else if(strcmp(crypt_feature,"mslug3h_prot") == 0)   { neo_gameinit = driver_init_mslug3h; }
r14845r14846
1005310066GAME( 1998, rbff2,     neogeo,   neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGM-2400)", GAME_SUPPORTS_SAVE )
1005410067GAME( 1998, rbff2h,    rbff2,    neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGH-2400)", GAME_SUPPORTS_SAVE )
1005510068GAME( 1998, rbff2k,    rbff2,    neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers (Korean release)", GAME_SUPPORTS_SAVE ) // no Japanese title / mode
10056GAME( 1998, mslug2,    neogeo,   neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Metal Slug 2 - Super Vehicle-001/II", GAME_SUPPORTS_SAVE )
10069GAME( 1998, mslug2,    neogeo,   neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Metal Slug 2 - Super Vehicle-001/II (NGM-2410)(NGH-2410)", GAME_SUPPORTS_SAVE )
1005710070GAME( 1998, kof98,     neogeo,   neogeo,   neogeo,   kof98,    ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420)", GAME_SUPPORTS_SAVE )
1005810071GAME( 1998, kof98k,    kof98,    neogeo,   neogeo,   kof98,    ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board)", GAME_SUPPORTS_SAVE )
1005910072GAME( 1998, kof98ka,   kof98,    neogeo,   neogeo,   kof98,    ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board 2)", GAME_SUPPORTS_SAVE )
1006010073GAME( 1998, kof98h,    kof98,    neogeo,   neogeo,   neogeo,   ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGH-2420)", GAME_SUPPORTS_SAVE )
1006110074GAME( 1998, lastbld2,  neogeo,   neogeo,   neogeo,   neogeo,   ROT0, "SNK", "The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430)(NGH-2430)", GAME_SUPPORTS_SAVE )
1006210075GAME( 1998, neocup98,  neogeo,   neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Neo-Geo Cup '98 - The Road to the Victory", GAME_SUPPORTS_SAVE )
10063GAME( 1999, mslugx,    neogeo,   neogeo,   neogeo,   mslugx,   ROT0, "SNK", "Metal Slug X - Super Vehicle-001", GAME_SUPPORTS_SAVE )
10064GAME( 1999, kof99,     neogeo,   neogeo,   neogeo,   kof99,    ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (set 1)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
10065GAME( 1999, kof99h,    kof99,    neogeo,   neogeo,   kof99,    ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (set 2)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX, crashes going into attract demo */
10076GAME( 1999, mslugx,    neogeo,   neogeo,   neogeo,   mslugx,   ROT0, "SNK", "Metal Slug X - Super Vehicle-001 (NGM-2500)(NGH-2500)", GAME_SUPPORTS_SAVE )
10077GAME( 1999, kof99,     neogeo,   neogeo,   neogeo,   kof99,    ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (NGM-2510)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
10078GAME( 1999, kof99h,    kof99,    neogeo,   neogeo,   kof99,    ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (NGH-2510)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX, crashes going into attract demo */
1006610079GAME( 1999, kof99e,    kof99,    neogeo,   neogeo,   kof99,    ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (earlier)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
1006710080GAME( 1999, kof99k,    kof99,    neogeo,   neogeo,   kof99k,   ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (Korean release)" , GAME_SUPPORTS_SAVE )   /* Encrypted GFX */
1006810081GAME( 1999, kof99p,    kof99,    neogeo,   neogeo,   neogeo,   ROT0, "SNK", "The King of Fighters '99 - Millennium Battle (prototype)", GAME_SUPPORTS_SAVE )
10069GAME( 1999, garou,     neogeo,   neogeo,   neogeo,   garou,    ROT0, "SNK", "Garou - Mark of the Wolves (set 1)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
10070GAME( 1999, garouo,    garou,    neogeo,   neogeo,   garouo,   ROT0, "SNK", "Garou - Mark of the Wolves (set 2)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
10082GAME( 1999, garou,     neogeo,   neogeo,   neogeo,   garou,    ROT0, "SNK", "Garou - Mark of the Wolves (NGM-2530)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
10083GAME( 1999, garouh,    garou,    neogeo,   neogeo,   garouh,   ROT0, "SNK", "Garou - Mark of the Wolves (NGM-2530)(NGH-2530)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
1007110084GAME( 1999, garoup,    garou,    neogeo,   neogeo,   neogeo,   ROT0, "SNK", "Garou - Mark of the Wolves (prototype)", GAME_SUPPORTS_SAVE )
1007210085GAME( 1999, garoubl,   garou,    neogeo,   neogeo,   garoubl,  ROT0, "bootleg", "Garou - Mark of the Wolves (bootleg)", GAME_SUPPORTS_SAVE ) /* Bootleg of garoup */
1007310086GAME( 2000, mslug3,    neogeo,   neogeo,   neogeo,   mslug3,   ROT0, "SNK", "Metal Slug 3 (NGM-2560)" , GAME_SUPPORTS_SAVE ) /* Encrypted Code & GFX */
src/mame/drivers/esh.c
r14845r14846
3939   UINT8 *m_tile_ram;
4040   UINT8 *m_tile_control_ram;
4141   UINT8 m_ld_video_visible;
42   DECLARE_READ8_MEMBER(ldp_read);
43   DECLARE_WRITE8_MEMBER(ldp_write);
44   DECLARE_WRITE8_MEMBER(misc_write);
45   DECLARE_WRITE8_MEMBER(led_writes);
46   DECLARE_WRITE8_MEMBER(nmi_line_w);
4247};
4348
4449
r14845r14846
8186
8287
8388/* MEMORY HANDLERS */
84static READ8_HANDLER(ldp_read)
89READ8_MEMBER(esh_state::ldp_read)
8590{
86   esh_state *state = space->machine().driver_data<esh_state>();
87   return state->m_laserdisc->status_r();
91   return m_laserdisc->status_r();
8892}
8993
90static WRITE8_HANDLER(ldp_write)
94WRITE8_MEMBER(esh_state::ldp_write)
9195{
92   esh_state *state = space->machine().driver_data<esh_state>();
93   state->m_laserdisc->data_w(data);
96   m_laserdisc->data_w(data);
9497}
9598
96static WRITE8_HANDLER(misc_write)
99WRITE8_MEMBER(esh_state::misc_write)
97100{
98   esh_state *state = space->machine().driver_data<esh_state>();
99101   /* Bit 0 unknown */
100102
101103   if (data & 0x02)
102104      logerror("BEEP!\n");
103105
104106   /* Bit 2 unknown */
105   state->m_ld_video_visible = !((data & 0x08) >> 3);
107   m_ld_video_visible = !((data & 0x08) >> 3);
106108
107109   /* Bits 4-7 unknown */
108110   /* They cycle through a repeating pattern though */
109111}
110112
111static WRITE8_HANDLER(led_writes)
113WRITE8_MEMBER(esh_state::led_writes)
112114{
113115   switch(offset)
114116   {
r14845r14846
139141   }
140142}
141143
142static WRITE8_HANDLER(nmi_line_w)
144WRITE8_MEMBER(esh_state::nmi_line_w)
143145{
144146   if (data == 0x00)
145      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, ASSERT_LINE);
147      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_NMI, ASSERT_LINE);
146148   if (data == 0x01)
147      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
149      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
148150
149151   if (data != 0x00 && data != 0x01)
150152      logerror("NMI line got a weird value!\n");
r14845r14846
167169   AM_RANGE(0xf1,0xf1) AM_READ_PORT("IN1")
168170   AM_RANGE(0xf2,0xf2) AM_READ_PORT("IN2")
169171   AM_RANGE(0xf3,0xf3) AM_READ_PORT("IN3")
170   AM_RANGE(0xf4,0xf4) AM_READWRITE_LEGACY(ldp_read,ldp_write)
171   AM_RANGE(0xf5,0xf5) AM_WRITE_LEGACY(misc_write)   /* Continuously writes repeating patterns */
172   AM_RANGE(0xf8,0xfd) AM_WRITE_LEGACY(led_writes)
173   AM_RANGE(0xfe,0xfe) AM_WRITE_LEGACY(nmi_line_w)   /* Both 0xfe and 0xff flip quickly between 0 and 1 */
172   AM_RANGE(0xf4,0xf4) AM_READWRITE(ldp_read,ldp_write)
173   AM_RANGE(0xf5,0xf5) AM_WRITE(misc_write)   /* Continuously writes repeating patterns */
174   AM_RANGE(0xf8,0xfd) AM_WRITE(led_writes)
175   AM_RANGE(0xfe,0xfe) AM_WRITE(nmi_line_w)   /* Both 0xfe and 0xff flip quickly between 0 and 1 */
174176   AM_RANGE(0xff,0xff) AM_NOP               /*   (they're probably not NMI enables - likely LED's like their neighbors :) */
175177ADDRESS_MAP_END                           /*   (someday 0xf8-0xff will probably be a single handler) */
176178
src/mame/drivers/ecoinf2.c
r14845r14846
1616public:
1717   ecoinf2_state(const machine_config &mconfig, device_type type, const char *tag)
1818      : driver_device(mconfig, type, tag) { }
19   DECLARE_WRITE8_MEMBER(ox_port5c_out_w);
1920};
2021
2122
22static WRITE8_HANDLER( ox_port5c_out_w )
23WRITE8_MEMBER(ecoinf2_state::ox_port5c_out_w)
2324{
2425   // Watchdog?
2526}
r14845r14846
3132
3233static ADDRESS_MAP_START( oxo_portmap, AS_IO, 8, ecoinf2_state )
3334   ADDRESS_MAP_GLOBAL_MASK(0xff)
34   AM_RANGE(0x5c, 0x5c) AM_WRITE_LEGACY(ox_port5c_out_w)
35   AM_RANGE(0x5c, 0x5c) AM_WRITE(ox_port5c_out_w)
3536ADDRESS_MAP_END
3637
3738
src/mame/drivers/halleys.c
r14845r14846
243243   emu_timer *m_blitter_reset_timer;
244244   offs_t m_collision_detection;
245245   int m_latch_delay;
246   DECLARE_WRITE8_MEMBER(bgtile_w);
247   DECLARE_READ8_MEMBER(blitter_status_r);
248   DECLARE_READ8_MEMBER(blitter_r);
249   DECLARE_WRITE8_MEMBER(blitter_w);
250   DECLARE_READ8_MEMBER(collision_id_r);
251   DECLARE_WRITE8_MEMBER(halleys_paletteram_IIRRGGBB_w);
252   DECLARE_READ8_MEMBER(zero_r);
253   DECLARE_READ8_MEMBER(debug_r);
254   DECLARE_READ8_MEMBER(vector_r);
255   DECLARE_WRITE8_MEMBER(firq_ack_w);
256   DECLARE_WRITE8_MEMBER(soundcommand_w);
257   DECLARE_READ8_MEMBER(coin_lockout_r);
258   DECLARE_READ8_MEMBER(io_mirror_r);
259   void blit(int offset);
246260};
247261
248262
r14845r14846
250264//**************************************************************************
251265// MB1551x Blitter Functions
252266
253static void blit(halleys_state *state, int offset)
267void halleys_state::blit(int offset)
254268{
255269/*
256270    The render layers can be converted to standard MAME bitmaps but
r14845r14846
334348   UINT16 ax; UINT8 al, ah;      // partial regs
335349
336350
337   param = state->m_blitter_ram + offset;
351   param = m_blitter_ram + offset;
338352
339353
340354#if HALLEYS_DEBUG
r14845r14846
356370   // update sprite status
357371   layer = (code>>3 & 2) | (code>>7 & 1);
358372   offset >>= 4;
359   status = (stptr) ? state->m_cpu1_base[stptr] : ACTIVE;
373   status = (stptr) ? m_cpu1_base[stptr] : ACTIVE;
360374   flags = mode;
361375   group = mode & GROUP;
362376   command = code & COMMAND;
363   if (state->m_game_id == GAME_HALLEYS)
377   if (m_game_id == GAME_HALLEYS)
364378   {
365379      if (!layer) flags |= PPCD_ON;
366380      if (offset >= HALLEYS_SPLIT) flags |= AD_HIGH; else
r14845r14846
388402   src1 &= 0x3fff;
389403   src2 &= 0x3fff;
390404   bank = ((code & BANKBIT0) | (color & BANKBIT1)) << 8;
391   pal_ptr = state->m_internal_palette;
405   pal_ptr = m_internal_palette;
392406
393407
394408   // the crossroad of fate
r14845r14846
435449
436450
437451   // calculate entry points and loop constants
438   src1_ptr = state->m_gfx_plane02 + ((bank + src1)<<3) + eax;
439   src2_ptr = state->m_gfx_plane13 + ((bank + src2)<<3) + eax;
452   src1_ptr = m_gfx_plane02 + ((bank + src1)<<3) + eax;
453   src2_ptr = m_gfx_plane13 + ((bank + src2)<<3) + eax;
440454
441455   if (!(flags & (S1_IDLE | S2_IDLE)))
442456   {
r14845r14846
446460   }
447461   else src_dy = src_dx = 0;
448462
449   dst_ptr = state->m_render_layer[layer] + dst_skip;
463   dst_ptr = m_render_layer[layer] + dst_skip;
450464
451465
452466   // look up pen values and set rendering flags
r14845r14846
556570      // update collision list if object collided with the other group
557571      if (status & ACTIVE && ax & SP_COLLD)
558572      {
559         state->m_collision_list[state->m_collision_count & (MAX_SPRITES-1)] = offset;
560         state->m_collision_count++;
573         m_collision_list[m_collision_count & (MAX_SPRITES-1)] = offset;
574         m_collision_count++;
561575
562576         #if HALLEYS_DEBUG
563            popmessage("ID:%02x CC:%3d", offset, state->m_collision_count);
577            popmessage("ID:%02x CC:%3d", offset, m_collision_count);
564578         #endif
565579      }
566580
r14845r14846
705719   if (flags & S1_IDLE) src_dx = 0; else src_dx = 1;
706720   if (flags & S1_REV ) src_dx = -src_dx;
707721
708   src_base = state->m_gfx1_base + bank;
722   src_base = m_gfx1_base + bank;
709723
710724   if (command == STARPASS1 || command == STARPASS2) layer = (layer & 1) + 4;
711   dst_base = state->m_render_layer[layer];
725   dst_base = m_render_layer[layer];
712726
713727
714728//--------------------------------------------------------------------------
r14845r14846
732746      if (!command && y == 0xff && h == 1)
733747      {
734748         y = 0; h = SCREEN_HEIGHT;
735         dst_base = state->m_render_layer[(layer&1)+4];
749         dst_base = m_render_layer[(layer&1)+4];
736750         WARP_WIPE_COMMON
737751
738         state->m_stars_enabled = ~layer & 1;
752         m_stars_enabled = ~layer & 1;
739753      }
740754
741755      // wipe background and chain-wipe corresponding sprite layer when the command is zero
742756      else
743757      {
744758         WARP_WIPE_COMMON
745         if (!command) { dst_base = state->m_render_layer[layer&1]; WARP_WIPE_COMMON }
759         if (!command) { dst_base = m_render_layer[layer&1]; WARP_WIPE_COMMON }
746760      }
747761
748762   } else
r14845r14846
794808         }
795809      }
796810
797      state->m_stars_enabled = layer & 1;
811      m_stars_enabled = layer & 1;
798812
799813      #undef RORB
800814      #undef C2S
r14845r14846
862876      if (flags & IGNORE_0) { w=8; h=8; WARP_WIPE_COMMON }
863877
864878      src1_ptr = src_base + src1;
865      dst_ptr = state->m_render_layer[2] + (y << SCREEN_WIDTH_L2);
879      dst_ptr = m_render_layer[2] + (y << SCREEN_WIDTH_L2);
866880
867881      src1_ptr += 8;
868882      edx = -8;
r14845r14846
974988
975989
976990// draws Ben Bero Beh's color backdrop(verification required)
977static WRITE8_HANDLER( bgtile_w )
991WRITE8_MEMBER(halleys_state::bgtile_w)
978992{
979   halleys_state *state = space->machine().driver_data<halleys_state>();
980993   int yskip, xskip, ecx;
981994   UINT16 *edi;
982995   UINT16 ax;
983996
984   state->m_cpu1_base[0x1f00+offset] = data;
997   m_cpu1_base[0x1f00+offset] = data;
985998   offset -= 0x18;
986999
9871000   if (offset >= 191) return;
r14845r14846
9921005   yskip = yskip * 48 + 24;
9931006   xskip = xskip * 5 + 2;
9941007
995   edi = state->m_render_layer[2] + (yskip<<SCREEN_WIDTH_L2) + xskip + (48<<SCREEN_WIDTH_L2);
1008   edi = m_render_layer[2] + (yskip<<SCREEN_WIDTH_L2) + xskip + (48<<SCREEN_WIDTH_L2);
9961009   ecx = -(48<<SCREEN_WIDTH_L2);
9971010   ax = (UINT16)data | BG_RGB;
9981011
r14845r14846
10001013}
10011014
10021015
1003static READ8_HANDLER( blitter_status_r )
1016READ8_MEMBER(halleys_state::blitter_status_r)
10041017{
1005   halleys_state *state = space->machine().driver_data<halleys_state>();
1006   if (state->m_game_id==GAME_HALLEYS && cpu_get_pc(&space->device())==0x8017) return(0x55); // HACK: trick SRAM test on startup
1018   if (m_game_id==GAME_HALLEYS && cpu_get_pc(&space.device())==0x8017) return(0x55); // HACK: trick SRAM test on startup
10071019
10081020   return(0);
10091021}
10101022
10111023
1012static READ8_HANDLER( blitter_r )
1024READ8_MEMBER(halleys_state::blitter_r)
10131025{
1014   halleys_state *state = space->machine().driver_data<halleys_state>();
10151026   int i = offset & 0xf;
10161027
10171028   if (i==0 || i==4) return(1);
10181029
1019   return(state->m_blitter_ram[offset]);
1030   return(m_blitter_ram[offset]);
10201031}
10211032
10221033
r14845r14846
10271038}
10281039
10291040
1030static WRITE8_HANDLER( blitter_w )
1041WRITE8_MEMBER(halleys_state::blitter_w)
10311042{
1032   halleys_state *state = space->machine().driver_data<halleys_state>();
10331043   int i = offset & 0xf;
10341044
1035   state->m_blitter_ram[offset] = data;
1045   m_blitter_ram[offset] = data;
10361046
1037   if (i==0) blit(state, offset);
1047   if (i==0) blit(offset);
10381048
1039   if (state->m_game_id == GAME_BENBEROB)
1049   if (m_game_id == GAME_BENBEROB)
10401050   {
10411051      if (i==0 || (i==4 && !data))
10421052      {
1043         state->m_blitter_busy = 0;
1044         if (state->m_firq_level) cputag_set_input_line(space->machine(), "maincpu", M6809_FIRQ_LINE, ASSERT_LINE); // make up delayed FIRQ's
1053         m_blitter_busy = 0;
1054         if (m_firq_level) cputag_set_input_line(machine(), "maincpu", M6809_FIRQ_LINE, ASSERT_LINE); // make up delayed FIRQ's
10451055      }
10461056      else
10471057      {
1048         state->m_blitter_busy = 1;
1049         state->m_blitter_reset_timer->adjust(downcast<cpu_device *>(&space->device())->cycles_to_attotime(100)); // free blitter if no updates in 100 cycles
1058         m_blitter_busy = 1;
1059         m_blitter_reset_timer->adjust(downcast<cpu_device *>(&space.device())->cycles_to_attotime(100)); // free blitter if no updates in 100 cycles
10501060      }
10511061   }
10521062}
10531063
10541064
1055static READ8_HANDLER( collision_id_r )
1065READ8_MEMBER(halleys_state::collision_id_r)
10561066{
1057   halleys_state *state = space->machine().driver_data<halleys_state>();
10581067/*
10591068    Collision detection abstract:
10601069
r14845r14846
10771086    UPDATE: re-implemented pixel collision to accompany the hack method.
10781087*/
10791088
1080   if (state->m_game_id==GAME_HALLEYS && cpu_get_pc(&space->device())==state->m_collision_detection) // HACK: collision detection bypass
1089   if (m_game_id==GAME_HALLEYS && cpu_get_pc(&space.device())==m_collision_detection) // HACK: collision detection bypass
10811090   {
1082      if (state->m_collision_count) { state->m_collision_count--; return(state->m_collision_list[state->m_collision_count]); }
1091      if (m_collision_count) { m_collision_count--; return(m_collision_list[m_collision_count]); }
10831092
10841093      return(0);
10851094   }
10861095
1087   return(state->m_io_ram[0x66]);
1096   return(m_io_ram[0x66]);
10881097}
10891098
10901099
r14845r14846
11851194   *b = prom_6330[0x40 + (bit0|bit1|bit2|bit3|bit4)];
11861195}
11871196
1188static WRITE8_HANDLER( halleys_paletteram_IIRRGGBB_w )
1197WRITE8_MEMBER(halleys_state::halleys_paletteram_IIRRGGBB_w)
11891198{
1190   halleys_state *state = space->machine().driver_data<halleys_state>();
11911199   UINT32 d, r, g, b, i, j;
1192   UINT32 *pal_ptr = state->m_internal_palette;
1200   UINT32 *pal_ptr = m_internal_palette;
11931201
1194   space->machine().generic.paletteram.u8[offset] = data;
1202   machine().generic.paletteram.u8[offset] = data;
11951203   d = (UINT32)data;
11961204   j = d | BG_RGB;
11971205   pal_ptr[offset] = j;
r14845r14846
12051213   g = d    & 0x0c; g |= i;  g = g<<4 | g;
12061214   b = d<<2 & 0x0c; b |= i;  b = b<<4 | b;
12071215
1208   palette_set_color(space->machine(), offset, MAKE_RGB(r, g, b));
1209   palette_set_color(space->machine(), offset+SP_2BACK, MAKE_RGB(r, g, b));
1210   palette_set_color(space->machine(), offset+SP_ALPHA, MAKE_RGB(r, g, b));
1211   palette_set_color(space->machine(), offset+SP_COLLD, MAKE_RGB(r, g, b));
1216   palette_set_color(machine(), offset, MAKE_RGB(r, g, b));
1217   palette_set_color(machine(), offset+SP_2BACK, MAKE_RGB(r, g, b));
1218   palette_set_color(machine(), offset+SP_ALPHA, MAKE_RGB(r, g, b));
1219   palette_set_color(machine(), offset+SP_COLLD, MAKE_RGB(r, g, b));
12121220
1213   halleys_decode_rgb(space->machine(), &r, &g, &b, offset, 0);
1214   palette_set_color(space->machine(), offset+0x20, MAKE_RGB(r, g, b));
1221   halleys_decode_rgb(machine(), &r, &g, &b, offset, 0);
1222   palette_set_color(machine(), offset+0x20, MAKE_RGB(r, g, b));
12151223}
12161224
12171225
r14845r14846
15131521
15141522#if HALLEYS_DEBUG
15151523
1516static READ8_HANDLER( zero_r ) { return(0); }
1524READ8_MEMBER(halleys_state::zero_r){ return(0); }
15171525
1518static READ8_HANDLER( debug_r )
1526READ8_MEMBER(halleys_state::debug_r)
15191527{
1520   halleys_state *state = space->machine().driver_data<halleys_state>();
1521   return(state->m_io_ram[offset]);
1528   return(m_io_ram[offset]);
15221529}
15231530
15241531#endif
r14845r14846
15821589}
15831590
15841591
1585static READ8_HANDLER( vector_r )
1592READ8_MEMBER(halleys_state::vector_r)
15861593{
1587   halleys_state *state = space->machine().driver_data<halleys_state>();
1588   return(state->m_cpu1_base[0xffe0 + (offset^(state->m_mVectorType<<4))]);
1594   return(m_cpu1_base[0xffe0 + (offset^(m_mVectorType<<4))]);
15891595}
15901596
15911597
1592static WRITE8_HANDLER( firq_ack_w )
1598WRITE8_MEMBER(halleys_state::firq_ack_w)
15931599{
1594   halleys_state *state = space->machine().driver_data<halleys_state>();
1595   state->m_io_ram[0x9c] = data;
1600   m_io_ram[0x9c] = data;
15961601
1597   if (state->m_firq_level) state->m_firq_level--;
1598   cputag_set_input_line(space->machine(), "maincpu", M6809_FIRQ_LINE, CLEAR_LINE);
1602   if (m_firq_level) m_firq_level--;
1603   cputag_set_input_line(machine(), "maincpu", M6809_FIRQ_LINE, CLEAR_LINE);
15991604}
16001605
16011606
r14845r14846
16061611}
16071612
16081613
1609static WRITE8_HANDLER( soundcommand_w )
1614WRITE8_MEMBER(halleys_state::soundcommand_w)
16101615{
1611   halleys_state *state = space->machine().driver_data<halleys_state>();
16121616
1613   state->m_io_ram[0x8a] = data;
1617   m_io_ram[0x8a] = data;
16141618   soundlatch_w(space,offset,data);
1615   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
1619   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
16161620}
16171621
16181622
1619static READ8_HANDLER( coin_lockout_r )
1623READ8_MEMBER(halleys_state::coin_lockout_r)
16201624{
16211625   // This is a hack, but it lets you coin up when COIN1 or COIN2 are signaled.
16221626   // See NMI for the twisted logic that is involved in handling coin input :
16231627   //   0x8599 : 'benberob'
16241628   //   0x83e2 : 'halleys', 'halleysc', 'halleycj'
16251629   //   0x83df : 'halley87'
1626   int inp = input_port_read(space->machine(), "IN0");
1627   int result = ((input_port_read(space->machine(), "DSW4")) & 0x20) >> 5;
1630   int inp = input_port_read(machine(), "IN0");
1631   int result = ((input_port_read(machine(), "DSW4")) & 0x20) >> 5;
16281632
16291633   if (inp & 0x80) result |= 0x02;
16301634   if (inp & 0x40) result |= 0x04;
r14845r14846
16331637}
16341638
16351639
1636static READ8_HANDLER( io_mirror_r )
1640READ8_MEMBER(halleys_state::io_mirror_r)
16371641{
16381642   static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" };
16391643
1640   return input_port_read(space->machine(), portnames[offset]);
1644   return input_port_read(machine(), portnames[offset]);
16411645}
16421646
16431647
r14845r14846
16451649// Memory Maps
16461650
16471651static ADDRESS_MAP_START( halleys_map, AS_PROGRAM, 8, halleys_state )
1648   AM_RANGE(0x0000, 0x0fff) AM_READWRITE_LEGACY(blitter_r, blitter_w) AM_BASE(m_blitter_ram) AM_SIZE(m_blitter_ramsize)
1649   AM_RANGE(0x1f00, 0x1fff) AM_WRITE_LEGACY(bgtile_w)      // background tiles?(Ben Bero Beh only)
1652   AM_RANGE(0x0000, 0x0fff) AM_READWRITE(blitter_r, blitter_w) AM_BASE(m_blitter_ram) AM_SIZE(m_blitter_ramsize)
1653   AM_RANGE(0x1f00, 0x1fff) AM_WRITE(bgtile_w)      // background tiles?(Ben Bero Beh only)
16501654   AM_RANGE(0x1000, 0xefff) AM_ROM
16511655   AM_RANGE(0xf000, 0xfeff) AM_RAM               // work ram
16521656
1653   AM_RANGE(0xff66, 0xff66) AM_READ_LEGACY(collision_id_r) // HACK: collision detection bypass(Halley's Comet only)
1654   AM_RANGE(0xff71, 0xff71) AM_READ_LEGACY(blitter_status_r)
1655   AM_RANGE(0xff80, 0xff83) AM_READ_LEGACY(io_mirror_r)
1656   AM_RANGE(0xff8a, 0xff8a) AM_WRITE_LEGACY(soundcommand_w)
1657   AM_RANGE(0xff66, 0xff66) AM_READ(collision_id_r) // HACK: collision detection bypass(Halley's Comet only)
1658   AM_RANGE(0xff71, 0xff71) AM_READ(blitter_status_r)
1659   AM_RANGE(0xff80, 0xff83) AM_READ(io_mirror_r)
1660   AM_RANGE(0xff8a, 0xff8a) AM_WRITE(soundcommand_w)
16571661   AM_RANGE(0xff90, 0xff90) AM_READ_PORT("IN0")   // coin/start
16581662   AM_RANGE(0xff91, 0xff91) AM_READ_PORT("IN1")   // player 1
16591663   AM_RANGE(0xff92, 0xff92) AM_READ_PORT("IN2")   // player 2
16601664   AM_RANGE(0xff93, 0xff93) AM_READ_PORT("IN3")   // unused?
1661   AM_RANGE(0xff94, 0xff94) AM_READ_LEGACY(coin_lockout_r)
1665   AM_RANGE(0xff94, 0xff94) AM_READ(coin_lockout_r)
16621666   AM_RANGE(0xff95, 0xff95) AM_READ_PORT("DSW1")   // dipswitch 4
16631667   AM_RANGE(0xff96, 0xff96) AM_READ_PORT("DSW2")   // dipswitch 3
16641668   AM_RANGE(0xff97, 0xff97) AM_READ_PORT("DSW3")   // dipswitch 2
1665   AM_RANGE(0xff9c, 0xff9c) AM_WRITE_LEGACY(firq_ack_w)
1669   AM_RANGE(0xff9c, 0xff9c) AM_WRITE(firq_ack_w)
16661670   AM_RANGE(0xff00, 0xffbf) AM_RAM AM_BASE(m_io_ram) AM_SIZE(m_io_ramsize)   // I/O write fall-through
16671671
1668   AM_RANGE(0xffc0, 0xffdf) AM_RAM_WRITE_LEGACY(halleys_paletteram_IIRRGGBB_w) AM_BASE_GENERIC(paletteram)
1669   AM_RANGE(0xffe0, 0xffff) AM_READ_LEGACY(vector_r)
1672   AM_RANGE(0xffc0, 0xffdf) AM_RAM_WRITE(halleys_paletteram_IIRRGGBB_w) AM_BASE_GENERIC(paletteram)
1673   AM_RANGE(0xffe0, 0xffff) AM_READ(vector_r)
16701674ADDRESS_MAP_END
16711675
16721676
src/mame/drivers/statriv2.c
r14845r14846
9090   UINT8 m_question_offset_high;
9191   UINT8 m_latched_coin;
9292   UINT8 m_last_coin;
93   DECLARE_WRITE8_MEMBER(statriv2_videoram_w);
94   DECLARE_READ8_MEMBER(question_data_r);
95   DECLARE_READ8_MEMBER(laserdisc_io_r);
96   DECLARE_WRITE8_MEMBER(laserdisc_io_w);
9397};
9498
9599
r14845r14846
161165 *
162166 *************************************/
163167
164static WRITE8_HANDLER( statriv2_videoram_w )
168WRITE8_MEMBER(statriv2_state::statriv2_videoram_w)
165169{
166   statriv2_state *state = space->machine().driver_data<statriv2_state>();
167   UINT8 *videoram = state->m_videoram;
170   UINT8 *videoram = m_videoram;
168171   videoram[offset] = data;
169   state->m_tilemap->mark_tile_dirty(offset & 0x3ff);
172   m_tilemap->mark_tile_dirty(offset & 0x3ff);
170173}
171174
172175
r14845r14846
216219 *
217220 *************************************/
218221
219static READ8_HANDLER( question_data_r )
222READ8_MEMBER(statriv2_state::question_data_r)
220223{
221   statriv2_state *state = space->machine().driver_data<statriv2_state>();
222   const UINT8 *qrom = space->machine().region("questions")->base();
223   UINT32 qromsize = space->machine().region("questions")->bytes();
224   const UINT8 *qrom = machine().region("questions")->base();
225   UINT32 qromsize = machine().region("questions")->bytes();
224226   UINT32 address;
225227
226   if (state->m_question_offset_high == 0xff)
227      state->m_question_offset[state->m_question_offset_low]++;
228   if (m_question_offset_high == 0xff)
229      m_question_offset[m_question_offset_low]++;
228230
229   address = state->m_question_offset[state->m_question_offset_low];
230   address |= state->m_question_offset[state->m_question_offset_mid] << 8;
231   if (state->m_question_offset_high != 0xff)
232      address |= state->m_question_offset[state->m_question_offset_high] << 16;
231   address = m_question_offset[m_question_offset_low];
232   address |= m_question_offset[m_question_offset_mid] << 8;
233   if (m_question_offset_high != 0xff)
234      address |= m_question_offset[m_question_offset_high] << 16;
233235
234236   return (address < qromsize) ? qrom[address] : 0xff;
235237}
r14845r14846
292294   AM_RANGE(0x0000, 0x3fff) AM_ROM
293295   AM_RANGE(0x4000, 0x43ff) AM_RAM
294296   AM_RANGE(0x4800, 0x48ff) AM_RAM AM_SHARE("nvram")
295   AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE_LEGACY(statriv2_videoram_w) AM_BASE(m_videoram)
297   AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(statriv2_videoram_w) AM_BASE(m_videoram)
296298ADDRESS_MAP_END
297299
298300static ADDRESS_MAP_START( statriv2_io_map, AS_IO, 8, statriv2_state )
299301   AM_RANGE(0x20, 0x23) AM_DEVREADWRITE_LEGACY("ppi", ppi8255_r, ppi8255_w)
300   AM_RANGE(0x28, 0x2b) AM_READ_LEGACY(question_data_r) AM_WRITEONLY AM_BASE(m_question_offset)
302   AM_RANGE(0x28, 0x2b) AM_READ(question_data_r) AM_WRITEONLY AM_BASE(m_question_offset)
301303   AM_RANGE(0xb0, 0xb1) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
302304   AM_RANGE(0xb1, 0xb1) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
303305   AM_RANGE(0xc0, 0xcf) AM_DEVREADWRITE_LEGACY("tms", tms9927_r, tms9927_w)
r14845r14846
11091111}
11101112
11111113
1112static READ8_HANDLER( laserdisc_io_r )
1114READ8_MEMBER(statriv2_state::laserdisc_io_r)
11131115{
11141116   UINT8 result = 0x00;
11151117   if (offset == 1)
11161118      result = 0x18;
1117   mame_printf_debug("%s:ld read ($%02X) = %02X\n", space->machine().describe_context(), 0x28 + offset, result);
1119   mame_printf_debug("%s:ld read ($%02X) = %02X\n", machine().describe_context(), 0x28 + offset, result);
11181120   return result;
11191121}
11201122
1121static WRITE8_HANDLER( laserdisc_io_w )
1123WRITE8_MEMBER(statriv2_state::laserdisc_io_w)
11221124{
1123   mame_printf_debug("%s:ld write ($%02X) = %02X\n", space->machine().describe_context(), 0x28 + offset, data);
1125   mame_printf_debug("%s:ld write ($%02X) = %02X\n", machine().describe_context(), 0x28 + offset, data);
11241126}
11251127
11261128static DRIVER_INIT( laserdisc )
11271129{
11281130   address_space *iospace = machine.device("maincpu")->memory().space(AS_IO);
1129   iospace->install_legacy_readwrite_handler(0x28, 0x2b, FUNC(laserdisc_io_r), FUNC(laserdisc_io_w));
1131   statriv2_state *state = machine.driver_data<statriv2_state>();
1132   iospace->install_readwrite_handler(0x28, 0x2b, read8_delegate(FUNC(statriv2_state::laserdisc_io_r), state), write8_delegate(FUNC(statriv2_state::laserdisc_io_w), state));
11301133}
11311134
11321135
src/mame/drivers/d9final.c
r14845r14846
3434   UINT8 *m_hi_vram;
3535   UINT8 *m_cram;
3636   tilemap_t *m_sc0_tilemap;
37   DECLARE_WRITE8_MEMBER(sc0_lovram);
38   DECLARE_WRITE8_MEMBER(sc0_hivram);
39   DECLARE_WRITE8_MEMBER(sc0_cram);
40   DECLARE_WRITE8_MEMBER(d9final_bank_w);
41   DECLARE_READ8_MEMBER(prot_latch_r);
3742};
3843
3944
r14845r14846
6469   return 0;
6570}
6671
67static WRITE8_HANDLER( sc0_lovram )
72WRITE8_MEMBER(d9final_state::sc0_lovram)
6873{
69   d9final_state *state = space->machine().driver_data<d9final_state>();
70   state->m_lo_vram[offset] = data;
71   state->m_sc0_tilemap->mark_tile_dirty(offset);
74   m_lo_vram[offset] = data;
75   m_sc0_tilemap->mark_tile_dirty(offset);
7276}
7377
74static WRITE8_HANDLER( sc0_hivram )
78WRITE8_MEMBER(d9final_state::sc0_hivram)
7579{
76   d9final_state *state = space->machine().driver_data<d9final_state>();
77   state->m_hi_vram[offset] = data;
78   state->m_sc0_tilemap->mark_tile_dirty(offset);
80   m_hi_vram[offset] = data;
81   m_sc0_tilemap->mark_tile_dirty(offset);
7982}
8083
81static WRITE8_HANDLER( sc0_cram )
84WRITE8_MEMBER(d9final_state::sc0_cram)
8285{
83   d9final_state *state = space->machine().driver_data<d9final_state>();
84   state->m_cram[offset] = data;
85   state->m_sc0_tilemap->mark_tile_dirty(offset);
86   m_cram[offset] = data;
87   m_sc0_tilemap->mark_tile_dirty(offset);
8688}
8789
88static WRITE8_HANDLER( d9final_bank_w )
90WRITE8_MEMBER(d9final_state::d9final_bank_w)
8991{
90   UINT8 *ROM = space->machine().region("maincpu")->base();
92   UINT8 *ROM = machine().region("maincpu")->base();
9193   UINT32 bankaddress;
9294
9395   bankaddress = 0x10000+(0x4000 * (data & 0x7));
94   memory_set_bankptr(space->machine(), "bank1", &ROM[bankaddress]);
96   memory_set_bankptr(machine(), "bank1", &ROM[bankaddress]);
9597}
9698
9799/* game checks this after three attract cycles, otherwise coin inputs stop to work. */
98static READ8_HANDLER( prot_latch_r )
100READ8_MEMBER(d9final_state::prot_latch_r)
99101{
100//  printf("PC=%06x\n",cpu_get_pc(&space->device()));
102//  printf("PC=%06x\n",cpu_get_pc(&space.device()));
101103
102104   return 0x04;
103105}
r14845r14846
109111   AM_RANGE(0xc000, 0xc7ff) AM_RAM
110112   AM_RANGE(0xc800, 0xcbff) AM_RAM_WRITE_LEGACY(paletteram_xxxxBBBBRRRRGGGG_split1_w) AM_BASE_GENERIC(paletteram)
111113   AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE_LEGACY(paletteram_xxxxBBBBRRRRGGGG_split2_w) AM_BASE_GENERIC(paletteram2)
112   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(sc0_lovram) AM_BASE(m_lo_vram)
113   AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE_LEGACY(sc0_hivram) AM_BASE(m_hi_vram)
114   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE_LEGACY(sc0_cram) AM_BASE(m_cram)
115   AM_RANGE(0xf000, 0xf000) AM_READ_LEGACY(prot_latch_r)
114   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(sc0_lovram) AM_BASE(m_lo_vram)
115   AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(sc0_hivram) AM_BASE(m_hi_vram)
116   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(sc0_cram) AM_BASE(m_cram)
117   AM_RANGE(0xf000, 0xf000) AM_READ(prot_latch_r)
116118ADDRESS_MAP_END
117119
118120static ADDRESS_MAP_START( d9final_io, AS_IO, 8, d9final_state )
r14845r14846
124126   AM_RANGE(0x40, 0x41) AM_DEVWRITE_LEGACY("ymsnd",ym2413_w)
125127   AM_RANGE(0x60, 0x60) AM_READ_PORT("DSWD")
126128   AM_RANGE(0x80, 0x80) AM_READ_PORT("IN0")
127   AM_RANGE(0xa0, 0xa0) AM_READ_PORT("IN1") AM_WRITE_LEGACY(d9final_bank_w)
129   AM_RANGE(0xa0, 0xa0) AM_READ_PORT("IN1") AM_WRITE(d9final_bank_w)
128130   AM_RANGE(0xe0, 0xe0) AM_READ_PORT("IN2")
129131ADDRESS_MAP_END
130132
src/mame/drivers/ttchamp.c
r14845r14846
5353
5454   UINT16 *m_peno_vram;
5555   UINT16 m_paloff;
56   DECLARE_WRITE16_MEMBER(paloff_w);
57   DECLARE_WRITE16_MEMBER(pcup_prgbank_w);
58   DECLARE_WRITE16_MEMBER(paldat_w);
59   DECLARE_READ16_MEMBER(peno_rand);
60   DECLARE_READ16_MEMBER(peno_rand2);
5661};
5762
5863
r14845r14846
9398}
9499
95100
96static WRITE16_HANDLER( paloff_w )
101WRITE16_MEMBER(ttchamp_state::paloff_w)
97102{
98   ttchamp_state *state = space->machine().driver_data<ttchamp_state>();
99    COMBINE_DATA(&state->m_paloff);
103    COMBINE_DATA(&m_paloff);
100104}
101105
102106#ifdef UNUSED_FUNCTION
103static WRITE16_HANDLER( pcup_prgbank_w )
107WRITE16_MEMBER(ttchamp_state::pcup_prgbank_w)
104108{
105109    int bank;
106    UINT8 *ROM1 = space->machine().region("user1")->base();
110    UINT8 *ROM1 = machine().region("user1")->base();
107111
108112    if (ACCESSING_BITS_0_7)
109113    {
110114        bank = (data>>4) &0x07;
111        memory_set_bankptr(space->machine(), "bank2",&ROM1[0x80000*(bank)]);
115        memory_set_bankptr(machine(), "bank2",&ROM1[0x80000*(bank)]);
112116    }
113117}
114118#endif
115119
116static WRITE16_HANDLER( paldat_w )
120WRITE16_MEMBER(ttchamp_state::paldat_w)
117121{
118   ttchamp_state *state = space->machine().driver_data<ttchamp_state>();
119    palette_set_color_rgb(space->machine(),state->m_paloff & 0x7fff,pal5bit(data>>0),pal5bit(data>>5),pal5bit(data>>10));
122    palette_set_color_rgb(machine(),m_paloff & 0x7fff,pal5bit(data>>0),pal5bit(data>>5),pal5bit(data>>10));
120123}
121124
122static READ16_HANDLER( peno_rand )
125READ16_MEMBER(ttchamp_state::peno_rand)
123126{
124    return 0xffff;// space->machine().rand();
127    return 0xffff;// machine().rand();
125128}
126129
127130#ifdef UNUSED_FUNCTION
128static READ16_HANDLER( peno_rand2 )
131READ16_MEMBER(ttchamp_state::peno_rand2)
129132{
130    return space->machine().rand();
133    return machine().rand();
131134}
132135#endif
133136
r14845r14846
144147    AM_RANGE(0x0002, 0x0003) AM_READ_PORT("SYSTEM")
145148    AM_RANGE(0x0004, 0x0005) AM_READ_PORT("P1_P2")
146149
147//  AM_RANGE(0x0018, 0x0019) AM_READ_LEGACY(peno_rand2)
148//  AM_RANGE(0x001e, 0x001f) AM_READ_LEGACY(peno_rand2)
150//  AM_RANGE(0x0018, 0x0019) AM_READ(peno_rand2)
151//  AM_RANGE(0x001e, 0x001f) AM_READ(peno_rand2)
149152
150    AM_RANGE(0x0008, 0x0009) AM_WRITE_LEGACY(paldat_w)
151    AM_RANGE(0x000a, 0x000b) AM_WRITE_LEGACY(paloff_w)
153    AM_RANGE(0x0008, 0x0009) AM_WRITE(paldat_w)
154    AM_RANGE(0x000a, 0x000b) AM_WRITE(paloff_w)
152155
153//  AM_RANGE(0x0010, 0x0010) AM_WRITE_LEGACY(pcup_prgbank_w)
156//  AM_RANGE(0x0010, 0x0010) AM_WRITE(pcup_prgbank_w)
154157    AM_RANGE(0x0010, 0x0011) AM_WRITENOP
155158
156159    AM_RANGE(0x0020, 0x0021) AM_WRITENOP
157160
158    AM_RANGE(0x0034, 0x0035) AM_READ_LEGACY(peno_rand) AM_WRITENOP
161    AM_RANGE(0x0034, 0x0035) AM_READ(peno_rand) AM_WRITENOP
159162ADDRESS_MAP_END
160163
161164
src/mame/drivers/aristmk6.c
r14845r14846
2020
2121   UINT32 m_test_x,m_test_y,m_start_offs;
2222   UINT8 m_type;
23   DECLARE_READ64_MEMBER(test_r);
2324};
2425
2526
r14845r14846
108109   return 0;
109110}
110111
111static READ64_HANDLER( test_r )
112READ64_MEMBER(aristmk6_state::test_r)
112113{
113114   // bit 1 read in various places, status for something ...
114115   return -1;
r14845r14846
117118static ADDRESS_MAP_START( aristmk6_map, AS_PROGRAM, 64, aristmk6_state )
118119   AM_RANGE(0x00000000, 0x003fffff) AM_ROM AM_REGION("maincpu", 0)
119120   AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM // work ram
120   AM_RANGE(0x13800000, 0x13800007) AM_READ_LEGACY(test_r)
121   AM_RANGE(0x13800000, 0x13800007) AM_READ(test_r)
121122ADDRESS_MAP_END
122123
123124static ADDRESS_MAP_START( aristmk6_port, AS_IO, 64, aristmk6_state )
src/mame/drivers/gottlieb.c
r14845r14846
17501750MACHINE_CONFIG_END
17511751
17521752
1753static MACHINE_CONFIG_DERIVED( gottlieb1_votrax, gottlieb_core )
1754   MCFG_GOTTLIEB_SOUND_R1_ADD_VOTRAX("r1sound")
1755   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
1756MACHINE_CONFIG_END
1757
1758
17591753static MACHINE_CONFIG_DERIVED( gottlieb2, gottlieb_core )
17601754   MCFG_GOTTLIEB_SOUND_R2_ADD("r2sound")
17611755   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
r14845r14846
18021796   MCFG_FRAGMENT_ADD(qbert_samples)
18031797MACHINE_CONFIG_END
18041798
1799
1800static MACHINE_CONFIG_DERIVED( tylz, gottlieb1 )
1801   MCFG_FRAGMENT_ADD(qbert_samples)
1802MACHINE_CONFIG_END
1803
1804
18051805#else
18061806
1807
1808static MACHINE_CONFIG_DERIVED( gottlieb1_votrax, gottlieb_core )
1809   MCFG_GOTTLIEB_SOUND_R1_ADD_VOTRAX("r1sound")
1810   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
1811MACHINE_CONFIG_END
1812
1813
18071814static MACHINE_CONFIG_DERIVED( reactor, gottlieb1_votrax )
18081815
18091816   /* basic machine hardware */
r14845r14846
18171824static MACHINE_CONFIG_DERIVED( qbert, gottlieb1_votrax )
18181825MACHINE_CONFIG_END
18191826
1827
1828static MACHINE_CONFIG_DERIVED( tylz, gottlieb1_votrax )
1829MACHINE_CONFIG_END
1830
1831
18201832#endif
18211833
18221834
r14845r14846
24922504GAME( 1982, qberttst,  qbert,    qbert,          qbert,    romtiles, ROT270, "Gottlieb", "Q*bert (early test version)", GAME_IMPERFECT_SOUND )
24932505GAME( 1982, qbtrktst,  qbert,    qbert,          qbert,    romtiles, ROT270, "Gottlieb", "Q*bert Board Input Test Rom", GAME_IMPERFECT_SOUND )
24942506GAME( 1982, insector,  0,        gottlieb1,       insector, romtiles, ROT0,   "Gottlieb", "Insector (prototype)", 0 )
2495GAME( 1982, tylz,      0,        gottlieb1_votrax,   tylz,     romtiles, ROT0,   "Mylstar",  "Tylz (prototype)", GAME_IMPERFECT_SOUND ) // modified sound hw?
2507GAME( 1982, tylz,      0,        tylz,   tylz,     romtiles, ROT0,   "Mylstar",  "Tylz (prototype)", GAME_IMPERFECT_SOUND ) // modified sound hw?
24962508GAME( 1984, argusg,    0,        gottlieb1,       argusg,   ramtiles, ROT0,   "Gottlieb", "Argus (Gottlieb, prototype)" , 0) // aka Guardian / Protector?
24972509GAME( 1983, mplanets,  0,        gottlieb1,       mplanets, romtiles, ROT270, "Gottlieb", "Mad Planets", 0 )
24982510GAME( 1983, mplanetsuk,mplanets, gottlieb1,       mplanets, romtiles, ROT270, "Gottlieb (Taitel license)", "Mad Planets (UK)", 0 )
src/mame/drivers/psattack.c
r14845r14846
8585   psattack_state(const machine_config &mconfig, device_type type, const char *tag)
8686      : driver_device(mconfig, type, tag) { }
8787
88   DECLARE_READ32_MEMBER(psattack_unk_r);
8889};
8990
9091
91static READ32_HANDLER( psattack_unk_r )
92READ32_MEMBER(psattack_state::psattack_unk_r)
9293{
9394   return 0xffffffff;
9495}
9596
9697static ADDRESS_MAP_START( psattack_mem, AS_PROGRAM, 32, psattack_state )
9798   AM_RANGE(0x00000000, 0x001fffff) AM_ROM
98   AM_RANGE(0x01402204, 0x01402207) AM_READ_LEGACY(psattack_unk_r)
99   AM_RANGE(0x01402804, 0x01402807) AM_READ_LEGACY(psattack_unk_r)
99   AM_RANGE(0x01402204, 0x01402207) AM_READ(psattack_unk_r)
100   AM_RANGE(0x01402804, 0x01402807) AM_READ(psattack_unk_r)
100101
101102
102103   AM_RANGE(0x02000000, 0x027fffff) AM_RAM
src/mame/drivers/acommand.c
r14845r14846
7878   UINT16 m_ufo_sw2;
7979   UINT16 *m_spriteram;
8080   size_t m_spriteram_size;
81   DECLARE_WRITE16_MEMBER(ac_bgvram_w);
82   DECLARE_WRITE16_MEMBER(ac_txvram_w);
83   DECLARE_WRITE16_MEMBER(ac_bgscroll_w);
84   DECLARE_WRITE16_MEMBER(ac_txscroll_w);
85   DECLARE_READ16_MEMBER(ac_devices_r);
86   DECLARE_WRITE16_MEMBER(ac_devices_w);
87   DECLARE_WRITE16_MEMBER(ac_unk2_w);
8188};
8289
8390
r14845r14846
257264}
258265
259266
260static WRITE16_HANDLER( ac_bgvram_w )
267WRITE16_MEMBER(acommand_state::ac_bgvram_w)
261268{
262   acommand_state *state = space->machine().driver_data<acommand_state>();
263   COMBINE_DATA(&state->m_ac_bgvram[offset]);
264   state->m_bg_tilemap->mark_tile_dirty(offset);
269   COMBINE_DATA(&m_ac_bgvram[offset]);
270   m_bg_tilemap->mark_tile_dirty(offset);
265271}
266272
267static WRITE16_HANDLER( ac_txvram_w )
273WRITE16_MEMBER(acommand_state::ac_txvram_w)
268274{
269   acommand_state *state = space->machine().driver_data<acommand_state>();
270   COMBINE_DATA(&state->m_ac_txvram[offset]);
271   state->m_tx_tilemap->mark_tile_dirty(offset);
275   COMBINE_DATA(&m_ac_txvram[offset]);
276   m_tx_tilemap->mark_tile_dirty(offset);
272277}
273278
274static WRITE16_HANDLER(ac_bgscroll_w)
279WRITE16_MEMBER(acommand_state::ac_bgscroll_w)
275280{
276   acommand_state *state = space->machine().driver_data<acommand_state>();
277281   switch(offset)
278282   {
279      case 0: state->m_bg_tilemap->set_scrollx(0,data); break;
280      case 1: state->m_bg_tilemap->set_scrolly(0,data); break;
283      case 0: m_bg_tilemap->set_scrollx(0,data); break;
284      case 1: m_bg_tilemap->set_scrolly(0,data); break;
281285      case 2: /*BG_TILEMAP priority?*/ break;
282286   }
283287}
284288
285static WRITE16_HANDLER(ac_txscroll_w)
289WRITE16_MEMBER(acommand_state::ac_txscroll_w)
286290{
287   acommand_state *state = space->machine().driver_data<acommand_state>();
288291   switch(offset)
289292   {
290      case 0: state->m_tx_tilemap->set_scrollx(0,data); break;
291      case 1: state->m_tx_tilemap->set_scrolly(0,data); break;
293      case 0: m_tx_tilemap->set_scrollx(0,data); break;
294      case 1: m_tx_tilemap->set_scrolly(0,data); break;
292295      case 2: /*TX_TILEMAP priority?*/ break;
293296   }
294297}
r14845r14846
296299/******************************************************************************************/
297300
298301
299static READ16_HANDLER(ac_devices_r)
302READ16_MEMBER(acommand_state::ac_devices_r)
300303{
301   acommand_state *state = space->machine().driver_data<acommand_state>();
302   logerror("(PC=%06x) read at %04x\n",cpu_get_pc(&space->device()),offset*2);
304   logerror("(PC=%06x) read at %04x\n",cpu_get_pc(&space.device()),offset*2);
303305
304306   switch(offset)
305307   {
r14845r14846
316318                ---- ---- ---- --x- (Activate Test)
317319                ---- ---- ---- ---x (Advance through Tests)
318320            */
319         return input_port_read(space->machine(), "IN0");
321         return input_port_read(machine(), "IN0");
320322      case 0x0014/2:
321323      case 0x0016/2:
322         return space->machine().device<okim6295_device>("oki1")->read(*space,0);
324         return machine().device<okim6295_device>("oki1")->read(*&space,0);
323325      case 0x0018/2:
324326      case 0x001a/2:
325         return space->machine().device<okim6295_device>("oki2")->read(*space,0);
327         return machine().device<okim6295_device>("oki2")->read(*&space,0);
326328      case 0x0040/2:
327329         /*
328330                "Upper switch / Under Switch"
r14845r14846
340342            */
341343        //22dc8
342344      {
343         state->m_ufo_sw1 = state->m_ac_devram[offset] & 3;
344         if(state->m_ac_devram[offset] & 0x10)
345            state->m_ufo_sw1|= 0x10;
346         if(state->m_ac_devram[offset] & 0x40)
347            state->m_ufo_sw1|= 0x20;
348         if(state->m_ac_devram[offset] & 0x100)
349            state->m_ufo_sw1|=0x100;
350         if(state->m_ac_devram[offset] & 0x400)
351            state->m_ufo_sw1|=0x200;
352         if(state->m_ac_devram[offset] & 0x1000)
353            state->m_ufo_sw1|=0x1000;
354         if(state->m_ac_devram[offset] & 0x4000)
355            state->m_ufo_sw1|=0x2000;
356//          if(state->m_ac_devram[0x0048/2] & 0x0001)
357//              state->m_ufo_sw1|=0x0040;
358//          if(state->m_ac_devram[0x0048/2] & 0x0004)
359//              state->m_ufo_sw1|=0x0400;
360//          if(state->m_ac_devram[0x0048/2] & 0x0100)
361//              state->m_ufo_sw1|=0x4000;
362         return state->m_ufo_sw1;
345         m_ufo_sw1 = m_ac_devram[offset] & 3;
346         if(m_ac_devram[offset] & 0x10)
347            m_ufo_sw1|= 0x10;
348         if(m_ac_devram[offset] & 0x40)
349            m_ufo_sw1|= 0x20;
350         if(m_ac_devram[offset] & 0x100)
351            m_ufo_sw1|=0x100;
352         if(m_ac_devram[offset] & 0x400)
353            m_ufo_sw1|=0x200;
354         if(m_ac_devram[offset] & 0x1000)
355            m_ufo_sw1|=0x1000;
356         if(m_ac_devram[offset] & 0x4000)
357            m_ufo_sw1|=0x2000;
358//          if(m_ac_devram[0x0048/2] & 0x0001)
359//              m_ufo_sw1|=0x0040;
360//          if(m_ac_devram[0x0048/2] & 0x0004)
361//              m_ufo_sw1|=0x0400;
362//          if(m_ac_devram[0x0048/2] & 0x0100)
363//              m_ufo_sw1|=0x4000;
364         return m_ufo_sw1;
363365      }
364366      case 0x0044/2:
365367         /*
r14845r14846
369371                ---- ---- ---- ---x Upper Switch - 4 (active low)
370372            */
371373      {
372         state->m_ufo_sw2 = 0;
373         if(state->m_ac_devram[offset] & 0x01)
374            state->m_ufo_sw2|= 1;
375         if(state->m_ac_devram[offset] & 0x04)
376            state->m_ufo_sw2|= 2;
377         if(state->m_ac_devram[offset] & 0x10)
378            state->m_ufo_sw2|=0x10;
379         if(state->m_ac_devram[offset] & 0x40)
380            state->m_ufo_sw2|=0x20;
381         return state->m_ufo_sw2;
374         m_ufo_sw2 = 0;
375         if(m_ac_devram[offset] & 0x01)
376            m_ufo_sw2|= 1;
377         if(m_ac_devram[offset] & 0x04)
378            m_ufo_sw2|= 2;
379         if(m_ac_devram[offset] & 0x10)
380            m_ufo_sw2|=0x10;
381         if(m_ac_devram[offset] & 0x40)
382            m_ufo_sw2|=0x20;
383         return m_ufo_sw2;
382384      }
383385      case 0x0048/2:
384         return state->m_ac_devram[offset];
386         return m_ac_devram[offset];
385387      case 0x005c/2:
386388         /*
387389                xxxx xxxx ---- ---- DIPSW4
388390                ---- ---- xxxx xxxx DIPSW3
389391            */
390         return input_port_read(space->machine(), "IN1");
392         return input_port_read(machine(), "IN1");
391393   }
392   return state->m_ac_devram[offset];
394   return m_ac_devram[offset];
393395}
394396
395static WRITE16_HANDLER(ac_devices_w)
397WRITE16_MEMBER(acommand_state::ac_devices_w)
396398{
397   acommand_state *state = space->machine().driver_data<acommand_state>();
398   COMBINE_DATA(&state->m_ac_devram[offset]);
399   COMBINE_DATA(&m_ac_devram[offset]);
399400   switch(offset)
400401   {
401402      case 0x00/2:
402403         if (ACCESSING_BITS_0_7)
403404         {
404            okim6295_device *oki1 = space->machine().device<okim6295_device>("oki1");
405            okim6295_device *oki2 = space->machine().device<okim6295_device>("oki2");
405            okim6295_device *oki1 = machine().device<okim6295_device>("oki1");
406            okim6295_device *oki2 = machine().device<okim6295_device>("oki2");
406407            oki1->set_bank_base(0x40000 * (data & 0x3));
407408            oki2->set_bank_base(0x40000 * (data & 0x30) >> 4);
408409         }
r14845r14846
411412      case 0x16/2:
412413         if(ACCESSING_BITS_0_7)
413414         {
414            okim6295_device *oki1 = space->machine().device<okim6295_device>("oki1");
415            oki1->write(*space,0,data);
415            okim6295_device *oki1 = machine().device<okim6295_device>("oki1");
416            oki1->write(*&space,0,data);
416417         }
417418         break;
418419      case 0x18/2:
419420      case 0x1a/2:
420421         if(ACCESSING_BITS_0_7)
421422         {
422            okim6295_device *oki2 = space->machine().device<okim6295_device>("oki2");
423            oki2->write(*space,0,data);
423            okim6295_device *oki2 = machine().device<okim6295_device>("oki2");
424            oki2->write(*&space,0,data);
424425         }
425426         break;
426427      case 0x1c/2:
r14845r14846
433434      case 0x48/2:
434435         break;
435436      case 0x50/2:
436         state->m_led0 = state->m_ac_devram[offset];
437         //popmessage("%04x",state->m_led0);
437         m_led0 = m_ac_devram[offset];
438         //popmessage("%04x",m_led0);
438439         break;
439440      case 0x54/2:
440         state->m_led1 = state->m_ac_devram[offset];
441         //popmessage("%04x",state->m_led0);
441         m_led1 = m_ac_devram[offset];
442         //popmessage("%04x",m_led0);
442443         break;
443444   }
444445}
445446
446447/*This is always zero ATM*/
447static WRITE16_HANDLER(ac_unk2_w)
448WRITE16_MEMBER(acommand_state::ac_unk2_w)
448449{
449450   if(data)
450451      popmessage("UNK-2 enabled %04x",data);
r14845r14846
452453
453454static ADDRESS_MAP_START( acommand_map, AS_PROGRAM, 16, acommand_state )
454455   AM_RANGE(0x000000, 0x03ffff) AM_ROM
455   AM_RANGE(0x082000, 0x082005) AM_WRITE_LEGACY(ac_bgscroll_w)
456   AM_RANGE(0x082100, 0x082105) AM_WRITE_LEGACY(ac_txscroll_w)
457   AM_RANGE(0x082208, 0x082209) AM_WRITE_LEGACY(ac_unk2_w)
458   AM_RANGE(0x0a0000, 0x0a3fff) AM_RAM_WRITE_LEGACY(ac_bgvram_w) AM_BASE(m_ac_bgvram)
459   AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE_LEGACY(ac_txvram_w) AM_BASE(m_ac_txvram)
456   AM_RANGE(0x082000, 0x082005) AM_WRITE(ac_bgscroll_w)
457   AM_RANGE(0x082100, 0x082105) AM_WRITE(ac_txscroll_w)
458   AM_RANGE(0x082208, 0x082209) AM_WRITE(ac_unk2_w)
459   AM_RANGE(0x0a0000, 0x0a3fff) AM_RAM_WRITE(ac_bgvram_w) AM_BASE(m_ac_bgvram)
460   AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE(ac_txvram_w) AM_BASE(m_ac_txvram)
460461   AM_RANGE(0x0b8000, 0x0bffff) AM_RAM_WRITE_LEGACY(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
461462   AM_RANGE(0x0f0000, 0x0f7fff) AM_RAM
462463   AM_RANGE(0x0f8000, 0x0f8fff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
463464   AM_RANGE(0x0f9000, 0x0fffff) AM_RAM
464   AM_RANGE(0x100000, 0x1000ff) AM_READ_LEGACY(ac_devices_r) AM_WRITE_LEGACY(ac_devices_w) AM_BASE(m_ac_devram)
465   AM_RANGE(0x100000, 0x1000ff) AM_READ(ac_devices_r) AM_WRITE(ac_devices_w) AM_BASE(m_ac_devram)
465466ADDRESS_MAP_END
466467
467468static INPUT_PORTS_START( acommand )
src/mame/drivers/goldnpkr.c
r14845r14846
966966   tilemap_t *m_bg_tilemap;
967967   UINT8 m_mux_data;
968968   UINT8 m_pia0_PA_data;
969   DECLARE_WRITE8_MEMBER(goldnpkr_videoram_w);
970   DECLARE_WRITE8_MEMBER(goldnpkr_colorram_w);
969971};
970972
971973
r14845r14846
974976*********************************************/
975977
976978
977static WRITE8_HANDLER( goldnpkr_videoram_w )
979WRITE8_MEMBER(goldnpkr_state::goldnpkr_videoram_w)
978980{
979   goldnpkr_state *state = space->machine().driver_data<goldnpkr_state>();
980   state->m_videoram[offset] = data;
981   state->m_bg_tilemap->mark_tile_dirty(offset);
981   m_videoram[offset] = data;
982   m_bg_tilemap->mark_tile_dirty(offset);
982983}
983984
984static WRITE8_HANDLER( goldnpkr_colorram_w )
985WRITE8_MEMBER(goldnpkr_state::goldnpkr_colorram_w)
985986{
986   goldnpkr_state *state = space->machine().driver_data<goldnpkr_state>();
987   state->m_colorram[offset] = data;
988   state->m_bg_tilemap->mark_tile_dirty(offset);
987   m_colorram[offset] = data;
988   m_bg_tilemap->mark_tile_dirty(offset);
989989}
990990
991991static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
13451345   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
13461346   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
13471347   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1348   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1349   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1348   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1349   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
13501350   AM_RANGE(0x2000, 0x7fff) AM_ROM /* superdbl uses 0x2000..0x3fff address space */
13511351ADDRESS_MAP_END
13521352
r14845r14846
13571357   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
13581358   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
13591359   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1360   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1361   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1360   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1361   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
13621362   AM_RANGE(0x2000, 0x3fff) AM_ROM
13631363ADDRESS_MAP_END
13641364
r14845r14846
13691369   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
13701370   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
13711371   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1372   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1373   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1372   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1373   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
13741374   AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SW2")
13751375//  AM_RANGE(0x2108, 0x210b) AM_NOP /* unknown 40-pin device */
13761376   AM_RANGE(0x2800, 0x2fff) AM_RAM
r14845r14846
13941394   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")   /* battery backed RAM */
13951395   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
13961396   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1397   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1398   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1397   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1398   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
13991399   AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SW2")
14001400   AM_RANGE(0x2100, 0x2100) AM_DEVWRITE("crtc", mc6845_device, address_w)
14011401   AM_RANGE(0x2101, 0x2101) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
r14845r14846
14091409   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
14101410   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
14111411   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1412   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1413   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1412   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1413   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
14141414   AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SW2")
14151415   AM_RANGE(0x2200, 0x27ff) AM_ROM   /* for VK set */
14161416   AM_RANGE(0x2800, 0x2fff) AM_RAM   /* for VK set */
r14845r14846
14301430   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
14311431   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
14321432   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1433   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1434   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1433   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1434   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
14351435   AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SW2")
14361436   AM_RANGE(0x2200, 0x27ff) AM_ROM   /* for VK hardware */
14371437   AM_RANGE(0x2800, 0x2fff) AM_RAM   AM_SHARE("nvram")   /* Dallas ds1210 + battery backed RAM */
r14845r14846
14491449   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")   /* battery backed RAM */
14501450   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
14511451   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1452   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1453   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1452   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1453   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
14541454   AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SW2")
14551455   AM_RANGE(0x2100, 0x2100) AM_DEVWRITE("crtc", mc6845_device, address_w)
14561456   AM_RANGE(0x2101, 0x2101) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
r14845r14846
14841484   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
14851485   AM_RANGE(0x0844, 0x0847) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
14861486   AM_RANGE(0x0848, 0x084b) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1487   AM_RANGE(0x1000, 0x17ff) AM_RAM_WRITE_LEGACY(goldnpkr_videoram_w) AM_BASE(m_videoram)
1488   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE_LEGACY(goldnpkr_colorram_w) AM_BASE(m_colorram)
1487   AM_RANGE(0x1000, 0x17ff) AM_RAM_WRITE(goldnpkr_videoram_w) AM_BASE(m_videoram)
1488   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(goldnpkr_colorram_w) AM_BASE(m_colorram)
14891489   AM_RANGE(0x2000, 0x3fff) AM_ROM
14901490ADDRESS_MAP_END
14911491
src/mame/drivers/ppmast93.c
r14845r14846
146146   tilemap_t *m_bg_tilemap;
147147   UINT8 *m_fgram;
148148   UINT8 *m_bgram;
149   DECLARE_WRITE8_MEMBER(ppmast93_fgram_w);
150   DECLARE_WRITE8_MEMBER(ppmast93_bgram_w);
151   DECLARE_WRITE8_MEMBER(ppmast93_port4_w);
152   DECLARE_WRITE8_MEMBER(ppmast_sound_w);
149153};
150154
151155
152156
153157
154static WRITE8_HANDLER( ppmast93_fgram_w )
158WRITE8_MEMBER(ppmast93_state::ppmast93_fgram_w)
155159{
156   ppmast93_state *state = space->machine().driver_data<ppmast93_state>();
157   state->m_fgram[offset] = data;
158   state->m_fg_tilemap->mark_tile_dirty(offset/2);
160   m_fgram[offset] = data;
161   m_fg_tilemap->mark_tile_dirty(offset/2);
159162}
160163
161static WRITE8_HANDLER( ppmast93_bgram_w )
164WRITE8_MEMBER(ppmast93_state::ppmast93_bgram_w)
162165{
163   ppmast93_state *state = space->machine().driver_data<ppmast93_state>();
164   state->m_bgram[offset] = data;
165   state->m_bg_tilemap->mark_tile_dirty(offset/2);
166   m_bgram[offset] = data;
167   m_bg_tilemap->mark_tile_dirty(offset/2);
166168}
167169
168static WRITE8_HANDLER( ppmast93_port4_w )
170WRITE8_MEMBER(ppmast93_state::ppmast93_port4_w)
169171{
170   UINT8 *rom = space->machine().region("maincpu")->base();
172   UINT8 *rom = machine().region("maincpu")->base();
171173   int bank;
172174
173   coin_counter_w(space->machine(), 0, data & 0x08);
174   coin_counter_w(space->machine(), 1, data & 0x10);
175   coin_counter_w(machine(), 0, data & 0x08);
176   coin_counter_w(machine(), 1, data & 0x10);
175177
176178   bank = data & 0x07;
177   memory_set_bankptr(space->machine(), "bank1",&rom[0x10000+(bank*0x4000)]);
179   memory_set_bankptr(machine(), "bank1",&rom[0x10000+(bank*0x4000)]);
178180}
179181
180182static ADDRESS_MAP_START( ppmast93_cpu1_map, AS_PROGRAM, 8, ppmast93_state )
181183   AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP AM_REGION("maincpu", 0x10000)
182184   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
183   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(ppmast93_bgram_w) AM_BASE(m_bgram) AM_SHARE("share1")
185   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(ppmast93_bgram_w) AM_BASE(m_bgram) AM_SHARE("share1")
184186   AM_RANGE(0xd800, 0xdfff) AM_WRITENOP
185   AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE_LEGACY(ppmast93_fgram_w) AM_BASE(m_fgram) AM_SHARE("share2")
187   AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(ppmast93_fgram_w) AM_BASE(m_fgram) AM_SHARE("share2")
186188   AM_RANGE(0xf800, 0xffff) AM_RAM
187189ADDRESS_MAP_END
188190
r14845r14846
195197   AM_RANGE(0x08, 0x08) AM_READ_PORT("DSW2")
196198
197199   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(soundlatch_w)
198   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(ppmast93_port4_w)
200   AM_RANGE(0x04, 0x04) AM_WRITE(ppmast93_port4_w)
199201ADDRESS_MAP_END
200202
201203static ADDRESS_MAP_START( ppmast93_cpu2_map, AS_PROGRAM, 8, ppmast93_state )
r14845r14846
205207ADDRESS_MAP_END
206208
207209
208static WRITE8_HANDLER(ppmast_sound_w)
210WRITE8_MEMBER(ppmast93_state::ppmast_sound_w)
209211{
210212   switch(offset&0xff)
211213   {
212214      case 0:
213      case 1: ym2413_w(space->machine().device("ymsnd"),offset,data); break;
214      case 2: dac_data_w(space->machine().device("dac"),data);break;
215      default: logerror("%x %x - %x\n",offset,data,cpu_get_previouspc(&space->device()));
215      case 1: ym2413_w(machine().device("ymsnd"),offset,data); break;
216      case 2: dac_data_w(machine().device("dac"),data);break;
217      default: logerror("%x %x - %x\n",offset,data,cpu_get_previouspc(&space.device()));
216218   }
217219}
218220
219221static ADDRESS_MAP_START( ppmast93_cpu2_io, AS_IO, 8, ppmast93_state )
220     AM_RANGE(0x0000, 0xffff) AM_ROM AM_WRITE_LEGACY(ppmast_sound_w) AM_REGION("sub", 0x20000)
222     AM_RANGE(0x0000, 0xffff) AM_ROM AM_WRITE(ppmast_sound_w) AM_REGION("sub", 0x20000)
221223ADDRESS_MAP_END
222224
223225static INPUT_PORTS_START( ppmast93 )
src/mame/drivers/eolith16.c
r14845r14846
2424
2525   UINT16 *m_vram;
2626   int m_vbuffer;
27   DECLARE_WRITE16_MEMBER(eeprom_w);
28   DECLARE_READ16_MEMBER(eolith16_custom_r);
29   DECLARE_WRITE16_MEMBER(vram_w);
30   DECLARE_READ16_MEMBER(vram_r);
2731};
2832
2933
r14845r14846
4044   "*10011xxxxxx"   // unlock       100 11xxxxxxx
4145};
4246
43static WRITE16_HANDLER( eeprom_w )
47WRITE16_MEMBER(eolith16_state::eeprom_w)
4448{
45   eolith16_state *state = space->machine().driver_data<eolith16_state>();
46   state->m_vbuffer = (data & 0x80) >> 7;
47   coin_counter_w(space->machine(), 0, data & 1);
49   m_vbuffer = (data & 0x80) >> 7;
50   coin_counter_w(machine(), 0, data & 1);
4851
49   input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
52   input_port_write(machine(), "EEPROMOUT", data, 0xff);
5053
5154   //data & 0x100 and data & 0x004 always set
5255}
5356
54static READ16_HANDLER( eolith16_custom_r )
57READ16_MEMBER(eolith16_state::eolith16_custom_r)
5558{
56   eolith_speedup_read(space);
57   return input_port_read(space->machine(), "SPECIAL");
59   eolith_speedup_read(&space);
60   return input_port_read(machine(), "SPECIAL");
5861}
5962
6063
6164
62static WRITE16_HANDLER( vram_w )
65WRITE16_MEMBER(eolith16_state::vram_w)
6366{
64   eolith16_state *state = space->machine().driver_data<eolith16_state>();
65   COMBINE_DATA(&state->m_vram[offset + (0x10000/2) * state->m_vbuffer]);
67   COMBINE_DATA(&m_vram[offset + (0x10000/2) * m_vbuffer]);
6668}
6769
68static READ16_HANDLER( vram_r )
70READ16_MEMBER(eolith16_state::vram_r)
6971{
70   eolith16_state *state = space->machine().driver_data<eolith16_state>();
71   return state->m_vram[offset + (0x10000/2) * state->m_vbuffer];
72   return m_vram[offset + (0x10000/2) * m_vbuffer];
7273}
7374
7475static ADDRESS_MAP_START( eolith16_map, AS_PROGRAM, 16, eolith16_state )
7576   AM_RANGE(0x00000000, 0x001fffff) AM_RAM
76   AM_RANGE(0x50000000, 0x5000ffff) AM_READWRITE_LEGACY(vram_r, vram_w)
77   AM_RANGE(0x50000000, 0x5000ffff) AM_READWRITE(vram_r, vram_w)
7778   AM_RANGE(0x90000000, 0x9000002f) AM_WRITENOP //?
7879   AM_RANGE(0xff000000, 0xff1fffff) AM_ROM AM_REGION("user2", 0)
7980   AM_RANGE(0xffe40000, 0xffe40001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
80   AM_RANGE(0xffe80000, 0xffe80001) AM_WRITE_LEGACY(eeprom_w)
81   AM_RANGE(0xffea0000, 0xffea0001) AM_READ_LEGACY(eolith16_custom_r)
81   AM_RANGE(0xffe80000, 0xffe80001) AM_WRITE(eeprom_w)
82   AM_RANGE(0xffea0000, 0xffea0001) AM_READ(eolith16_custom_r)
8283   AM_RANGE(0xffea0002, 0xffea0003) AM_READ_PORT("SYSTEM")
8384   AM_RANGE(0xffec0000, 0xffec0001) AM_READNOP // not used?
8485   AM_RANGE(0xffec0002, 0xffec0003) AM_READ_PORT("INPUTS")
src/mame/drivers/segald.c
r14845r14846
4242   UINT8 m_ldv1000_input_latch;
4343   UINT8 m_ldv1000_output_latch;
4444
45   DECLARE_READ8_MEMBER(astron_DISC_read);
46   DECLARE_READ8_MEMBER(astron_OUT_read);
47   DECLARE_READ8_MEMBER(astron_OBJ_read);
48   DECLARE_READ8_MEMBER(astron_COLOR_read);
49   DECLARE_WRITE8_MEMBER(astron_DISC_write);
50   DECLARE_WRITE8_MEMBER(astron_OUT_write);
51   DECLARE_WRITE8_MEMBER(astron_OBJ_write);
52   DECLARE_WRITE8_MEMBER(astron_COLOR_write);
53   DECLARE_WRITE8_MEMBER(astron_FIX_write);
54   DECLARE_WRITE8_MEMBER(astron_io_bankswitch_w);
4555};
4656
4757/* VIDEO GOODS */
r14845r14846
104114
105115/* MEMORY HANDLERS */
106116/* READS */
107static READ8_HANDLER( astron_DISC_read )
117READ8_MEMBER(segald_state::astron_DISC_read)
108118{
109   segald_state *state = space->machine().driver_data<segald_state>();
110119
111   if (state->m_nmi_enable)
112      state->m_ldv1000_input_latch = state->m_laserdisc->status_r();
120   if (m_nmi_enable)
121      m_ldv1000_input_latch = m_laserdisc->status_r();
113122
114   logerror("DISC read   (0x%04x) @ 0x%04x [0x%x]\n", state->m_ldv1000_input_latch, offset, cpu_get_pc(&space->device()));
123   logerror("DISC read   (0x%04x) @ 0x%04x [0x%x]\n", m_ldv1000_input_latch, offset, cpu_get_pc(&space.device()));
115124
116   return state->m_ldv1000_input_latch;
125   return m_ldv1000_input_latch;
117126}
118127
119static READ8_HANDLER( astron_OUT_read )
128READ8_MEMBER(segald_state::astron_OUT_read)
120129{
121   segald_state *state = space->machine().driver_data<segald_state>();
122130
123   logerror("OUT read   (0x%04x) @ 0x%04x [0x%x]\n", state->m_out_RAM[offset], offset, cpu_get_pc(&space->device()));
124   return state->m_out_RAM[offset];
131   logerror("OUT read   (0x%04x) @ 0x%04x [0x%x]\n", m_out_RAM[offset], offset, cpu_get_pc(&space.device()));
132   return m_out_RAM[offset];
125133}
126134
127static READ8_HANDLER( astron_OBJ_read )
135READ8_MEMBER(segald_state::astron_OBJ_read)
128136{
129   segald_state *state = space->machine().driver_data<segald_state>();
130137
131   logerror("OBJ read   (0x%04x) @ 0x%04x [0x%x]\n", state->m_obj_RAM[offset], offset, cpu_get_pc(&space->device()));
132   return state->m_obj_RAM[offset];
138   logerror("OBJ read   (0x%04x) @ 0x%04x [0x%x]\n", m_obj_RAM[offset], offset, cpu_get_pc(&space.device()));
139   return m_obj_RAM[offset];
133140}
134141
135static READ8_HANDLER( astron_COLOR_read )
142READ8_MEMBER(segald_state::astron_COLOR_read)
136143{
137   segald_state *state = space->machine().driver_data<segald_state>();
138144
139   logerror("COLOR read   (0x%04x) @ 0x%04x [0x%x]\n", state->m_color_RAM[offset], offset, cpu_get_pc(&space->device()));
140   return state->m_color_RAM[offset];
145   logerror("COLOR read   (0x%04x) @ 0x%04x [0x%x]\n", m_color_RAM[offset], offset, cpu_get_pc(&space.device()));
146   return m_color_RAM[offset];
141147}
142148
143149
144150/* WRITES */
145static WRITE8_HANDLER( astron_DISC_write )
151WRITE8_MEMBER(segald_state::astron_DISC_write)
146152{
147   segald_state *state = space->machine().driver_data<segald_state>();
148153
149   logerror("DISC write : 0x%04x @  0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space->device()));
154   logerror("DISC write : 0x%04x @  0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space.device()));
150155
151   state->m_ldv1000_output_latch = data;
156   m_ldv1000_output_latch = data;
152157
153   if (state->m_nmi_enable)
154      state->m_laserdisc->data_w(state->m_ldv1000_output_latch);
158   if (m_nmi_enable)
159      m_laserdisc->data_w(m_ldv1000_output_latch);
155160}
156161
157static WRITE8_HANDLER( astron_OUT_write )
162WRITE8_MEMBER(segald_state::astron_OUT_write)
158163{
159   segald_state *state = space->machine().driver_data<segald_state>();
160164
161   logerror("OUT write : 0x%04x @  0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space->device()));
165   logerror("OUT write : 0x%04x @  0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space.device()));
162166
163167   switch(offset)
164168   {
r14845r14846
176180         /* data & 0x10 = Continue Lamp */
177181
178182         /* data & 0x20 = CHC           */
179         state->m_nmi_enable = data & 0x40;      /* NMIE */
183         m_nmi_enable = data & 0x40;      /* NMIE */
180184         /* data & 0x80 = CN0 Pin 19    */
181185         break;
182186
r14845r14846
189193         break;
190194   }
191195
192   state->m_out_RAM[offset] = data;
196   m_out_RAM[offset] = data;
193197}
194198
195static WRITE8_HANDLER( astron_OBJ_write )
199WRITE8_MEMBER(segald_state::astron_OBJ_write)
196200{
197   segald_state *state = space->machine().driver_data<segald_state>();
198201
199   state->m_obj_RAM[offset] = data;
200   logerror("OBJ write : 0x%04x @ 0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space->device()));
202   m_obj_RAM[offset] = data;
203   logerror("OBJ write : 0x%04x @ 0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space.device()));
201204}
202205
203static WRITE8_HANDLER( astron_COLOR_write )
206WRITE8_MEMBER(segald_state::astron_COLOR_write)
204207{
205   segald_state *state = space->machine().driver_data<segald_state>();
206208   UINT8 r, g, b, a;
207209   UINT8 highBits, lowBits;
208210   const UINT8 palIndex = offset >> 1;
209211
210212   /* Combine */
211   state->m_color_RAM[offset] = data;
213   m_color_RAM[offset] = data;
212214
213215   /* Easy access */
214   highBits = state->m_color_RAM[(palIndex<<1)+1] & 0x0f;
215   lowBits  = state->m_color_RAM[(palIndex<<1)];
216   highBits = m_color_RAM[(palIndex<<1)+1] & 0x0f;
217   lowBits  = m_color_RAM[(palIndex<<1)];
216218
217219   /* 4-bit RGB */
218220   r = (lowBits  & 0x0f);
r14845r14846
220222   b = (highBits & 0x0f);
221223   a = (highBits & 0x80) ? 0 : 255;
222224
223   palette_set_color(space->machine(), palIndex, MAKE_ARGB(a, r, g, b));
224   logerror("COLOR write : 0x%04x @   0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space->device()));
225   palette_set_color(machine(), palIndex, MAKE_ARGB(a, r, g, b));
226   logerror("COLOR write : 0x%04x @   0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space.device()));
225227}
226228
227static WRITE8_HANDLER( astron_FIX_write )
229WRITE8_MEMBER(segald_state::astron_FIX_write)
228230{
229   segald_state *state = space->machine().driver_data<segald_state>();
230231
231   state->m_fix_RAM[offset] = data;
232   /* logerror("FIX write : 0x%04x @ 0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space->device())); */
232   m_fix_RAM[offset] = data;
233   /* logerror("FIX write : 0x%04x @ 0x%04x [0x%x]\n", data, offset, cpu_get_pc(&space.device())); */
233234}
234235
235static WRITE8_HANDLER( astron_io_bankswitch_w )
236WRITE8_MEMBER(segald_state::astron_io_bankswitch_w)
236237{
237238   logerror("Banking 0x%x\n", data);
238   memory_set_bank(space->machine(), "bank1", data & 0xff);
239   memory_set_bank(machine(), "bank1", data & 0xff);
239240}
240241
241242
r14845r14846
246247   AM_RANGE(0x0000, 0x7fff) AM_ROM
247248   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
248249
249   AM_RANGE(0xc000, 0xc7ff) AM_READWRITE_LEGACY(astron_OBJ_read, astron_OBJ_write) AM_BASE(m_obj_RAM)   /* OBJ according to the schematics (sprite) */
250   AM_RANGE(0xc800, 0xcfff) AM_READWRITE_LEGACY(astron_DISC_read, astron_DISC_write)               /* DISC interface according to schematics */
250   AM_RANGE(0xc000, 0xc7ff) AM_READWRITE(astron_OBJ_read, astron_OBJ_write) AM_BASE(m_obj_RAM)   /* OBJ according to the schematics (sprite) */
251   AM_RANGE(0xc800, 0xcfff) AM_READWRITE(astron_DISC_read, astron_DISC_write)               /* DISC interface according to schematics */
251252   AM_RANGE(0xd000, 0xd000) AM_READ_PORT("DSWA")                        /* SW bank 2 (DIPs) */
252253   AM_RANGE(0xd001, 0xd001) AM_READ_PORT("DSWB")                        /* SW bank 3 (DIPs) */
253254   AM_RANGE(0xd002, 0xd002) AM_READ_PORT("IN0")                        /* SW bank 0 (IO) */
254255   AM_RANGE(0xd003, 0xd003) AM_READ_PORT("IN1")                        /* SW bank 1 (IO) */
255   AM_RANGE(0xd800, 0xd803) AM_READWRITE_LEGACY(astron_OUT_read, astron_OUT_write) AM_BASE(m_out_RAM)   /* OUT according to schematics (output port) */
256   AM_RANGE(0xe000, 0xe1ff) AM_READWRITE_LEGACY(astron_COLOR_read, astron_COLOR_write) AM_BASE(m_color_RAM) /* COLOR according to the schematics */
257   AM_RANGE(0xf000, 0xf7ff) AM_WRITE_LEGACY(astron_FIX_write) AM_BASE(m_fix_RAM)                  /* FIX according to schematics (characters) */
256   AM_RANGE(0xd800, 0xd803) AM_READWRITE(astron_OUT_read, astron_OUT_write) AM_BASE(m_out_RAM)   /* OUT according to schematics (output port) */
257   AM_RANGE(0xe000, 0xe1ff) AM_READWRITE(astron_COLOR_read, astron_COLOR_write) AM_BASE(m_color_RAM) /* COLOR according to the schematics */
258   AM_RANGE(0xf000, 0xf7ff) AM_WRITE(astron_FIX_write) AM_BASE(m_fix_RAM)                  /* FIX according to schematics (characters) */
258259   AM_RANGE(0xf800, 0xffff) AM_RAM                                                /* RAM according to schematics */
259260ADDRESS_MAP_END
260261
r14845r14846
262263/* I/O MAP */
263264static ADDRESS_MAP_START( mainport, AS_IO, 8, segald_state )
264265   ADDRESS_MAP_GLOBAL_MASK(0xff)
265   AM_RANGE(0x00, 0x01) AM_WRITE_LEGACY(astron_io_bankswitch_w)
266   AM_RANGE(0x00, 0x01) AM_WRITE(astron_io_bankswitch_w)
266267ADDRESS_MAP_END
267268
268269
src/mame/drivers/tickee.c
r14845r14846
4242   int m_beamyadd;
4343   int m_palette_bank;
4444   UINT8 m_gunx[2];
45   DECLARE_WRITE16_MEMBER(rapidfir_transparent_w);
46   DECLARE_READ16_MEMBER(rapidfir_transparent_r);
47   DECLARE_WRITE16_MEMBER(tickee_control_w);
48   DECLARE_READ16_MEMBER(ffff_r);
49   DECLARE_READ16_MEMBER(rapidfir_gun1_r);
50   DECLARE_READ16_MEMBER(rapidfir_gun2_r);
51   DECLARE_READ16_MEMBER(ff7f_r);
52   DECLARE_WRITE16_MEMBER(ff7f_w);
53   DECLARE_WRITE16_MEMBER(rapidfir_control_w);
4554};
4655
4756
r14845r14846
225234 *
226235 *************************************/
227236
228static WRITE16_HANDLER( rapidfir_transparent_w )
237WRITE16_MEMBER(tickee_state::rapidfir_transparent_w)
229238{
230   tickee_state *state = space->machine().driver_data<tickee_state>();
231239   if (!(data & 0xff00)) mem_mask &= 0x00ff;
232240   if (!(data & 0x00ff)) mem_mask &= 0xff00;
233   COMBINE_DATA(&state->m_vram[offset]);
241   COMBINE_DATA(&m_vram[offset]);
234242}
235243
236244
237static READ16_HANDLER( rapidfir_transparent_r )
245READ16_MEMBER(tickee_state::rapidfir_transparent_r)
238246{
239   tickee_state *state = space->machine().driver_data<tickee_state>();
240   return state->m_vram[offset];
247   return m_vram[offset];
241248}
242249
243250
r14845r14846
264271 *
265272 *************************************/
266273
267static WRITE16_HANDLER( tickee_control_w )
274WRITE16_MEMBER(tickee_state::tickee_control_w)
268275{
269   tickee_state *state = space->machine().driver_data<tickee_state>();
270   UINT16 olddata = state->m_control[offset];
276   UINT16 olddata = m_control[offset];
271277
272278   /* offsets:
273279
r14845r14846
276282        6 = lamps? (changing all the time)
277283    */
278284
279   COMBINE_DATA(&state->m_control[offset]);
285   COMBINE_DATA(&m_control[offset]);
280286
281287   if (offset == 3)
282288   {
283      ticket_dispenser_w(space->machine().device("ticket1"), 0, (data & 8) << 4);
284      ticket_dispenser_w(space->machine().device("ticket2"), 0, (data & 4) << 5);
289      ticket_dispenser_w(machine().device("ticket1"), 0, (data & 8) << 4);
290      ticket_dispenser_w(machine().device("ticket2"), 0, (data & 4) << 5);
285291   }
286292
287   if (olddata != state->m_control[offset])
288      logerror("%08X:tickee_control_w(%d) = %04X (was %04X)\n", cpu_get_pc(&space->device()), offset, state->m_control[offset], olddata);
293   if (olddata != m_control[offset])
294      logerror("%08X:tickee_control_w(%d) = %04X (was %04X)\n", cpu_get_pc(&space.device()), offset, m_control[offset], olddata);
289295}
290296
291297
r14845r14846
296302 *
297303 *************************************/
298304
299static READ16_HANDLER( ffff_r )
305READ16_MEMBER(tickee_state::ffff_r)
300306{
301307   return 0xffff;
302308}
303309
304310
305static READ16_HANDLER( rapidfir_gun1_r )
311READ16_MEMBER(tickee_state::rapidfir_gun1_r)
306312{
307   tickee_state *state = space->machine().driver_data<tickee_state>();
308   return state->m_gunx[0];
313   return m_gunx[0];
309314}
310315
311316
312static READ16_HANDLER( rapidfir_gun2_r )
317READ16_MEMBER(tickee_state::rapidfir_gun2_r)
313318{
314   tickee_state *state = space->machine().driver_data<tickee_state>();
315   return state->m_gunx[1];
319   return m_gunx[1];
316320}
317321
318322
319static READ16_HANDLER( ff7f_r )
323READ16_MEMBER(tickee_state::ff7f_r)
320324{
321325   /* Ticket dispenser status? */
322326   return 0xff7f;
323327}
324328
325static WRITE16_HANDLER( ff7f_w )
329WRITE16_MEMBER(tickee_state::ff7f_w)
326330{
327331   /* Ticket dispenser output? */
328332}
329333
330static WRITE16_HANDLER( rapidfir_control_w )
334WRITE16_MEMBER(tickee_state::rapidfir_control_w)
331335{
332   tickee_state *state = space->machine().driver_data<tickee_state>();
333336   /* other bits like control on tickee? */
334337   if (ACCESSING_BITS_0_7)
335      state->m_palette_bank = data & 1;
338      m_palette_bank = data & 1;
336339}
337340
338341
r14845r14846
386389   AM_RANGE(0x04200000, 0x0420001f) AM_DEVWRITE8_LEGACY("ym1", ay8910_address_data_w, 0x00ff)
387390   AM_RANGE(0x04200100, 0x0420010f) AM_DEVREAD8_LEGACY("ym2", ay8910_r, 0x00ff)
388391   AM_RANGE(0x04200100, 0x0420011f) AM_DEVWRITE8_LEGACY("ym2", ay8910_address_data_w, 0x00ff)
389   AM_RANGE(0x04400000, 0x0440007f) AM_WRITE_LEGACY(tickee_control_w) AM_BASE(m_control)
392   AM_RANGE(0x04400000, 0x0440007f) AM_WRITE(tickee_control_w) AM_BASE(m_control)
390393   AM_RANGE(0x04400040, 0x0440004f) AM_READ_PORT("IN2")
391394   AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w)
392395   AM_RANGE(0xc0000240, 0xc000025f) AM_WRITENOP      /* seems to be a bug in their code */
r14845r14846
404407   AM_RANGE(0x04300000, 0x0430001f) AM_DEVWRITE8_LEGACY("ym1", ay8910_address_data_w, 0x00ff)
405408   AM_RANGE(0x04300100, 0x0430010f) AM_DEVREAD8_LEGACY("ym2", ay8910_r, 0x00ff)
406409   AM_RANGE(0x04300100, 0x0430011f) AM_DEVWRITE8_LEGACY("ym2", ay8910_address_data_w, 0x00ff)
407   AM_RANGE(0x04500000, 0x0450007f) AM_WRITE_LEGACY(tickee_control_w) AM_BASE(m_control)
410   AM_RANGE(0x04500000, 0x0450007f) AM_WRITE(tickee_control_w) AM_BASE(m_control)
408411   AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w)
409412   AM_RANGE(0xc0000240, 0xc000025f) AM_WRITENOP      /* seems to be a bug in their code */
410413   AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION("user1", 0)
r14845r14846
419422   AM_RANGE(0x04200000, 0x0420000f) AM_DEVREAD8_LEGACY("ym", ay8910_r, 0x00ff)
420423   AM_RANGE(0x04200000, 0x0420000f) AM_DEVWRITE8_LEGACY("ym", ay8910_address_data_w, 0x00ff)
421424   AM_RANGE(0x04200100, 0x0420010f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
422   AM_RANGE(0x04400000, 0x0440007f) AM_WRITE_LEGACY(tickee_control_w) AM_BASE(m_control)
425   AM_RANGE(0x04400000, 0x0440007f) AM_WRITE(tickee_control_w) AM_BASE(m_control)
423426   AM_RANGE(0x04400040, 0x0440004f) AM_READ_PORT("IN2") // ?
424427   AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w)
425428   AM_RANGE(0xc0000240, 0xc000025f) AM_WRITENOP      /* seems to be a bug in their code */
r14845r14846
430433/* newer hardware */
431434static ADDRESS_MAP_START( rapidfir_map, AS_PROGRAM, 16, tickee_state )
432435   AM_RANGE(0x00000000, 0x007fffff) AM_RAM AM_BASE(m_vram)
433   AM_RANGE(0x02000000, 0x027fffff) AM_READWRITE_LEGACY(rapidfir_transparent_r, rapidfir_transparent_w)
436   AM_RANGE(0x02000000, 0x027fffff) AM_READWRITE(rapidfir_transparent_r, rapidfir_transparent_w)
434437   AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w)
435   AM_RANGE(0xfc000000, 0xfc00000f) AM_READ_LEGACY(rapidfir_gun1_r)
436   AM_RANGE(0xfc000100, 0xfc00010f) AM_READ_LEGACY(rapidfir_gun2_r)
437   AM_RANGE(0xfc000400, 0xfc00040f) AM_READ_LEGACY(ffff_r)
438   AM_RANGE(0xfc000000, 0xfc00000f) AM_READ(rapidfir_gun1_r)
439   AM_RANGE(0xfc000100, 0xfc00010f) AM_READ(rapidfir_gun2_r)
440   AM_RANGE(0xfc000400, 0xfc00040f) AM_READ(ffff_r)
438441   AM_RANGE(0xfc000500, 0xfc00050f) AM_NOP
439   AM_RANGE(0xfc000600, 0xfc00060f) AM_WRITE_LEGACY(rapidfir_control_w)
442   AM_RANGE(0xfc000600, 0xfc00060f) AM_WRITE(rapidfir_control_w)
440443   AM_RANGE(0xfc000700, 0xfc00070f) AM_DEVWRITE_LEGACY("oki", sound_bank_w)
441444   AM_RANGE(0xfc000800, 0xfc00080f) AM_READ_PORT("IN0")
442445   AM_RANGE(0xfc000900, 0xfc00090f) AM_READ_PORT("IN1")
r14845r14846
447450   AM_RANGE(0xfc100000, 0xfc1000ff) AM_MIRROR(0x80000) AM_DEVREADWRITE8_LEGACY("tlc34076", tlc34076_r, tlc34076_w, 0x00ff)
448451   AM_RANGE(0xfc200000, 0xfc207fff) AM_RAM AM_SHARE("nvram")
449452   AM_RANGE(0xfc300000, 0xfc30000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
450   AM_RANGE(0xfc400010, 0xfc40001f) AM_READWRITE_LEGACY(ff7f_r, ff7f_w)
453   AM_RANGE(0xfc400010, 0xfc40001f) AM_READWRITE(ff7f_r, ff7f_w)
451454   AM_RANGE(0xfe000000, 0xffffffff) AM_ROM AM_REGION("user1", 0)
452455ADDRESS_MAP_END
453456
src/mame/drivers/srmp5.c
r14845r14846
8282#ifdef DEBUG_CHAR
8383   UINT8 m_tileduty[0x2000];
8484#endif
85   DECLARE_READ32_MEMBER(srmp5_palette_r);
86   DECLARE_WRITE32_MEMBER(srmp5_palette_w);
87   DECLARE_WRITE32_MEMBER(bank_w);
88   DECLARE_READ32_MEMBER(tileram_r);
89   DECLARE_WRITE32_MEMBER(tileram_w);
90   DECLARE_READ32_MEMBER(spr_r);
91   DECLARE_WRITE32_MEMBER(spr_w);
92   DECLARE_READ32_MEMBER(data_r);
93   DECLARE_WRITE32_MEMBER(input_select_w);
94   DECLARE_READ32_MEMBER(srmp5_inputs_r);
95   DECLARE_WRITE32_MEMBER(cmd1_w);
96   DECLARE_WRITE32_MEMBER(cmd2_w);
97   DECLARE_READ32_MEMBER(cmd_stat32_r);
98   DECLARE_READ32_MEMBER(srmp5_vidregs_r);
99   DECLARE_WRITE32_MEMBER(srmp5_vidregs_w);
100   DECLARE_READ32_MEMBER(irq_ack_clear);
101   DECLARE_READ8_MEMBER(cmd1_r);
102   DECLARE_READ8_MEMBER(cmd2_r);
103   DECLARE_READ8_MEMBER(cmd_stat8_r);
85104};
86105
87106
r14845r14846
201220   return 0;
202221}
203222
204static READ32_HANDLER(srmp5_palette_r)
223READ32_MEMBER(srmp5_state::srmp5_palette_r)
205224{
206   srmp5_state *state = space->machine().driver_data<srmp5_state>();
207225
208   return state->m_palram[offset];
226   return m_palram[offset];
209227}
210228
211static WRITE32_HANDLER(srmp5_palette_w)
229WRITE32_MEMBER(srmp5_state::srmp5_palette_w)
212230{
213   srmp5_state *state = space->machine().driver_data<srmp5_state>();
214231
215   COMBINE_DATA(&state->m_palram[offset]);
216   palette_set_color(space->machine(), offset, MAKE_RGB(data << 3 & 0xFF, data >> 2 & 0xFF, data >> 7 & 0xFF));
232   COMBINE_DATA(&m_palram[offset]);
233   palette_set_color(machine(), offset, MAKE_RGB(data << 3 & 0xFF, data >> 2 & 0xFF, data >> 7 & 0xFF));
217234}
218static WRITE32_HANDLER(bank_w)
235WRITE32_MEMBER(srmp5_state::bank_w)
219236{
220   srmp5_state *state = space->machine().driver_data<srmp5_state>();
221237
222   COMBINE_DATA(&state->m_databank);
238   COMBINE_DATA(&m_databank);
223239}
224240
225static READ32_HANDLER(tileram_r)
241READ32_MEMBER(srmp5_state::tileram_r)
226242{
227   srmp5_state *state = space->machine().driver_data<srmp5_state>();
228243
229   return state->m_tileram[offset];
244   return m_tileram[offset];
230245}
231246
232static WRITE32_HANDLER(tileram_w)
247WRITE32_MEMBER(srmp5_state::tileram_w)
233248{
234   srmp5_state *state = space->machine().driver_data<srmp5_state>();
235249
236   state->m_tileram[offset] = data & 0xFFFF; //lower 16bit only
250   m_tileram[offset] = data & 0xFFFF; //lower 16bit only
237251#ifdef DEBUG_CHAR
238   state->m_tileduty[offset >> 6] = 1;
252   m_tileduty[offset >> 6] = 1;
239253#endif
240254}
241255
242static READ32_HANDLER(spr_r)
256READ32_MEMBER(srmp5_state::spr_r)
243257{
244   srmp5_state *state = space->machine().driver_data<srmp5_state>();
245258
246   return state->m_sprram[offset];
259   return m_sprram[offset];
247260}
248261
249static WRITE32_HANDLER(spr_w)
262WRITE32_MEMBER(srmp5_state::spr_w)
250263{
251   srmp5_state *state = space->machine().driver_data<srmp5_state>();
252264
253   state->m_sprram[offset] = data & 0xFFFF; //lower 16bit only
265   m_sprram[offset] = data & 0xFFFF; //lower 16bit only
254266}
255267
256static READ32_HANDLER(data_r)
268READ32_MEMBER(srmp5_state::data_r)
257269{
258   srmp5_state *state = space->machine().driver_data<srmp5_state>();
259270   UINT32 data;
260   const UINT8 *usr = space->machine().region("user2")->base();
271   const UINT8 *usr = machine().region("user2")->base();
261272
262   data=((state->m_databank>>4)&0xf)*0x100000; //guess
273   data=((m_databank>>4)&0xf)*0x100000; //guess
263274   data=usr[data+offset*2]+usr[data+offset*2+1]*256;
264275   return data|(data<<16);
265276}
266277
267static WRITE32_HANDLER(input_select_w)
278WRITE32_MEMBER(srmp5_state::input_select_w)
268279{
269   srmp5_state *state = space->machine().driver_data<srmp5_state>();
270280
271   state->m_input_select = data & 0x0F;
281   m_input_select = data & 0x0F;
272282}
273283
274static READ32_HANDLER(srmp5_inputs_r)
284READ32_MEMBER(srmp5_state::srmp5_inputs_r)
275285{
276   srmp5_state *state = space->machine().driver_data<srmp5_state>();
277286   UINT32 ret = 0;
278287
279   switch (state->m_input_select)
288   switch (m_input_select)
280289   {
281290   case 0x01:
282      ret = input_port_read(space->machine(), "IN0");
291      ret = input_port_read(machine(), "IN0");
283292      break;
284293   case 0x02:
285      ret = input_port_read(space->machine(), "IN1");
294      ret = input_port_read(machine(), "IN1");
286295      break;
287296   case 0x04:
288      ret = input_port_read(space->machine(), "IN2");
297      ret = input_port_read(machine(), "IN2");
289298      break;
290299   case 0x00:
291300   case 0x08:
292      ret = input_port_read(space->machine(), "IN3");
301      ret = input_port_read(machine(), "IN3");
293302      break;
294303   }
295304   return ret;
296305}
297306
298307//almost all cmds are sound related
299static WRITE32_HANDLER(cmd1_w)
308WRITE32_MEMBER(srmp5_state::cmd1_w)
300309{
301   srmp5_state *state = space->machine().driver_data<srmp5_state>();
302310
303   state->m_cmd1 = data & 0xFF;
311   m_cmd1 = data & 0xFF;
304312   logerror("cmd1_w %08X\n", data);
305313}
306314
307static WRITE32_HANDLER(cmd2_w)
315WRITE32_MEMBER(srmp5_state::cmd2_w)
308316{
309   srmp5_state *state = space->machine().driver_data<srmp5_state>();
310317
311   state->m_cmd2 = data & 0xFF;
312   state->m_cmd_stat = 5;
318   m_cmd2 = data & 0xFF;
319   m_cmd_stat = 5;
313320   logerror("cmd2_w %08X\n", data);
314321}
315322
316static READ32_HANDLER(cmd_stat32_r)
323READ32_MEMBER(srmp5_state::cmd_stat32_r)
317324{
318   srmp5_state *state = space->machine().driver_data<srmp5_state>();
319325
320   return state->m_cmd_stat;
326   return m_cmd_stat;
321327}
322328
323static READ32_HANDLER(srmp5_vidregs_r)
329READ32_MEMBER(srmp5_state::srmp5_vidregs_r)
324330{
325   srmp5_state *state = space->machine().driver_data<srmp5_state>();
326331
327   logerror("vidregs read  %08X %08X\n", offset << 2, state->m_vidregs[offset]);
328   return state->m_vidregs[offset];
332   logerror("vidregs read  %08X %08X\n", offset << 2, m_vidregs[offset]);
333   return m_vidregs[offset];
329334}
330335
331static WRITE32_HANDLER(srmp5_vidregs_w)
336WRITE32_MEMBER(srmp5_state::srmp5_vidregs_w)
332337{
333   srmp5_state *state = space->machine().driver_data<srmp5_state>();
334338
335   COMBINE_DATA(&state->m_vidregs[offset]);
339   COMBINE_DATA(&m_vidregs[offset]);
336340   if(offset != 0x10C / 4)
337      logerror("vidregs write %08X %08X\n", offset << 2, state->m_vidregs[offset]);
341      logerror("vidregs write %08X %08X\n", offset << 2, m_vidregs[offset]);
338342}
339343
340static READ32_HANDLER(irq_ack_clear)
344READ32_MEMBER(srmp5_state::irq_ack_clear)
341345{
342   cputag_set_input_line(space->machine(), "sub", R3000_IRQ4, CLEAR_LINE);
346   cputag_set_input_line(machine(), "sub", R3000_IRQ4, CLEAR_LINE);
343347   return 0;
344348}
345349
r14845r14846
350354   AM_RANGE(0x01800000, 0x01800003) AM_RAM //?1
351355   AM_RANGE(0x01800004, 0x01800007) AM_READ_PORT("DSW1")
352356   AM_RANGE(0x01800008, 0x0180000b) AM_READ_PORT("DSW2")
353   AM_RANGE(0x0180000c, 0x0180000f) AM_WRITE_LEGACY(bank_w)
354   AM_RANGE(0x01800010, 0x01800013) AM_READ_LEGACY(srmp5_inputs_r) //multiplexed controls (selected by writes to 1c)
357   AM_RANGE(0x0180000c, 0x0180000f) AM_WRITE(bank_w)
358   AM_RANGE(0x01800010, 0x01800013) AM_READ(srmp5_inputs_r) //multiplexed controls (selected by writes to 1c)
355359   AM_RANGE(0x01800014, 0x01800017) AM_READ_PORT("TEST")
356   AM_RANGE(0x0180001c, 0x0180001f) AM_WRITE_LEGACY(input_select_w)//c1 c2 c4 c8 => mahjong inputs (at $10) - bits 0-3
360   AM_RANGE(0x0180001c, 0x0180001f) AM_WRITE(input_select_w)//c1 c2 c4 c8 => mahjong inputs (at $10) - bits 0-3
357361   AM_RANGE(0x01800200, 0x01800203) AM_RAM  //sound related ? only few writes after boot
358   AM_RANGE(0x01802000, 0x01802003) AM_WRITE_LEGACY(cmd1_w)
359   AM_RANGE(0x01802004, 0x01802007) AM_WRITE_LEGACY(cmd2_w)
360   AM_RANGE(0x01802008, 0x0180200b) AM_READ_LEGACY(cmd_stat32_r)
361   AM_RANGE(0x01a00000, 0x01bfffff) AM_READ_LEGACY(data_r)
362   AM_RANGE(0x01802000, 0x01802003) AM_WRITE(cmd1_w)
363   AM_RANGE(0x01802004, 0x01802007) AM_WRITE(cmd2_w)
364   AM_RANGE(0x01802008, 0x0180200b) AM_READ(cmd_stat32_r)
365   AM_RANGE(0x01a00000, 0x01bfffff) AM_READ(data_r)
362366   AM_RANGE(0x01c00000, 0x01c00003) AM_READNOP // debug? 'Toru'
363367
364   AM_RANGE(0x0a000000, 0x0a0fffff) AM_READWRITE_LEGACY(spr_r, spr_w)
365   AM_RANGE(0x0a100000, 0x0a17ffff) AM_READWRITE_LEGACY(srmp5_palette_r, srmp5_palette_w)
368   AM_RANGE(0x0a000000, 0x0a0fffff) AM_READWRITE(spr_r, spr_w)
369   AM_RANGE(0x0a100000, 0x0a17ffff) AM_READWRITE(srmp5_palette_r, srmp5_palette_w)
366370   //0?N???A?????????i??????????
367371   AM_RANGE(0x0a180000, 0x0a180003) AM_READNOP // write 0x00000400
368   AM_RANGE(0x0a180000, 0x0a18011f) AM_READWRITE_LEGACY(srmp5_vidregs_r, srmp5_vidregs_w)
369   AM_RANGE(0x0a200000, 0x0a3fffff) AM_READWRITE_LEGACY(tileram_r, tileram_w)
372   AM_RANGE(0x0a180000, 0x0a18011f) AM_READWRITE(srmp5_vidregs_r, srmp5_vidregs_w)
373   AM_RANGE(0x0a200000, 0x0a3fffff) AM_READWRITE(tileram_r, tileram_w)
370374
371375   AM_RANGE(0x1eff0000, 0x1eff001f) AM_WRITEONLY
372   AM_RANGE(0x1eff003c, 0x1eff003f) AM_READ_LEGACY(irq_ack_clear)
376   AM_RANGE(0x1eff003c, 0x1eff003f) AM_READ(irq_ack_clear)
373377   AM_RANGE(0x1fc00000, 0x1fdfffff) AM_ROM AM_REGION("user1", 0)
374378   AM_RANGE(0x2fc00000, 0x2fdfffff) AM_ROM AM_REGION("user1", 0)
375379ADDRESS_MAP_END
r14845r14846
382386   AM_RANGE(0xf000, 0xffff) AM_RAM
383387ADDRESS_MAP_END
384388
385static READ8_HANDLER(cmd1_r)
389READ8_MEMBER(srmp5_state::cmd1_r)
386390{
387   srmp5_state *state = space->machine().driver_data<srmp5_state>();
388391
389   state->m_cmd_stat = 0;
390   return state->m_cmd1;
392   m_cmd_stat = 0;
393   return m_cmd1;
391394}
392395
393static READ8_HANDLER(cmd2_r)
396READ8_MEMBER(srmp5_state::cmd2_r)
394397{
395   srmp5_state *state = space->machine().driver_data<srmp5_state>();
396398
397   return state->m_cmd2;
399   return m_cmd2;
398400}
399401
400static READ8_HANDLER(cmd_stat8_r)
402READ8_MEMBER(srmp5_state::cmd_stat8_r)
401403{
402   srmp5_state *state = space->machine().driver_data<srmp5_state>();
403404
404   return state->m_cmd_stat;
405   return m_cmd_stat;
405406}
406407
407408static ADDRESS_MAP_START( st0016_io, AS_IO, 8, srmp5_state )
408409   ADDRESS_MAP_GLOBAL_MASK(0xff)
409410   AM_RANGE(0x00, 0xbf) AM_READ_LEGACY(st0016_vregs_r) AM_WRITE_LEGACY(st0016_vregs_w)
410   AM_RANGE(0xc0, 0xc0) AM_READ_LEGACY(cmd1_r)
411   AM_RANGE(0xc1, 0xc1) AM_READ_LEGACY(cmd2_r)
412   AM_RANGE(0xc2, 0xc2) AM_READ_LEGACY(cmd_stat8_r)
411   AM_RANGE(0xc0, 0xc0) AM_READ(cmd1_r)
412   AM_RANGE(0xc1, 0xc1) AM_READ(cmd2_r)
413   AM_RANGE(0xc2, 0xc2) AM_READ(cmd_stat8_r)
413414   AM_RANGE(0xe1, 0xe1) AM_WRITE_LEGACY(st0016_rom_bank_w)
414415   AM_RANGE(0xe7, 0xe7) AM_WRITE_LEGACY(st0016_rom_bank_w)
415416   AM_RANGE(0xf0, 0xf0) AM_READ_LEGACY(st0016_dma_r)
src/mame/drivers/destroyr.c
r14845r14846
3939
4040   /* devices */
4141   device_t *m_maincpu;
42   DECLARE_WRITE8_MEMBER(destroyr_misc_w);
43   DECLARE_WRITE8_MEMBER(destroyr_cursor_load_w);
44   DECLARE_WRITE8_MEMBER(destroyr_interrupt_ack_w);
45   DECLARE_WRITE8_MEMBER(destroyr_output_w);
46   DECLARE_READ8_MEMBER(destroyr_input_r);
47   DECLARE_READ8_MEMBER(destroyr_scanline_r);
4248};
4349
4450
r14845r14846
160166}
161167
162168
163static WRITE8_HANDLER( destroyr_misc_w )
169WRITE8_MEMBER(destroyr_state::destroyr_misc_w)
164170{
165   destroyr_state *state = space->machine().driver_data<destroyr_state>();
166171
167172   /* bits 0 to 2 connect to the sound circuits */
168   state->m_attract = data & 0x01;
169   state->m_noise = data & 0x02;
170   state->m_motor_speed = data & 0x04;
171   state->m_potmask[0] = data & 0x08;
172   state->m_wavemod = data & 0x10;
173   state->m_potmask[1] = data & 0x20;
173   m_attract = data & 0x01;
174   m_noise = data & 0x02;
175   m_motor_speed = data & 0x04;
176   m_potmask[0] = data & 0x08;
177   m_wavemod = data & 0x10;
178   m_potmask[1] = data & 0x20;
174179
175   coin_lockout_w(space->machine(), 0, !state->m_attract);
176   coin_lockout_w(space->machine(), 1, !state->m_attract);
180   coin_lockout_w(machine(), 0, !m_attract);
181   coin_lockout_w(machine(), 1, !m_attract);
177182}
178183
179184
180static WRITE8_HANDLER( destroyr_cursor_load_w )
185WRITE8_MEMBER(destroyr_state::destroyr_cursor_load_w)
181186{
182   destroyr_state *state = space->machine().driver_data<destroyr_state>();
183   state->m_cursor = data;
187   m_cursor = data;
184188   watchdog_reset_w(space, offset, data);
185189}
186190
187191
188static WRITE8_HANDLER( destroyr_interrupt_ack_w )
192WRITE8_MEMBER(destroyr_state::destroyr_interrupt_ack_w)
189193{
190   destroyr_state *state = space->machine().driver_data<destroyr_state>();
191   device_set_input_line(state->m_maincpu, 0, CLEAR_LINE);
194   device_set_input_line(m_maincpu, 0, CLEAR_LINE);
192195}
193196
194197
195static WRITE8_HANDLER( destroyr_output_w )
198WRITE8_MEMBER(destroyr_state::destroyr_output_w)
196199{
197200   if (offset & 8) destroyr_misc_w(space, 8, data);
198201
199202   else switch (offset & 7)
200203   {
201204   case 0:
202      set_led_status(space->machine(), 0, data & 1);
205      set_led_status(machine(), 0, data & 1);
203206      break;
204207   case 1:
205      set_led_status(space->machine(), 1, data & 1); /* no second LED present on cab */
208      set_led_status(machine(), 1, data & 1); /* no second LED present on cab */
206209      break;
207210   case 2:
208211      /* bit 0 => songate */
r14845r14846
226229}
227230
228231
229static READ8_HANDLER( destroyr_input_r )
232READ8_MEMBER(destroyr_state::destroyr_input_r)
230233{
231   destroyr_state *state = space->machine().driver_data<destroyr_state>();
232234
233235   if (offset & 1)
234236   {
235      return input_port_read(space->machine(), "IN1");
237      return input_port_read(machine(), "IN1");
236238   }
237239
238240   else
239241   {
240      UINT8 ret = input_port_read(space->machine(), "IN0");
242      UINT8 ret = input_port_read(machine(), "IN0");
241243
242      if (state->m_potsense[0] && state->m_potmask[0])
244      if (m_potsense[0] && m_potmask[0])
243245         ret |= 4;
244      if (state->m_potsense[1] && state->m_potmask[1])
246      if (m_potsense[1] && m_potmask[1])
245247         ret |= 8;
246248
247249      return ret;
r14845r14846
249251}
250252
251253
252static READ8_HANDLER( destroyr_scanline_r )
254READ8_MEMBER(destroyr_state::destroyr_scanline_r)
253255{
254   return space->machine().primary_screen->vpos();
256   return machine().primary_screen->vpos();
255257}
256258
257259
258260static ADDRESS_MAP_START( destroyr_map, AS_PROGRAM, 8, destroyr_state )
259261   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
260262   AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0xf00) AM_RAM
261   AM_RANGE(0x1000, 0x1fff) AM_READWRITE_LEGACY(destroyr_input_r, destroyr_output_w)
263   AM_RANGE(0x1000, 0x1fff) AM_READWRITE(destroyr_input_r, destroyr_output_w)
262264   AM_RANGE(0x2000, 0x2fff) AM_READ_PORT("IN2")
263265   AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0xf00) AM_WRITEONLY AM_BASE(m_alpha_num_ram)
264266   AM_RANGE(0x4000, 0x401f) AM_MIRROR(0xfe0) AM_WRITEONLY AM_BASE(m_major_obj_ram)
265   AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xff8) AM_WRITE_LEGACY(destroyr_cursor_load_w)
266   AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xff8) AM_WRITE_LEGACY(destroyr_interrupt_ack_w)
267   AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xff8) AM_WRITE(destroyr_cursor_load_w)
268   AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xff8) AM_WRITE(destroyr_interrupt_ack_w)
267269   AM_RANGE(0x5002, 0x5007) AM_MIRROR(0xff8) AM_WRITEONLY AM_BASE(m_minor_obj_ram)
268   AM_RANGE(0x6000, 0x6fff) AM_READ_LEGACY(destroyr_scanline_r)
270   AM_RANGE(0x6000, 0x6fff) AM_READ(destroyr_scanline_r)
269271   AM_RANGE(0x7000, 0x7fff) AM_ROM
270272ADDRESS_MAP_END
271273
src/mame/drivers/feversoc.c
r14845r14846
7272
7373   UINT16 m_x;
7474   UINT32 *m_spriteram;
75   DECLARE_WRITE32_MEMBER(fs_paletteram_w);
76   DECLARE_READ32_MEMBER(in0_r);
77   DECLARE_WRITE32_MEMBER(output_w);
7578};
7679
7780
r14845r14846
112115   return 0;
113116}
114117
115static WRITE32_HANDLER( fs_paletteram_w )
118WRITE32_MEMBER(feversoc_state::fs_paletteram_w)
116119{
117120   int r,g,b;
118   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
121   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
119122
120   r = ((space->machine().generic.paletteram.u32[offset] & 0x001f0000)>>16) << 3;
121   g = ((space->machine().generic.paletteram.u32[offset] & 0x03e00000)>>16) >> 2;
122   b = ((space->machine().generic.paletteram.u32[offset] & 0x7c000000)>>16) >> 7;
123   r = ((machine().generic.paletteram.u32[offset] & 0x001f0000)>>16) << 3;
124   g = ((machine().generic.paletteram.u32[offset] & 0x03e00000)>>16) >> 2;
125   b = ((machine().generic.paletteram.u32[offset] & 0x7c000000)>>16) >> 7;
123126
124   palette_set_color(space->machine(),offset*2+0,MAKE_RGB(r,g,b));
127   palette_set_color(machine(),offset*2+0,MAKE_RGB(r,g,b));
125128
126   r = (space->machine().generic.paletteram.u32[offset] & 0x001f) << 3;
127   g = (space->machine().generic.paletteram.u32[offset] & 0x03e0) >> 2;
128   b = (space->machine().generic.paletteram.u32[offset] & 0x7c00) >> 7;
129   r = (machine().generic.paletteram.u32[offset] & 0x001f) << 3;
130   g = (machine().generic.paletteram.u32[offset] & 0x03e0) >> 2;
131   b = (machine().generic.paletteram.u32[offset] & 0x7c00) >> 7;
129132
130   palette_set_color(space->machine(),offset*2+1,MAKE_RGB(r,g,b));
133   palette_set_color(machine(),offset*2+1,MAKE_RGB(r,g,b));
131134}
132135
133static READ32_HANDLER( in0_r )
136READ32_MEMBER(feversoc_state::in0_r)
134137{
135   feversoc_state *state = space->machine().driver_data<feversoc_state>();
136138
137   state->m_x^=0x40; //vblank? eeprom read bit?
138   return (input_port_read(space->machine(), "IN0") | state->m_x) | (input_port_read(space->machine(), "IN1")<<16);
139   m_x^=0x40; //vblank? eeprom read bit?
140   return (input_port_read(machine(), "IN0") | m_x) | (input_port_read(machine(), "IN1")<<16);
139141}
140142
141static WRITE32_HANDLER( output_w )
143WRITE32_MEMBER(feversoc_state::output_w)
142144{
143145   if(ACCESSING_BITS_16_31)
144146   {
145147      /* probably eeprom stuff too */
146      coin_lockout_w(space->machine(), 0,~data>>16 & 0x40);
147      coin_lockout_w(space->machine(), 1,~data>>16 & 0x40);
148      coin_counter_w(space->machine(), 0,data>>16 & 1);
148      coin_lockout_w(machine(), 0,~data>>16 & 0x40);
149      coin_lockout_w(machine(), 1,~data>>16 & 0x40);
150      coin_counter_w(machine(), 0,data>>16 & 1);
149151      //data>>16 & 2 coin out
150      coin_counter_w(space->machine(), 1,data>>16 & 4);
152      coin_counter_w(machine(), 1,data>>16 & 4);
151153      //data>>16 & 8 coin hopper
152      okim6295_device *oki = space->machine().device<okim6295_device>("oki");
154      okim6295_device *oki = machine().device<okim6295_device>("oki");
153155      oki->set_bank_base(0x40000 * (((data>>16) & 0x20)>>5));
154156   }
155157   if(ACCESSING_BITS_0_15)
156158   {
157159      /* -xxx xxxx lamps*/
158      coin_counter_w(space->machine(), 2,data & 0x2000); //key in
160      coin_counter_w(machine(), 2,data & 0x2000); //key in
159161      //data & 0x4000 key out
160162   }
161163}
r14845r14846
164166   AM_RANGE(0x00000000, 0x0003ffff) AM_ROM
165167   AM_RANGE(0x02000000, 0x0203dfff) AM_RAM //work ram
166168   AM_RANGE(0x0203e000, 0x0203ffff) AM_RAM AM_BASE(m_spriteram)
167   AM_RANGE(0x06000000, 0x06000003) AM_WRITE_LEGACY(output_w)
169   AM_RANGE(0x06000000, 0x06000003) AM_WRITE(output_w)
168170   AM_RANGE(0x06000004, 0x06000007) AM_WRITENOP //???
169   AM_RANGE(0x06000008, 0x0600000b) AM_READ_LEGACY(in0_r)
171   AM_RANGE(0x06000008, 0x0600000b) AM_READ(in0_r)
170172   AM_RANGE(0x0600000c, 0x0600000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff0000)
171173//  AM_RANGE(0x06010000, 0x06017fff) AM_RAM //contains RISE11 keys and other related stuff.
172   AM_RANGE(0x06018000, 0x06019fff) AM_RAM_WRITE_LEGACY(fs_paletteram_w) AM_BASE_GENERIC(paletteram)
174   AM_RANGE(0x06018000, 0x06019fff) AM_RAM_WRITE(fs_paletteram_w) AM_BASE_GENERIC(paletteram)
173175ADDRESS_MAP_END
174176
175177static const gfx_layout spi_spritelayout =
src/mame/drivers/vcombat.c
r14845r14846
102102   UINT16* m_vid_0_shared_RAM;
103103   UINT16* m_vid_1_shared_RAM;
104104   int m_crtc_select;
105   DECLARE_WRITE16_MEMBER(main_video_write);
106   DECLARE_READ16_MEMBER(control_1_r);
107   DECLARE_READ16_MEMBER(control_2_r);
108   DECLARE_READ16_MEMBER(control_3_r);
109   DECLARE_WRITE16_MEMBER(wiggle_i860p0_pins_w);
110   DECLARE_WRITE16_MEMBER(wiggle_i860p1_pins_w);
111   DECLARE_READ16_MEMBER(main_irqiack_r);
112   DECLARE_READ16_MEMBER(sound_resetmain_r);
113   DECLARE_WRITE64_MEMBER(v0_fb_w);
114   DECLARE_WRITE64_MEMBER(v1_fb_w);
115   DECLARE_WRITE16_MEMBER(crtc_w);
105116};
106117
107118static UINT32 update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
r14845r14846
157168static SCREEN_UPDATE_RGB32( vcombat_aux ) { return update_screen(screen, bitmap, cliprect, 1); }
158169
159170
160static WRITE16_HANDLER( main_video_write )
171WRITE16_MEMBER(vcombat_state::main_video_write)
161172{
162   vcombat_state *state = space->machine().driver_data<vcombat_state>();
163   int fb = (*state->m_framebuffer_ctrl & 0x20) ? 0 : 1;
164   UINT16 old_data = state->m_m68k_framebuffer[fb][offset];
173   int fb = (*m_framebuffer_ctrl & 0x20) ? 0 : 1;
174   UINT16 old_data = m_m68k_framebuffer[fb][offset];
165175
166176   /* Transparency mode? */
167   if (*state->m_framebuffer_ctrl & 0x40)
177   if (*m_framebuffer_ctrl & 0x40)
168178   {
169179      if (data == 0x0000)
170180         return;
r14845r14846
174184      if ((data & 0xff00) == 0)
175185         data = (data & 0x00ff) | (old_data & 0xff00);
176186
177      COMBINE_DATA(&state->m_m68k_framebuffer[fb][offset]);
187      COMBINE_DATA(&m_m68k_framebuffer[fb][offset]);
178188   }
179189   else
180190   {
181      COMBINE_DATA(&state->m_m68k_framebuffer[fb][offset]);
191      COMBINE_DATA(&m_m68k_framebuffer[fb][offset]);
182192   }
183193}
184194
185static READ16_HANDLER( control_1_r )
195READ16_MEMBER(vcombat_state::control_1_r)
186196{
187   return (input_port_read(space->machine(), "IN0") << 8);
197   return (input_port_read(machine(), "IN0") << 8);
188198}
189199
190static READ16_HANDLER( control_2_r )
200READ16_MEMBER(vcombat_state::control_2_r)
191201{
192   return (input_port_read(space->machine(), "IN1") << 8);
202   return (input_port_read(machine(), "IN1") << 8);
193203}
194204
195static READ16_HANDLER( control_3_r )
205READ16_MEMBER(vcombat_state::control_3_r)
196206{
197   return (input_port_read(space->machine(), "IN2") << 8);
207   return (input_port_read(machine(), "IN2") << 8);
198208}
199209
200210static void wiggle_i860_common(device_t *device, UINT16 data)
r14845r14846
224234      i860_set_pin(device, DEC_PIN_RESET, 0);
225235}
226236
227static WRITE16_HANDLER( wiggle_i860p0_pins_w )
237WRITE16_MEMBER(vcombat_state::wiggle_i860p0_pins_w)
228238{
229   wiggle_i860_common(space->machine().device("vid_0"), data);
239   wiggle_i860_common(machine().device("vid_0"), data);
230240}
231241
232static WRITE16_HANDLER( wiggle_i860p1_pins_w )
242WRITE16_MEMBER(vcombat_state::wiggle_i860p1_pins_w)
233243{
234   wiggle_i860_common(space->machine().device("vid_1"), data);
244   wiggle_i860_common(machine().device("vid_1"), data);
235245}
236246
237static READ16_HANDLER( main_irqiack_r )
247READ16_MEMBER(vcombat_state::main_irqiack_r)
238248{
239249   //fprintf(stderr, "M0: irq iack\n");
240   device_set_input_line(space->machine().device("maincpu"), M68K_IRQ_1, CLEAR_LINE);
241   //device_set_input_line(space->machine().device("maincpu"), INPUT_LINE_RESET, CLEAR_LINE);
250   device_set_input_line(machine().device("maincpu"), M68K_IRQ_1, CLEAR_LINE);
251   //device_set_input_line(machine().device("maincpu"), INPUT_LINE_RESET, CLEAR_LINE);
242252   return 0;
243253}
244254
245static READ16_HANDLER( sound_resetmain_r )
255READ16_MEMBER(vcombat_state::sound_resetmain_r)
246256{
247257   //fprintf(stderr, "M1: reset line to M0\n");
248   //device_set_input_line(space->machine().device("maincpu"), INPUT_LINE_RESET, PULSE_LINE);
258   //device_set_input_line(machine().device("maincpu"), INPUT_LINE_RESET, PULSE_LINE);
249259   return 0;
250260}
251261
252static WRITE64_HANDLER( v0_fb_w )
262WRITE64_MEMBER(vcombat_state::v0_fb_w)
253263{
254   vcombat_state *state = space->machine().driver_data<vcombat_state>();
255264   /* The frame buffer seems to sit on a 32-bit data bus, while the
256265       i860 uses a 64-bit data bus.  Adjust accordingly.  */
257   char *p = (char *)(state->m_i860_framebuffer[0][0]);
266   char *p = (char *)(m_i860_framebuffer[0][0]);
258267   int m = mem_mask;
259268   int o = (offset << 2);
260269   if (m & 0xff000000) {
r14845r14846
273282
274283/* This is just temporary so we can see what each i860 is doing to the
275284   framebuffer.  */
276static WRITE64_HANDLER( v1_fb_w )
285WRITE64_MEMBER(vcombat_state::v1_fb_w)
277286{
278   vcombat_state *state = space->machine().driver_data<vcombat_state>();
279287   /* The frame buffer seems to sit on a 32-bit data bus, while the
280288       i860 uses a 64-bit data bus.  Adjust accordingly.  */
281   char *p = (char *)(state->m_i860_framebuffer[1][0]);
289   char *p = (char *)(m_i860_framebuffer[1][0]);
282290   int m = mem_mask;
283291   int o = (offset << 2);
284292   if (m & 0xff000000) {
r14845r14846
295303   }
296304}
297305
298static WRITE16_HANDLER( crtc_w )
306WRITE16_MEMBER(vcombat_state::crtc_w)
299307{
300   vcombat_state *state = space->machine().driver_data<vcombat_state>();
301   mc6845_device *crtc = space->machine().device<mc6845_device>("crtc");
308   mc6845_device *crtc = machine().device<mc6845_device>("crtc");
302309
303310   if (crtc == NULL)
304311      return;
305312
306   if (state->m_crtc_select == 0)
307      crtc->address_w(*space, 0, data >> 8);
313   if (m_crtc_select == 0)
314      crtc->address_w(*&space, 0, data >> 8);
308315   else
309      crtc->register_w(*space, 0, data >> 8);
316      crtc->register_w(*&space, 0, data >> 8);
310317
311   state->m_crtc_select ^= 1;
318   m_crtc_select ^= 1;
312319}
313320
314321static WRITE16_DEVICE_HANDLER( vcombat_dac_w )
r14845r14846
320327static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, vcombat_state )
321328   AM_RANGE(0x000000, 0x0fffff) AM_ROM
322329   AM_RANGE(0x200000, 0x20ffff) AM_RAM
323   AM_RANGE(0x300000, 0x30ffff) AM_WRITE_LEGACY(main_video_write)
330   AM_RANGE(0x300000, 0x30ffff) AM_WRITE(main_video_write)
324331
325332   AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_BASE(m_vid_0_shared_RAM) AM_SHARE("share2")   /* First i860 shared RAM */
326333   AM_RANGE(0x440000, 0x440003) AM_RAM AM_SHARE("share6")      /* M0->P0 i860 #1 com 1 */
327334   AM_RANGE(0x480000, 0x480003) AM_RAM AM_SHARE("share7")      /* M0<-P0 i860 #1 com 2 */
328   AM_RANGE(0x4c0000, 0x4c0003) AM_WRITE_LEGACY(wiggle_i860p0_pins_w)   /* i860 #1 stop/start/reset */
335   AM_RANGE(0x4c0000, 0x4c0003) AM_WRITE(wiggle_i860p0_pins_w)   /* i860 #1 stop/start/reset */
329336
330337   AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_BASE(m_vid_1_shared_RAM) AM_SHARE("share3")   /* Second i860 shared RAM */
331338   AM_RANGE(0x540000, 0x540003) AM_RAM AM_SHARE("share8")      /* M0->P1 i860 #2 com 1 */
332339   AM_RANGE(0x580000, 0x580003) AM_RAM AM_SHARE("share9")      /* M0<-P1 i860 #2 com 2 */
333   AM_RANGE(0x5c0000, 0x5c0003) AM_WRITE_LEGACY(wiggle_i860p1_pins_w)   /* i860 #2 stop/start/reset */
340   AM_RANGE(0x5c0000, 0x5c0003) AM_WRITE(wiggle_i860p1_pins_w)   /* i860 #2 stop/start/reset */
334341
335   AM_RANGE(0x600000, 0x600001) AM_READ_LEGACY(control_1_r)   /* IN0 port */
342   AM_RANGE(0x600000, 0x600001) AM_READ(control_1_r)   /* IN0 port */
336343   AM_RANGE(0x600004, 0x600005) AM_RAM AM_SHARE("share5")      /* M0<-M1 */
337   AM_RANGE(0x600008, 0x600009) AM_READ_LEGACY(control_2_r)   /* IN1 port */
344   AM_RANGE(0x600008, 0x600009) AM_READ(control_2_r)   /* IN1 port */
338345   AM_RANGE(0x60001c, 0x60001d) AM_NOP
339346
340   AM_RANGE(0x60000c, 0x60000d) AM_WRITE_LEGACY(crtc_w)
347   AM_RANGE(0x60000c, 0x60000d) AM_WRITE(crtc_w)
341348   AM_RANGE(0x600010, 0x600011) AM_RAM AM_BASE(m_framebuffer_ctrl)
342349   AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("nvram")
343   AM_RANGE(0x701000, 0x701001) AM_READ_LEGACY(main_irqiack_r)
344   AM_RANGE(0x702000, 0x702001) AM_READ_LEGACY(control_3_r)
350   AM_RANGE(0x701000, 0x701001) AM_READ(main_irqiack_r)
351   AM_RANGE(0x702000, 0x702001) AM_READ(control_3_r)
345352   AM_RANGE(0x705000, 0x705001) AM_RAM AM_SHARE("share4")      /* M1->M0 */
346353
347354   //AM_RANGE(0x703000, 0x703001)      /* Headset rotation axis? */
r14845r14846
353360
354361/* The first i860 - middle board */
355362static ADDRESS_MAP_START( vid_0_map, AS_PROGRAM, 64, vcombat_state )
356   AM_RANGE(0x00000000, 0x0001ffff) AM_RAM_WRITE_LEGACY(v0_fb_w)      /* Shared framebuffer - half of the bits lost to 32-bit bus */
363   AM_RANGE(0x00000000, 0x0001ffff) AM_RAM_WRITE(v0_fb_w)      /* Shared framebuffer - half of the bits lost to 32-bit bus */
357364   AM_RANGE(0x20000000, 0x20000007) AM_RAM AM_SHARE("share6")      /* M0<-P0 com 1 (0x440000 in 68k-land) */
358365   AM_RANGE(0x40000000, 0x401fffff) AM_ROM AM_REGION("gfx", 0)
359366   AM_RANGE(0x80000000, 0x80000007) AM_RAM AM_SHARE("share7")      /* M0->P0 com 2 (0x480000 in 68k-land) */
r14845r14846
364371
365372/* The second i860 - top board */
366373static ADDRESS_MAP_START( vid_1_map, AS_PROGRAM, 64, vcombat_state )
367   AM_RANGE(0x00000000, 0x0001ffff) AM_RAM_WRITE_LEGACY(v1_fb_w)      /* Half of the bits lost to 32-bit bus */
374   AM_RANGE(0x00000000, 0x0001ffff) AM_RAM_WRITE(v1_fb_w)      /* Half of the bits lost to 32-bit bus */
368375   AM_RANGE(0x20000000, 0x20000007) AM_RAM AM_SHARE("share8")      /* M0->P1 com 1 (0x540000 in 68k-land) */
369376   AM_RANGE(0x40000000, 0x401fffff) AM_ROM AM_REGION("gfx", 0)
370377   AM_RANGE(0x80000000, 0x80000007) AM_RAM AM_SHARE("share9")         /* M0<-P1 com 2      (0x580000 in 68k-land) */
r14845r14846
378385   AM_RANGE(0x000000, 0x03ffff) AM_ROM
379386   AM_RANGE(0x080000, 0x08ffff) AM_RAM
380387   AM_RANGE(0x0c0000, 0x0c0001) AM_DEVWRITE_LEGACY("dac", vcombat_dac_w)
381   AM_RANGE(0x140000, 0x140001) AM_READ_LEGACY(sound_resetmain_r)   /* Ping M0's reset line */
388   AM_RANGE(0x140000, 0x140001) AM_READ(sound_resetmain_r)   /* Ping M0's reset line */
382389   AM_RANGE(0x180000, 0x180001) AM_RAM AM_SHARE("share4")   /* M1<-M0 */
383390   AM_RANGE(0x1c0000, 0x1c0001) AM_RAM AM_SHARE("share5")   /* M1->M0 */
384391   AM_RANGE(0x200000, 0x37ffff) AM_ROM AM_REGION("samples", 0)
src/mame/drivers/pkscram.c
r14845r14846
3131   tilemap_t *m_fg_tilemap;
3232   tilemap_t *m_md_tilemap;
3333   tilemap_t *m_bg_tilemap;
34   DECLARE_WRITE16_MEMBER(pkscramble_fgtilemap_w);
35   DECLARE_WRITE16_MEMBER(pkscramble_mdtilemap_w);
36   DECLARE_WRITE16_MEMBER(pkscramble_bgtilemap_w);
37   DECLARE_WRITE16_MEMBER(pkscramble_output_w);
3438};
3539
3640
3741enum { interrupt_scanline=192 };
3842
3943
40static WRITE16_HANDLER( pkscramble_fgtilemap_w )
44WRITE16_MEMBER(pkscram_state::pkscramble_fgtilemap_w)
4145{
42   pkscram_state *state = space->machine().driver_data<pkscram_state>();
43   COMBINE_DATA(&state->m_pkscramble_fgtilemap_ram[offset]);
44   state->m_fg_tilemap->mark_tile_dirty(offset >> 1);
46   COMBINE_DATA(&m_pkscramble_fgtilemap_ram[offset]);
47   m_fg_tilemap->mark_tile_dirty(offset >> 1);
4548}
4649
47static WRITE16_HANDLER( pkscramble_mdtilemap_w )
50WRITE16_MEMBER(pkscram_state::pkscramble_mdtilemap_w)
4851{
49   pkscram_state *state = space->machine().driver_data<pkscram_state>();
50   COMBINE_DATA(&state->m_pkscramble_mdtilemap_ram[offset]);
51   state->m_md_tilemap->mark_tile_dirty(offset >> 1);
52   COMBINE_DATA(&m_pkscramble_mdtilemap_ram[offset]);
53   m_md_tilemap->mark_tile_dirty(offset >> 1);
5254}
5355
54static WRITE16_HANDLER( pkscramble_bgtilemap_w )
56WRITE16_MEMBER(pkscram_state::pkscramble_bgtilemap_w)
5557{
56   pkscram_state *state = space->machine().driver_data<pkscram_state>();
57   COMBINE_DATA(&state->m_pkscramble_bgtilemap_ram[offset]);
58   state->m_bg_tilemap->mark_tile_dirty(offset >> 1);
58   COMBINE_DATA(&m_pkscramble_bgtilemap_ram[offset]);
59   m_bg_tilemap->mark_tile_dirty(offset >> 1);
5960}
6061
6162// input bit 0x20 in port1 should stay low until bit 0x20 is written here, then
6263// it should stay high for some time (currently we cheat keeping the input always active)
63static WRITE16_HANDLER( pkscramble_output_w )
64WRITE16_MEMBER(pkscram_state::pkscramble_output_w)
6465{
65   pkscram_state *state = space->machine().driver_data<pkscram_state>();
6666   // OUTPUT
6767   // BIT
6868   // 0x0001 -> STL
r14845r14846
8383   // 0x2000 -> vblank interrupt enable
8484   // 0x4000 -> set on every second frame - not used
8585
86   state->m_out = data;
86   m_out = data;
8787
88   if (!(state->m_out & 0x2000) && state->m_interrupt_line_active)
88   if (!(m_out & 0x2000) && m_interrupt_line_active)
8989   {
90       cputag_set_input_line(space->machine(), "maincpu", 1, CLEAR_LINE);
91      state->m_interrupt_line_active = 0;
90       cputag_set_input_line(machine(), "maincpu", 1, CLEAR_LINE);
91      m_interrupt_line_active = 0;
9292   }
9393
94   coin_counter_w(space->machine(), 0, data & 0x80);
94   coin_counter_w(machine(), 0, data & 0x80);
9595}
9696
9797static ADDRESS_MAP_START( pkscramble_map, AS_PROGRAM, 16, pkscram_state )
r14845r14846
9999   AM_RANGE(0x000000, 0x01ffff) AM_ROM
100100   AM_RANGE(0x040000, 0x0400ff) AM_RAM AM_SHARE("nvram")
101101   AM_RANGE(0x041000, 0x043fff) AM_RAM // main ram
102   AM_RANGE(0x044000, 0x044fff) AM_RAM_WRITE_LEGACY(pkscramble_fgtilemap_w) AM_BASE(m_pkscramble_fgtilemap_ram) // fg tilemap
103   AM_RANGE(0x045000, 0x045fff) AM_RAM_WRITE_LEGACY(pkscramble_mdtilemap_w) AM_BASE(m_pkscramble_mdtilemap_ram) // md tilemap (just a copy of fg?)
104   AM_RANGE(0x046000, 0x046fff) AM_RAM_WRITE_LEGACY(pkscramble_bgtilemap_w) AM_BASE(m_pkscramble_bgtilemap_ram) // bg tilemap
102   AM_RANGE(0x044000, 0x044fff) AM_RAM_WRITE(pkscramble_fgtilemap_w) AM_BASE(m_pkscramble_fgtilemap_ram) // fg tilemap
103   AM_RANGE(0x045000, 0x045fff) AM_RAM_WRITE(pkscramble_mdtilemap_w) AM_BASE(m_pkscramble_mdtilemap_ram) // md tilemap (just a copy of fg?)
104   AM_RANGE(0x046000, 0x046fff) AM_RAM_WRITE(pkscramble_bgtilemap_w) AM_BASE(m_pkscramble_bgtilemap_ram) // bg tilemap
105105   AM_RANGE(0x047000, 0x047fff) AM_RAM // unused
106106   AM_RANGE(0x048000, 0x048fff) AM_RAM_WRITE_LEGACY(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
107107   AM_RANGE(0x049000, 0x049001) AM_READ_PORT("DSW")
108108   AM_RANGE(0x049004, 0x049005) AM_READ_PORT("INPUTS")
109   AM_RANGE(0x049008, 0x049009) AM_WRITE_LEGACY(pkscramble_output_w)
109   AM_RANGE(0x049008, 0x049009) AM_WRITE(pkscramble_output_w)
110110   AM_RANGE(0x049010, 0x049011) AM_WRITENOP
111111   AM_RANGE(0x049014, 0x049015) AM_WRITENOP
112112   AM_RANGE(0x049018, 0x049019) AM_WRITENOP
src/mame/drivers/39in1.c
r14845r14846
5454   //FILE* audio_dump;
5555   UINT32 m_words[0x800];
5656   INT16 m_samples[0x1000];
57   DECLARE_READ32_MEMBER(pxa255_i2s_r);
58   DECLARE_WRITE32_MEMBER(pxa255_i2s_w);
59   DECLARE_READ32_MEMBER(pxa255_dma_r);
60   DECLARE_WRITE32_MEMBER(pxa255_dma_w);
61   DECLARE_READ32_MEMBER(pxa255_ostimer_r);
62   DECLARE_WRITE32_MEMBER(pxa255_ostimer_w);
63   DECLARE_READ32_MEMBER(pxa255_intc_r);
64   DECLARE_WRITE32_MEMBER(pxa255_intc_w);
65   DECLARE_READ32_MEMBER(pxa255_gpio_r);
66   DECLARE_WRITE32_MEMBER(pxa255_gpio_w);
67   DECLARE_READ32_MEMBER(pxa255_lcd_r);
68   DECLARE_WRITE32_MEMBER(pxa255_lcd_w);
69   DECLARE_READ32_MEMBER(return_zero);
70   DECLARE_READ32_MEMBER(unknown_r);
71   DECLARE_READ32_MEMBER(cpld_r);
72   DECLARE_WRITE32_MEMBER(cpld_w);
73   DECLARE_READ32_MEMBER(prot_cheater_r);
5774};
5875
5976
6077static void pxa255_dma_irq_check(running_machine& machine);
61static READ32_HANDLER( pxa255_dma_r );
62static WRITE32_HANDLER( pxa255_dma_w );
6378
64static READ32_HANDLER( pxa255_i2s_r );
65static WRITE32_HANDLER( pxa255_i2s_w );
6679
80
81
82
83
6784static void pxa255_ostimer_irq_check(running_machine& machine);
6885static TIMER_CALLBACK( pxa255_ostimer_match );
69static READ32_HANDLER( pxa255_ostimer_r );
70static WRITE32_HANDLER( pxa255_ostimer_w );
7186
87
88
7289static void pxa255_update_interrupts(running_machine& machine);
7390static void pxa255_set_irq_line(running_machine& machine, UINT32 line, int state);
74static READ32_HANDLER( pxa255_intc_r );
75static WRITE32_HANDLER( pxa255_intc_w );
7691
77static READ32_HANDLER( pxa255_gpio_r );
78static WRITE32_HANDLER( pxa255_gpio_w );
7992
93
94
95
96
8097static void pxa255_lcd_load_dma_descriptor(address_space* space, UINT32 address, int channel);
8198static void pxa255_lcd_irq_check(running_machine& machine);
8299static void pxa255_lcd_dma_kickoff(running_machine& machine, int channel);
83100static void pxa255_lcd_check_load_next_branch(running_machine& machine, int channel);
84static READ32_HANDLER( pxa255_lcd_r );
85static WRITE32_HANDLER( pxa255_lcd_w );
86101
102
103
87104#define VERBOSE_LEVEL ( 3 )
88105
89106INLINE void ATTR_PRINTF(3,4) verboselog( running_machine& machine, int n_level, const char* s_fmt, ... )
r14845r14846
108125
109126*/
110127
111static READ32_HANDLER( pxa255_i2s_r )
128READ32_MEMBER(_39in1_state::pxa255_i2s_r)
112129{
113   _39in1_state *state = space->machine().driver_data<_39in1_state>();
114   PXA255_I2S_Regs *i2s_regs = &state->m_i2s_regs;
130   PXA255_I2S_Regs *i2s_regs = &m_i2s_regs;
115131
116132   switch(PXA255_I2S_BASE_ADDR | (offset << 2))
117133   {
118134      case PXA255_SACR0:
119         verboselog( space->machine(), 3, "pxa255_i2s_r: Serial Audio Controller Global Control Register: %08x & %08x\n", i2s_regs->sacr0, mem_mask );
135         verboselog( machine(), 3, "pxa255_i2s_r: Serial Audio Controller Global Control Register: %08x & %08x\n", i2s_regs->sacr0, mem_mask );
120136         return i2s_regs->sacr0;
121137      case PXA255_SACR1:
122         verboselog( space->machine(), 3, "pxa255_i2s_r: Serial Audio Controller I2S/MSB-Justified Control Register: %08x & %08x\n", i2s_regs->sacr1, mem_mask );
138         verboselog( machine(), 3, "pxa255_i2s_r: Serial Audio Controller I2S/MSB-Justified Control Register: %08x & %08x\n", i2s_regs->sacr1, mem_mask );
123139         return i2s_regs->sacr1;
124140      case PXA255_SASR0:
125         verboselog( space->machine(), 3, "pxa255_i2s_r: Serial Audio Controller I2S/MSB-Justified Status Register: %08x & %08x\n", i2s_regs->sasr0, mem_mask );
141         verboselog( machine(), 3, "pxa255_i2s_r: Serial Audio Controller I2S/MSB-Justified Status Register: %08x & %08x\n", i2s_regs->sasr0, mem_mask );
126142         return i2s_regs->sasr0;
127143      case PXA255_SAIMR:
128         verboselog( space->machine(), 3, "pxa255_i2s_r: Serial Audio Interrupt Mask Register: %08x & %08x\n", i2s_regs->saimr, mem_mask );
144         verboselog( machine(), 3, "pxa255_i2s_r: Serial Audio Interrupt Mask Register: %08x & %08x\n", i2s_regs->saimr, mem_mask );
129145         return i2s_regs->saimr;
130146      case PXA255_SAICR:
131         verboselog( space->machine(), 3, "pxa255_i2s_r: Serial Audio Interrupt Clear Register: %08x & %08x\n", i2s_regs->saicr, mem_mask );
147         verboselog( machine(), 3, "pxa255_i2s_r: Serial Audio Interrupt Clear Register: %08x & %08x\n", i2s_regs->saicr, mem_mask );
132148         return i2s_regs->saicr;
133149      case PXA255_SADIV:
134         verboselog( space->machine(), 3, "pxa255_i2s_r: Serial Audio Clock Divider Register: %08x & %08x\n", i2s_regs->sadiv, mem_mask );
150         verboselog( machine(), 3, "pxa255_i2s_r: Serial Audio Clock Divider Register: %08x & %08x\n", i2s_regs->sadiv, mem_mask );
135151         return i2s_regs->sadiv;
136152      case PXA255_SADR:
137         verboselog( space->machine(), 5, "pxa255_i2s_r: Serial Audio Data Register: %08x & %08x\n", i2s_regs->sadr, mem_mask );
153         verboselog( machine(), 5, "pxa255_i2s_r: Serial Audio Data Register: %08x & %08x\n", i2s_regs->sadr, mem_mask );
138154         return i2s_regs->sadr;
139155      default:
140         verboselog( space->machine(), 0, "pxa255_i2s_r: Unknown address: %08x\n", PXA255_I2S_BASE_ADDR | (offset << 2));
156         verboselog( machine(), 0, "pxa255_i2s_r: Unknown address: %08x\n", PXA255_I2S_BASE_ADDR | (offset << 2));
141157         break;
142158   }
143159   return 0;
144160}
145161
146static WRITE32_HANDLER( pxa255_i2s_w )
162WRITE32_MEMBER(_39in1_state::pxa255_i2s_w)
147163{
148   _39in1_state *state = space->machine().driver_data<_39in1_state>();
149   PXA255_I2S_Regs *i2s_regs = &state->m_i2s_regs;
164   PXA255_I2S_Regs *i2s_regs = &m_i2s_regs;
150165
151166#if 0
152167   if(!audio_dump)
r14845r14846
166181   switch(PXA255_I2S_BASE_ADDR | (offset << 2))
167182   {
168183      case PXA255_SACR0:
169         verboselog( space->machine(), 3, "pxa255_i2s_w: Serial Audio Controller Global Control Register: %08x & %08x\n", data, mem_mask );
184         verboselog( machine(), 3, "pxa255_i2s_w: Serial Audio Controller Global Control Register: %08x & %08x\n", data, mem_mask );
170185         i2s_regs->sacr0 = data & 0x0000ff3d;
171186         break;
172187      case PXA255_SACR1:
173         verboselog( space->machine(), 3, "pxa255_i2s_w: Serial Audio Controller I2S/MSB-Justified Control Register: %08x & %08x\n", data, mem_mask );
188         verboselog( machine(), 3, "pxa255_i2s_w: Serial Audio Controller I2S/MSB-Justified Control Register: %08x & %08x\n", data, mem_mask );
174189         i2s_regs->sacr1 = data & 0x00000039;
175190         break;
176191      case PXA255_SASR0:
177         verboselog( space->machine(), 3, "pxa255_i2s_w: Serial Audio Controller I2S/MSB-Justified Status Register: %08x & %08x\n", data, mem_mask );
192         verboselog( machine(), 3, "pxa255_i2s_w: Serial Audio Controller I2S/MSB-Justified Status Register: %08x & %08x\n", data, mem_mask );
178193         i2s_regs->sasr0 = data & 0x0000ff7f;
179194         break;
180195      case PXA255_SAIMR:
181         verboselog( space->machine(), 3, "pxa255_i2s_w: Serial Audio Interrupt Mask Register: %08x & %08x\n", data, mem_mask );
196         verboselog( machine(), 3, "pxa255_i2s_w: Serial Audio Interrupt Mask Register: %08x & %08x\n", data, mem_mask );
182197         i2s_regs->saimr = data & 0x00000078;
183198         break;
184199      case PXA255_SAICR:
185         verboselog( space->machine(), 3, "pxa255_i2s_w: Serial Audio Interrupt Clear Register: %08x & %08x\n", data, mem_mask );
200         verboselog( machine(), 3, "pxa255_i2s_w: Serial Audio Interrupt Clear Register: %08x & %08x\n", data, mem_mask );
186201         if(i2s_regs->saicr & PXA255_SAICR_ROR)
187202         {
188203            i2s_regs->sasr0 &= ~PXA255_SASR0_ROR;
r14845r14846
193208         }
194209         break;
195210      case PXA255_SADIV:
196         verboselog( space->machine(), 3, "pxa255_i2s_w: Serial Audio Clock Divider Register: %08x & %08x\n", data, mem_mask );
211         verboselog( machine(), 3, "pxa255_i2s_w: Serial Audio Clock Divider Register: %08x & %08x\n", data, mem_mask );
197212         i2s_regs->sadiv = data & 0x0000007f;
198         dmadac_set_frequency(&state->m_dmadac[0], 2, ((double)147600000 / (double)i2s_regs->sadiv) / 256.0);
199         dmadac_enable(&state->m_dmadac[0], 2, 1);
213         dmadac_set_frequency(&m_dmadac[0], 2, ((double)147600000 / (double)i2s_regs->sadiv) / 256.0);
214         dmadac_enable(&m_dmadac[0], 2, 1);
200215         break;
201216      case PXA255_SADR:
202         verboselog( space->machine(), 4, "pxa255_i2s_w: Serial Audio Data Register: %08x & %08x\n", data, mem_mask );
217         verboselog( machine(), 4, "pxa255_i2s_w: Serial Audio Data Register: %08x & %08x\n", data, mem_mask );
203218         i2s_regs->sadr = data;
204219#if 0
205220         if(audio_dump)
r14845r14846
209224#endif
210225         break;
211226      default:
212         verboselog( space->machine(), 0, "pxa255_i2s_w: Unknown address: %08x = %08x & %08x\n", PXA255_I2S_BASE_ADDR | (offset << 2), data, mem_mask);
227         verboselog( machine(), 0, "pxa255_i2s_w: Unknown address: %08x = %08x & %08x\n", PXA255_I2S_BASE_ADDR | (offset << 2), data, mem_mask);
213228         break;
214229   }
215230}
r14845r14846
399414   pxa255_dma_irq_check(machine);
400415}
401416
402static READ32_HANDLER( pxa255_dma_r )
417READ32_MEMBER(_39in1_state::pxa255_dma_r)
403418{
404   _39in1_state *state = space->machine().driver_data<_39in1_state>();
405   PXA255_DMA_Regs *dma_regs = &state->m_dma_regs;
419   PXA255_DMA_Regs *dma_regs = &m_dma_regs;
406420
407421   switch(PXA255_DMA_BASE_ADDR | (offset << 2))
408422   {
r14845r14846
410424      case PXA255_DCSR4:      case PXA255_DCSR5:      case PXA255_DCSR6:      case PXA255_DCSR7:
411425      case PXA255_DCSR8:      case PXA255_DCSR9:      case PXA255_DCSR10:      case PXA255_DCSR11:
412426      case PXA255_DCSR12:      case PXA255_DCSR13:      case PXA255_DCSR14:      case PXA255_DCSR15:
413         verboselog( space->machine(), 4, "pxa255_dma_r: DMA Channel Control/Status Register %d: %08x & %08x\n", offset, dma_regs->dcsr[offset], mem_mask );
427         verboselog( machine(), 4, "pxa255_dma_r: DMA Channel Control/Status Register %d: %08x & %08x\n", offset, dma_regs->dcsr[offset], mem_mask );
414428         return dma_regs->dcsr[offset];
415429      case PXA255_DINT:
416         if (0) verboselog( space->machine(), 3, "pxa255_dma_r: DMA Interrupt Register: %08x & %08x\n", dma_regs->dint, mem_mask );
430         if (0) verboselog( machine(), 3, "pxa255_dma_r: DMA Interrupt Register: %08x & %08x\n", dma_regs->dint, mem_mask );
417431         return dma_regs->dint;
418432      case PXA255_DRCMR0:      case PXA255_DRCMR1:      case PXA255_DRCMR2:      case PXA255_DRCMR3:
419433      case PXA255_DRCMR4:      case PXA255_DRCMR5:      case PXA255_DRCMR6:      case PXA255_DRCMR7:
r14845r14846
425439      case PXA255_DRCMR28:   case PXA255_DRCMR29:   case PXA255_DRCMR30:   case PXA255_DRCMR31:
426440      case PXA255_DRCMR32:   case PXA255_DRCMR33:   case PXA255_DRCMR34:   case PXA255_DRCMR35:
427441      case PXA255_DRCMR36:   case PXA255_DRCMR37:   case PXA255_DRCMR38:   case PXA255_DRCMR39:
428         verboselog( space->machine(), 3, "pxa255_dma_r: DMA Request to Channel Map Register %d: %08x & %08x\n", offset - (0x100 >> 2), 0, mem_mask );
442         verboselog( machine(), 3, "pxa255_dma_r: DMA Request to Channel Map Register %d: %08x & %08x\n", offset - (0x100 >> 2), 0, mem_mask );
429443         return dma_regs->drcmr[offset - (0x100 >> 2)];
430444      case PXA255_DDADR0:      case PXA255_DDADR1:      case PXA255_DDADR2:      case PXA255_DDADR3:
431445      case PXA255_DDADR4:      case PXA255_DDADR5:      case PXA255_DDADR6:      case PXA255_DDADR7:
432446      case PXA255_DDADR8:      case PXA255_DDADR9:      case PXA255_DDADR10:   case PXA255_DDADR11:
433447      case PXA255_DDADR12:   case PXA255_DDADR13:   case PXA255_DDADR14:   case PXA255_DDADR15:
434         verboselog( space->machine(), 3, "pxa255_dma_r: DMA Descriptor Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
448         verboselog( machine(), 3, "pxa255_dma_r: DMA Descriptor Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
435449         return dma_regs->ddadr[(offset - (0x200 >> 2)) >> 2];
436450      case PXA255_DSADR0:      case PXA255_DSADR1:      case PXA255_DSADR2:      case PXA255_DSADR3:
437451      case PXA255_DSADR4:      case PXA255_DSADR5:      case PXA255_DSADR6:      case PXA255_DSADR7:
438452      case PXA255_DSADR8:      case PXA255_DSADR9:      case PXA255_DSADR10:   case PXA255_DSADR11:
439453      case PXA255_DSADR12:   case PXA255_DSADR13:   case PXA255_DSADR14:   case PXA255_DSADR15:
440         verboselog( space->machine(), 3, "pxa255_dma_r: DMA Source Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
454         verboselog( machine(), 3, "pxa255_dma_r: DMA Source Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
441455         return dma_regs->dsadr[(offset - (0x200 >> 2)) >> 2];
442456      case PXA255_DTADR0:      case PXA255_DTADR1:      case PXA255_DTADR2:      case PXA255_DTADR3:
443457      case PXA255_DTADR4:      case PXA255_DTADR5:      case PXA255_DTADR6:      case PXA255_DTADR7:
444458      case PXA255_DTADR8:      case PXA255_DTADR9:      case PXA255_DTADR10:   case PXA255_DTADR11:
445459      case PXA255_DTADR12:   case PXA255_DTADR13:   case PXA255_DTADR14:   case PXA255_DTADR15:
446         verboselog( space->machine(), 3, "pxa255_dma_r: DMA Target Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
460         verboselog( machine(), 3, "pxa255_dma_r: DMA Target Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
447461         return dma_regs->dtadr[(offset - (0x200 >> 2)) >> 2];
448462      case PXA255_DCMD0:      case PXA255_DCMD1:      case PXA255_DCMD2:      case PXA255_DCMD3:
449463      case PXA255_DCMD4:      case PXA255_DCMD5:      case PXA255_DCMD6:      case PXA255_DCMD7:
450464      case PXA255_DCMD8:      case PXA255_DCMD9:      case PXA255_DCMD10:      case PXA255_DCMD11:
451465      case PXA255_DCMD12:      case PXA255_DCMD13:      case PXA255_DCMD14:      case PXA255_DCMD15:
452         verboselog( space->machine(), 3, "pxa255_dma_r: DMA Command Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
466         verboselog( machine(), 3, "pxa255_dma_r: DMA Command Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, 0, mem_mask );
453467         return dma_regs->dcmd[(offset - (0x200 >> 2)) >> 2];
454468      default:
455         verboselog( space->machine(), 0, "pxa255_dma_r: Unknown address: %08x\n", PXA255_DMA_BASE_ADDR | (offset << 2));
469         verboselog( machine(), 0, "pxa255_dma_r: Unknown address: %08x\n", PXA255_DMA_BASE_ADDR | (offset << 2));
456470         break;
457471   }
458472   return 0;
459473}
460474
461static WRITE32_HANDLER( pxa255_dma_w )
475WRITE32_MEMBER(_39in1_state::pxa255_dma_w)
462476{
463   _39in1_state *state = space->machine().driver_data<_39in1_state>();
464   PXA255_DMA_Regs *dma_regs = &state->m_dma_regs;
477   PXA255_DMA_Regs *dma_regs = &m_dma_regs;
465478
466479   switch(PXA255_DMA_BASE_ADDR | (offset << 2))
467480   {
r14845r14846
469482      case PXA255_DCSR4:      case PXA255_DCSR5:      case PXA255_DCSR6:      case PXA255_DCSR7:
470483      case PXA255_DCSR8:      case PXA255_DCSR9:      case PXA255_DCSR10:      case PXA255_DCSR11:
471484      case PXA255_DCSR12:      case PXA255_DCSR13:      case PXA255_DCSR14:      case PXA255_DCSR15:
472         if (0) verboselog( space->machine(), 3, "pxa255_dma_w: DMA Channel Control/Status Register %d: %08x & %08x\n", offset, data, mem_mask );
485         if (0) verboselog( machine(), 3, "pxa255_dma_w: DMA Channel Control/Status Register %d: %08x & %08x\n", offset, data, mem_mask );
473486         dma_regs->dcsr[offset] &= ~(data & 0x00000007);
474487         dma_regs->dcsr[offset] &= ~0x60000000;
475488         dma_regs->dcsr[offset] |= data & 0x60000000;
r14845r14846
478491            dma_regs->dcsr[offset] |= PXA255_DCSR_RUN;
479492            if(data & PXA255_DCSR_NODESCFETCH)
480493            {
481               verboselog( space->machine(), 0, "              No-Descriptor-Fetch mode is not supported.\n" );
494               verboselog( machine(), 0, "              No-Descriptor-Fetch mode is not supported.\n" );
482495               break;
483496            }
484497
485            pxa255_dma_load_descriptor_and_start(space->machine(), offset);
498            pxa255_dma_load_descriptor_and_start(machine(), offset);
486499         }
487500         else if(!(data & PXA255_DCSR_RUN))
488501         {
489502            dma_regs->dcsr[offset] &= ~PXA255_DCSR_RUN;
490503         }
491504
492         pxa255_dma_irq_check(space->machine());
505         pxa255_dma_irq_check(machine());
493506         break;
494507      case PXA255_DINT:
495         verboselog( space->machine(), 3, "pxa255_dma_w: DMA Interrupt Register: %08x & %08x\n", data, mem_mask );
508         verboselog( machine(), 3, "pxa255_dma_w: DMA Interrupt Register: %08x & %08x\n", data, mem_mask );
496509         dma_regs->dint &= ~data;
497510         break;
498511      case PXA255_DRCMR0:      case PXA255_DRCMR1:      case PXA255_DRCMR2:      case PXA255_DRCMR3:
r14845r14846
505518      case PXA255_DRCMR28:   case PXA255_DRCMR29:   case PXA255_DRCMR30:   case PXA255_DRCMR31:
506519      case PXA255_DRCMR32:   case PXA255_DRCMR33:   case PXA255_DRCMR34:   case PXA255_DRCMR35:
507520      case PXA255_DRCMR36:   case PXA255_DRCMR37:   case PXA255_DRCMR38:   case PXA255_DRCMR39:
508         verboselog( space->machine(), 3, "pxa255_dma_w: DMA Request to Channel Map Register %d: %08x & %08x\n", offset - (0x100 >> 2), data, mem_mask );
521         verboselog( machine(), 3, "pxa255_dma_w: DMA Request to Channel Map Register %d: %08x & %08x\n", offset - (0x100 >> 2), data, mem_mask );
509522         dma_regs->drcmr[offset - (0x100 >> 2)] = data & 0x0000008f;
510523         break;
511524      case PXA255_DDADR0:      case PXA255_DDADR1:      case PXA255_DDADR2:      case PXA255_DDADR3:
512525      case PXA255_DDADR4:      case PXA255_DDADR5:      case PXA255_DDADR6:      case PXA255_DDADR7:
513526      case PXA255_DDADR8:      case PXA255_DDADR9:      case PXA255_DDADR10:   case PXA255_DDADR11:
514527      case PXA255_DDADR12:   case PXA255_DDADR13:   case PXA255_DDADR14:   case PXA255_DDADR15:
515         verboselog( space->machine(), 3, "pxa255_dma_w: DMA Descriptor Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
528         verboselog( machine(), 3, "pxa255_dma_w: DMA Descriptor Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
516529         dma_regs->ddadr[(offset - (0x200 >> 2)) >> 2] = data & 0xfffffff1;
517530         break;
518531      case PXA255_DSADR0:      case PXA255_DSADR1:      case PXA255_DSADR2:      case PXA255_DSADR3:
519532      case PXA255_DSADR4:      case PXA255_DSADR5:      case PXA255_DSADR6:      case PXA255_DSADR7:
520533      case PXA255_DSADR8:      case PXA255_DSADR9:      case PXA255_DSADR10:   case PXA255_DSADR11:
521534      case PXA255_DSADR12:   case PXA255_DSADR13:   case PXA255_DSADR14:   case PXA255_DSADR15:
522         verboselog( space->machine(), 3, "pxa255_dma_w: DMA Source Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
535         verboselog( machine(), 3, "pxa255_dma_w: DMA Source Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
523536         dma_regs->dsadr[(offset - (0x200 >> 2)) >> 2] = data & 0xfffffffc;
524537         break;
525538      case PXA255_DTADR0:      case PXA255_DTADR1:      case PXA255_DTADR2:      case PXA255_DTADR3:
526539      case PXA255_DTADR4:      case PXA255_DTADR5:      case PXA255_DTADR6:      case PXA255_DTADR7:
527540      case PXA255_DTADR8:      case PXA255_DTADR9:      case PXA255_DTADR10:   case PXA255_DTADR11:
528541      case PXA255_DTADR12:   case PXA255_DTADR13:   case PXA255_DTADR14:   case PXA255_DTADR15:
529         verboselog( space->machine(), 3, "pxa255_dma_w: DMA Target Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
542         verboselog( machine(), 3, "pxa255_dma_w: DMA Target Address Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
530543         dma_regs->dtadr[(offset - (0x200 >> 2)) >> 2] = data & 0xfffffffc;
531544         break;
532545      case PXA255_DCMD0:      case PXA255_DCMD1:      case PXA255_DCMD2:      case PXA255_DCMD3:
533546      case PXA255_DCMD4:      case PXA255_DCMD5:      case PXA255_DCMD6:      case PXA255_DCMD7:
534547      case PXA255_DCMD8:      case PXA255_DCMD9:      case PXA255_DCMD10:      case PXA255_DCMD11:
535548      case PXA255_DCMD12:      case PXA255_DCMD13:      case PXA255_DCMD14:      case PXA255_DCMD15:
536         verboselog( space->machine(), 3, "pxa255_dma_w: DMA Command Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
549         verboselog( machine(), 3, "pxa255_dma_w: DMA Command Register %d: %08x & %08x\n", (offset - (0x200 >> 2)) >> 2, data, mem_mask );
537550         dma_regs->dcmd[(offset - (0x200 >> 2)) >> 2] = data & 0xf067dfff;
538551         break;
539552      default:
540         verboselog( space->machine(), 0, "pxa255_dma_w: Unknown address: %08x = %08x & %08x\n", PXA255_DMA_BASE_ADDR | (offset << 2), data, mem_mask);
553         verboselog( machine(), 0, "pxa255_dma_w: Unknown address: %08x = %08x & %08x\n", PXA255_DMA_BASE_ADDR | (offset << 2), data, mem_mask);
541554         break;
542555   }
543556}
r14845r14846
572585   pxa255_ostimer_irq_check(machine);
573586}
574587
575static READ32_HANDLER( pxa255_ostimer_r )
588READ32_MEMBER(_39in1_state::pxa255_ostimer_r)
576589{
577   _39in1_state *state = space->machine().driver_data<_39in1_state>();
578   PXA255_OSTMR_Regs *ostimer_regs = &state->m_ostimer_regs;
590   PXA255_OSTMR_Regs *ostimer_regs = &m_ostimer_regs;
579591
580592   switch(PXA255_OSTMR_BASE_ADDR | (offset << 2))
581593   {
582594      case PXA255_OSMR0:
583         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 0: %08x & %08x\n", ostimer_regs->osmr[0], mem_mask );
595         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 0: %08x & %08x\n", ostimer_regs->osmr[0], mem_mask );
584596         return ostimer_regs->osmr[0];
585597      case PXA255_OSMR1:
586         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 1: %08x & %08x\n", ostimer_regs->osmr[1], mem_mask );
598         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 1: %08x & %08x\n", ostimer_regs->osmr[1], mem_mask );
587599         return ostimer_regs->osmr[1];
588600      case PXA255_OSMR2:
589         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 2: %08x & %08x\n", ostimer_regs->osmr[2], mem_mask );
601         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 2: %08x & %08x\n", ostimer_regs->osmr[2], mem_mask );
590602         return ostimer_regs->osmr[2];
591603      case PXA255_OSMR3:
592         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 3: %08x & %08x\n", ostimer_regs->osmr[3], mem_mask );
604         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Match Register 3: %08x & %08x\n", ostimer_regs->osmr[3], mem_mask );
593605         return ostimer_regs->osmr[3];
594606      case PXA255_OSCR:
595         if (0) verboselog( space->machine(), 4, "pxa255_ostimer_r: OS Timer Count Register: %08x & %08x\n", ostimer_regs->oscr, mem_mask );
607         if (0) verboselog( machine(), 4, "pxa255_ostimer_r: OS Timer Count Register: %08x & %08x\n", ostimer_regs->oscr, mem_mask );
596608         // free-running 3.something MHz counter.  this is a complete hack.
597609         ostimer_regs->oscr += 0x300;
598610         return ostimer_regs->oscr;
599611      case PXA255_OSSR:
600         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Status Register: %08x & %08x\n", ostimer_regs->ossr, mem_mask );
612         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Status Register: %08x & %08x\n", ostimer_regs->ossr, mem_mask );
601613         return ostimer_regs->ossr;
602614      case PXA255_OWER:
603         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Watchdog Match Enable Register: %08x & %08x\n", ostimer_regs->ower, mem_mask );
615         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Watchdog Match Enable Register: %08x & %08x\n", ostimer_regs->ower, mem_mask );
604616         return ostimer_regs->ower;
605617      case PXA255_OIER:
606         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_r: OS Timer Interrupt Enable Register: %08x & %08x\n", ostimer_regs->oier, mem_mask );
618         if (0) verboselog( machine(), 3, "pxa255_ostimer_r: OS Timer Interrupt Enable Register: %08x & %08x\n", ostimer_regs->oier, mem_mask );
607619         return ostimer_regs->oier;
608620      default:
609         if (0) verboselog( space->machine(), 0, "pxa255_ostimer_r: Unknown address: %08x\n", PXA255_OSTMR_BASE_ADDR | (offset << 2));
621         if (0) verboselog( machine(), 0, "pxa255_ostimer_r: Unknown address: %08x\n", PXA255_OSTMR_BASE_ADDR | (offset << 2));
610622         break;
611623   }
612624   return 0;
613625}
614626
615static WRITE32_HANDLER( pxa255_ostimer_w )
627WRITE32_MEMBER(_39in1_state::pxa255_ostimer_w)
616628{
617   _39in1_state *state = space->machine().driver_data<_39in1_state>();
618   PXA255_OSTMR_Regs *ostimer_regs = &state->m_ostimer_regs;
629   PXA255_OSTMR_Regs *ostimer_regs = &m_ostimer_regs;
619630
620631   switch(PXA255_OSTMR_BASE_ADDR | (offset << 2))
621632   {
622633      case PXA255_OSMR0:
623         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 0: %08x & %08x\n", data, mem_mask );
634         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 0: %08x & %08x\n", data, mem_mask );
624635         ostimer_regs->osmr[0] = data;
625636         if(ostimer_regs->oier & PXA255_OIER_E0)
626637         {
r14845r14846
631642         }
632643         break;
633644      case PXA255_OSMR1:
634         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 1: %08x & %08x\n", data, mem_mask );
645         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 1: %08x & %08x\n", data, mem_mask );
635646         ostimer_regs->osmr[1] = data;
636647         if(ostimer_regs->oier & PXA255_OIER_E1)
637648         {
r14845r14846
641652         }
642653         break;
643654      case PXA255_OSMR2:
644         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 2: %08x & %08x\n", data, mem_mask );
655         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 2: %08x & %08x\n", data, mem_mask );
645656         ostimer_regs->osmr[2] = data;
646657         if(ostimer_regs->oier & PXA255_OIER_E2)
647658         {
r14845r14846
651662         }
652663         break;
653664      case PXA255_OSMR3:
654         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 3: %08x & %08x\n", data, mem_mask );
665         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Match Register 3: %08x & %08x\n", data, mem_mask );
655666         ostimer_regs->osmr[3] = data;
656667         if(ostimer_regs->oier & PXA255_OIER_E3)
657668         {
r14845r14846
661672         }
662673         break;
663674      case PXA255_OSCR:
664         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Count Register: %08x & %08x\n", data, mem_mask );
675         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Count Register: %08x & %08x\n", data, mem_mask );
665676         ostimer_regs->oscr = data;
666677         break;
667678      case PXA255_OSSR:
668         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Status Register: %08x & %08x\n", data, mem_mask );
679         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Status Register: %08x & %08x\n", data, mem_mask );
669680         ostimer_regs->ossr &= ~data;
670         pxa255_ostimer_irq_check(space->machine());
681         pxa255_ostimer_irq_check(machine());
671682         break;
672683      case PXA255_OWER:
673         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Watchdog Enable Register: %08x & %08x\n", data, mem_mask );
684         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Watchdog Enable Register: %08x & %08x\n", data, mem_mask );
674685         ostimer_regs->ower = data & 0x00000001;
675686         break;
676687      case PXA255_OIER:
677688      {
678689         int index = 0;
679         if (0) verboselog( space->machine(), 3, "pxa255_ostimer_w: OS Timer Interrupt Enable Register: %08x & %08x\n", data, mem_mask );
690         if (0) verboselog( machine(), 3, "pxa255_ostimer_w: OS Timer Interrupt Enable Register: %08x & %08x\n", data, mem_mask );
680691         ostimer_regs->oier = data & 0x0000000f;
681692         for(index = 0; index < 4; index++)
682693         {
r14845r14846
691702         break;
692703      }
693704      default:
694         verboselog( space->machine(), 0, "pxa255_ostimer_w: Unknown address: %08x = %08x & %08x\n", PXA255_OSTMR_BASE_ADDR | (offset << 2), data, mem_mask);
705         verboselog( machine(), 0, "pxa255_ostimer_w: Unknown address: %08x = %08x & %08x\n", PXA255_OSTMR_BASE_ADDR | (offset << 2), data, mem_mask);
695706         break;
696707   }
697708}
r14845r14846
726737   pxa255_update_interrupts(machine);
727738}
728739
729static READ32_HANDLER( pxa255_intc_r )
740READ32_MEMBER(_39in1_state::pxa255_intc_r)
730741{
731   _39in1_state *state = space->machine().driver_data<_39in1_state>();
732   PXA255_INTC_Regs *intc_regs = &state->m_intc_regs;
742   PXA255_INTC_Regs *intc_regs = &m_intc_regs;
733743
734744   switch(PXA255_INTC_BASE_ADDR | (offset << 2))
735745   {
736746      case PXA255_ICIP:
737         if (0) verboselog( space->machine(), 3, "pxa255_intc_r: Interrupt Controller IRQ Pending Register: %08x & %08x\n", intc_regs->icip, mem_mask );
747         if (0) verboselog( machine(), 3, "pxa255_intc_r: Interrupt Controller IRQ Pending Register: %08x & %08x\n", intc_regs->icip, mem_mask );
738748         return intc_regs->icip;
739749      case PXA255_ICMR:
740         if (0) verboselog( space->machine(), 3, "pxa255_intc_r: Interrupt Controller Mask Register: %08x & %08x\n", intc_regs->icmr, mem_mask );
750         if (0) verboselog( machine(), 3, "pxa255_intc_r: Interrupt Controller Mask Register: %08x & %08x\n", intc_regs->icmr, mem_mask );
741751         return intc_regs->icmr;
742752      case PXA255_ICLR:
743         if (0) verboselog( space->machine(), 3, "pxa255_intc_r: Interrupt Controller Level Register: %08x & %08x\n", intc_regs->iclr, mem_mask );
753         if (0) verboselog( machine(), 3, "pxa255_intc_r: Interrupt Controller Level Register: %08x & %08x\n", intc_regs->iclr, mem_mask );
744754         return intc_regs->iclr;
745755      case PXA255_ICFP:
746         if (0) verboselog( space->machine(), 3, "pxa255_intc_r: Interrupt Controller FIQ Pending Register: %08x & %08x\n", intc_regs->icfp, mem_mask );
756         if (0) verboselog( machine(), 3, "pxa255_intc_r: Interrupt Controller FIQ Pending Register: %08x & %08x\n", intc_regs->icfp, mem_mask );
747757         return intc_regs->icfp;
748758      case PXA255_ICPR:
749         if (0) verboselog( space->machine(), 3, "pxa255_intc_r: Interrupt Controller Pending Register: %08x & %08x\n", intc_regs->icpr, mem_mask );
759         if (0) verboselog( machine(), 3, "pxa255_intc_r: Interrupt Controller Pending Register: %08x & %08x\n", intc_regs->icpr, mem_mask );
750760         return intc_regs->icpr;
751761      case PXA255_ICCR:
752         if (0) verboselog( space->machine(), 3, "pxa255_intc_r: Interrupt Controller Control Register: %08x & %08x\n", intc_regs->iccr, mem_mask );
762         if (0) verboselog( machine(), 3, "pxa255_intc_r: Interrupt Controller Control Register: %08x & %08x\n", intc_regs->iccr, mem_mask );
753763         return intc_regs->iccr;
754764      default:
755         verboselog( space->machine(), 0, "pxa255_intc_r: Unknown address: %08x\n", PXA255_INTC_BASE_ADDR | (offset << 2));
765         verboselog( machine(), 0, "pxa255_intc_r: Unknown address: %08x\n", PXA255_INTC_BASE_ADDR | (offset << 2));
756766         break;
757767   }
758768   return 0;
759769}
760770
761static WRITE32_HANDLER( pxa255_intc_w )
771WRITE32_MEMBER(_39in1_state::pxa255_intc_w)
762772{
763   _39in1_state *state = space->machine().driver_data<_39in1_state>();
764   PXA255_INTC_Regs *intc_regs = &state->m_intc_regs;
773   PXA255_INTC_Regs *intc_regs = &m_intc_regs;
765774
766775   switch(PXA255_INTC_BASE_ADDR | (offset << 2))
767776   {
768777      case PXA255_ICIP:
769         verboselog( space->machine(), 3, "pxa255_intc_w: (Invalid Write) Interrupt Controller IRQ Pending Register: %08x & %08x\n", data, mem_mask );
778         verboselog( machine(), 3, "pxa255_intc_w: (Invalid Write) Interrupt Controller IRQ Pending Register: %08x & %08x\n", data, mem_mask );
770779         break;
771780      case PXA255_ICMR:
772         if (0) verboselog( space->machine(), 3, "pxa255_intc_w: Interrupt Controller Mask Register: %08x & %08x\n", data, mem_mask );
781         if (0) verboselog( machine(), 3, "pxa255_intc_w: Interrupt Controller Mask Register: %08x & %08x\n", data, mem_mask );
773782         intc_regs->icmr = data & 0xfffe7f00;
774783         break;
775784      case PXA255_ICLR:
776         if (0) verboselog( space->machine(), 3, "pxa255_intc_w: Interrupt Controller Level Register: %08x & %08x\n", data, mem_mask );
785         if (0) verboselog( machine(), 3, "pxa255_intc_w: Interrupt Controller Level Register: %08x & %08x\n", data, mem_mask );
777786         intc_regs->iclr = data & 0xfffe7f00;
778787         break;
779788      case PXA255_ICFP:
780         if (0) verboselog( space->machine(), 3, "pxa255_intc_w: (Invalid Write) Interrupt Controller FIQ Pending Register: %08x & %08x\n", data, mem_mask );
789         if (0) verboselog( machine(), 3, "pxa255_intc_w: (Invalid Write) Interrupt Controller FIQ Pending Register: %08x & %08x\n", data, mem_mask );
781790         break;
782791      case PXA255_ICPR:
783         if (0) verboselog( space->machine(), 3, "pxa255_intc_w: (Invalid Write) Interrupt Controller Pending Register: %08x & %08x\n", data, mem_mask );
792         if (0) verboselog( machine(), 3, "pxa255_intc_w: (Invalid Write) Interrupt Controller Pending Register: %08x & %08x\n", data, mem_mask );
784793         break;
785794      case PXA255_ICCR:
786         if (0) verboselog( space->machine(), 3, "pxa255_intc_w: Interrupt Controller Control Register: %08x & %08x\n", data, mem_mask );
795         if (0) verboselog( machine(), 3, "pxa255_intc_w: Interrupt Controller Control Register: %08x & %08x\n", data, mem_mask );
787796         intc_regs->iccr = data & 0x00000001;
788797         break;
789798      default:
790         verboselog( space->machine(), 0, "pxa255_intc_w: Unknown address: %08x = %08x & %08x\n", PXA255_INTC_BASE_ADDR | (offset << 2), data, mem_mask);
799         verboselog( machine(), 0, "pxa255_intc_w: Unknown address: %08x = %08x & %08x\n", PXA255_INTC_BASE_ADDR | (offset << 2), data, mem_mask);
791800         break;
792801   }
793802}
r14845r14846
800809
801810*/
802811
803static READ32_HANDLER( pxa255_gpio_r )
812READ32_MEMBER(_39in1_state::pxa255_gpio_r)
804813{
805   _39in1_state *state = space->machine().driver_data<_39in1_state>();
806   PXA255_GPIO_Regs *gpio_regs = &state->m_gpio_regs;
814   PXA255_GPIO_Regs *gpio_regs = &m_gpio_regs;
807815
808816   switch(PXA255_GPIO_BASE_ADDR | (offset << 2))
809817   {
810818      case PXA255_GPLR0:
811         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Pin-Level Register 0: %08x & %08x\n", gpio_regs->gplr0 | (1 << 1), mem_mask );
812         return gpio_regs->gplr0 | (1 << 1) | (state->m_eeprom->read_bit() << 5); // Must be on.  Probably a DIP switch.
819         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Pin-Level Register 0: %08x & %08x\n", gpio_regs->gplr0 | (1 << 1), mem_mask );
820         return gpio_regs->gplr0 | (1 << 1) | (m_eeprom->read_bit() << 5); // Must be on.  Probably a DIP switch.
813821      case PXA255_GPLR1:
814         verboselog( space->machine(), 3, "pxa255_gpio_r: *Not Yet Implemented* GPIO Pin-Level Register 1: %08x & %08x\n", gpio_regs->gplr1, mem_mask );
822         verboselog( machine(), 3, "pxa255_gpio_r: *Not Yet Implemented* GPIO Pin-Level Register 1: %08x & %08x\n", gpio_regs->gplr1, mem_mask );
815823         return 0xff9fffff;
816824      /*
817825            0x200000 = flip screen
818826        */
819827      case PXA255_GPLR2:
820         verboselog( space->machine(), 3, "pxa255_gpio_r: *Not Yet Implemented* GPIO Pin-Level Register 2: %08x & %08x\n", gpio_regs->gplr2, mem_mask );
828         verboselog( machine(), 3, "pxa255_gpio_r: *Not Yet Implemented* GPIO Pin-Level Register 2: %08x & %08x\n", gpio_regs->gplr2, mem_mask );
821829         return gpio_regs->gplr2;
822830      case PXA255_GPDR0:
823         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Pin Direction Register 0: %08x & %08x\n", gpio_regs->gpdr0, mem_mask );
831         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Pin Direction Register 0: %08x & %08x\n", gpio_regs->gpdr0, mem_mask );
824832         return gpio_regs->gpdr0;
825833      case PXA255_GPDR1:
826         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Pin Direction Register 1: %08x & %08x\n", gpio_regs->gpdr1, mem_mask );
834         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Pin Direction Register 1: %08x & %08x\n", gpio_regs->gpdr1, mem_mask );
827835         return gpio_regs->gpdr1;
828836      case PXA255_GPDR2:
829         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Pin Direction Register 2: %08x & %08x\n", gpio_regs->gpdr2, mem_mask );
837         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Pin Direction Register 2: %08x & %08x\n", gpio_regs->gpdr2, mem_mask );
830838         return gpio_regs->gpdr2;
831839      case PXA255_GPSR0:
832         verboselog( space->machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Set Register 0: %08x & %08x\n", space->machine().rand(), mem_mask );
833         return space->machine().rand();
840         verboselog( machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Set Register 0: %08x & %08x\n", machine().rand(), mem_mask );
841         return machine().rand();
834842      case PXA255_GPSR1:
835         verboselog( space->machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Set Register 1: %08x & %08x\n", space->machine().rand(), mem_mask );
836         return space->machine().rand();
843         verboselog( machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Set Register 1: %08x & %08x\n", machine().rand(), mem_mask );
844         return machine().rand();
837845      case PXA255_GPSR2:
838         verboselog( space->machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Set Register 2: %08x & %08x\n", space->machine().rand(), mem_mask );
839         return space->machine().rand();
846         verboselog( machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Set Register 2: %08x & %08x\n", machine().rand(), mem_mask );
847         return machine().rand();
840848      case PXA255_GPCR0:
841         verboselog( space->machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Clear Register 0: %08x & %08x\n", space->machine().rand(), mem_mask );
842         return space->machine().rand();
849         verboselog( machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Clear Register 0: %08x & %08x\n", machine().rand(), mem_mask );
850         return machine().rand();
843851      case PXA255_GPCR1:
844         verboselog( space->machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Clear Register 1: %08x & %08x\n", space->machine().rand(), mem_mask );
845         return space->machine().rand();
852         verboselog( machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Clear Register 1: %08x & %08x\n", machine().rand(), mem_mask );
853         return machine().rand();
846854      case PXA255_GPCR2:
847         verboselog( space->machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Clear Register 2: %08x & %08x\n", space->machine().rand(), mem_mask );
848         return space->machine().rand();
855         verboselog( machine(), 3, "pxa255_gpio_r: (Invalid Read) GPIO Pin Output Clear Register 2: %08x & %08x\n", machine().rand(), mem_mask );
856         return machine().rand();
849857      case PXA255_GRER0:
850         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Rising Edge Detect Enable Register 0: %08x & %08x\n", gpio_regs->grer0, mem_mask );
858         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Rising Edge Detect Enable Register 0: %08x & %08x\n", gpio_regs->grer0, mem_mask );
851859         return gpio_regs->grer0;
852860      case PXA255_GRER1:
853         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Rising Edge Detect Enable Register 1: %08x & %08x\n", gpio_regs->grer1, mem_mask );
861         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Rising Edge Detect Enable Register 1: %08x & %08x\n", gpio_regs->grer1, mem_mask );
854862         return gpio_regs->grer1;
855863      case PXA255_GRER2:
856         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Rising Edge Detect Enable Register 2: %08x & %08x\n", gpio_regs->grer2, mem_mask );
864         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Rising Edge Detect Enable Register 2: %08x & %08x\n", gpio_regs->grer2, mem_mask );
857865         return gpio_regs->grer2;
858866      case PXA255_GFER0:
859         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Falling Edge Detect Enable Register 0: %08x & %08x\n", gpio_regs->gfer0, mem_mask );
867         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Falling Edge Detect Enable Register 0: %08x & %08x\n", gpio_regs->gfer0, mem_mask );
860868         return gpio_regs->gfer0;
861869      case PXA255_GFER1:
862         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Falling Edge Detect Enable Register 1: %08x & %08x\n", gpio_regs->gfer1, mem_mask );
870         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Falling Edge Detect Enable Register 1: %08x & %08x\n", gpio_regs->gfer1, mem_mask );
863871         return gpio_regs->gfer1;
864872      case PXA255_GFER2:
865         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Falling Edge Detect Enable Register 2: %08x & %08x\n", gpio_regs->gfer2, mem_mask );
873         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Falling Edge Detect Enable Register 2: %08x & %08x\n", gpio_regs->gfer2, mem_mask );
866874         return gpio_regs->gfer2;
867875      case PXA255_GEDR0:
868         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Edge Detect Status Register 0: %08x & %08x\n", gpio_regs->gedr0, mem_mask );
876         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Edge Detect Status Register 0: %08x & %08x\n", gpio_regs->gedr0, mem_mask );
869877         return gpio_regs->gedr0;
870878      case PXA255_GEDR1:
871         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Edge Detect Status Register 1: %08x & %08x\n", gpio_regs->gedr1, mem_mask );
879         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Edge Detect Status Register 1: %08x & %08x\n", gpio_regs->gedr1, mem_mask );
872880         return gpio_regs->gedr1;
873881      case PXA255_GEDR2:
874         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Edge Detect Status Register 2: %08x & %08x\n", gpio_regs->gedr2, mem_mask );
882         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Edge Detect Status Register 2: %08x & %08x\n", gpio_regs->gedr2, mem_mask );
875883         return gpio_regs->gedr2;
876884      case PXA255_GAFR0_L:
877         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 0 Lower: %08x & %08x\n", gpio_regs->gafr0l, mem_mask );
885         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 0 Lower: %08x & %08x\n", gpio_regs->gafr0l, mem_mask );
878886         return gpio_regs->gafr0l;
879887      case PXA255_GAFR0_U:
880         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 0 Upper: %08x & %08x\n", gpio_regs->gafr0u, mem_mask );
888         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 0 Upper: %08x & %08x\n", gpio_regs->gafr0u, mem_mask );
881889         return gpio_regs->gafr0u;
882890      case PXA255_GAFR1_L:
883         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 1 Lower: %08x & %08x\n", gpio_regs->gafr1l, mem_mask );
891         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 1 Lower: %08x & %08x\n", gpio_regs->gafr1l, mem_mask );
884892         return gpio_regs->gafr1l;
885893      case PXA255_GAFR1_U:
886         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 1 Upper: %08x & %08x\n", gpio_regs->gafr1u, mem_mask );
894         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 1 Upper: %08x & %08x\n", gpio_regs->gafr1u, mem_mask );
887895         return gpio_regs->gafr1u;
888896      case PXA255_GAFR2_L:
889         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 2 Lower: %08x & %08x\n", gpio_regs->gafr2l, mem_mask );
897         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 2 Lower: %08x & %08x\n", gpio_regs->gafr2l, mem_mask );
890898         return gpio_regs->gafr2l;
891899      case PXA255_GAFR2_U:
892         verboselog( space->machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 2 Upper: %08x & %08x\n", gpio_regs->gafr2u, mem_mask );
900         verboselog( machine(), 3, "pxa255_gpio_r: GPIO Alternate Function Register 2 Upper: %08x & %08x\n", gpio_regs->gafr2u, mem_mask );
893901         return gpio_regs->gafr2u;
894902      default:
895         verboselog( space->machine(), 0, "pxa255_gpio_r: Unknown address: %08x\n", PXA255_GPIO_BASE_ADDR | (offset << 2));
903         verboselog( machine(), 0, "pxa255_gpio_r: Unknown address: %08x\n", PXA255_GPIO_BASE_ADDR | (offset << 2));
896904         break;
897905   }
898906   return 0;
899907}
900908
901static WRITE32_HANDLER( pxa255_gpio_w )
909WRITE32_MEMBER(_39in1_state::pxa255_gpio_w)
902910{
903   _39in1_state *state = space->machine().driver_data<_39in1_state>();
904   PXA255_GPIO_Regs *gpio_regs = &state->m_gpio_regs;
911   PXA255_GPIO_Regs *gpio_regs = &m_gpio_regs;
905912
906913   switch(PXA255_GPIO_BASE_ADDR | (offset << 2))
907914   {
908915      case PXA255_GPLR0:
909         verboselog( space->machine(), 3, "pxa255_gpio_w: (Invalid Write) GPIO Pin-Level Register 0: %08x & %08x\n", data, mem_mask );
916         verboselog( machine(), 3, "pxa255_gpio_w: (Invalid Write) GPIO Pin-Level Register 0: %08x & %08x\n", data, mem_mask );
910917         break;
911918      case PXA255_GPLR1:
912         verboselog( space->machine(), 3, "pxa255_gpio_w: (Invalid Write) GPIO Pin-Level Register 1: %08x & %08x\n", data, mem_mask );
919         verboselog( machine(), 3, "pxa255_gpio_w: (Invalid Write) GPIO Pin-Level Register 1: %08x & %08x\n", data, mem_mask );
913920         break;
914921      case PXA255_GPLR2:
915         verboselog( space->machine(), 3, "pxa255_gpio_w: (Invalid Write) GPIO Pin-Level Register 2: %08x & %08x\n", data, mem_mask );
922         verboselog( machine(), 3, "pxa255_gpio_w: (Invalid Write) GPIO Pin-Level Register 2: %08x & %08x\n", data, mem_mask );
916923         break;
917924      case PXA255_GPDR0:
918         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Direction Register 0: %08x & %08x\n", data, mem_mask );
925         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Direction Register 0: %08x & %08x\n", data, mem_mask );
919926         gpio_regs->gpdr0 = data;
920927         break;
921928      case PXA255_GPDR1:
922         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Direction Register 1: %08x & %08x\n", data, mem_mask );
929         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Direction Register 1: %08x & %08x\n", data, mem_mask );
923930         gpio_regs->gpdr1 = data;
924931         break;
925932      case PXA255_GPDR2:
926         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Direction Register 2: %08x & %08x\n", data, mem_mask );
933         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Direction Register 2: %08x & %08x\n", data, mem_mask );
927934         gpio_regs->gpdr2 = data;
928935         break;
929936      case PXA255_GPSR0:
930         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Output Set Register 0: %08x & %08x\n", data, mem_mask );
937         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Output Set Register 0: %08x & %08x\n", data, mem_mask );
931938         gpio_regs->gpsr0 |= data & gpio_regs->gpdr0;
932939         if(data & 0x00000004)
933940         {
934            state->m_eeprom->set_cs_line(CLEAR_LINE);
941            m_eeprom->set_cs_line(CLEAR_LINE);
935942         }
936943         if(data & 0x00000008)
937944         {
938            state->m_eeprom->set_clock_line(ASSERT_LINE);
945            m_eeprom->set_clock_line(ASSERT_LINE);
939946         }
940947         if(data & 0x00000010)
941948         {
942            state->m_eeprom->write_bit(1);
949            m_eeprom->write_bit(1);
943950         }
944951         break;
945952      case PXA255_GPSR1:
946         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Output Set Register 1: %08x & %08x\n", data, mem_mask );
953         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Output Set Register 1: %08x & %08x\n", data, mem_mask );
947954         gpio_regs->gpsr1 |= data & gpio_regs->gpdr1;
948955         break;
949956      case PXA255_GPSR2:
950         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Output Set Register 2: %08x & %08x\n", data, mem_mask );
957         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Output Set Register 2: %08x & %08x\n", data, mem_mask );
951958         gpio_regs->gpsr2 |= data & gpio_regs->gpdr2;
952959         break;
953960      case PXA255_GPCR0:
954         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Output Clear Register 0: %08x & %08x\n", data, mem_mask );
961         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Output Clear Register 0: %08x & %08x\n", data, mem_mask );
955962         gpio_regs->gpsr0 &= ~(data & gpio_regs->gpdr0);
956963         if(data & 0x00000004)
957964         {
958            state->m_eeprom->set_cs_line(ASSERT_LINE);
965            m_eeprom->set_cs_line(ASSERT_LINE);
959966         }
960967         if(data & 0x00000008)
961968         {
962            state->m_eeprom->set_clock_line(CLEAR_LINE);
969            m_eeprom->set_clock_line(CLEAR_LINE);
963970         }
964971         if(data & 0x00000010)
965972         {
966            state->m_eeprom->write_bit(0);
973            m_eeprom->write_bit(0);
967974         }
968975         break;
969976      case PXA255_GPCR1:
970         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Output Clear Register 1: %08x & %08x\n", data, mem_mask );
977         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Output Clear Register 1: %08x & %08x\n", data, mem_mask );
971978         gpio_regs->gpsr1 &= ~(data & gpio_regs->gpdr1);
972979         break;
973980      case PXA255_GPCR2:
974         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Pin Output Clear Register 2: %08x & %08x\n", data, mem_mask );
981         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Pin Output Clear Register 2: %08x & %08x\n", data, mem_mask );
975982         gpio_regs->gpsr2 &= ~(data & gpio_regs->gpdr2);
976983         break;
977984      case PXA255_GRER0:
978         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Rising Edge Detect Enable Register 0: %08x & %08x\n", data, mem_mask );
985         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Rising Edge Detect Enable Register 0: %08x & %08x\n", data, mem_mask );
979986         gpio_regs->grer0 = data;
980987         break;
981988      case PXA255_GRER1:
982         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Rising Edge Detect Enable Register 1: %08x & %08x\n", data, mem_mask );
989         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Rising Edge Detect Enable Register 1: %08x & %08x\n", data, mem_mask );
983990         gpio_regs->grer1 = data;
984991         break;
985992      case PXA255_GRER2:
986         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Rising Edge Detect Enable Register 2: %08x & %08x\n", data, mem_mask );
993         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Rising Edge Detect Enable Register 2: %08x & %08x\n", data, mem_mask );
987994         gpio_regs->grer2 = data;
988995         break;
989996      case PXA255_GFER0:
990         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Falling Edge Detect Enable Register 0: %08x & %08x\n", data, mem_mask );
997         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Falling Edge Detect Enable Register 0: %08x & %08x\n", data, mem_mask );
991998         gpio_regs->gfer0 = data;
992999         break;
9931000      case PXA255_GFER1:
994         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Falling Edge Detect Enable Register 1: %08x & %08x\n", data, mem_mask );
1001         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Falling Edge Detect Enable Register 1: %08x & %08x\n", data, mem_mask );
9951002         gpio_regs->gfer1 = data;
9961003         break;
9971004      case PXA255_GFER2:
998         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Falling Edge Detect Enable Register 2: %08x & %08x\n", data, mem_mask );
1005         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Falling Edge Detect Enable Register 2: %08x & %08x\n", data, mem_mask );
9991006         gpio_regs->gfer2 = data;
10001007         break;
10011008      case PXA255_GEDR0:
1002         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Edge Detect Status Register 0: %08x & %08x\n", gpio_regs->gedr0, mem_mask );
1009         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Edge Detect Status Register 0: %08x & %08x\n", gpio_regs->gedr0, mem_mask );
10031010         gpio_regs->gedr0 &= ~data;
10041011         break;
10051012      case PXA255_GEDR1:
1006         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Edge Detect Status Register 1: %08x & %08x\n", gpio_regs->gedr1, mem_mask );
1013         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Edge Detect Status Register 1: %08x & %08x\n", gpio_regs->gedr1, mem_mask );
10071014         gpio_regs->gedr1 &= ~data;
10081015         break;
10091016      case PXA255_GEDR2:
1010         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Edge Detect Status Register 2: %08x & %08x\n", gpio_regs->gedr2, mem_mask );
1017         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Edge Detect Status Register 2: %08x & %08x\n", gpio_regs->gedr2, mem_mask );
10111018         gpio_regs->gedr2 &= ~data;
10121019         break;
10131020      case PXA255_GAFR0_L:
1014         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 0 Lower: %08x & %08x\n", gpio_regs->gafr0l, mem_mask );
1021         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 0 Lower: %08x & %08x\n", gpio_regs->gafr0l, mem_mask );
10151022         gpio_regs->gafr0l = data;
10161023         break;
10171024      case PXA255_GAFR0_U:
1018         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 0 Upper: %08x & %08x\n", gpio_regs->gafr0u, mem_mask );
1025         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 0 Upper: %08x & %08x\n", gpio_regs->gafr0u, mem_mask );
10191026         gpio_regs->gafr0u = data;
10201027         break;
10211028      case PXA255_GAFR1_L:
1022         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 1 Lower: %08x & %08x\n", gpio_regs->gafr1l, mem_mask );
1029         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 1 Lower: %08x & %08x\n", gpio_regs->gafr1l, mem_mask );
10231030         gpio_regs->gafr1l = data;
10241031         break;
10251032      case PXA255_GAFR1_U:
1026         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 1 Upper: %08x & %08x\n", gpio_regs->gafr1u, mem_mask );
1033         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 1 Upper: %08x & %08x\n", gpio_regs->gafr1u, mem_mask );
10271034         gpio_regs->gafr1u = data;
10281035         break;
10291036      case PXA255_GAFR2_L:
1030         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 2 Lower: %08x & %08x\n", gpio_regs->gafr2l, mem_mask );
1037         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 2 Lower: %08x & %08x\n", gpio_regs->gafr2l, mem_mask );
10311038         gpio_regs->gafr2l = data;
10321039         break;
10331040      case PXA255_GAFR2_U:
1034         verboselog( space->machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 2 Upper: %08x & %08x\n", gpio_regs->gafr2u, mem_mask );
1041         verboselog( machine(), 3, "pxa255_gpio_w: GPIO Alternate Function Register 2 Upper: %08x & %08x\n", gpio_regs->gafr2u, mem_mask );
10351042         gpio_regs->gafr2u = data;
10361043         break;
10371044      default:
1038         verboselog( space->machine(), 0, "pxa255_gpio_w: Unknown address: %08x = %08x & %08x\n", PXA255_GPIO_BASE_ADDR | (offset << 2), data, mem_mask);
1045         verboselog( machine(), 0, "pxa255_gpio_w: Unknown address: %08x = %08x & %08x\n", PXA255_GPIO_BASE_ADDR | (offset << 2), data, mem_mask);
10391046         break;
10401047   }
10411048}
r14845r14846
11691176   pxa255_lcd_irq_check(machine);
11701177}
11711178
1172static READ32_HANDLER( pxa255_lcd_r )
1179READ32_MEMBER(_39in1_state::pxa255_lcd_r)
11731180{
1174   _39in1_state *state = space->machine().driver_data<_39in1_state>();
1175   PXA255_LCD_Regs *lcd_regs = &state->m_lcd_regs;
1181   PXA255_LCD_Regs *lcd_regs = &m_lcd_regs;
11761182
11771183   switch(PXA255_LCD_BASE_ADDR | (offset << 2))
11781184   {
11791185      case PXA255_LCCR0:      // 0x44000000
1180         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD Control 0: %08x & %08x\n", lcd_regs->lccr0, mem_mask );
1186         verboselog( machine(), 3, "pxa255_lcd_r: LCD Control 0: %08x & %08x\n", lcd_regs->lccr0, mem_mask );
11811187         return lcd_regs->lccr0;
11821188      case PXA255_LCCR1:      // 0x44000004
1183         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD Control 1: %08x & %08x\n", lcd_regs->lccr1, mem_mask );
1189         verboselog( machine(), 3, "pxa255_lcd_r: LCD Control 1: %08x & %08x\n", lcd_regs->lccr1, mem_mask );
11841190         return lcd_regs->lccr1;
11851191      case PXA255_LCCR2:      // 0x44000008
1186         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD Control 2: %08x & %08x\n", lcd_regs->lccr2, mem_mask );
1192         verboselog( machine(), 3, "pxa255_lcd_r: LCD Control 2: %08x & %08x\n", lcd_regs->lccr2, mem_mask );
11871193         return lcd_regs->lccr2;
11881194      case PXA255_LCCR3:      // 0x4400000c
1189         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD Control 3: %08x & %08x\n", lcd_regs->lccr3, mem_mask );
1195         verboselog( machine(), 3, "pxa255_lcd_r: LCD Control 3: %08x & %08x\n", lcd_regs->lccr3, mem_mask );
11901196         return lcd_regs->lccr3;
11911197      case PXA255_FBR0:      // 0x44000020
1192         verboselog( space->machine(), 4, "pxa255_lcd_r: LCD Frame Branch Register 0: %08x & %08x\n", lcd_regs->fbr[0], mem_mask );
1198         verboselog( machine(), 4, "pxa255_lcd_r: LCD Frame Branch Register 0: %08x & %08x\n", lcd_regs->fbr[0], mem_mask );
11931199         return lcd_regs->fbr[0];
11941200      case PXA255_FBR1:      // 0x44000024
1195         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD Frame Branch Register 1: %08x & %08x\n", lcd_regs->fbr[1], mem_mask );
1201         verboselog( machine(), 3, "pxa255_lcd_r: LCD Frame Branch Register 1: %08x & %08x\n", lcd_regs->fbr[1], mem_mask );
11961202         return lcd_regs->fbr[1];
11971203      case PXA255_LCSR:      // 0x44000038
1198         verboselog( space->machine(), 4, "pxa255_lcd_r: LCD Status Register: %08x & %08x\n", lcd_regs->lcsr, mem_mask );
1204         verboselog( machine(), 4, "pxa255_lcd_r: LCD Status Register: %08x & %08x\n", lcd_regs->lcsr, mem_mask );
11991205         return lcd_regs->lcsr;
12001206      case PXA255_LIIDR:      // 0x4400003c
1201         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD Interrupt ID Register: %08x & %08x\n", lcd_regs->liidr, mem_mask );
1207         verboselog( machine(), 3, "pxa255_lcd_r: LCD Interrupt ID Register: %08x & %08x\n", lcd_regs->liidr, mem_mask );
12021208         return lcd_regs->liidr;
12031209      case PXA255_TRGBR:      // 0x44000040
1204         verboselog( space->machine(), 3, "pxa255_lcd_r: TMED RGB Seed Register: %08x & %08x\n", lcd_regs->trgbr, mem_mask );
1210         verboselog( machine(), 3, "pxa255_lcd_r: TMED RGB Seed Register: %08x & %08x\n", lcd_regs->trgbr, mem_mask );
12051211         return lcd_regs->trgbr;
12061212      case PXA255_TCR:      // 0x44000044
1207         verboselog( space->machine(), 3, "pxa255_lcd_r: TMED RGB Seed Register: %08x & %08x\n", lcd_regs->tcr, mem_mask );
1213         verboselog( machine(), 3, "pxa255_lcd_r: TMED RGB Seed Register: %08x & %08x\n", lcd_regs->tcr, mem_mask );
12081214         return lcd_regs->tcr;
12091215      case PXA255_FDADR0:      // 0x44000200
1210         if (0) verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Frame Descriptor Address Register 0: %08x & %08x\n", lcd_regs->dma[0].fdadr, mem_mask );
1216         if (0) verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Frame Descriptor Address Register 0: %08x & %08x\n", lcd_regs->dma[0].fdadr, mem_mask );
12111217         return lcd_regs->dma[0].fdadr;
12121218      case PXA255_FSADR0:      // 0x44000204
1213         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Frame Source Address Register 0: %08x & %08x\n", lcd_regs->dma[0].fsadr, mem_mask );
1219         verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Frame Source Address Register 0: %08x & %08x\n", lcd_regs->dma[0].fsadr, mem_mask );
12141220         return lcd_regs->dma[0].fsadr;
12151221      case PXA255_FIDR0:      // 0x44000208
1216         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Frame ID Register 0: %08x & %08x\n", lcd_regs->dma[0].fidr, mem_mask );
1222         verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Frame ID Register 0: %08x & %08x\n", lcd_regs->dma[0].fidr, mem_mask );
12171223         return lcd_regs->dma[0].fidr;
12181224      case PXA255_LDCMD0:      // 0x4400020c
1219         if (0) verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Command Register 0: %08x & %08x\n", lcd_regs->dma[0].ldcmd & 0xfff00000, mem_mask );
1225         if (0) verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Command Register 0: %08x & %08x\n", lcd_regs->dma[0].ldcmd & 0xfff00000, mem_mask );
12201226         return lcd_regs->dma[0].ldcmd & 0xfff00000;
12211227      case PXA255_FDADR1:      // 0x44000210
1222         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Frame Descriptor Address Register 1: %08x & %08x\n", lcd_regs->dma[1].fdadr, mem_mask );
1228         verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Frame Descriptor Address Register 1: %08x & %08x\n", lcd_regs->dma[1].fdadr, mem_mask );
12231229         return lcd_regs->dma[1].fdadr;
12241230      case PXA255_FSADR1:      // 0x44000214
1225         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Frame Source Address Register 1: %08x & %08x\n", lcd_regs->dma[1].fsadr, mem_mask );
1231         verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Frame Source Address Register 1: %08x & %08x\n", lcd_regs->dma[1].fsadr, mem_mask );
12261232         return lcd_regs->dma[1].fsadr;
12271233      case PXA255_FIDR1:      // 0x44000218
1228         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Frame ID Register 1: %08x & %08x\n", lcd_regs->dma[1].fidr, mem_mask );
1234         verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Frame ID Register 1: %08x & %08x\n", lcd_regs->dma[1].fidr, mem_mask );
12291235         return lcd_regs->dma[1].fidr;
12301236      case PXA255_LDCMD1:      // 0x4400021c
1231         verboselog( space->machine(), 3, "pxa255_lcd_r: LCD DMA Command Register 1: %08x & %08x\n", lcd_regs->dma[1].ldcmd & 0xfff00000, mem_mask );
1237         verboselog( machine(), 3, "pxa255_lcd_r: LCD DMA Command Register 1: %08x & %08x\n", lcd_regs->dma[1].ldcmd & 0xfff00000, mem_mask );
12321238         return lcd_regs->dma[1].ldcmd & 0xfff00000;
12331239      default:
1234         verboselog( space->machine(), 0, "pxa255_lcd_r: Unknown address: %08x\n", PXA255_LCD_BASE_ADDR | (offset << 2));
1240         verboselog( machine(), 0, "pxa255_lcd_r: Unknown address: %08x\n", PXA255_LCD_BASE_ADDR | (offset << 2));
12351241         break;
12361242   }
12371243   return 0;
12381244}
12391245
1240static WRITE32_HANDLER( pxa255_lcd_w )
1246WRITE32_MEMBER(_39in1_state::pxa255_lcd_w)
12411247{
1242   _39in1_state *state = space->machine().driver_data<_39in1_state>();
1243   PXA255_LCD_Regs *lcd_regs = &state->m_lcd_regs;
1248   PXA255_LCD_Regs *lcd_regs = &m_lcd_regs;
12441249
12451250   switch(PXA255_LCD_BASE_ADDR | (offset << 2))
12461251   {
12471252      case PXA255_LCCR0:      // 0x44000000
1248         verboselog( space->machine(), 3, "pxa255_lcd_w: LCD Control 0: %08x & %08x\n", data, mem_mask );
1253         verboselog( machine(), 3, "pxa255_lcd_w: LCD Control 0: %08x & %08x\n", data, mem_mask );
12491254         lcd_regs->lccr0 = data & 0x00fffeff;
12501255         break;
12511256      case PXA255_LCCR1:      // 0x44000004
1252         verboselog( space->machine(), 3, "pxa255_lcd_w: LCD Control 1: %08x & %08x\n", data, mem_mask );
1257         verboselog( machine(), 3, "pxa255_lcd_w: LCD Control 1: %08x & %08x\n", data, mem_mask );
12531258         lcd_regs->lccr1 = data;
12541259         break;
12551260      case PXA255_LCCR2:      // 0x44000008
1256         verboselog( space->machine(), 3, "pxa255_lcd_w: LCD Control 2: %08x & %08x\n", data, mem_mask );
1261         verboselog( machine(), 3, "pxa255_lcd_w: LCD Control 2: %08x & %08x\n", data, mem_mask );
12571262         lcd_regs->lccr2 = data;
12581263         break;
12591264      case PXA255_LCCR3:      // 0x4400000c
1260         verboselog( space->machine(), 3, "pxa255_lcd_w: LCD Control 3: %08x & %08x\n", data, mem_mask );
1265         verboselog( machine(), 3, "pxa255_lcd_w: LCD Control 3: %08x & %08x\n", data, mem_mask );
12611266         lcd_regs->lccr3 = data;
12621267         break;
12631268      case PXA255_FBR0:      // 0x44000020
1264         verboselog( space->machine(), 4l, "pxa255_lcd_w: LCD Frame Branch Register 0: %08x & %08x\n", data, mem_mask );
1269         verboselog( machine(), 4l, "pxa255_lcd_w: LCD Frame Branch Register 0: %08x & %08x\n", data, mem_mask );
12651270         lcd_regs->fbr[0] = data & 0xfffffff3;
12661271         if(!lcd_regs->dma[0].eof->enabled())
12671272         {
1268            if (0) verboselog( space->machine(), 3, "ch0 EOF timer is not enabled, taking branch now\n" );
1269            pxa255_lcd_check_load_next_branch(space->machine(), 0);
1270            pxa255_lcd_irq_check(space->machine());
1273            if (0) verboselog( machine(), 3, "ch0 EOF timer is not enabled, taking branch now\n" );
1274            pxa255_lcd_check_load_next_branch(machine(), 0);
1275            pxa255_lcd_irq_check(machine());
12711276         }
12721277         break;
12731278      case PXA255_FBR1:      // 0x44000024
1274         verboselog( space->machine(), 3, "pxa255_lcd_w: LCD Frame Branch Register 1: %08x & %08x\n", data, mem_mask );
1279         verboselog( machine(), 3, "pxa255_lcd_w: LCD Frame Branch Register 1: %08x & %08x\n", data, mem_mask );
12751280         lcd_regs->fbr[1] = data & 0xfffffff3;
12761281         if(!lcd_regs->dma[1].eof->enabled())
12771282         {
1278            verboselog( space->machine(), 3, "ch1 EOF timer is not enabled, taking branch now\n" );
1279            pxa255_lcd_check_load_next_branch(space->machine(), 1);
1280            pxa255_lcd_irq_check(space->machine());
1283            verboselog( machine(), 3, "ch1 EOF timer is not enabled, taking branch now\n" );
1284            pxa255_lcd_check_load_next_branch(machine(), 1);
1285            pxa255_lcd_irq_check(machine());
12811286         }
12821287         break;
12831288      case PXA255_LCSR:      // 0x44000038
1284         verboselog( space->machine(), 4, "pxa255_lcd_w: LCD Controller Status Register: %08x & %08x\n", data, mem_mask );
1289         verboselog( machine(), 4, "pxa255_lcd_w: LCD Controller Status Register: %08x & %08x\n", data, mem_mask );
12851290         lcd_regs->lcsr &= ~data;
1286         pxa255_lcd_irq_check(space->machine());
1291         pxa255_lcd_irq_check(machine());
12871292         break;
12881293      case PXA255_LIIDR:      // 0x4400003c
1289         verboselog( space->machine(), 3, "pxa255_lcd_w: LCD Controller Interrupt ID Register: %08x & %08x\n", data, mem_mask );
1294         verboselog( machine(), 3, "pxa255_lcd_w: LCD Controller Interrupt ID Register: %08x & %08x\n", data, mem_mask );
12901295         break;
12911296      case PXA255_TRGBR:      // 0x44000040
1292         verboselog( space->machine(), 3, "pxa255_lcd_w: TMED RGB Seed Register: %08x & %08x\n", data, mem_mask );
1297         verboselog( machine(), 3, "pxa255_lcd_w: TMED RGB Seed Register: %08x & %08x\n", data, mem_mask );
12931298         lcd_regs->trgbr = data & 0x00ffffff;
12941299         break;
12951300      case PXA255_TCR:      // 0x44000044
1296         verboselog( space->machine(), 3, "pxa255_lcd_w: TMED Control Register: %08x & %08x\n", data, mem_mask );
1301         verboselog( machine(), 3, "pxa255_lcd_w: TMED Control Register: %08x & %08x\n", data, mem_mask );
12971302         lcd_regs->tcr = data & 0x00004fff;
12981303         break;
12991304      case PXA255_FDADR0:      // 0x44000200
1300         verboselog( space->machine(), 4, "pxa255_lcd_w: LCD DMA Frame Descriptor Address Register 0: %08x & %08x\n", data, mem_mask );
1305         verboselog( machine(), 4, "pxa255_lcd_w: LCD DMA Frame Descriptor Address Register 0: %08x & %08x\n", data, mem_mask );
13011306         if(!lcd_regs->dma[0].eof->enabled())
13021307         {
1303            pxa255_lcd_load_dma_descriptor(space, data & 0xfffffff0, 0);
1308            pxa255_lcd_load_dma_descriptor(&space, data & 0xfffffff0, 0);
13041309         }
13051310         else
13061311         {
r14845r14846
13091314         }
13101315         break;
13111316      case PXA255_FSADR0:      // 0x44000204
1312         verboselog( space->machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame Source Address Register 0: %08x & %08x\n", data, mem_mask );
1317         verboselog( machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame Source Address Register 0: %08x & %08x\n", data, mem_mask );
13131318         break;
13141319      case PXA255_FIDR0:      // 0x44000208
1315         verboselog( space->machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame ID Register 0: %08x & %08x\n", data, mem_mask );
1320         verboselog( machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame ID Register 0: %08x & %08x\n", data, mem_mask );
13161321         break;
13171322      case PXA255_LDCMD0:      // 0x4400020c
1318         verboselog( space->machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Command Register 0: %08x & %08x\n", data, mem_mask );
1323         verboselog( machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Command Register 0: %08x & %08x\n", data, mem_mask );
13191324         break;
13201325      case PXA255_FDADR1:      // 0x44000210
1321         verboselog( space->machine(), 4, "pxa255_lcd_w: LCD DMA Frame Descriptor Address Register 1: %08x & %08x\n", data, mem_mask );
1326         verboselog( machine(), 4, "pxa255_lcd_w: LCD DMA Frame Descriptor Address Register 1: %08x & %08x\n", data, mem_mask );
13221327         if(!lcd_regs->dma[1].eof->enabled())
13231328         {
1324            pxa255_lcd_load_dma_descriptor(space, data & 0xfffffff0, 1);
1329            pxa255_lcd_load_dma_descriptor(&space, data & 0xfffffff0, 1);
13251330         }
13261331         else
13271332         {
r14845r14846
13301335         }
13311336         break;
13321337      case PXA255_FSADR1:      // 0x44000214
1333         verboselog( space->machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame Source Address Register 1: %08x & %08x\n", data, mem_mask );
1338         verboselog( machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame Source Address Register 1: %08x & %08x\n", data, mem_mask );
13341339         break;
13351340      case PXA255_FIDR1:      // 0x44000218
1336         verboselog( space->machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame ID Register 1: %08x & %08x\n", data, mem_mask );
1341         verboselog( machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Frame ID Register 1: %08x & %08x\n", data, mem_mask );
13371342         break;
13381343      case PXA255_LDCMD1:      // 0x4400021c
1339         verboselog( space->machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Command Register 1: %08x & %08x\n", data, mem_mask );
1344         verboselog( machine(), 4, "pxa255_lcd_w: (Invalid Write) LCD DMA Command Register 1: %08x & %08x\n", data, mem_mask );
13401345         break;
13411346      default:
1342         verboselog( space->machine(), 0, "pxa255_lcd_w: Unknown address: %08x = %08x & %08x\n", PXA255_LCD_BASE_ADDR | (offset << 2), data, mem_mask);
1347         verboselog( machine(), 0, "pxa255_lcd_w: Unknown address: %08x = %08x & %08x\n", PXA255_LCD_BASE_ADDR | (offset << 2), data, mem_mask);
13431348         break;
13441349   }
13451350}
r14845r14846
13491354}
13501355
13511356#ifdef UNUSED_FUNCTION
1352static READ32_HANDLER( return_zero )
1357READ32_MEMBER(_39in1_state::return_zero)
13531358{
13541359   return 0;
13551360}
13561361
1357static READ32_HANDLER( unknown_r )
1362READ32_MEMBER(_39in1_state::unknown_r)
13581363{
13591364   return 0x00008000;
13601365}
13611366#endif
13621367
1363static READ32_HANDLER( cpld_r )
1368READ32_MEMBER(_39in1_state::cpld_r)
13641369{
1365   _39in1_state *state = space->machine().driver_data<_39in1_state>();
13661370
1367   //if (cpu_get_pc(&space->device()) != 0xe3af4) printf("CPLD read @ %x (PC %x state %d)\n", offset, cpu_get_pc(&space->device()), state);
1371   //if (cpu_get_pc(&space.device()) != 0xe3af4) printf("CPLD read @ %x (PC %x state %d)\n", offset, cpu_get_pc(&space.device()), state);
13681372
1369   if (cpu_get_pc(&space->device()) == 0x3f04)
1373   if (cpu_get_pc(&space.device()) == 0x3f04)
13701374   {
13711375      return 0xf0;     // any non-zero value works here
13721376   }
1373   else if (cpu_get_pc(&space->device()) == 0xe3af4)
1377   else if (cpu_get_pc(&space.device()) == 0xe3af4)
13741378   {
1375      return input_port_read(space->machine(), "MCUIPT");
1379      return input_port_read(machine(), "MCUIPT");
13761380   }
13771381   else
13781382   {
1379      if (state->m_state == 0)
1383      if (m_state == 0)
13801384      {
13811385         return 0;
13821386      }
1383      else if (state->m_state == 1)
1387      else if (m_state == 1)
13841388      {
13851389         switch (offset & ~1)
13861390         {
r14845r14846
13951399            default: printf("State 1 unknown offset %x\n", offset); break;
13961400         }
13971401      }
1398      else if (state->m_state == 2)                  // 29c0: 53 ac 0c 2b a2 07 e6 be 31
1402      else if (m_state == 2)                  // 29c0: 53 ac 0c 2b a2 07 e6 be 31
13991403      {
1400         UINT32 seed = state->m_seed;
1401         UINT32 magic = state->m_magic;
1404         UINT32 seed = m_seed;
1405         UINT32 magic = m_magic;
14021406
14031407         magic = ( (((~(seed >> 16))       ^ (magic >> 1))        & 0x01) |
14041408            (((~((seed >> 19) << 1))        ^ ((magic >> 5) << 1)) & 0x02) |
r14845r14846
14091413            (((~(((seed >> 16) >> 1) << 6)) ^ ((magic >> 7) << 6)) & 0x40) |
14101414            (((~(((seed >> 16) >> 5) << 7)) ^  (magic << 7))       & 0x80));
14111415
1412         state->m_magic = magic;
1416         m_magic = magic;
14131417         return magic;
14141418      }
14151419   }
r14845r14846
14171421   return 0;
14181422}
14191423
1420static WRITE32_HANDLER( cpld_w )
1424WRITE32_MEMBER(_39in1_state::cpld_w)
14211425{
1422   _39in1_state *state = space->machine().driver_data<_39in1_state>();
14231426
14241427   if (mem_mask == 0xffff)
14251428   {
1426      state->m_seed = data<<16;
1429      m_seed = data<<16;
14271430   }
14281431
1429   if (cpu_get_pc(&space->device()) == 0x280c)
1432   if (cpu_get_pc(&space.device()) == 0x280c)
14301433   {
1431      state->m_state = 1;
1434      m_state = 1;
14321435   }
1433   if (cpu_get_pc(&space->device()) == 0x2874)
1436   if (cpu_get_pc(&space.device()) == 0x2874)
14341437   {
1435      state->m_state = 2;
1436      state->m_magic = space->read_byte(0xa02d4ff0);
1438      m_state = 2;
1439      m_magic = space.read_byte(0xa02d4ff0);
14371440   }
14381441   else if (offset == 0xa)
14391442   {
r14845r14846
14411444#if 0
14421445   else
14431446   {
1444      printf("%08x: CPLD_W: %08x = %08x & %08x\n", cpu_get_pc(&space->device()), offset, data, mem_mask);
1447      printf("%08x: CPLD_W: %08x = %08x & %08x\n", cpu_get_pc(&space.device()), offset, data, mem_mask);
14451448   }
14461449#endif
14471450}
14481451
1449static READ32_HANDLER( prot_cheater_r )
1452READ32_MEMBER(_39in1_state::prot_cheater_r)
14501453{
14511454   return 0x37;
14521455}
r14845r14846
14601463   state->m_eeprom = machine.device<eeprom_device>("eeprom");
14611464
14621465   address_space *space = machine.device<pxa255_device>("maincpu")->space(AS_PROGRAM);
1463   space->install_legacy_read_handler (0xa0151648, 0xa015164b, FUNC(prot_cheater_r));
1466   space->install_read_handler (0xa0151648, 0xa015164b, read32_delegate(FUNC(_39in1_state::prot_cheater_r), state));
14641467}
14651468
14661469static ADDRESS_MAP_START( 39in1_map, AS_PROGRAM, 32, _39in1_state )
14671470   AM_RANGE(0x00000000, 0x0007ffff) AM_ROM
14681471   AM_RANGE(0x00400000, 0x005fffff) AM_ROM AM_REGION("data", 0)
1469   AM_RANGE(0x04000000, 0x047fffff) AM_READWRITE_LEGACY(cpld_r, cpld_w )
1470   AM_RANGE(0x40000000, 0x400002ff) AM_READWRITE_LEGACY(pxa255_dma_r, pxa255_dma_w )
1471   AM_RANGE(0x40400000, 0x40400083) AM_READWRITE_LEGACY(pxa255_i2s_r, pxa255_i2s_w )
1472   AM_RANGE(0x40a00000, 0x40a0001f) AM_READWRITE_LEGACY(pxa255_ostimer_r, pxa255_ostimer_w )
1473   AM_RANGE(0x40d00000, 0x40d00017) AM_READWRITE_LEGACY(pxa255_intc_r, pxa255_intc_w )
1474   AM_RANGE(0x40e00000, 0x40e0006b) AM_READWRITE_LEGACY(pxa255_gpio_r, pxa255_gpio_w )
1475   AM_RANGE(0x44000000, 0x4400021f) AM_READWRITE_LEGACY(pxa255_lcd_r,  pxa255_lcd_w )
1472   AM_RANGE(0x04000000, 0x047fffff) AM_READWRITE(cpld_r, cpld_w )
1473   AM_RANGE(0x40000000, 0x400002ff) AM_READWRITE(pxa255_dma_r, pxa255_dma_w )
1474   AM_RANGE(0x40400000, 0x40400083) AM_READWRITE(pxa255_i2s_r, pxa255_i2s_w )
1475   AM_RANGE(0x40a00000, 0x40a0001f) AM_READWRITE(pxa255_ostimer_r, pxa255_ostimer_w )
1476   AM_RANGE(0x40d00000, 0x40d00017) AM_READWRITE(pxa255_intc_r, pxa255_intc_w )
1477   AM_RANGE(0x40e00000, 0x40e0006b) AM_READWRITE(pxa255_gpio_r, pxa255_gpio_w )
1478   AM_RANGE(0x44000000, 0x4400021f) AM_READWRITE(pxa255_lcd_r,  pxa255_lcd_w )
14761479   AM_RANGE(0xa0000000, 0xa07fffff) AM_RAM AM_BASE(m_ram)
14771480ADDRESS_MAP_END
14781481
src/mame/drivers/gunpey.c
r14845r14846
5959
6060   UINT16 *m_blit_buffer;
6161   UINT16 m_blit_ram[0x10];
62   DECLARE_WRITE8_MEMBER(gunpey_status_w);
63   DECLARE_READ8_MEMBER(gunpey_status_r);
64   DECLARE_READ8_MEMBER(gunpey_inputs_r);
65   DECLARE_WRITE8_MEMBER(gunpey_blitter_w);
6266};
6367
6468
r14845r14846
100104   return 0;
101105}
102106
103static WRITE8_HANDLER( gunpey_status_w )
107WRITE8_MEMBER(gunpey_state::gunpey_status_w)
104108{
105109}
106110
107static READ8_HANDLER( gunpey_status_r )
111READ8_MEMBER(gunpey_state::gunpey_status_r)
108112{
109113   if(offset == 1)
110114      return 0x54;
r14845r14846
112116   return 0x00;
113117}
114118
115static READ8_HANDLER( gunpey_inputs_r )
119READ8_MEMBER(gunpey_state::gunpey_inputs_r)
116120{
117121   switch(offset+0x7f40)
118122   {
119      case 0x7f40: return input_port_read(space->machine(), "DSW1");
120      case 0x7f41: return input_port_read(space->machine(), "DSW2");
121      case 0x7f42: return input_port_read(space->machine(), "P1");
122      case 0x7f43: return input_port_read(space->machine(), "P2");
123      case 0x7f44: return input_port_read(space->machine(), "SYSTEM");
123      case 0x7f40: return input_port_read(machine(), "DSW1");
124      case 0x7f41: return input_port_read(machine(), "DSW2");
125      case 0x7f42: return input_port_read(machine(), "P1");
126      case 0x7f43: return input_port_read(machine(), "P2");
127      case 0x7f44: return input_port_read(machine(), "SYSTEM");
124128   }
125129
126130   return 0xff;
127131}
128132
129static WRITE8_HANDLER( gunpey_blitter_w )
133WRITE8_MEMBER(gunpey_state::gunpey_blitter_w)
130134{
131   gunpey_state *state = space->machine().driver_data<gunpey_state>();
132   UINT16 *blit_buffer = state->m_blit_buffer;
133   UINT16 *blit_ram = state->m_blit_ram;
134   UINT8 *blit_rom = space->machine().region("blit_data")->base();
135   UINT16 *blit_buffer = m_blit_buffer;
136   UINT16 *blit_ram = m_blit_ram;
137   UINT8 *blit_rom = machine().region("blit_data")->base();
135138   int x,y;
136139
137140   blit_ram[offset] = data;
r14845r14846
189192ADDRESS_MAP_END
190193
191194static ADDRESS_MAP_START( io_map, AS_IO, 16, gunpey_state )
192   AM_RANGE(0x7f40, 0x7f45) AM_READ8_LEGACY(gunpey_inputs_r,0xffff)
195   AM_RANGE(0x7f40, 0x7f45) AM_READ8(gunpey_inputs_r,0xffff)
193196
194197//  AM_RANGE(0x7f48, 0x7f48) AM_WRITE_LEGACY(output_w)
195198   AM_RANGE(0x7f80, 0x7f81) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0xffff)
196199
197200   AM_RANGE(0x7f88, 0x7f89) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0xff00)
198201
199   AM_RANGE(0x7fc8, 0x7fc9) AM_READWRITE8_LEGACY(gunpey_status_r,  gunpey_status_w, 0xffff )
200   AM_RANGE(0x7fd0, 0x7fdf) AM_WRITE8_LEGACY(gunpey_blitter_w, 0xffff )
202   AM_RANGE(0x7fc8, 0x7fc9) AM_READWRITE8(gunpey_status_r,  gunpey_status_w, 0xffff )
203   AM_RANGE(0x7fd0, 0x7fdf) AM_WRITE8(gunpey_blitter_w, 0xffff )
201204ADDRESS_MAP_END
202205
203206
src/mame/drivers/superwng.c
r14845r14846
5050   tilemap_t *   m_bg_tilemap;
5151   tilemap_t *   m_fg_tilemap;
5252
53   DECLARE_WRITE8_MEMBER(superwng_nmi_enable_w);
54   DECLARE_WRITE8_MEMBER(superwng_sound_interrupt_w);
55   DECLARE_WRITE8_MEMBER(superwng_sound_nmi_clear_w);
56   DECLARE_WRITE8_MEMBER(superwng_bg_vram_w);
57   DECLARE_WRITE8_MEMBER(superwng_bg_cram_w);
58   DECLARE_WRITE8_MEMBER(superwng_fg_vram_w);
59   DECLARE_WRITE8_MEMBER(superwng_fg_cram_w);
60   DECLARE_WRITE8_MEMBER(superwng_tilebank_w);
61   DECLARE_WRITE8_MEMBER(superwng_flip_screen_w);
62   DECLARE_WRITE8_MEMBER(superwng_cointcnt1_w);
63   DECLARE_WRITE8_MEMBER(superwng_cointcnt2_w);
5364};
5465
5566static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
189200   }
190201}
191202
192static WRITE8_HANDLER( superwng_nmi_enable_w )
203WRITE8_MEMBER(superwng_state::superwng_nmi_enable_w)
193204{
194   superwng_state *state = space->machine().driver_data<superwng_state>();
195   state->m_nmi_enable = data;
205   m_nmi_enable = data;
196206}
197207
198208static INTERRUPT_GEN( superwng_nmi_interrupt )
r14845r14846
203213      nmi_line_pulse(device);
204214}
205215
206static WRITE8_HANDLER( superwng_sound_interrupt_w )
216WRITE8_MEMBER(superwng_state::superwng_sound_interrupt_w)
207217{
208   superwng_state *state = space->machine().driver_data<superwng_state>();
209   state->m_sound_byte = data;
210   device_set_input_line(state->m_audiocpu, 0, ASSERT_LINE);
218   m_sound_byte = data;
219   device_set_input_line(m_audiocpu, 0, ASSERT_LINE);
211220}
212221
213222static READ8_DEVICE_HANDLER( superwng_sound_byte_r )
r14845r14846
217226   return state->m_sound_byte;
218227}
219228
220static WRITE8_HANDLER( superwng_sound_nmi_clear_w )
229WRITE8_MEMBER(superwng_state::superwng_sound_nmi_clear_w)
221230{
222   superwng_state *state = space->machine().driver_data<superwng_state>();
223   device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, CLEAR_LINE);
231   device_set_input_line(m_audiocpu, INPUT_LINE_NMI, CLEAR_LINE);
224232}
225233
226234static INTERRUPT_GEN( superwng_sound_nmi_assert )
r14845r14846
230238      device_set_input_line(device, INPUT_LINE_NMI, ASSERT_LINE);
231239}
232240
233static WRITE8_HANDLER(superwng_bg_vram_w)
241WRITE8_MEMBER(superwng_state::superwng_bg_vram_w)
234242{
235   superwng_state *state = space->machine().driver_data<superwng_state>();
236   state->m_videoram_bg[offset] = data;
237   state->m_bg_tilemap->mark_tile_dirty(offset);
243   m_videoram_bg[offset] = data;
244   m_bg_tilemap->mark_tile_dirty(offset);
238245}
239246
240static WRITE8_HANDLER(superwng_bg_cram_w)
247WRITE8_MEMBER(superwng_state::superwng_bg_cram_w)
241248{
242   superwng_state *state = space->machine().driver_data<superwng_state>();
243   state->m_colorram_bg[offset] = data;
244   state->m_bg_tilemap->mark_tile_dirty(offset);
249   m_colorram_bg[offset] = data;
250   m_bg_tilemap->mark_tile_dirty(offset);
245251}
246252
247static WRITE8_HANDLER(superwng_fg_vram_w)
253WRITE8_MEMBER(superwng_state::superwng_fg_vram_w)
248254{
249   superwng_state *state = space->machine().driver_data<superwng_state>();
250   state->m_videoram_fg[offset] = data;
251   state->m_fg_tilemap->mark_tile_dirty(offset);
255   m_videoram_fg[offset] = data;
256   m_fg_tilemap->mark_tile_dirty(offset);
252257}
253258
254static WRITE8_HANDLER(superwng_fg_cram_w)
259WRITE8_MEMBER(superwng_state::superwng_fg_cram_w)
255260{
256   superwng_state *state = space->machine().driver_data<superwng_state>();
257   state->m_colorram_fg[offset] = data;
258   state->m_fg_tilemap->mark_tile_dirty(offset);
261   m_colorram_fg[offset] = data;
262   m_fg_tilemap->mark_tile_dirty(offset);
259263}
260264
261static WRITE8_HANDLER(superwng_tilebank_w)
265WRITE8_MEMBER(superwng_state::superwng_tilebank_w)
262266{
263   superwng_state *state = space->machine().driver_data<superwng_state>();
264   state->m_tile_bank = data;
265   state->m_bg_tilemap->mark_all_dirty();
266   state->m_fg_tilemap->mark_all_dirty();
267   m_tile_bank = data;
268   m_bg_tilemap->mark_all_dirty();
269   m_fg_tilemap->mark_all_dirty();
267270}
268271
269static WRITE8_HANDLER( superwng_flip_screen_w )
272WRITE8_MEMBER(superwng_state::superwng_flip_screen_w)
270273{
271   superwng_state *state = space->machine().driver_data<superwng_state>();
272   flip_screen_set(space->machine(), ~data & 0x01);
273   state->m_bg_tilemap->mark_all_dirty();
274   state->m_fg_tilemap->mark_all_dirty();
274   flip_screen_set(machine(), ~data & 0x01);
275   m_bg_tilemap->mark_all_dirty();
276   m_fg_tilemap->mark_all_dirty();
275277}
276278
277static WRITE8_HANDLER(superwng_cointcnt1_w)
279WRITE8_MEMBER(superwng_state::superwng_cointcnt1_w)
278280{
279   coin_counter_w(space->machine(), 0, data);
281   coin_counter_w(machine(), 0, data);
280282}
281283
282static WRITE8_HANDLER(superwng_cointcnt2_w)
284WRITE8_MEMBER(superwng_state::superwng_cointcnt2_w)
283285{
284   coin_counter_w(space->machine(), 1, data);
286   coin_counter_w(machine(), 1, data);
285287}
286288
287289static ADDRESS_MAP_START( superwng_map, AS_PROGRAM, 8, superwng_state )
288290   AM_RANGE(0x0000, 0x6fff) AM_ROM
289291   AM_RANGE(0x7000, 0x7fff) AM_RAM
290   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE_LEGACY(superwng_bg_vram_w) AM_BASE(m_videoram_bg)
291   AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE_LEGACY(superwng_fg_vram_w) AM_BASE(m_videoram_fg)
292   AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE_LEGACY(superwng_bg_cram_w) AM_BASE(m_colorram_bg)
293   AM_RANGE(0x8c00, 0x8fff) AM_RAM_WRITE_LEGACY(superwng_fg_cram_w) AM_BASE(m_colorram_fg)
292   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(superwng_bg_vram_w) AM_BASE(m_videoram_bg)
293   AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(superwng_fg_vram_w) AM_BASE(m_videoram_fg)
294   AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(superwng_bg_cram_w) AM_BASE(m_colorram_bg)
295   AM_RANGE(0x8c00, 0x8fff) AM_RAM_WRITE(superwng_fg_cram_w) AM_BASE(m_colorram_fg)
294296   AM_RANGE(0x9800, 0x99ff) AM_RAM  //collision map
295297   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
296298   AM_RANGE(0xa000, 0xa000) AM_WRITENOP //unknown
297299   AM_RANGE(0xa080, 0xa080) AM_READ_PORT("P2")
298300   AM_RANGE(0xa100, 0xa100) AM_READ_PORT("DSW1")
299   AM_RANGE(0xa100, 0xa100) AM_WRITE_LEGACY(superwng_sound_interrupt_w)
301   AM_RANGE(0xa100, 0xa100) AM_WRITE(superwng_sound_interrupt_w)
300302   AM_RANGE(0xa180, 0xa180) AM_READ_PORT("DSW2")
301303   AM_RANGE(0xa180, 0xa180) AM_WRITENOP //watchdog ? int ack ?
302   AM_RANGE(0xa181, 0xa181) AM_WRITE_LEGACY(superwng_nmi_enable_w)
303   AM_RANGE(0xa182, 0xa182) AM_WRITE_LEGACY(superwng_tilebank_w)
304   AM_RANGE(0xa183, 0xa183) AM_WRITE_LEGACY(superwng_flip_screen_w)
305   AM_RANGE(0xa184, 0xa184) AM_WRITE_LEGACY(superwng_cointcnt1_w)
304   AM_RANGE(0xa181, 0xa181) AM_WRITE(superwng_nmi_enable_w)
305   AM_RANGE(0xa182, 0xa182) AM_WRITE(superwng_tilebank_w)
306   AM_RANGE(0xa183, 0xa183) AM_WRITE(superwng_flip_screen_w)
307   AM_RANGE(0xa184, 0xa184) AM_WRITE(superwng_cointcnt1_w)
306308   AM_RANGE(0xa185, 0xa185) AM_WRITENOP //unknown , always(?) 0
307   AM_RANGE(0xa186, 0xa186) AM_WRITE_LEGACY(superwng_cointcnt2_w)
309   AM_RANGE(0xa186, 0xa186) AM_WRITE(superwng_cointcnt2_w)
308310   AM_RANGE(0xa187, 0xa187) AM_WRITENOP //unknown , always(?) 0
309311ADDRESS_MAP_END
310312
311313static ADDRESS_MAP_START( superwng_sound_map, AS_PROGRAM, 8, superwng_state )
312314   AM_RANGE(0x0000, 0x1fff) AM_ROM
313315   AM_RANGE(0x2000, 0x23ff) AM_RAM
314   AM_RANGE(0x3000, 0x3000) AM_WRITE_LEGACY(superwng_sound_nmi_clear_w)
316   AM_RANGE(0x3000, 0x3000) AM_WRITE(superwng_sound_nmi_clear_w)
315317   AM_RANGE(0x4000, 0x4000) AM_DEVREADWRITE_LEGACY("ay1", ay8910_r, ay8910_data_w)
316318   AM_RANGE(0x5000, 0x5000) AM_DEVWRITE_LEGACY("ay1", ay8910_address_w)
317319   AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE_LEGACY("ay2", ay8910_r, ay8910_data_w)
src/mame/drivers/guab.c
r14845r14846
8181   struct ef9369 m_pal;
8282   emu_timer *m_fdc_timer;
8383   struct wd1770 m_fdc;
84   DECLARE_WRITE16_MEMBER(guab_tms34061_w);
85   DECLARE_READ16_MEMBER(guab_tms34061_r);
86   DECLARE_WRITE16_MEMBER(ef9369_w);
87   DECLARE_READ16_MEMBER(ef9369_r);
88   DECLARE_WRITE16_MEMBER(wd1770_w);
89   DECLARE_READ16_MEMBER(wd1770_r);
90   DECLARE_READ16_MEMBER(io_r);
91   DECLARE_WRITE16_MEMBER(io_w);
8492};
8593
8694
r14845r14846
128136};
129137
130138
131static WRITE16_HANDLER( guab_tms34061_w )
139WRITE16_MEMBER(guab_state::guab_tms34061_w)
132140{
133141   int func = (offset >> 19) & 3;
134142   int row = (offset >> 7) & 0xff;
r14845r14846
140148      col = offset <<= 1;
141149
142150   if (ACCESSING_BITS_8_15)
143      tms34061_w(space, col, row, func, data >> 8);
151      tms34061_w(&space, col, row, func, data >> 8);
144152
145153   if (ACCESSING_BITS_0_7)
146      tms34061_w(space, col | 1, row, func, data & 0xff);
154      tms34061_w(&space, col | 1, row, func, data & 0xff);
147155}
148156
149157
150static READ16_HANDLER( guab_tms34061_r )
158READ16_MEMBER(guab_state::guab_tms34061_r)
151159{
152160   UINT16 data = 0;
153161   int func = (offset >> 19) & 3;
r14845r14846
160168      col = offset <<= 1;
161169
162170   if (ACCESSING_BITS_8_15)
163      data |= tms34061_r(space, col, row, func) << 8;
171      data |= tms34061_r(&space, col, row, func) << 8;
164172
165173   if (ACCESSING_BITS_0_7)
166      data |= tms34061_r(space, col | 1, row, func);
174      data |= tms34061_r(&space, col | 1, row, func);
167175
168176   return data;
169177}
r14845r14846
175183 ****************************/
176184
177185/* Non-multiplexed mode */
178static WRITE16_HANDLER( ef9369_w )
186WRITE16_MEMBER(guab_state::ef9369_w)
179187{
180   guab_state *state = space->machine().driver_data<guab_state>();
181   struct ef9369 &pal = state->m_pal;
188   struct ef9369 &pal = m_pal;
182189   data &= 0x00ff;
183190
184191   /* Address register */
r14845r14846
207214         col = pal.clut[entry] & 0xfff;
208215
209216         /* Update the MAME palette */
210         palette_set_color_rgb(space->machine(), entry, pal4bit(col >> 0), pal4bit(col >> 4), pal4bit(col >> 8));
217         palette_set_color_rgb(machine(), entry, pal4bit(col >> 0), pal4bit(col >> 4), pal4bit(col >> 8));
211218      }
212219
213220         /* Address register auto-increment */
r14845r14846
216223   }
217224}
218225
219static READ16_HANDLER( ef9369_r )
226READ16_MEMBER(guab_state::ef9369_r)
220227{
221   guab_state *state = space->machine().driver_data<guab_state>();
222   struct ef9369 &pal = state->m_pal;
228   struct ef9369 &pal = m_pal;
223229   if ((offset & 1) == 0)
224230   {
225231      UINT16 col = pal.clut[pal.addr >> 1];
r14845r14846
372378}
373379
374380
375static WRITE16_HANDLER( wd1770_w )
381WRITE16_MEMBER(guab_state::wd1770_w)
376382{
377   guab_state *state = space->machine().driver_data<guab_state>();
378   struct wd1770 &fdc = state->m_fdc;
383   struct wd1770 &fdc = m_fdc;
379384   data &= 0xff;
380385
381386   switch (offset)
r14845r14846
445450                                             fdc.sector));
446451
447452               /* Set the data read timer */
448               state->m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
453               m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
449454
450455               break;
451456            }
r14845r14846
464469                                             fdc.sector));
465470
466471               /* Trigger a DRQ interrupt on the CPU */
467               cputag_set_input_line(space->machine(), "maincpu", INT_FLOPPYCTRL, ASSERT_LINE);
472               cputag_set_input_line(machine(), "maincpu", INT_FLOPPYCTRL, ASSERT_LINE);
468473               fdc.status |= DATA_REQUEST;
469474               break;
470475            }
r14845r14846
482487            case 13:
483488            {
484489               /* Stop any operation in progress */
485               state->m_fdc_timer->reset();
490               m_fdc_timer->reset();
486491               fdc.status &= ~BUSY;
487492               FDC_LOG(("Force Interrupt\n"));
488493               break;
r14845r14846
509514         fdc.data = data;
510515
511516         /* Clear the DRQ */
512         cputag_set_input_line(space->machine(), "maincpu", INT_FLOPPYCTRL, CLEAR_LINE);
517         cputag_set_input_line(machine(), "maincpu", INT_FLOPPYCTRL, CLEAR_LINE);
513518
514519         /* Queue an event to write the data if write command was specified */
515520         if (fdc.cmd & 0x20)
516            state->m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
521            m_fdc_timer->adjust(attotime::from_usec(USEC_DELAY));
517522
518523         break;
519524      }
520525   }
521526}
522527
523static READ16_HANDLER( wd1770_r )
528READ16_MEMBER(guab_state::wd1770_r)
524529{
525   guab_state *state = space->machine().driver_data<guab_state>();
526   struct wd1770 &fdc = state->m_fdc;
530   struct wd1770 &fdc = m_fdc;
527531   UINT16 retval = 0;
528532
529533   switch (offset)
r14845r14846
548552         retval = fdc.data;
549553
550554         /* Clear the DRQ */
551         cputag_set_input_line(space->machine(), "maincpu", INT_FLOPPYCTRL, CLEAR_LINE);
555         cputag_set_input_line(machine(), "maincpu", INT_FLOPPYCTRL, CLEAR_LINE);
552556         fdc.status &= ~DATA_REQUEST;
553557         break;
554558      }
r14845r14846
564568 *
565569 ****************************************/
566570
567static READ16_HANDLER( io_r )
571READ16_MEMBER(guab_state::io_r)
568572{
569573   static const char *const portnames[] = { "IN0", "IN1", "IN2" };
570574
r14845r14846
574578      case 0x01:
575579      case 0x02:
576580      {
577         return input_port_read(space->machine(), portnames[offset]);
581         return input_port_read(machine(), portnames[offset]);
578582      }
579583      case 0x30:
580584      {
r14845r14846
608612 *
609613 ****************************************/
610614
611static WRITE16_HANDLER( io_w )
615WRITE16_MEMBER(guab_state::io_w)
612616{
613   guab_state *state = space->machine().driver_data<guab_state>();
614   struct wd1770 &fdc = state->m_fdc;
617   struct wd1770 &fdc = m_fdc;
615618   switch (offset)
616619   {
617620      case 0x10:
r14845r14846
646649      }
647650      case 0x30:
648651      {
649         sn76496_w(space->machine().device("snsnd"), 0, data & 0xff);
652         sn76496_w(machine().device("snsnd"), 0, data & 0xff);
650653         break;
651654      }
652655      case 0x31:
r14845r14846
682685static ADDRESS_MAP_START( guab_map, AS_PROGRAM, 16, guab_state )
683686   AM_RANGE(0x000000, 0x00ffff) AM_ROM
684687   AM_RANGE(0x040000, 0x04ffff) AM_ROM AM_REGION("maincpu", 0x10000)
685   AM_RANGE(0x0c0000, 0x0c007f) AM_READWRITE_LEGACY(io_r, io_w)
688   AM_RANGE(0x0c0000, 0x0c007f) AM_READWRITE(io_r, io_w)
686689   AM_RANGE(0x0c0080, 0x0c0083) AM_NOP /* ACIA 1 */
687690   AM_RANGE(0x0c00a0, 0x0c00a3) AM_NOP /* ACIA 2 */
688691   AM_RANGE(0x0c00c0, 0x0c00cf) AM_DEVREADWRITE8("6840ptm", ptm6840_device, read, write, 0xff)
689   AM_RANGE(0x0c00e0, 0x0c00e7) AM_READWRITE_LEGACY(wd1770_r, wd1770_w)
692   AM_RANGE(0x0c00e0, 0x0c00e7) AM_READWRITE(wd1770_r, wd1770_w)
690693   AM_RANGE(0x080000, 0x080fff) AM_RAM
691   AM_RANGE(0x100000, 0x100003) AM_READWRITE_LEGACY(ef9369_r, ef9369_w)
692   AM_RANGE(0x800000, 0xb0ffff) AM_READWRITE_LEGACY(guab_tms34061_r, guab_tms34061_w)
694   AM_RANGE(0x100000, 0x100003) AM_READWRITE(ef9369_r, ef9369_w)
695   AM_RANGE(0x800000, 0xb0ffff) AM_READWRITE(guab_tms34061_r, guab_tms34061_w)
693696   AM_RANGE(0xb10000, 0xb1ffff) AM_RAM
694697   AM_RANGE(0xb80000, 0xb8ffff) AM_RAM
695698   AM_RANGE(0xb90000, 0xb9ffff) AM_RAM
src/mame/drivers/cyclemb.c
r14845r14846
8686   UINT8 *m_obj1_ram;
8787   UINT8 *m_obj2_ram;
8888   UINT8 *m_obj3_ram;
89   DECLARE_WRITE8_MEMBER(cyclemb_bankswitch_w);
90   DECLARE_READ8_MEMBER(mcu_status_r);
91   DECLARE_WRITE8_MEMBER(sound_cmd_w);
92   DECLARE_WRITE8_MEMBER(cyclemb_flip_w);
8993};
9094
9195
r14845r14846
215219   return 0;
216220}
217221
218static WRITE8_HANDLER( cyclemb_bankswitch_w )
222WRITE8_MEMBER(cyclemb_state::cyclemb_bankswitch_w)
219223{
220   memory_set_bank(space->machine(), "bank1", data & 3);
224   memory_set_bank(machine(), "bank1", data & 3);
221225}
222226
223227#if 0
224static WRITE8_HANDLER( sound_cmd_w )
228WRITE8_MEMBER(cyclemb_state::sound_cmd_w)
225229{
226230   soundlatch_w(space, 0, data & 0xff);
227   cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
231   cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
228232}
229233#endif
230234
231235#if 0
232static READ8_HANDLER( mcu_status_r )
236READ8_MEMBER(cyclemb_state::mcu_status_r)
233237{
234238   return 1;
235239}
236240
237241
238static WRITE8_HANDLER( sound_cmd_w ) //actually ciom
242WRITE8_MEMBER(cyclemb_state::sound_cmd_w)//actually ciom
239243{
240244   soundlatch_w(space, 0, data & 0xff);
241   cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
245   cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
242246}
243247#endif
244248
245static WRITE8_HANDLER( cyclemb_flip_w )
249WRITE8_MEMBER(cyclemb_state::cyclemb_flip_w)
246250{
247   flip_screen_set(space->machine(), data & 1);
251   flip_screen_set(machine(), data & 1);
248252
249253   // a bunch of other things are setted here
250254}
r14845r14846
262266
263267static ADDRESS_MAP_START( cyclemb_io, AS_IO, 8, cyclemb_state )
264268//  ADDRESS_MAP_GLOBAL_MASK(0xff)
265   AM_RANGE(0xc000, 0xc000) AM_WRITE_LEGACY(cyclemb_bankswitch_w)
269   AM_RANGE(0xc000, 0xc000) AM_WRITE(cyclemb_bankswitch_w)
266270   AM_RANGE(0xc09e, 0xc09f) AM_READWRITE_LEGACY(cyclemb_8741_0_r, cyclemb_8741_0_w)
267   AM_RANGE(0xc0bf, 0xc0bf) AM_WRITE_LEGACY(cyclemb_flip_w) //flip screen
271   AM_RANGE(0xc0bf, 0xc0bf) AM_WRITE(cyclemb_flip_w) //flip screen
268272ADDRESS_MAP_END
269273
270274static ADDRESS_MAP_START( cyclemb_sound_map, AS_PROGRAM, 8, cyclemb_state )
src/mame/drivers/bingor.c
r14845r14846
450450      : driver_device(mconfig, type, tag) { }
451451
452452   UINT16 *m_blit_ram;
453   DECLARE_READ16_MEMBER(test_r);
454   DECLARE_READ8_MEMBER(test8_r);
453455};
454456
455457
r14845r14846
500502}
501503
502504#if 0
503static READ16_HANDLER( test_r )
505READ16_MEMBER(bingor_state::test_r)
504506{
505   return space->machine().rand();
507   return machine().rand();
506508}
507509#endif
508510
r14845r14846
515517ADDRESS_MAP_END
516518
517519static ADDRESS_MAP_START( bingor_io, AS_IO, 16, bingor_state )
518//  AM_RANGE(0x0000, 0x00ff) AM_READ_LEGACY(test_r )
520//  AM_RANGE(0x0000, 0x00ff) AM_READ(test_r )
519521   AM_RANGE(0x0100, 0x0101) AM_DEVWRITE8_LEGACY("saa", saa1099_data_w, 0x00ff)
520522   AM_RANGE(0x0102, 0x0103) AM_DEVWRITE8_LEGACY("saa", saa1099_control_w, 0x00ff)
521//  AM_RANGE(0x0200, 0x0201) AM_READ_LEGACY(test_r )
523//  AM_RANGE(0x0200, 0x0201) AM_READ(test_r )
522524ADDRESS_MAP_END
523525
524static READ8_HANDLER( test8_r )
526READ8_MEMBER(bingor_state::test8_r)
525527{
526   return space->machine().rand();
528   return machine().rand();
527529}
528530
529531static ADDRESS_MAP_START( pic_io_map, AS_IO, 8, bingor_state )
530   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(test8_r)
532   AM_RANGE(0x02, 0x02) AM_READ(test8_r)
531533   AM_RANGE(0x10, 0x10) AM_READNOP
532534ADDRESS_MAP_END
533535
src/mame/drivers/beaminv.c
r14845r14846
7474
7575   /* devices */
7676   device_t *m_maincpu;
77   DECLARE_READ8_MEMBER(v128_r);
78   DECLARE_WRITE8_MEMBER(controller_select_w);
79   DECLARE_READ8_MEMBER(controller_r);
7780};
7881
7982
r14845r14846
192195}
193196
194197
195static READ8_HANDLER( v128_r )
198READ8_MEMBER(beaminv_state::v128_r)
196199{
197   return (space->machine().primary_screen->vpos() >> 7) & 0x01;
200   return (machine().primary_screen->vpos() >> 7) & 0x01;
198201}
199202
200203
r14845r14846
209212#define P2_CONTROL_PORT_TAG   ("CONTP2")
210213
211214
212static WRITE8_HANDLER( controller_select_w )
215WRITE8_MEMBER(beaminv_state::controller_select_w)
213216{
214   beaminv_state *state = space->machine().driver_data<beaminv_state>();
215217   /* 0x01 (player 1) or 0x02 (player 2) */
216   state->m_controller_select = data;
218   m_controller_select = data;
217219}
218220
219221
220static READ8_HANDLER( controller_r )
222READ8_MEMBER(beaminv_state::controller_r)
221223{
222   beaminv_state *state = space->machine().driver_data<beaminv_state>();
223   return input_port_read(space->machine(), (state->m_controller_select == 1) ? P1_CONTROL_PORT_TAG : P2_CONTROL_PORT_TAG);
224   return input_port_read(machine(), (m_controller_select == 1) ? P1_CONTROL_PORT_TAG : P2_CONTROL_PORT_TAG);
224225}
225226
226227
r14845r14846
236237   AM_RANGE(0x1800, 0x1fff) AM_RAM
237238   AM_RANGE(0x2400, 0x2400) AM_MIRROR(0x03ff) AM_READ_PORT("DSW")
238239   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_READ_PORT("INPUTS")
239   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_READ_LEGACY(controller_r)
240   AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_READ_LEGACY(v128_r)
240   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_READ(controller_r)
241   AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_READ(v128_r)
241242   AM_RANGE(0x4000, 0x5fff) AM_RAM AM_BASE_SIZE(m_videoram, m_videoram_size)
242243ADDRESS_MAP_END
243244
r14845r14846
251252
252253static ADDRESS_MAP_START( main_io_map, AS_IO, 8, beaminv_state )
253254   ADDRESS_MAP_GLOBAL_MASK(0xff)
254   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(controller_select_w) /* to be confirmed */
255   AM_RANGE(0x00, 0x00) AM_WRITE(controller_select_w) /* to be confirmed */
255256ADDRESS_MAP_END
256257
257258
src/mame/drivers/sengokmj.c
r14845r14846
6767
6868   UINT16 m_sengokumj_mux_data;
6969   UINT8 m_hopper_io;
70   DECLARE_READ16_MEMBER(mahjong_panel_r);
71   DECLARE_WRITE16_MEMBER(mahjong_panel_w);
72   DECLARE_WRITE16_MEMBER(sengokmj_out_w);
73   DECLARE_READ16_MEMBER(sengokmj_system_r);
7074};
7175
7276
7377
7478/* Multiplexer device for the mahjong panel */
75static READ16_HANDLER( mahjong_panel_r )
79READ16_MEMBER(sengokmj_state::mahjong_panel_r)
7680{
77   sengokmj_state *state = space->machine().driver_data<sengokmj_state>();
78   switch(state->m_sengokumj_mux_data)
81   switch(m_sengokumj_mux_data)
7982   {
80      case 0x0100: return input_port_read(space->machine(), "KEY0");
81      case 0x0200: return input_port_read(space->machine(), "KEY1");
82      case 0x0400: return input_port_read(space->machine(), "KEY2");
83      case 0x0800: return input_port_read(space->machine(), "KEY3");
84      case 0x1000: return input_port_read(space->machine(), "KEY4");
85      case 0x2000: return input_port_read(space->machine(), "UNUSED");
83      case 0x0100: return input_port_read(machine(), "KEY0");
84      case 0x0200: return input_port_read(machine(), "KEY1");
85      case 0x0400: return input_port_read(machine(), "KEY2");
86      case 0x0800: return input_port_read(machine(), "KEY3");
87      case 0x1000: return input_port_read(machine(), "KEY4");
88      case 0x2000: return input_port_read(machine(), "UNUSED");
8689   }
8790
8891   return 0xffff;
8992}
9093
91static WRITE16_HANDLER( mahjong_panel_w )
94WRITE16_MEMBER(sengokmj_state::mahjong_panel_w)
9295{
93   sengokmj_state *state = space->machine().driver_data<sengokmj_state>();
94   state->m_sengokumj_mux_data = data;
96   m_sengokumj_mux_data = data;
9597}
9698
97static WRITE16_HANDLER( sengokmj_out_w )
99WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
98100{
99   sengokmj_state *state = space->machine().driver_data<sengokmj_state>();
100101   /* ---- ---- ---x ---- J.P. Signal (?)*/
101102   /* ---- ---- ---- -x-- Coin counter (done AFTER that you press start)*/
102103   /* ---- ---- ---- --x- Cash enable (lockout)*/
103104   /* ---- ---- ---- ---x Hopper 10 */
104   coin_lockout_w(space->machine(), 0,~data & 2);
105   coin_lockout_w(space->machine(), 1,~data & 2);
106   coin_counter_w(space->machine(), 0,data & 4);
107   state->m_hopper_io = ((data & 1)<<6);
108//  popmessage("%02x",state->m_hopper_io);
105   coin_lockout_w(machine(), 0,~data & 2);
106   coin_lockout_w(machine(), 1,~data & 2);
107   coin_counter_w(machine(), 0,data & 4);
108   m_hopper_io = ((data & 1)<<6);
109//  popmessage("%02x",m_hopper_io);
109110}
110111
111static READ16_HANDLER( sengokmj_system_r )
112READ16_MEMBER(sengokmj_state::sengokmj_system_r)
112113{
113   sengokmj_state *state = space->machine().driver_data<sengokmj_state>();
114   return (input_port_read(space->machine(), "SYSTEM") & 0xffbf) | state->m_hopper_io;
114   return (input_port_read(machine(), "SYSTEM") & 0xffbf) | m_hopper_io;
115115}
116116
117117static ADDRESS_MAP_START( sengokmj_map, AS_PROGRAM, 16, sengokmj_state )
r14845r14846
134134//  AM_RANGE(0x8080, 0x8081) CRTC extra register?
135135//  AM_RANGE(0x80c0, 0x80c1) CRTC extra register?
136136//  AM_RANGE(0x8100, 0x8101) AM_WRITENOP // always 0
137   AM_RANGE(0x8180, 0x8181) AM_WRITE_LEGACY(sengokmj_out_w)
138   AM_RANGE(0x8140, 0x8141) AM_WRITE_LEGACY(mahjong_panel_w)
137   AM_RANGE(0x8180, 0x8181) AM_WRITE(sengokmj_out_w)
138   AM_RANGE(0x8140, 0x8141) AM_WRITE(mahjong_panel_w)
139139   AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1")
140   AM_RANGE(0xc002, 0xc003) AM_READ_LEGACY(mahjong_panel_r)
141   AM_RANGE(0xc004, 0xc005) AM_READ_LEGACY(sengokmj_system_r) //switches
140   AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r)
141   AM_RANGE(0xc004, 0xc005) AM_READ(sengokmj_system_r) //switches
142142ADDRESS_MAP_END
143143
144144
src/mame/drivers/cham24.c
r14845r14846
7373   UINT32 m_in_1;
7474   UINT32 m_in_0_shift;
7575   UINT32 m_in_1_shift;
76   DECLARE_WRITE8_MEMBER(nt_w);
77   DECLARE_READ8_MEMBER(nt_r);
78   DECLARE_WRITE8_MEMBER(sprite_dma_w);
79   DECLARE_READ8_MEMBER(cham24_IN0_r);
80   DECLARE_WRITE8_MEMBER(cham24_IN0_w);
81   DECLARE_READ8_MEMBER(cham24_IN1_r);
82   DECLARE_WRITE8_MEMBER(cham24_mapper_w);
7683};
7784
7885
r14845r14846
110117   }
111118}
112119
113static WRITE8_HANDLER( nt_w )
120WRITE8_MEMBER(cham24_state::nt_w)
114121{
115   cham24_state *state = space->machine().driver_data<cham24_state>();
116122   int page = ((offset & 0xc00) >> 10);
117   state->m_nt_page[page][offset & 0x3ff] = data;
123   m_nt_page[page][offset & 0x3ff] = data;
118124}
119125
120static READ8_HANDLER( nt_r )
126READ8_MEMBER(cham24_state::nt_r)
121127{
122   cham24_state *state = space->machine().driver_data<cham24_state>();
123128   int page = ((offset & 0xc00) >> 10);
124   return state->m_nt_page[page][offset & 0x3ff];
129   return m_nt_page[page][offset & 0x3ff];
125130
126131}
127132
128static WRITE8_HANDLER( sprite_dma_w )
133WRITE8_MEMBER(cham24_state::sprite_dma_w)
129134{
130135   int source = (data & 7);
131   ppu2c0x_device *ppu = space->machine().device<ppu2c0x_device>("ppu");
132   ppu->spriteram_dma(space, source);
136   ppu2c0x_device *ppu = machine().device<ppu2c0x_device>("ppu");
137   ppu->spriteram_dma(&space, source);
133138}
134139
135140static READ8_DEVICE_HANDLER( psg_4015_r )
r14845r14846
148153}
149154
150155
151static READ8_HANDLER( cham24_IN0_r )
156READ8_MEMBER(cham24_state::cham24_IN0_r)
152157{
153   cham24_state *state = space->machine().driver_data<cham24_state>();
154   return ((state->m_in_0 >> state->m_in_0_shift++) & 0x01) | 0x40;
158   return ((m_in_0 >> m_in_0_shift++) & 0x01) | 0x40;
155159}
156160
157static WRITE8_HANDLER( cham24_IN0_w )
161WRITE8_MEMBER(cham24_state::cham24_IN0_w)
158162{
159   cham24_state *state = space->machine().driver_data<cham24_state>();
160163   if (data & 0xfe)
161164   {
162165      //logerror("Unhandled cham24_IN0_w write: data = %02X\n", data);
r14845r14846
167170      return;
168171   }
169172
170   state->m_in_0_shift = 0;
171   state->m_in_1_shift = 0;
173   m_in_0_shift = 0;
174   m_in_1_shift = 0;
172175
173   state->m_in_0 = input_port_read(space->machine(), "P1");
174   state->m_in_1 = input_port_read(space->machine(), "P2");
176   m_in_0 = input_port_read(machine(), "P1");
177   m_in_1 = input_port_read(machine(), "P2");
175178
176179}
177180
178static READ8_HANDLER( cham24_IN1_r )
181READ8_MEMBER(cham24_state::cham24_IN1_r)
179182{
180   cham24_state *state = space->machine().driver_data<cham24_state>();
181   return ((state->m_in_1 >> state->m_in_1_shift++) & 0x01) | 0x40;
183   return ((m_in_1 >> m_in_1_shift++) & 0x01) | 0x40;
182184}
183185
184static WRITE8_HANDLER( cham24_mapper_w )
186WRITE8_MEMBER(cham24_state::cham24_mapper_w)
185187{
186188   UINT32 gfx_bank = offset & 0x3f;
187189   UINT32 prg_16k_bank_page = (offset >> 6) & 0x01;
r14845r14846
189191   UINT32 prg_bank_page_size = (offset >> 12) & 0x01;
190192   UINT32 gfx_mirroring = (offset >> 13) & 0x01;
191193
192   UINT8* dst = space->machine().region("maincpu")->base();
193   UINT8* src = space->machine().region("user1")->base();
194   UINT8* dst = machine().region("maincpu")->base();
195   UINT8* src = machine().region("user1")->base();
194196
195197   // switch PPU VROM bank
196   memory_set_bankptr(space->machine(), "bank1", space->machine().region("gfx1")->base() + (0x2000 * gfx_bank));
198   memory_set_bankptr(machine(), "bank1", machine().region("gfx1")->base() + (0x2000 * gfx_bank));
197199
198200   // set gfx mirroring
199   cham24_set_mirroring(space->machine(), gfx_mirroring != 0 ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
201   cham24_set_mirroring(machine(), gfx_mirroring != 0 ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
200202
201203   // switch PRG bank
202204   if (prg_bank_page_size == 0)
r14845r14846
225227   AM_RANGE(0x0000, 0x07ff) AM_RAM   /* NES RAM */
226228   AM_RANGE(0x2000, 0x3fff) AM_DEVREADWRITE("ppu", ppu2c0x_device, read, write)
227229   AM_RANGE(0x4000, 0x4013) AM_DEVREADWRITE_LEGACY("nes", nes_psg_r, nes_psg_w)         /* PSG primary registers */
228   AM_RANGE(0x4014, 0x4014) AM_WRITE_LEGACY(sprite_dma_w)
230   AM_RANGE(0x4014, 0x4014) AM_WRITE(sprite_dma_w)
229231   AM_RANGE(0x4015, 0x4015) AM_DEVREADWRITE_LEGACY("nes", psg_4015_r, psg_4015_w)         /* PSG status / first control register */
230   AM_RANGE(0x4016, 0x4016) AM_READWRITE_LEGACY(cham24_IN0_r,        cham24_IN0_w)         /* IN0 - input port 1 */
231   AM_RANGE(0x4017, 0x4017) AM_READ_LEGACY(cham24_IN1_r) AM_DEVWRITE_LEGACY("nes", psg_4017_w)      /* IN1 - input port 2 / PSG second control register */
232   AM_RANGE(0x8000, 0xffff) AM_ROM AM_WRITE_LEGACY(cham24_mapper_w)
232   AM_RANGE(0x4016, 0x4016) AM_READWRITE(cham24_IN0_r,        cham24_IN0_w)         /* IN0 - input port 1 */
233   AM_RANGE(0x4017, 0x4017) AM_READ(cham24_IN1_r) AM_DEVWRITE_LEGACY("nes", psg_4017_w)      /* IN1 - input port 2 / PSG second control register */
234   AM_RANGE(0x8000, 0xffff) AM_ROM AM_WRITE(cham24_mapper_w)
233235ADDRESS_MAP_END
234236
235237static INPUT_PORTS_START( cham24 )
r14845r14846
320322   state->m_nt_page[3] = state->m_nt_ram + 0xc00;
321323
322324   /* and read/write handlers */
323   machine.device("ppu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x2000, 0x3eff, FUNC(nt_r), FUNC(nt_w));
325   machine.device("ppu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x2000, 0x3eff,read8_delegate(FUNC(cham24_state::nt_r), state), write8_delegate(FUNC(cham24_state::nt_w), state));
324326}
325327
326328static DRIVER_INIT( cham24 )
src/mame/drivers/rbmk.c
r14845r14846
6767   UINT16 *m_gms_vidram2;
6868   UINT16 m_tilebank;
6969   UINT8 m_mux_data;
70   DECLARE_READ16_MEMBER(gms_read);
71   DECLARE_WRITE16_MEMBER(gms_write1);
72   DECLARE_WRITE16_MEMBER(gms_write2);
73   DECLARE_WRITE16_MEMBER(gms_write3);
74   DECLARE_READ8_MEMBER(rbmk_mcu_io_r);
75   DECLARE_WRITE8_MEMBER(rbmk_mcu_io_w);
76   DECLARE_WRITE8_MEMBER(mcu_io_mux_w);
7077};
7178
7279
73static READ16_HANDLER( gms_read )
80READ16_MEMBER(rbmk_state::gms_read)
7481{
75   return space->machine().rand();
82   return machine().rand();
7683}
7784
7885
79static WRITE16_HANDLER( gms_write1 )
86WRITE16_MEMBER(rbmk_state::gms_write1)
8087{
81
8288}
8389
84static WRITE16_HANDLER( gms_write2 )
90WRITE16_MEMBER(rbmk_state::gms_write2)
8591{
86   rbmk_state *state = space->machine().driver_data<rbmk_state>();
87   state->m_tilebank=data;
92   m_tilebank=data;
8893}
8994
90static WRITE16_HANDLER( gms_write3 )
95WRITE16_MEMBER(rbmk_state::gms_write3)
9196{
92
9397}
9498
9599static WRITE16_DEVICE_HANDLER( eeprom_w )
r14845r14846
115119   AM_RANGE(0x900000, 0x900fff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
116120   AM_RANGE(0x9c0000, 0x9c0fff) AM_RAM AM_BASE(m_gms_vidram)
117121   AM_RANGE(0xb00000, 0xb00001) AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
118   AM_RANGE(0xC00000, 0xC00001) AM_READ_PORT("IN0") AM_WRITE_LEGACY(gms_write1)
119   AM_RANGE(0xC08000, 0xC08001) AM_READ_PORT("IN1") AM_WRITE_LEGACY(gms_write2)
122   AM_RANGE(0xC00000, 0xC00001) AM_READ_PORT("IN0") AM_WRITE(gms_write1)
123   AM_RANGE(0xC08000, 0xC08001) AM_READ_PORT("IN1") AM_WRITE(gms_write2)
120124   AM_RANGE(0xC10000, 0xC10001) AM_READ_PORT("IN3")
121   AM_RANGE(0xC18080, 0xC18081) AM_READ_LEGACY(gms_read)
125   AM_RANGE(0xC18080, 0xC18081) AM_READ(gms_read)
122126   AM_RANGE(0xC20000, 0xC20001) AM_READ_PORT("IN2")
123   AM_RANGE(0xC28000, 0xC28001) AM_WRITE_LEGACY(gms_write3)
127   AM_RANGE(0xC28000, 0xC28001) AM_WRITE(gms_write3)
124128ADDRESS_MAP_END
125129
126130
r14845r14846
128132//  AM_RANGE(0x0000, 0x0fff) AM_ROM
129133ADDRESS_MAP_END
130134
131static READ8_HANDLER( rbmk_mcu_io_r )
135READ8_MEMBER(rbmk_state::rbmk_mcu_io_r)
132136{
133   rbmk_state *state = space->machine().driver_data<rbmk_state>();
134   if(state->m_mux_data & 8)
137   if(m_mux_data & 8)
135138   {
136      return ym2151_r(space->machine().device("ymsnd"), offset & 1);
139      return ym2151_r(machine().device("ymsnd"), offset & 1);
137140   }
138   else if(state->m_mux_data & 4)
141   else if(m_mux_data & 4)
139142   {
140143      //printf("%02x R\n",offset);
141144      // ...
142145      return 0xff;
143146   }
144147   else
145      printf("Warning: mux data R = %02x",state->m_mux_data);
148      printf("Warning: mux data R = %02x",m_mux_data);
146149
147150   return 0xff;
148151}
149152
150static WRITE8_HANDLER( rbmk_mcu_io_w )
153WRITE8_MEMBER(rbmk_state::rbmk_mcu_io_w)
151154{
152   rbmk_state *state = space->machine().driver_data<rbmk_state>();
153   if(state->m_mux_data & 8) { ym2151_w(space->machine().device("ymsnd"), offset & 1, data); }
154   else if(state->m_mux_data & 4)
155   if(m_mux_data & 8) { ym2151_w(machine().device("ymsnd"), offset & 1, data); }
156   else if(m_mux_data & 4)
155157   {
156158      //printf("%02x %02x W\n",offset,data);
157159      // ...
158160   }
159161   else
160      printf("Warning: mux data W = %02x",state->m_mux_data);
162      printf("Warning: mux data W = %02x",m_mux_data);
161163}
162164
163static WRITE8_HANDLER( mcu_io_mux_w )
165WRITE8_MEMBER(rbmk_state::mcu_io_mux_w)
164166{
165   rbmk_state *state = space->machine().driver_data<rbmk_state>();
166   state->m_mux_data = ~data;
167   m_mux_data = ~data;
167168}
168169
169170static ADDRESS_MAP_START( rbmk_mcu_io, AS_IO, 8, rbmk_state )
170   AM_RANGE(0x0ff00, 0x0ffff) AM_READWRITE_LEGACY(rbmk_mcu_io_r, rbmk_mcu_io_w )
171   AM_RANGE(0x0ff00, 0x0ffff) AM_READWRITE(rbmk_mcu_io_r, rbmk_mcu_io_w )
171172
172   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_WRITE_LEGACY(mcu_io_mux_w )
173   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_WRITE(mcu_io_mux_w )
173174ADDRESS_MAP_END
174175
175176static INPUT_PORTS_START( rbmk )
src/mame/drivers/trvmadns.c
r14845r14846
7575   UINT8 *m_gfxram;
7676   UINT8 *m_tileram;
7777   int m_old_data;
78   DECLARE_WRITE8_MEMBER(trvmadns_banking_w);
79   DECLARE_WRITE8_MEMBER(trvmadns_gfxram_w);
80   DECLARE_WRITE8_MEMBER(trvmadns_palette_w);
81   DECLARE_WRITE8_MEMBER(w2);
82   DECLARE_WRITE8_MEMBER(w3);
83   DECLARE_WRITE8_MEMBER(trvmadns_tileram_w);
7884};
7985
8086
81static WRITE8_HANDLER( trvmadns_banking_w )
87WRITE8_MEMBER(trvmadns_state::trvmadns_banking_w)
8288{
83   trvmadns_state *state = space->machine().driver_data<trvmadns_state>();
8489
8590   UINT8 *rom;
8691   int address = 0;
r14845r14846
9196   }
9297   else if((data & 0xf0) == 0x80 || (data & 0xf0) == 0x90)
9398   {
94      rom = space->machine().region("user2")->base();
99      rom = machine().region("user2")->base();
95100
96101      switch(data & 0xf)
97102      {
r14845r14846
107112
108113      address |= (data & 0x10) ? 0x10000 : 0;
109114
110      memory_set_bankptr(space->machine(), "bank1", &rom[address]);
111      memory_set_bankptr(space->machine(), "bank2", &rom[address + 0x1000]);
115      memory_set_bankptr(machine(), "bank1", &rom[address]);
116      memory_set_bankptr(machine(), "bank2", &rom[address + 0x1000]);
112117   }
113118   else
114119   {
115         if(data != state->m_old_data)
120         if(data != m_old_data)
116121         {
117            state->m_old_data = data;
122            m_old_data = data;
118123            logerror("port80 = %02X\n",data);
119124            //logerror("port80 = %02X\n",data);
120125         }
121126
122      rom = space->machine().region("user1")->base();
127      rom = machine().region("user1")->base();
123128
124129      /*
125130        7
r14845r14846
147152
148153//      logerror("add = %X\n",address);
149154
150      memory_set_bankptr(space->machine(), "bank1", &rom[address]);
155      memory_set_bankptr(machine(), "bank1", &rom[address]);
151156   }
152157}
153158
154static WRITE8_HANDLER( trvmadns_gfxram_w )
159WRITE8_MEMBER(trvmadns_state::trvmadns_gfxram_w)
155160{
156   trvmadns_state *state = space->machine().driver_data<trvmadns_state>();
157   state->m_gfxram[offset] = data;
158   gfx_element_mark_dirty(space->machine().gfx[0], offset/16);
161   m_gfxram[offset] = data;
162   gfx_element_mark_dirty(machine().gfx[0], offset/16);
159163}
160164
161static WRITE8_HANDLER( trvmadns_palette_w )
165WRITE8_MEMBER(trvmadns_state::trvmadns_palette_w)
162166{
163167   int r,g,b,datax;
164   space->machine().generic.paletteram.u8[offset] = data;
168   machine().generic.paletteram.u8[offset] = data;
165169   offset>>=1;
166   datax=space->machine().generic.paletteram.u8[offset*2+1]+256*space->machine().generic.paletteram.u8[offset*2];
170   datax=machine().generic.paletteram.u8[offset*2+1]+256*machine().generic.paletteram.u8[offset*2];
167171
168172   b = (((datax & 0x0007)>>0) | ((datax & 0x0200)>>6)) ^ 0xf;
169173   r = (((datax & 0x0038)>>3) | ((datax & 0x0400)>>7)) ^ 0xf;
170174   g = (((datax & 0x01c0)>>6) | ((datax & 0x0800)>>8)) ^ 0xf;
171175
172   palette_set_color_rgb(space->machine(), offset, pal4bit(r), pal4bit(g), pal4bit(b));
176   palette_set_color_rgb(machine(), offset, pal4bit(r), pal4bit(g), pal4bit(b));
173177}
174178
175179
176static WRITE8_HANDLER( w2 )
180WRITE8_MEMBER(trvmadns_state::w2)
177181{
178182/*  static int old = -1;
179183    if(data!=old)
r14845r14846
181185*/
182186}
183187
184static WRITE8_HANDLER( w3 )
188WRITE8_MEMBER(trvmadns_state::w3)
185189{
186190/*  static int old = -1;
187191    if(data!=old)
r14845r14846
189193*/
190194}
191195
192static WRITE8_HANDLER( trvmadns_tileram_w )
196WRITE8_MEMBER(trvmadns_state::trvmadns_tileram_w)
193197{
194   trvmadns_state *state = space->machine().driver_data<trvmadns_state>();
195198   if(offset==0)
196199   {
197      if(cpu_get_previouspc(&space->device())==0x29e9)// || cpu_get_previouspc(&space->device())==0x1b3f) //29f5
200      if(cpu_get_previouspc(&space.device())==0x29e9)// || cpu_get_previouspc(&space.device())==0x1b3f) //29f5
198201      {
199         cputag_set_input_line(space->machine(), "maincpu", 0, HOLD_LINE);
202         cputag_set_input_line(machine(), "maincpu", 0, HOLD_LINE);
200203      }
201204//      else
202//          logerror("%x \n", cpu_get_previouspc(&space->device()));
205//          logerror("%x \n", cpu_get_previouspc(&space.device()));
203206
204207   }
205208
206   state->m_tileram[offset] = data;
207   state->m_bg_tilemap->mark_tile_dirty(offset >> 1);
209   m_tileram[offset] = data;
210   m_bg_tilemap->mark_tile_dirty(offset >> 1);
208211}
209212
210213
r14845r14846
212215   AM_RANGE(0x0000, 0x5fff) AM_ROM
213216   AM_RANGE(0x6000, 0x6fff) AM_ROMBANK("bank1")
214217   AM_RANGE(0x7000, 0x7fff) AM_ROMBANK("bank2")
215   AM_RANGE(0x6000, 0x7fff) AM_WRITE_LEGACY(trvmadns_gfxram_w) AM_BASE(m_gfxram)
218   AM_RANGE(0x6000, 0x7fff) AM_WRITE(trvmadns_gfxram_w) AM_BASE(m_gfxram)
216219   AM_RANGE(0x8000, 0x87ff) AM_RAM
217   AM_RANGE(0xa000, 0xa7ff) AM_RAM_WRITE_LEGACY(trvmadns_tileram_w) AM_BASE(m_tileram)
218   AM_RANGE(0xc000, 0xc01f) AM_RAM_WRITE_LEGACY(trvmadns_palette_w) AM_BASE_GENERIC(paletteram)
219   AM_RANGE(0xe000, 0xe000) AM_WRITE_LEGACY(w2)//NOP
220   AM_RANGE(0xe004, 0xe004) AM_WRITE_LEGACY(w3)//NOP
220   AM_RANGE(0xa000, 0xa7ff) AM_RAM_WRITE(trvmadns_tileram_w) AM_BASE(m_tileram)
221   AM_RANGE(0xc000, 0xc01f) AM_RAM_WRITE(trvmadns_palette_w) AM_BASE_GENERIC(paletteram)
222   AM_RANGE(0xe000, 0xe000) AM_WRITE(w2)//NOP
223   AM_RANGE(0xe004, 0xe004) AM_WRITE(w3)//NOP
221224ADDRESS_MAP_END
222225
223226static ADDRESS_MAP_START( io_map, AS_IO, 8, trvmadns_state )
224227   ADDRESS_MAP_GLOBAL_MASK(0xff)
225228   AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
226229   AM_RANGE(0x02, 0x02) AM_READ_PORT("IN0")
227   AM_RANGE(0x80, 0x80) AM_WRITE_LEGACY(trvmadns_banking_w)
230   AM_RANGE(0x80, 0x80) AM_WRITE(trvmadns_banking_w)
228231ADDRESS_MAP_END
229232
230233static INPUT_PORTS_START( trvmadns )
src/mame/drivers/albazg.c
r14845r14846
6161   UINT8 m_mux_data;
6262   int m_bank;
6363   UINT8 m_prot_lock;
64   DECLARE_WRITE8_MEMBER(yumefuda_vram_w);
65   DECLARE_WRITE8_MEMBER(yumefuda_cram_w);
66   DECLARE_READ8_MEMBER(custom_ram_r);
67   DECLARE_WRITE8_MEMBER(custom_ram_w);
68   DECLARE_WRITE8_MEMBER(prot_lock_w);
6469};
6570
6671static TILE_GET_INFO( y_get_bg_tile_info )
r14845r14846
108113GFXDECODE_END
109114
110115
111static WRITE8_HANDLER( yumefuda_vram_w )
116WRITE8_MEMBER(albazg_state::yumefuda_vram_w)
112117{
113   albazg_state *state = space->machine().driver_data<albazg_state>();
114   state->m_videoram[offset] = data;
115   state->m_bg_tilemap->mark_tile_dirty(offset);
118   m_videoram[offset] = data;
119   m_bg_tilemap->mark_tile_dirty(offset);
116120}
117121
118static WRITE8_HANDLER( yumefuda_cram_w )
122WRITE8_MEMBER(albazg_state::yumefuda_cram_w)
119123{
120   albazg_state *state = space->machine().driver_data<albazg_state>();
121   state->m_colorram[offset] = data;
122   state->m_bg_tilemap->mark_tile_dirty(offset);
124   m_colorram[offset] = data;
125   m_bg_tilemap->mark_tile_dirty(offset);
123126}
124127
125128/*Custom RAM (Thrash Protection)*/
126static READ8_HANDLER( custom_ram_r )
129READ8_MEMBER(albazg_state::custom_ram_r)
127130{
128   albazg_state *state = space->machine().driver_data<albazg_state>();
129//  logerror("Custom RAM read at %02x PC = %x\n", offset + 0xaf80, cpu_get_pc(&space->device()));
130   return state->m_cus_ram[offset];// ^ 0x55;
131//  logerror("Custom RAM read at %02x PC = %x\n", offset + 0xaf80, cpu_get_pc(&space.device()));
132   return m_cus_ram[offset];// ^ 0x55;
131133}
132134
133static WRITE8_HANDLER( custom_ram_w )
135WRITE8_MEMBER(albazg_state::custom_ram_w)
134136{
135   albazg_state *state = space->machine().driver_data<albazg_state>();
136//  logerror("Custom RAM write at %02x : %02x PC = %x\n", offset + 0xaf80, data, cpu_get_pc(&space->device()));
137   if(state->m_prot_lock)
138      state->m_cus_ram[offset] = data;
137//  logerror("Custom RAM write at %02x : %02x PC = %x\n", offset + 0xaf80, data, cpu_get_pc(&space.device()));
138   if(m_prot_lock)
139      m_cus_ram[offset] = data;
139140}
140141
141142/*this might be used as NVRAM commands btw*/
142static WRITE8_HANDLER( prot_lock_w )
143WRITE8_MEMBER(albazg_state::prot_lock_w)
143144{
144   albazg_state *state = space->machine().driver_data<albazg_state>();
145//  logerror("PC %04x Prot lock value written %02x\n", cpu_get_pc(&space->device()), data);
146   state->m_prot_lock = data;
145//  logerror("PC %04x Prot lock value written %02x\n", cpu_get_pc(&space.device()), data);
146   m_prot_lock = data;
147147}
148148
149149static READ8_DEVICE_HANDLER( mux_r )
r14845r14846
230230static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, albazg_state )
231231   AM_RANGE(0x0000, 0x7fff) AM_ROM
232232   AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
233   AM_RANGE(0xa7fc, 0xa7fc) AM_WRITE_LEGACY(prot_lock_w)
233   AM_RANGE(0xa7fc, 0xa7fc) AM_WRITE(prot_lock_w)
234234   AM_RANGE(0xa7ff, 0xa7ff) AM_WRITE_PORT("EEPROMOUT")
235   AM_RANGE(0xaf80, 0xafff) AM_READWRITE_LEGACY(custom_ram_r, custom_ram_w) AM_BASE(m_cus_ram)
235   AM_RANGE(0xaf80, 0xafff) AM_READWRITE(custom_ram_r, custom_ram_w) AM_BASE(m_cus_ram)
236236   AM_RANGE(0xb000, 0xb07f) AM_RAM_WRITE_LEGACY(paletteram_xRRRRRGGGGGBBBBB_split1_w) AM_BASE_GENERIC(paletteram)
237237   AM_RANGE(0xb080, 0xb0ff) AM_RAM_WRITE_LEGACY(paletteram_xRRRRRGGGGGBBBBB_split2_w) AM_BASE_GENERIC(paletteram2)
238   AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE_LEGACY(yumefuda_vram_w) AM_BASE(m_videoram)
239   AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE_LEGACY(yumefuda_cram_w) AM_BASE(m_colorram)
238   AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(yumefuda_vram_w) AM_BASE(m_videoram)
239   AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(yumefuda_cram_w) AM_BASE(m_colorram)
240240   AM_RANGE(0xe000, 0xffff) AM_RAM
241241ADDRESS_MAP_END
242242
src/mame/drivers/bingoc.c
r14845r14846
4141      : driver_device(mconfig, type, tag) { }
4242
4343   UINT8 m_x;
44   DECLARE_READ16_MEMBER(bingoc_rand_r);
45   DECLARE_READ8_MEMBER(sound_test_r);
46   DECLARE_WRITE16_MEMBER(main_sound_latch_w);
4447};
4548
4649
r14845r14846
5659   return 0;
5760}
5861
59static READ16_HANDLER( bingoc_rand_r )
62READ16_MEMBER(bingoc_state::bingoc_rand_r)
6063{
6164   return 0xffff;
6265}
r14845r14846
68710x80-0x85 ym2151 bgm
69720x90-0x9b ym2151 sfx
7073*/
71static READ8_HANDLER( sound_test_r )
74READ8_MEMBER(bingoc_state::sound_test_r)
7275{
73   bingoc_state *state = space->machine().driver_data<bingoc_state>();
7476
75   if(space->machine().input().code_pressed_once(KEYCODE_Z))
76      state->m_x++;
77   if(machine().input().code_pressed_once(KEYCODE_Z))
78      m_x++;
7779
78   if(space->machine().input().code_pressed_once(KEYCODE_X))
79      state->m_x--;
80   if(machine().input().code_pressed_once(KEYCODE_X))
81      m_x--;
8082
81   if(space->machine().input().code_pressed_once(KEYCODE_A))
83   if(machine().input().code_pressed_once(KEYCODE_A))
8284      return 0xff;
8385
84   popmessage("%02x",state->m_x);
85   return state->m_x;
86   popmessage("%02x",m_x);
87   return m_x;
8688}
8789#else
88static WRITE16_HANDLER( main_sound_latch_w )
90WRITE16_MEMBER(bingoc_state::main_sound_latch_w)
8991{
9092   soundlatch_w(space,0,data&0xff);
91   cputag_set_input_line(space->machine(), "soundcpu", INPUT_LINE_NMI, PULSE_LINE);
93   cputag_set_input_line(machine(), "soundcpu", INPUT_LINE_NMI, PULSE_LINE);
9294}
9395#endif
9496
r14845r14846
106108
107109static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, bingoc_state )
108110   AM_RANGE(0x000000, 0x03ffff) AM_ROM
109   AM_RANGE(0x100000, 0x10007f) AM_READ_LEGACY(bingoc_rand_r) //comms? lamps?
110   AM_RANGE(0x180000, 0x18007f) AM_READ_LEGACY(bingoc_rand_r) //comms? lamps?
111   AM_RANGE(0x100000, 0x10007f) AM_READ(bingoc_rand_r) //comms? lamps?
112   AM_RANGE(0x180000, 0x18007f) AM_READ(bingoc_rand_r) //comms? lamps?
111113#if !SOUND_TEST
112   AM_RANGE(0x180010, 0x180011) AM_WRITE_LEGACY(main_sound_latch_w) //WRONG there...
114   AM_RANGE(0x180010, 0x180011) AM_WRITE(main_sound_latch_w) //WRONG there...
113115#endif
114116   AM_RANGE(0xff8000, 0xffffff) AM_RAM
115117ADDRESS_MAP_END
r14845r14846
127129#if !SOUND_TEST
128130   AM_RANGE(0xc0, 0xc0) AM_READ_LEGACY(soundlatch_r) //soundlatch
129131#else
130   AM_RANGE(0xc0, 0xc0) AM_READ_LEGACY(sound_test_r)
132   AM_RANGE(0xc0, 0xc0) AM_READ(sound_test_r)
131133#endif
132134ADDRESS_MAP_END
133135
src/mame/drivers/sstrangr.c
r14845r14846
2222   UINT8 *m_ram;
2323   UINT8 m_flip_screen;
2424   UINT8 *m_proms;
25   DECLARE_WRITE8_MEMBER(port_w);
2526};
2627
2728
r14845r14846
129130}
130131
131132
132static WRITE8_HANDLER( port_w )
133WRITE8_MEMBER(sstrangr_state::port_w)
133134{
134   sstrangr_state *state = space->machine().driver_data<sstrangr_state>();
135135
136   state->m_flip_screen = data & 0x20;
136   m_flip_screen = data & 0x20;
137137}
138138
139139
r14845r14846
149149static ADDRESS_MAP_START( sstrangr_io_map, AS_IO, 8, sstrangr_state )
150150   AM_RANGE(0x41, 0x41) AM_READ_PORT("DSW")
151151   AM_RANGE(0x42, 0x42) AM_READ_PORT("INPUTS")
152   AM_RANGE(0x44, 0x44) AM_READ_PORT("EXT") AM_WRITE_LEGACY(port_w)
152   AM_RANGE(0x44, 0x44) AM_READ_PORT("EXT") AM_WRITE(port_w)
153153ADDRESS_MAP_END
154154
155155
src/mame/drivers/backfire.c
r14845r14846
5252   UINT16    m_pf2_rowscroll[0x0800/2];
5353   UINT16    m_pf3_rowscroll[0x0800/2];
5454   UINT16    m_pf4_rowscroll[0x0800/2];
55   DECLARE_READ32_MEMBER(backfire_control2_r);
56   DECLARE_READ32_MEMBER(backfire_control3_r);
57   DECLARE_WRITE32_MEMBER(backfire_nonbuffered_palette_w);
58   DECLARE_READ32_MEMBER(backfire_pf1_rowscroll_r);
59   DECLARE_READ32_MEMBER(backfire_pf2_rowscroll_r);
60   DECLARE_READ32_MEMBER(backfire_pf3_rowscroll_r);
61   DECLARE_READ32_MEMBER(backfire_pf4_rowscroll_r);
62   DECLARE_WRITE32_MEMBER(backfire_pf1_rowscroll_w);
63   DECLARE_WRITE32_MEMBER(backfire_pf2_rowscroll_w);
64   DECLARE_WRITE32_MEMBER(backfire_pf3_rowscroll_w);
65   DECLARE_WRITE32_MEMBER(backfire_pf4_rowscroll_w);
66   DECLARE_READ32_MEMBER(backfire_spriteram1_r);
67   DECLARE_WRITE32_MEMBER(backfire_spriteram1_w);
68   DECLARE_READ32_MEMBER(backfire_spriteram2_r);
69   DECLARE_WRITE32_MEMBER(backfire_spriteram2_w);
70   DECLARE_READ32_MEMBER(backfire_speedup_r);
5571};
5672
5773//UINT32 *backfire_180010, *backfire_188010;
r14845r14846
160176         | ((input_port_read(device->machine(), "IN3") & 0x40) << 16)) ^ (backfire_screen << 26) ;
161177}
162178
163static READ32_HANDLER( backfire_control2_r )
179READ32_MEMBER(backfire_state::backfire_control2_r)
164180{
165   backfire_state *state = space->machine().driver_data<backfire_state>();
166181
167//  logerror("%08x:Read eprom %08x (%08x)\n", cpu_get_pc(&space->device()), offset << 1, mem_mask);
168   return (state->m_eeprom->read_bit() << 24) | input_port_read(space->machine(), "IN1") | (input_port_read(space->machine(), "IN1") << 16);
182//  logerror("%08x:Read eprom %08x (%08x)\n", cpu_get_pc(&space.device()), offset << 1, mem_mask);
183   return (m_eeprom->read_bit() << 24) | input_port_read(machine(), "IN1") | (input_port_read(machine(), "IN1") << 16);
169184}
170185
171186#ifdef UNUSED_FUNCTION
172static READ32_HANDLER(backfire_control3_r)
187READ32_MEMBER(backfire_state::backfire_control3_r)
173188{
174   backfire_state *state = space->machine().driver_data<backfire_state>();
175189
176//  logerror("%08x:Read eprom %08x (%08x)\n", cpu_get_pc(&space->device()), offset << 1, mem_mask);
177   return (state->m_eeprom->read_bit() << 24) | input_port_read(space->machine(), "IN2") | (input_port_read(space->machine(), "IN2") << 16);
190//  logerror("%08x:Read eprom %08x (%08x)\n", cpu_get_pc(&space.device()), offset << 1, mem_mask);
191   return (m_eeprom->read_bit() << 24) | input_port_read(machine(), "IN2") | (input_port_read(machine(), "IN2") << 16);
178192}
179193#endif
180194
r14845r14846
192206}
193207
194208
195static WRITE32_HANDLER(backfire_nonbuffered_palette_w)
209WRITE32_MEMBER(backfire_state::backfire_nonbuffered_palette_w)
196210{
197   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
198   palette_set_color_rgb(space->machine(),offset,pal5bit(space->machine().generic.paletteram.u32[offset] >> 0),pal5bit(space->machine().generic.paletteram.u32[offset] >> 5),pal5bit(space->machine().generic.paletteram.u32[offset] >> 10));
211   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
212   palette_set_color_rgb(machine(),offset,pal5bit(machine().generic.paletteram.u32[offset] >> 0),pal5bit(machine().generic.paletteram.u32[offset] >> 5),pal5bit(machine().generic.paletteram.u32[offset] >> 10));
199213}
200214
201215/* map 32-bit writes to 16-bit */
202216
203static READ32_HANDLER( backfire_pf1_rowscroll_r ) { backfire_state *state = space->machine().driver_data<backfire_state>(); return state->m_pf1_rowscroll[offset] ^ 0xffff0000; }
204static READ32_HANDLER( backfire_pf2_rowscroll_r ) { backfire_state *state = space->machine().driver_data<backfire_state>(); return state->m_pf2_rowscroll[offset] ^ 0xffff0000; }
205static READ32_HANDLER( backfire_pf3_rowscroll_r ) { backfire_state *state = space->machine().driver_data<backfire_state>(); return state->m_pf3_rowscroll[offset] ^ 0xffff0000; }
206static READ32_HANDLER( backfire_pf4_rowscroll_r ) { backfire_state *state = space->machine().driver_data<backfire_state>(); return state->m_pf4_rowscroll[offset] ^ 0xffff0000; }
207static WRITE32_HANDLER( backfire_pf1_rowscroll_w ) { backfire_state *state = space->machine().driver_data<backfire_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf1_rowscroll[offset]); }
208static WRITE32_HANDLER( backfire_pf2_rowscroll_w ) { backfire_state *state = space->machine().driver_data<backfire_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf2_rowscroll[offset]); }
209static WRITE32_HANDLER( backfire_pf3_rowscroll_w ) { backfire_state *state = space->machine().driver_data<backfire_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf3_rowscroll[offset]); }
210static WRITE32_HANDLER( backfire_pf4_rowscroll_w ) { backfire_state *state = space->machine().driver_data<backfire_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf4_rowscroll[offset]); }
217READ32_MEMBER(backfire_state::backfire_pf1_rowscroll_r){ return m_pf1_rowscroll[offset] ^ 0xffff0000; }
218READ32_MEMBER(backfire_state::backfire_pf2_rowscroll_r){ return m_pf2_rowscroll[offset] ^ 0xffff0000; }
219READ32_MEMBER(backfire_state::backfire_pf3_rowscroll_r){ return m_pf3_rowscroll[offset] ^ 0xffff0000; }
220READ32_MEMBER(backfire_state::backfire_pf4_rowscroll_r){ return m_pf4_rowscroll[offset] ^ 0xffff0000; }
221WRITE32_MEMBER(backfire_state::backfire_pf1_rowscroll_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf1_rowscroll[offset]); }
222WRITE32_MEMBER(backfire_state::backfire_pf2_rowscroll_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf2_rowscroll[offset]); }
223WRITE32_MEMBER(backfire_state::backfire_pf3_rowscroll_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf3_rowscroll[offset]); }
224WRITE32_MEMBER(backfire_state::backfire_pf4_rowscroll_w){ data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf4_rowscroll[offset]); }
211225
212226
213227#ifdef UNUSED_FUNCTION
r14845r14846
228242#endif
229243
230244
231static READ32_HANDLER( backfire_spriteram1_r )
245READ32_MEMBER(backfire_state::backfire_spriteram1_r)
232246{
233   backfire_state *state = space->machine().driver_data<backfire_state>();
234   return state->m_spriteram_1[offset] ^ 0xffff0000;
247   return m_spriteram_1[offset] ^ 0xffff0000;
235248}
236249
237static WRITE32_HANDLER( backfire_spriteram1_w )
250WRITE32_MEMBER(backfire_state::backfire_spriteram1_w)
238251{
239   backfire_state *state = space->machine().driver_data<backfire_state>();
240252   data &= 0x0000ffff;
241253   mem_mask &= 0x0000ffff;
242254
243   COMBINE_DATA(&state->m_spriteram_1[offset]);
255   COMBINE_DATA(&m_spriteram_1[offset]);
244256}
245257
246static READ32_HANDLER( backfire_spriteram2_r )
258READ32_MEMBER(backfire_state::backfire_spriteram2_r)
247259{
248   backfire_state *state = space->machine().driver_data<backfire_state>();
249   return state->m_spriteram_2[offset] ^ 0xffff0000;
260   return m_spriteram_2[offset] ^ 0xffff0000;
250261}
251262
252static WRITE32_HANDLER( backfire_spriteram2_w )
263WRITE32_MEMBER(backfire_state::backfire_spriteram2_w)
253264{
254   backfire_state *state = space->machine().driver_data<backfire_state>();
255265   data &= 0x0000ffff;
256266   mem_mask &= 0x0000ffff;
257267
258   COMBINE_DATA(&state->m_spriteram_2[offset]);
268   COMBINE_DATA(&m_spriteram_2[offset]);
259269}
260270
261271
r14845r14846
265275   AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
266276   AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
267277   AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
268   AM_RANGE(0x120000, 0x120fff) AM_READWRITE_LEGACY(backfire_pf1_rowscroll_r, backfire_pf1_rowscroll_w)
269   AM_RANGE(0x124000, 0x124fff) AM_READWRITE_LEGACY(backfire_pf2_rowscroll_r, backfire_pf2_rowscroll_w)
278   AM_RANGE(0x120000, 0x120fff) AM_READWRITE(backfire_pf1_rowscroll_r, backfire_pf1_rowscroll_w)
279   AM_RANGE(0x124000, 0x124fff) AM_READWRITE(backfire_pf2_rowscroll_r, backfire_pf2_rowscroll_w)
270280   AM_RANGE(0x130000, 0x13001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
271281   AM_RANGE(0x140000, 0x141fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
272282   AM_RANGE(0x144000, 0x145fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
273   AM_RANGE(0x150000, 0x150fff) AM_READWRITE_LEGACY(backfire_pf3_rowscroll_r, backfire_pf3_rowscroll_w)
274   AM_RANGE(0x154000, 0x154fff) AM_READWRITE_LEGACY(backfire_pf4_rowscroll_r, backfire_pf4_rowscroll_w)
275   AM_RANGE(0x160000, 0x161fff) AM_WRITE_LEGACY(backfire_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
283   AM_RANGE(0x150000, 0x150fff) AM_READWRITE(backfire_pf3_rowscroll_r, backfire_pf3_rowscroll_w)
284   AM_RANGE(0x154000, 0x154fff) AM_READWRITE(backfire_pf4_rowscroll_r, backfire_pf4_rowscroll_w)
285   AM_RANGE(0x160000, 0x161fff) AM_WRITE(backfire_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
276286   AM_RANGE(0x170000, 0x177fff) AM_RAM AM_BASE(m_mainram)// main ram
277287
278288//  AM_RANGE(0x180010, 0x180013) AM_RAM AM_BASE_LEGACY(&backfire_180010) // always 180010 ?
279289//  AM_RANGE(0x188010, 0x188013) AM_RAM AM_BASE_LEGACY(&backfire_188010) // always 188010 ?
280290
281   AM_RANGE(0x184000, 0x185fff) AM_READWRITE_LEGACY(backfire_spriteram1_r, backfire_spriteram1_w)
282   AM_RANGE(0x18c000, 0x18dfff) AM_READWRITE_LEGACY(backfire_spriteram2_r, backfire_spriteram2_w)
291   AM_RANGE(0x184000, 0x185fff) AM_READWRITE(backfire_spriteram1_r, backfire_spriteram1_w)
292   AM_RANGE(0x18c000, 0x18dfff) AM_READWRITE(backfire_spriteram2_r, backfire_spriteram2_w)
283293   AM_RANGE(0x190000, 0x190003) AM_DEVREAD_LEGACY("eeprom", backfire_eeprom_r)
284   AM_RANGE(0x194000, 0x194003) AM_READ_LEGACY(backfire_control2_r)
294   AM_RANGE(0x194000, 0x194003) AM_READ(backfire_control2_r)
285295   AM_RANGE(0x1a4000, 0x1a4003) AM_DEVWRITE_LEGACY("eeprom", backfire_eeprom_w)
286296
287297   AM_RANGE(0x1a8000, 0x1a8003) AM_RAM AM_BASE(m_left_priority)
r14845r14846
675685   auto_free(machine, buf1);
676686}
677687
678static READ32_HANDLER( backfire_speedup_r )
688READ32_MEMBER(backfire_state::backfire_speedup_r)
679689{
680   backfire_state *state = space->machine().driver_data<backfire_state>();
681690
682   //mame_printf_debug( "%08x\n",cpu_get_pc(&space->device()));
691   //mame_printf_debug( "%08x\n",cpu_get_pc(&space.device()));
683692
684   if (cpu_get_pc(&space->device() )== 0xce44)  device_spin_until_time(&space->device(), attotime::from_usec(400)); // backfire
685   if (cpu_get_pc(&space->device()) == 0xcee4)  device_spin_until_time(&space->device(), attotime::from_usec(400)); // backfirea
693   if (cpu_get_pc(&space.device() )== 0xce44)  device_spin_until_time(&space.device(), attotime::from_usec(400)); // backfire
694   if (cpu_get_pc(&space.device()) == 0xcee4)  device_spin_until_time(&space.device(), attotime::from_usec(400)); // backfirea
686695
687   return state->m_mainram[0x18/4];
696   return m_mainram[0x18/4];
688697}
689698
690699
r14845r14846
695704   deco156_decrypt(machine);
696705   machine.device("maincpu")->set_clock_scale(4.0f); /* core timings aren't accurate */
697706   descramble_sound(machine);
698   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x0170018, 0x017001b, FUNC(backfire_speedup_r) );
707   backfire_state *state = machine.driver_data<backfire_state>();
708   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x0170018, 0x017001b, read32_delegate(FUNC(backfire_state::backfire_speedup_r), state));
699709}
700710
701711GAME( 1995, backfire,  0,        backfire,   backfire, backfire, ROT0, "Data East Corporation", "Backfire! (set 1)", GAME_SUPPORTS_SAVE )
src/mame/drivers/cubeqst.c
r14845r14846
3838   UINT8 m_reset_latch;
3939   required_device<simutrek_special_device> m_laserdisc;
4040   rgb_t *m_colormap;
41   DECLARE_WRITE16_MEMBER(palette_w);
42   DECLARE_READ16_MEMBER(line_r);
43   DECLARE_WRITE16_MEMBER(laserdisc_w);
44   DECLARE_READ16_MEMBER(laserdisc_r);
45   DECLARE_WRITE16_MEMBER(ldaud_w);
46   DECLARE_WRITE16_MEMBER(control_w);
47   DECLARE_WRITE16_MEMBER(reset_w);
48   DECLARE_WRITE16_MEMBER(io_w);
49   DECLARE_READ16_MEMBER(io_r);
50   DECLARE_READ16_MEMBER(chop_r);
51   DECLARE_READ16_MEMBER(read_rotram);
52   DECLARE_WRITE16_MEMBER(write_rotram);
53   DECLARE_READ16_MEMBER(read_sndram);
54   DECLARE_WRITE16_MEMBER(write_sndram);
4155};
4256
4357
r14845r14846
87101   }
88102}
89103
90static WRITE16_HANDLER( palette_w )
104WRITE16_MEMBER(cubeqst_state::palette_w)
91105{
92   space->machine().primary_screen->update_now();
93   COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
106   machine().primary_screen->update_now();
107   COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
94108}
95109
96110/* TODO: This is a simplified version of what actually happens */
r14845r14846
170184   return 0;
171185}
172186
173static READ16_HANDLER( line_r )
187READ16_MEMBER(cubeqst_state::line_r)
174188{
175189   /* I think this is unusued */
176   return space->machine().primary_screen->vpos();
190   return machine().primary_screen->vpos();
177191}
178192
179193static INTERRUPT_GEN( vblank )
r14845r14846
194208 *
195209 *************************************/
196210
197static WRITE16_HANDLER( laserdisc_w )
211WRITE16_MEMBER(cubeqst_state::laserdisc_w)
198212{
199   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
200   state->m_laserdisc->data_w(data & 0xff);
213   m_laserdisc->data_w(data & 0xff);
201214}
202215
203216/*
204217    D0: Command acknowledge
205218    D1: Seek status (0 = searching, 1 = ready)
206219*/
207static READ16_HANDLER( laserdisc_r )
220READ16_MEMBER(cubeqst_state::laserdisc_r)
208221{
209   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
210   int ldp_command_flag = (state->m_laserdisc->ready_r() == ASSERT_LINE) ? 0 : 1;
211   int ldp_seek_status = (state->m_laserdisc->status_r() == ASSERT_LINE) ? 1 : 0;
222   int ldp_command_flag = (m_laserdisc->ready_r() == ASSERT_LINE) ? 0 : 1;
223   int ldp_seek_status = (m_laserdisc->status_r() == ASSERT_LINE) ? 1 : 0;
212224
213225   return (ldp_seek_status << 1) | ldp_command_flag;
214226}
215227
216228
217229/* LDP audio squelch control */
218static WRITE16_HANDLER( ldaud_w )
230WRITE16_MEMBER(cubeqst_state::ldaud_w)
219231{
220   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
221   state->m_laserdisc->set_external_audio_squelch(data & 1 ? ASSERT_LINE : CLEAR_LINE);
232   m_laserdisc->set_external_audio_squelch(data & 1 ? ASSERT_LINE : CLEAR_LINE);
222233}
223234
224235/*
r14845r14846
231242
232243    Note: Can only be written during VBLANK (as with palette RAM)
233244*/
234static WRITE16_HANDLER( control_w )
245WRITE16_MEMBER(cubeqst_state::control_w)
235246{
236   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
237   state->m_laserdisc->video_enable(data & 1);
247   m_laserdisc->video_enable(data & 1);
238248}
239249
240250
r14845r14846
268278    D1: /Sound
269279    D2: /Disk
270280*/
271static WRITE16_HANDLER( reset_w )
281WRITE16_MEMBER(cubeqst_state::reset_w)
272282{
273   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
274   cputag_set_input_line(space->machine(), "rotate_cpu", INPUT_LINE_RESET, data & 1 ? CLEAR_LINE : ASSERT_LINE);
275   cputag_set_input_line(space->machine(), "line_cpu", INPUT_LINE_RESET, data & 1 ? CLEAR_LINE : ASSERT_LINE);
276   cputag_set_input_line(space->machine(), "sound_cpu", INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
283   cputag_set_input_line(machine(), "rotate_cpu", INPUT_LINE_RESET, data & 1 ? CLEAR_LINE : ASSERT_LINE);
284   cputag_set_input_line(machine(), "line_cpu", INPUT_LINE_RESET, data & 1 ? CLEAR_LINE : ASSERT_LINE);
285   cputag_set_input_line(machine(), "sound_cpu", INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
277286
278287   /* Swap stack and pointer RAM banks on rising edge of display reset */
279   if (!BIT(state->m_reset_latch, 0) && BIT(data, 0))
280      swap_linecpu_banks(space->machine());
288   if (!BIT(m_reset_latch, 0) && BIT(data, 0))
289      swap_linecpu_banks(machine());
281290
282291   if (!BIT(data, 2))
283      state->m_laserdisc->reset();
292      m_laserdisc->reset();
284293
285   state->m_reset_latch = data & 0xff;
294   m_reset_latch = data & 0xff;
286295}
287296
288297
r14845r14846
292301 *
293302 *************************************/
294303
295static WRITE16_HANDLER( io_w )
304WRITE16_MEMBER(cubeqst_state::io_w)
296305{
297   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
298306   /*
299307       0: Spare lamp
300308       1: Spare driver
r14845r14846
307315    */
308316
309317   /* TODO: On rising edge of Q7, status LED latch is written */
310   if ( !BIT(state->m_io_latch, 7) && BIT(data, 7) )
318   if ( !BIT(m_io_latch, 7) && BIT(data, 7) )
311319   {
312320      /*
313321            0: Battery failure
r14845r14846
316324        */
317325   }
318326
319   state->m_io_latch = data;
327   m_io_latch = data;
320328}
321329
322static READ16_HANDLER( io_r )
330READ16_MEMBER(cubeqst_state::io_r)
323331{
324   cubeqst_state *state = space->machine().driver_data<cubeqst_state>();
325   UINT16 port_data = input_port_read(space->machine(), "IO");
332   UINT16 port_data = input_port_read(machine(), "IO");
326333
327334   /*
328335         Certain bits depend on Q7 of the IO latch:
r14845r14846
333340         10: Spare  / Trackball V data
334341    */
335342
336   if ( !BIT(state->m_io_latch, 7) )
343   if ( !BIT(m_io_latch, 7) )
337344      return port_data;
338345   else
339346      /* Return zeroes for the trackball signals for now */
r14845r14846
341348}
342349
343350/* Trackball ('CHOP') */
344static READ16_HANDLER( chop_r )
351READ16_MEMBER(cubeqst_state::chop_r)
345352{
346   return (input_port_read(space->machine(), "TRACK_X") << 8) | input_port_read(space->machine(), "TRACK_Y");
353   return (input_port_read(machine(), "TRACK_X") << 8) | input_port_read(machine(), "TRACK_Y");
347354}
348355
349356
r14845r14846
382389 *
383390 *************************************/
384391
385static READ16_HANDLER( read_rotram )
392READ16_MEMBER(cubeqst_state::read_rotram)
386393{
387   return cubeqcpu_rotram_r(space->machine().device("rotate_cpu"), offset, mem_mask);
394   return cubeqcpu_rotram_r(machine().device("rotate_cpu"), offset, mem_mask);
388395}
389396
390static WRITE16_HANDLER( write_rotram )
397WRITE16_MEMBER(cubeqst_state::write_rotram)
391398{
392   cubeqcpu_rotram_w(space->machine().device("rotate_cpu"), offset, data, mem_mask);
399   cubeqcpu_rotram_w(machine().device("rotate_cpu"), offset, data, mem_mask);
393400}
394401
395static READ16_HANDLER( read_sndram )
402READ16_MEMBER(cubeqst_state::read_sndram)
396403{
397   return cubeqcpu_sndram_r(space->machine().device("sound_cpu"), offset, mem_mask);
404   return cubeqcpu_sndram_r(machine().device("sound_cpu"), offset, mem_mask);
398405}
399406
400static WRITE16_HANDLER( write_sndram )
407WRITE16_MEMBER(cubeqst_state::write_sndram)
401408{
402   cubeqcpu_sndram_w(space->machine().device("sound_cpu"), offset, data, mem_mask);
409   cubeqcpu_sndram_w(machine().device("sound_cpu"), offset, data, mem_mask);
403410}
404411
405412static ADDRESS_MAP_START( m68k_program_map, AS_PROGRAM, 16, cubeqst_state )
406413   ADDRESS_MAP_GLOBAL_MASK(0x03ffff)
407414   AM_RANGE(0x000000, 0x01ffff) AM_ROM
408   AM_RANGE(0x020000, 0x027fff) AM_READWRITE_LEGACY(read_rotram, write_rotram)
409   AM_RANGE(0x028000, 0x028fff) AM_READWRITE_LEGACY(read_sndram, write_sndram)
410   AM_RANGE(0x038000, 0x038001) AM_READWRITE_LEGACY(io_r, io_w)
411   AM_RANGE(0x038002, 0x038003) AM_READWRITE_LEGACY(chop_r, ldaud_w)
412   AM_RANGE(0x038008, 0x038009) AM_READWRITE_LEGACY(line_r, reset_w)
413   AM_RANGE(0x03800e, 0x03800f) AM_READWRITE_LEGACY(laserdisc_r, laserdisc_w)
414   AM_RANGE(0x03c800, 0x03c9ff) AM_RAM_WRITE_LEGACY(palette_w) AM_BASE_GENERIC(paletteram)
415   AM_RANGE(0x03cc00, 0x03cc01) AM_WRITE_LEGACY(control_w)
415   AM_RANGE(0x020000, 0x027fff) AM_READWRITE(read_rotram, write_rotram)
416   AM_RANGE(0x028000, 0x028fff) AM_READWRITE(read_sndram, write_sndram)
417   AM_RANGE(0x038000, 0x038001) AM_READWRITE(io_r, io_w)
418   AM_RANGE(0x038002, 0x038003) AM_READWRITE(chop_r, ldaud_w)
419   AM_RANGE(0x038008, 0x038009) AM_READWRITE(line_r, reset_w)
420   AM_RANGE(0x03800e, 0x03800f) AM_READWRITE(laserdisc_r, laserdisc_w)
421   AM_RANGE(0x03c800, 0x03c9ff) AM_RAM_WRITE(palette_w) AM_BASE_GENERIC(paletteram)
422   AM_RANGE(0x03cc00, 0x03cc01) AM_WRITE(control_w)
416423   AM_RANGE(0x03e000, 0x03efff) AM_RAM AM_SHARE("nvram")
417424   AM_RANGE(0x03f000, 0x03ffff) AM_RAM
418425ADDRESS_MAP_END
src/mame/drivers/astrocorp.c
r14845r14846
5151   bitmap_ind16 m_bitmap;
5252   UINT16     m_screen_enable;
5353   UINT16     m_draw_sprites;
54   DECLARE_WRITE16_MEMBER(astrocorp_draw_sprites_w);
55   DECLARE_WRITE16_MEMBER(astrocorp_eeprom_w);
56   DECLARE_WRITE16_MEMBER(showhand_outputs_w);
57   DECLARE_WRITE16_MEMBER(skilldrp_outputs_w);
58   DECLARE_WRITE16_MEMBER(astrocorp_screen_enable_w);
59   DECLARE_READ16_MEMBER(astrocorp_unk_r);
60   DECLARE_WRITE16_MEMBER(astrocorp_palette_w);
5461};
5562
5663/***************************************************************************
r14845r14846
155162                                Memory Maps
156163***************************************************************************/
157164
158static WRITE16_HANDLER( astrocorp_draw_sprites_w )
165WRITE16_MEMBER(astrocorp_state::astrocorp_draw_sprites_w)
159166{
160   astrocorp_state *state = space->machine().driver_data<astrocorp_state>();
161167
162   UINT16 old = state->m_draw_sprites;
163   UINT16 now = COMBINE_DATA(&state->m_draw_sprites);
168   UINT16 old = m_draw_sprites;
169   UINT16 now = COMBINE_DATA(&m_draw_sprites);
164170
165171   if (!old && now)
166      draw_sprites(space->machine(), state->m_bitmap, space->machine().primary_screen->visible_area());
172      draw_sprites(machine(), m_bitmap, machine().primary_screen->visible_area());
167173}
168174
169static WRITE16_HANDLER( astrocorp_eeprom_w )
175WRITE16_MEMBER(astrocorp_state::astrocorp_eeprom_w)
170176{
171177   if (ACCESSING_BITS_0_7)
172178   {
173      input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
179      input_port_write(machine(), "EEPROMOUT", data, 0xff);
174180   }
175181}
176182
r14845r14846
194200   }
195201}
196202
197static WRITE16_HANDLER( showhand_outputs_w )
203WRITE16_MEMBER(astrocorp_state::showhand_outputs_w)
198204{
199205   if (ACCESSING_BITS_0_7)
200206   {
201      coin_counter_w(space->machine(), 0,   (data & 0x0004));   // coin counter
202      set_led_status(space->machine(), 0,   (data & 0x0008));   // you win
203      if ((data & 0x0010)) increment_dispensed_tickets(space->machine(), 1); // coin out
204      set_led_status(space->machine(), 1,   (data & 0x0020));   // coin/hopper jam
207      coin_counter_w(machine(), 0,   (data & 0x0004));   // coin counter
208      set_led_status(machine(), 0,   (data & 0x0008));   // you win
209      if ((data & 0x0010)) increment_dispensed_tickets(machine(), 1); // coin out
210      set_led_status(machine(), 1,   (data & 0x0020));   // coin/hopper jam
205211   }
206212   if (ACCESSING_BITS_8_15)
207213   {
208      set_led_status(space->machine(), 2,   (data & 0x0100));   // bet
209      set_led_status(space->machine(), 3,   (data & 0x0800));   // start
210      set_led_status(space->machine(), 4,   (data & 0x1000));   // ? select/choose
211      set_led_status(space->machine(), 5,   (data & 0x2000));   // ? select/choose
212      set_led_status(space->machine(), 6,   (data & 0x4000));   // look
214      set_led_status(machine(), 2,   (data & 0x0100));   // bet
215      set_led_status(machine(), 3,   (data & 0x0800));   // start
216      set_led_status(machine(), 4,   (data & 0x1000));   // ? select/choose
217      set_led_status(machine(), 5,   (data & 0x2000));   // ? select/choose
218      set_led_status(machine(), 6,   (data & 0x4000));   // look
213219   }
214220//  popmessage("%04X",data);
215221}
216222
217static WRITE16_HANDLER( skilldrp_outputs_w )
223WRITE16_MEMBER(astrocorp_state::skilldrp_outputs_w)
218224{
219225   // key in          (0001)
220226   // coin in         (0002)
r14845r14846
234240
235241   if (ACCESSING_BITS_0_7)
236242   {
237      coin_counter_w(space->machine(), 0,   (data & 0x0001));   // key in  |
238      coin_counter_w(space->machine(), 0,   (data & 0x0002));   // coin in |- manual shows 1 in- and 1 out- counter
239      coin_counter_w(space->machine(), 1,   (data & 0x0004));   // key out |
240      ticket_dispenser_w(space->machine().device("hopper"), 0, (data & 0x0008)<<4);   // hopper motor?
243      coin_counter_w(machine(), 0,   (data & 0x0001));   // key in  |
244      coin_counter_w(machine(), 0,   (data & 0x0002));   // coin in |- manual shows 1 in- and 1 out- counter
245      coin_counter_w(machine(), 1,   (data & 0x0004));   // key out |
246      ticket_dispenser_w(machine().device("hopper"), 0, (data & 0x0008)<<4);   // hopper motor?
241247      //                                  (data & 0x0010)     // hopper?
242      set_led_status(space->machine(), 0,   (data & 0x0020));   // error lamp (coin/hopper jam: "call attendant")
243      ticket_dispenser_w(space->machine().device("ticket"), 0, data & 0x0080);   // ticket motor?
248      set_led_status(machine(), 0,   (data & 0x0020));   // error lamp (coin/hopper jam: "call attendant")
249      ticket_dispenser_w(machine().device("ticket"), 0, data & 0x0080);   // ticket motor?
244250   }
245251   if (ACCESSING_BITS_8_15)
246252   {
247253      // lamps:
248      set_led_status(space->machine(), 1,   (data & 0x0100));   // select
249      set_led_status(space->machine(), 2,   (data & 0x0400));   // take
250      set_led_status(space->machine(), 3,   (data & 0x0800));   // bet
251      set_led_status(space->machine(), 4,   (data & 0x1000));   // start
252      set_led_status(space->machine(), 5,   (data & 0x4000));   // win / test
253      set_led_status(space->machine(), 6,   (data & 0x8000));   // ticket?
254      set_led_status(machine(), 1,   (data & 0x0100));   // select
255      set_led_status(machine(), 2,   (data & 0x0400));   // take
256      set_led_status(machine(), 3,   (data & 0x0800));   // bet
257      set_led_status(machine(), 4,   (data & 0x1000));   // start
258      set_led_status(machine(), 5,   (data & 0x4000));   // win / test
259      set_led_status(machine(), 6,   (data & 0x8000));   // ticket?
254260   }
255261
256262//  popmessage("%04X",data);
257263}
258264
259static WRITE16_HANDLER( astrocorp_screen_enable_w )
265WRITE16_MEMBER(astrocorp_state::astrocorp_screen_enable_w)
260266{
261   astrocorp_state *state = space->machine().driver_data<astrocorp_state>();
262   COMBINE_DATA(&state->m_screen_enable);
267   COMBINE_DATA(&m_screen_enable);
263268//  popmessage("%04X",data);
264   if (state->m_screen_enable & (~1))
265      logerror("CPU #0 PC %06X: screen enable = %04X\n", cpu_get_pc(&space->device()), state->m_screen_enable);
269   if (m_screen_enable & (~1))
270      logerror("CPU #0 PC %06X: screen enable = %04X\n", cpu_get_pc(&space.device()), m_screen_enable);
266271}
267272
268static READ16_HANDLER( astrocorp_unk_r )
273READ16_MEMBER(astrocorp_state::astrocorp_unk_r)
269274{
270275   return 0xffff;   // bit 3?
271276}
272277
273278// 5-6-5 Palette: BBBBB-GGGGGG-RRRRR
274static WRITE16_HANDLER( astrocorp_palette_w )
279WRITE16_MEMBER(astrocorp_state::astrocorp_palette_w)
275280{
276   astrocorp_state *state = space->machine().driver_data<astrocorp_state>();
277   COMBINE_DATA(&state->m_paletteram[offset]);
278   palette_set_color_rgb(space->machine(), offset,
279      pal5bit((state->m_paletteram[offset] >>  0) & 0x1f),
280      pal6bit((state->m_paletteram[offset] >>  5) & 0x3f),
281      pal5bit((state->m_paletteram[offset] >> 11) & 0x1f)
281   COMBINE_DATA(&m_paletteram[offset]);
282   palette_set_color_rgb(machine(), offset,
283      pal5bit((m_paletteram[offset] >>  0) & 0x1f),
284      pal6bit((m_paletteram[offset] >>  5) & 0x3f),
285      pal5bit((m_paletteram[offset] >> 11) & 0x1f)
282286   );
283287}
284288
285289static ADDRESS_MAP_START( showhand_map, AS_PROGRAM, 16, astrocorp_state )
286290   AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
287291   AM_RANGE( 0x050000, 0x050fff ) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
288   AM_RANGE( 0x052000, 0x052001 ) AM_WRITE_LEGACY(astrocorp_draw_sprites_w)
292   AM_RANGE( 0x052000, 0x052001 ) AM_WRITE(astrocorp_draw_sprites_w)
289293   AM_RANGE( 0x054000, 0x054001 ) AM_READ_PORT("INPUTS")
290   AM_RANGE( 0x058000, 0x058001 ) AM_WRITE_LEGACY(astrocorp_eeprom_w)
291   AM_RANGE( 0x05a000, 0x05a001 ) AM_WRITE_LEGACY(showhand_outputs_w)
294   AM_RANGE( 0x058000, 0x058001 ) AM_WRITE(astrocorp_eeprom_w)
295   AM_RANGE( 0x05a000, 0x05a001 ) AM_WRITE(showhand_outputs_w)
292296   AM_RANGE( 0x05e000, 0x05e001 ) AM_READ_PORT("EEPROMIN")
293   AM_RANGE( 0x060000, 0x0601ff ) AM_RAM_WRITE_LEGACY(astrocorp_palette_w) AM_BASE(m_paletteram)
297   AM_RANGE( 0x060000, 0x0601ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_BASE(m_paletteram)
294298   AM_RANGE( 0x070000, 0x073fff ) AM_RAM AM_SHARE("nvram")   // battery
295299   AM_RANGE( 0x080000, 0x080001 ) AM_DEVWRITE_LEGACY("oki", astrocorp_sound_bank_w)
296   AM_RANGE( 0x0a0000, 0x0a0001 ) AM_WRITE_LEGACY(astrocorp_screen_enable_w)
297   AM_RANGE( 0x0d0000, 0x0d0001 ) AM_READ_LEGACY(astrocorp_unk_r) AM_DEVWRITE8("oki", okim6295_device, write, 0xff00)
300   AM_RANGE( 0x0a0000, 0x0a0001 ) AM_WRITE(astrocorp_screen_enable_w)
301   AM_RANGE( 0x0d0000, 0x0d0001 ) AM_READ(astrocorp_unk_r) AM_DEVWRITE8("oki", okim6295_device, write, 0xff00)
298302ADDRESS_MAP_END
299303
300304static ADDRESS_MAP_START( showhanc_map, AS_PROGRAM, 16, astrocorp_state )
301305   AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
302   AM_RANGE( 0x060000, 0x0601ff ) AM_RAM_WRITE_LEGACY(astrocorp_palette_w) AM_BASE(m_paletteram)
306   AM_RANGE( 0x060000, 0x0601ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_BASE(m_paletteram)
303307   AM_RANGE( 0x070000, 0x070001 ) AM_DEVWRITE_LEGACY("oki", astrocorp_sound_bank_w)
304308   AM_RANGE( 0x080000, 0x080fff ) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
305   AM_RANGE( 0x082000, 0x082001 ) AM_WRITE_LEGACY(astrocorp_draw_sprites_w)
309   AM_RANGE( 0x082000, 0x082001 ) AM_WRITE(astrocorp_draw_sprites_w)
306310   AM_RANGE( 0x084000, 0x084001 ) AM_READ_PORT("INPUTS")
307   AM_RANGE( 0x088000, 0x088001 ) AM_WRITE_LEGACY(astrocorp_eeprom_w)
308   AM_RANGE( 0x08a000, 0x08a001 ) AM_WRITE_LEGACY(showhand_outputs_w)
311   AM_RANGE( 0x088000, 0x088001 ) AM_WRITE(astrocorp_eeprom_w)
312   AM_RANGE( 0x08a000, 0x08a001 ) AM_WRITE(showhand_outputs_w)
309313   AM_RANGE( 0x08e000, 0x08e001 ) AM_READ_PORT("EEPROMIN")
310314   AM_RANGE( 0x090000, 0x093fff ) AM_RAM AM_SHARE("nvram")   // battery
311   AM_RANGE( 0x0a0000, 0x0a0001 ) AM_WRITE_LEGACY(astrocorp_screen_enable_w)
312   AM_RANGE( 0x0e0000, 0x0e0001 ) AM_READ_LEGACY(astrocorp_unk_r) AM_DEVWRITE8("oki", okim6295_device, write, 0xff00)
315   AM_RANGE( 0x0a0000, 0x0a0001 ) AM_WRITE(astrocorp_screen_enable_w)
316   AM_RANGE( 0x0e0000, 0x0e0001 ) AM_READ(astrocorp_unk_r) AM_DEVWRITE8("oki", okim6295_device, write, 0xff00)
313317ADDRESS_MAP_END
314318
315319static ADDRESS_MAP_START( skilldrp_map, AS_PROGRAM, 16, astrocorp_state )
316320   AM_RANGE( 0x000000, 0x03ffff ) AM_ROM
317321   AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
318   AM_RANGE( 0x202000, 0x202001 ) AM_WRITE_LEGACY(astrocorp_draw_sprites_w)
322   AM_RANGE( 0x202000, 0x202001 ) AM_WRITE(astrocorp_draw_sprites_w)
319323   AM_RANGE( 0x204000, 0x204001 ) AM_READ_PORT("INPUTS")
320   AM_RANGE( 0x208000, 0x208001 ) AM_WRITE_LEGACY(astrocorp_eeprom_w)
321   AM_RANGE( 0x20a000, 0x20a001 ) AM_WRITE_LEGACY(skilldrp_outputs_w)
324   AM_RANGE( 0x208000, 0x208001 ) AM_WRITE(astrocorp_eeprom_w)
325   AM_RANGE( 0x20a000, 0x20a001 ) AM_WRITE(skilldrp_outputs_w)
322326   AM_RANGE( 0x20e000, 0x20e001 ) AM_READ_PORT("EEPROMIN")
323   AM_RANGE( 0x380000, 0x3801ff ) AM_RAM_WRITE_LEGACY(astrocorp_palette_w) AM_BASE(m_paletteram)
324   AM_RANGE( 0x400000, 0x400001 ) AM_WRITE_LEGACY(astrocorp_screen_enable_w)
327   AM_RANGE( 0x380000, 0x3801ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_BASE(m_paletteram)
328   AM_RANGE( 0x400000, 0x400001 ) AM_WRITE(astrocorp_screen_enable_w)
325329   AM_RANGE( 0x500000, 0x507fff ) AM_RAM AM_SHARE("nvram")   // battery
326330   AM_RANGE( 0x580000, 0x580001 ) AM_DEVWRITE_LEGACY("oki", skilldrp_sound_bank_w)
327331   AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
r14845r14846
331335   AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
332336   AM_RANGE( 0x280000, 0x283fff ) AM_RAM AM_SHARE("nvram")   // battery
333337   AM_RANGE( 0x380000, 0x380fff ) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
334   AM_RANGE( 0x382000, 0x382001 ) AM_WRITE_LEGACY(astrocorp_draw_sprites_w)
338   AM_RANGE( 0x382000, 0x382001 ) AM_WRITE(astrocorp_draw_sprites_w)
335339   AM_RANGE( 0x384000, 0x384001 ) AM_READ_PORT("INPUTS")
336   AM_RANGE( 0x388000, 0x388001 ) AM_WRITE_LEGACY(astrocorp_eeprom_w)
337   AM_RANGE( 0x38a000, 0x38a001 ) AM_WRITE_LEGACY(skilldrp_outputs_w)
340   AM_RANGE( 0x388000, 0x388001 ) AM_WRITE(astrocorp_eeprom_w)
341   AM_RANGE( 0x38a000, 0x38a001 ) AM_WRITE(skilldrp_outputs_w)
338342   AM_RANGE( 0x38e000, 0x38e001 ) AM_READ_PORT("EEPROMIN")
339   AM_RANGE( 0x480000, 0x4801ff ) AM_RAM_WRITE_LEGACY(astrocorp_palette_w) AM_BASE(m_paletteram)
340   AM_RANGE( 0x500000, 0x500001 ) AM_WRITE_LEGACY(astrocorp_screen_enable_w)
343   AM_RANGE( 0x480000, 0x4801ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_BASE(m_paletteram)
344   AM_RANGE( 0x500000, 0x500001 ) AM_WRITE(astrocorp_screen_enable_w)
341345   AM_RANGE( 0x580000, 0x580001 ) AM_DEVWRITE_LEGACY("oki", skilldrp_sound_bank_w)
342346   AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
343347ADDRESS_MAP_END
src/mame/drivers/ltcasino.c
r14845r14846
2727   UINT8 *m_tile_num_ram;
2828   UINT8 *m_tile_atr_ram;
2929   tilemap_t *m_tilemap;
30   DECLARE_WRITE8_MEMBER(ltcasino_tile_num_w);
31   DECLARE_WRITE8_MEMBER(ltcasino_tile_atr_w);
3032};
3133
3234
r14845r14846
5254}
5355
5456
55static WRITE8_HANDLER( ltcasino_tile_num_w )
57WRITE8_MEMBER(ltcasino_state::ltcasino_tile_num_w)
5658{
57   ltcasino_state *state = space->machine().driver_data<ltcasino_state>();
58   state->m_tile_num_ram[offset] = data;
59   state->m_tilemap->mark_tile_dirty(offset);
59   m_tile_num_ram[offset] = data;
60   m_tilemap->mark_tile_dirty(offset);
6061}
6162
62static WRITE8_HANDLER( ltcasino_tile_atr_w )
63WRITE8_MEMBER(ltcasino_state::ltcasino_tile_atr_w)
6364{
64   ltcasino_state *state = space->machine().driver_data<ltcasino_state>();
65   state->m_tile_atr_ram[offset] = data;
66   state->m_tilemap->mark_tile_dirty(offset);
65   m_tile_atr_ram[offset] = data;
66   m_tilemap->mark_tile_dirty(offset);
6767}
6868
6969
7070static ADDRESS_MAP_START( ltcasino_map, AS_PROGRAM, 8, ltcasino_state )
7171   AM_RANGE(0x0000, 0x7fff) AM_RAM
7272   AM_RANGE(0x8000, 0xcfff) AM_ROM
73   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(ltcasino_tile_num_w) AM_BASE(m_tile_num_ram)
73   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(ltcasino_tile_num_w) AM_BASE(m_tile_num_ram)
7474   AM_RANGE(0xd800, 0xdfff) AM_RAM
75   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE_LEGACY(ltcasino_tile_atr_w) AM_BASE(m_tile_atr_ram)
75   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(ltcasino_tile_atr_w) AM_BASE(m_tile_atr_ram)
7676   AM_RANGE(0xe800, 0xebff) AM_RAM
7777
7878   AM_RANGE(0xec00, 0xec00) AM_READ_PORT("IN0")
src/mame/drivers/meijinsn.c
r14845r14846
8989   int m_mcu_latch;
9090
9191   required_device<cpu_device> m_maincpu;
92   DECLARE_WRITE16_MEMBER(sound_w);
93   DECLARE_READ16_MEMBER(alpha_mcu_r);
9294};
9395
9496
9597
96static WRITE16_HANDLER( sound_w )
98WRITE16_MEMBER(meijinsn_state::sound_w)
9799{
98100   if (ACCESSING_BITS_0_7)
99101      soundlatch_w(space, 0, data & 0xff);
100102}
101103
102static READ16_HANDLER( alpha_mcu_r )
104READ16_MEMBER(meijinsn_state::alpha_mcu_r)
103105{
104   meijinsn_state *state = space->machine().driver_data<meijinsn_state>();
105106   static const UINT8 coinage1[2][2] = {{1,1}, {1,2}};
106107   static const UINT8 coinage2[2][2] = {{1,5}, {2,1}};
107108
108   int source = state->m_shared_ram[offset];
109   int source = m_shared_ram[offset];
109110
110111   switch (offset)
111112   {
112113      case 0: /* Dipswitch 2 */
113         state->m_shared_ram[0] = (source & 0xff00) | input_port_read(space->machine(), "DSW");
114         m_shared_ram[0] = (source & 0xff00) | input_port_read(machine(), "DSW");
114115         return 0;
115116
116117      case 0x22: /* Coin value */
117         state->m_shared_ram[0x22] = (source & 0xff00) | (state->m_credits & 0x00ff);
118         m_shared_ram[0x22] = (source & 0xff00) | (m_credits & 0x00ff);
118119         return 0;
119120
120121      case 0x29: /* Query microcontroller for coin insert */
121122
122         state->m_credits = 0;
123         m_credits = 0;
123124
124         if ((input_port_read(space->machine(), "COINS") & 0x3) == 3)
125            state->m_mcu_latch = 0;
125         if ((input_port_read(machine(), "COINS") & 0x3) == 3)
126            m_mcu_latch = 0;
126127
127         if ((input_port_read(space->machine(), "COINS") & 0x1) == 0 && !state->m_mcu_latch)
128         if ((input_port_read(machine(), "COINS") & 0x1) == 0 && !m_mcu_latch)
128129         {
129            state->m_shared_ram[0x29] = (source & 0xff00) | 0x22;   // coinA
130            state->m_shared_ram[0x22] = (source & 0xff00) | 0x00;
131            state->m_mcu_latch = 1;
130            m_shared_ram[0x29] = (source & 0xff00) | 0x22;   // coinA
131            m_shared_ram[0x22] = (source & 0xff00) | 0x00;
132            m_mcu_latch = 1;
132133
133            state->m_coinvalue = (~input_port_read(space->machine(), "DSW")>>3) & 1;
134            m_coinvalue = (~input_port_read(machine(), "DSW")>>3) & 1;
134135
135            state->m_deposits1++;
136            if (state->m_deposits1 == coinage1[state->m_coinvalue][0])
136            m_deposits1++;
137            if (m_deposits1 == coinage1[m_coinvalue][0])
137138            {
138               state->m_credits = coinage1[state->m_coinvalue][1];
139               state->m_deposits1 = 0;
139               m_credits = coinage1[m_coinvalue][1];
140               m_deposits1 = 0;
140141            }
141142            else
142               state->m_credits = 0;
143               m_credits = 0;
143144         }
144         else if ((input_port_read(space->machine(), "COINS") & 0x2) == 0 && !state->m_mcu_latch)
145         else if ((input_port_read(machine(), "COINS") & 0x2) == 0 && !m_mcu_latch)
145146         {
146            state->m_shared_ram[0x29] = (source & 0xff00) | 0x22;   // coinA
147            state->m_shared_ram[0x22] = (source & 0xff00) | 0x00;
148            state->m_mcu_latch = 1;
147            m_shared_ram[0x29] = (source & 0xff00) | 0x22;   // coinA
148            m_shared_ram[0x22] = (source & 0xff00) | 0x00;
149            m_mcu_latch = 1;
149150
150            state->m_coinvalue = (~input_port_read(space->machine(), "DSW") >> 3) & 1;
151            m_coinvalue = (~input_port_read(machine(), "DSW") >> 3) & 1;
151152
152            state->m_deposits2++;
153            if (state->m_deposits2 == coinage2[state->m_coinvalue][0])
153            m_deposits2++;
154            if (m_deposits2 == coinage2[m_coinvalue][0])
154155            {
155               state->m_credits = coinage2[state->m_coinvalue][1];
156               state->m_deposits2 = 0;
156               m_credits = coinage2[m_coinvalue][1];
157               m_deposits2 = 0;
157158            }
158159            else
159               state->m_credits = 0;
160               m_credits = 0;
160161         }
161162         else
162163         {
163            state->m_shared_ram[0x29] = (source & 0xff00) | 0x22;
164            m_shared_ram[0x29] = (source & 0xff00) | 0x22;
164165         }
165166         return 0;
166167   }
r14845r14846
171172
172173static ADDRESS_MAP_START( meijinsn_map, AS_PROGRAM, 16, meijinsn_state )
173174   AM_RANGE(0x000000, 0x03ffff) AM_ROM
174   AM_RANGE(0x080e00, 0x080fff) AM_READ_LEGACY(alpha_mcu_r) AM_WRITENOP
175   AM_RANGE(0x080e00, 0x080fff) AM_READ(alpha_mcu_r) AM_WRITENOP
175176   AM_RANGE(0x100000, 0x107fff) AM_RAM AM_BASE(m_videoram)
176177   AM_RANGE(0x180000, 0x180dff) AM_RAM
177178   AM_RANGE(0x180e00, 0x180fff) AM_RAM AM_BASE(m_shared_ram)
178179   AM_RANGE(0x181000, 0x181fff) AM_RAM
179180   AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("P2")
180   AM_RANGE(0x1a0000, 0x1a0001) AM_READ_PORT("P1") AM_WRITE_LEGACY(sound_w)
181   AM_RANGE(0x1a0000, 0x1a0001) AM_READ_PORT("P1") AM_WRITE(sound_w)
181182ADDRESS_MAP_END
182183
183184static ADDRESS_MAP_START( meijinsn_sound_map, AS_PROGRAM, 8, meijinsn_state )
src/mame/drivers/coolridr.c
r14845r14846
297297   required_device<cpu_device> m_maincpu;
298298   required_device<cpu_device> m_subcpu;
299299   required_device<cpu_device> m_soundcpu;
300   DECLARE_READ32_MEMBER(sysh1_unk_r);
301   DECLARE_WRITE32_MEMBER(sysh1_unk_w);
302   DECLARE_READ32_MEMBER(sysh1_ioga_r);
303   DECLARE_WRITE32_MEMBER(sysh1_ioga_w);
304   DECLARE_WRITE32_MEMBER(sysh1_txt_blit_w);
305   DECLARE_WRITE32_MEMBER(sysh1_pal_w);
306   DECLARE_WRITE32_MEMBER(sysh1_dma_w);
307   DECLARE_WRITE32_MEMBER(sysh1_char_w);
308   DECLARE_READ32_MEMBER(coolridr_hack1_r);
309   DECLARE_READ32_MEMBER(coolridr_hack2_r);
300310};
301311
302312
r14845r14846
376386/* end video */
377387
378388/* unknown purpose */
379static READ32_HANDLER(sysh1_unk_r)
389READ32_MEMBER(coolridr_state::sysh1_unk_r)
380390{
381   coolridr_state *state = space->machine().driver_data<coolridr_state>();
382391   switch(offset)
383392   {
384393      case 0x08/4:
385394      {
386395
387         state->m_vblank^=1;
396         m_vblank^=1;
388397
389         return (state->m_h1_unk[offset] & 0xfdffffff) | (state->m_vblank<<25);
398         return (m_h1_unk[offset] & 0xfdffffff) | (m_vblank<<25);
390399      }
391400      case 0x14/4:
392         return state->m_h1_unk[offset];
401         return m_h1_unk[offset];
393402      //case 0x20/4:
394403   }
395404
396   return 0xffffffff;//state->m_h1_unk[offset];
405   return 0xffffffff;//m_h1_unk[offset];
397406}
398407
399static WRITE32_HANDLER(sysh1_unk_w)
408WRITE32_MEMBER(coolridr_state::sysh1_unk_w)
400409{
401   coolridr_state *state = space->machine().driver_data<coolridr_state>();
402   COMBINE_DATA(&state->m_h1_unk[offset]);
410   COMBINE_DATA(&m_h1_unk[offset]);
403411}
404412
405413/* According to Guru, this is actually the same I/O chip of Sega Model 2 HW */
406414#if 0
407static READ32_HANDLER(sysh1_ioga_r)
415READ32_MEMBER(coolridr_state::sysh1_ioga_r)
408416{
409   //return space->machine().rand();//h1_ioga[offset];
417   //return machine().rand();//h1_ioga[offset];
410418   return h1_ioga[offset];
411419}
412420
413static WRITE32_HANDLER(sysh1_ioga_w)
421WRITE32_MEMBER(coolridr_state::sysh1_ioga_w)
414422{
415423   COMBINE_DATA(&h1_ioga[offset]);
416424}
r14845r14846
418426
419427
420428/* This is a RLE-based sprite blitter (US Patent #6,141,122), very unusual from Sega... */
421static WRITE32_HANDLER( sysh1_txt_blit_w )
429WRITE32_MEMBER(coolridr_state::sysh1_txt_blit_w)
422430{
423   coolridr_state *state = space->machine().driver_data<coolridr_state>();
424431
425   COMBINE_DATA(&state->m_sysh1_txt_blit[offset]);
432   COMBINE_DATA(&m_sysh1_txt_blit[offset]);
426433
427434   switch(offset)
428435   {
429436      // The mode register
430437      case 0x04:
431438      {
432         state->m_blitterMode = (data & 0x00ff0000) >> 16;
439         m_blitterMode = (data & 0x00ff0000) >> 16;
433440
434         if (state->m_blitterMode == 0xf4)
441         if (m_blitterMode == 0xf4)
435442         {
436443            // Some sort of addressing state.
437444            // In the case of text, simply writes 4 characters per 32-bit word.
438445            // These values may be loaded into RAM somewhere as they are written.
439446            // The number of characters is determined by the upper-most 8 bits.
440            state->m_textBytesToWrite = (data & 0xff000000) >> 24;
441            state->m_textOffset = (data & 0x0000ffff);
442            state->m_blitterSerialCount = 0;
447            m_textBytesToWrite = (data & 0xff000000) >> 24;
448            m_textOffset = (data & 0x0000ffff);
449            m_blitterSerialCount = 0;
443450         }
444         else if (state->m_blitterMode == 0x30 || state->m_blitterMode == 0x90)
451         else if (m_blitterMode == 0x30 || m_blitterMode == 0x90)
445452         {
446453            // The blitter function(s).
447454            // After this is set a fixed count of 11 32-bit words are sent to the data register.
448455            // The lower word always seems to be 0x0001 and the upper byte always 0xac.
449            state->m_blitterSerialCount = 0;
456            m_blitterSerialCount = 0;
450457         }
451         else if (state->m_blitterMode == 0x10)
458         else if (m_blitterMode == 0x10)
452459         {
453460            // Could be a full clear of VRAM?
454461            for(UINT32 vramAddr = 0x3f40000; vramAddr < 0x3f4ffff; vramAddr+=4)
455               space->write_dword(vramAddr, 0x00000000);
462               space.write_dword(vramAddr, 0x00000000);
456463         }
457464         break;
458465      }
r14845r14846
460467      // The data register
461468      case 0x05:
462469      {
463         if (state->m_blitterMode == 0xf4)
470         if (m_blitterMode == 0xf4)
464471         {
465472            // Uploads a series of bytes that index into the encoded sprite table
466            const size_t memOffset = 0x03f40000 + state->m_textOffset + state->m_blitterSerialCount;
467            space->write_dword(memOffset, data);
468            state->m_blitterSerialCount += 0x04;
473            const size_t memOffset = 0x03f40000 + m_textOffset + m_blitterSerialCount;
474            space.write_dword(memOffset, data);
475            m_blitterSerialCount += 0x04;
469476
470477            // DEBUG: Uncomment to see the ASCII strings as they are being blitted
471            //if (state->m_blitterSerialCount >= state->m_textBytesToWrite)
478            //if (m_blitterSerialCount >= m_textBytesToWrite)
472479            //{
473            //  for (int i = 0; i < state->m_textBytesToWrite+1; i++)
474            //      printf("%c", space->read_byte(0x03f40000 + state->m_textOffset + i));
480            //  for (int i = 0; i < m_textBytesToWrite+1; i++)
481            //      printf("%c", read_byte(0x03f40000 + m_textOffset + i));
475482            //  printf("\n");
476483            //}
477484         }
478         else if (state->m_blitterMode == 0x30 || state->m_blitterMode == 0x90)
485         else if (m_blitterMode == 0x30 || m_blitterMode == 0x90)
479486         {
480487            // Serialized 32-bit words in order of appearance:
481488            //  0: 00000000 - totally unknown : always seems to be zero
r14845r14846
495502            //                (See ifdef'ed out code below for a closer examination)
496503
497504            // Serialized counts
498            if (state->m_blitterSerialCount == 1)
505            if (m_blitterSerialCount == 1)
499506            {
500               state->m_colorNumber = (data & 0x000000ff);   // Probably more bits
507               m_colorNumber = (data & 0x000000ff);   // Probably more bits
501508            }
502            else if (state->m_blitterSerialCount == 6)
509            else if (m_blitterSerialCount == 6)
503510            {
504               state->m_vCellCount = (data & 0xffff0000) >> 16;
505               state->m_hCellCount = (data & 0x0000ffff);
511               m_vCellCount = (data & 0xffff0000) >> 16;
512               m_hCellCount = (data & 0x0000ffff);
506513            }
507            else if (state->m_blitterSerialCount == 9)
514            else if (m_blitterSerialCount == 9)
508515            {
509               state->m_vPosition = (data & 0xffff0000) >> 16;
510               state->m_hPosition = (data & 0x0000ffff);
516               m_vPosition = (data & 0xffff0000) >> 16;
517               m_hPosition = (data & 0x0000ffff);
511518            }
512            else if (state->m_blitterSerialCount == 11)
519            else if (m_blitterSerialCount == 11)
513520            {
514521               const UINT32 memOffset = data;
515522
516523               // Splat some sprites
517               for (int h = 0; h < state->m_hCellCount; h++)
524               for (int h = 0; h < m_hCellCount; h++)
518525               {
519                  for (int v = 0; v < state->m_vCellCount; v++)
526                  for (int v = 0; v < m_vCellCount; v++)
520527                  {
521                     const int pixelOffsetX = state->m_hPosition + (h*16);
522                     const int pixelOffsetY = state->m_vPosition + (v*16);
528                     const int pixelOffsetX = m_hPosition + (h*16);
529                     const int pixelOffsetY = m_vPosition + (v*16);
523530
524531                     // It's unknown if it's row-major or column-major
525532                     // TODO: Study the CRT test and "Cool Riders" logo for clues.
526                     UINT8 spriteNumber = space->read_byte(memOffset + h + (v*h));
533                     UINT8 spriteNumber = space.read_byte(memOffset + h + (v*h));
527534
528                     // DEBUG: For demo purposes, skip spaces and NULL characters
535                     // DEBUG: For demo purposes, skip &spaces and NULL characters
529536                     if (spriteNumber == 0x20 || spriteNumber == 0x00)
530537                        continue;
531538
r14845r14846
535542                        for (int y = 1; y < 15; y++)
536543                        {
537544                           UINT32 color;
538                           if (state->m_colorNumber == 0x5b)
545                           if (m_colorNumber == 0x5b)
539546                              color = 0xffff0000;
540                           else if (state->m_colorNumber == 0x5d)
547                           else if (m_colorNumber == 0x5d)
541548                              color = 0xff00ff00;
542                           else if (state->m_colorNumber == 0x5e)
549                           else if (m_colorNumber == 0x5e)
543550                              color = 0xff0000ff;
544551                           else
545552                              color = 0xff00ffff;
546                           state->m_temp_bitmap_sprites.pix32(pixelOffsetY+y, pixelOffsetX+x) = color;
553                           m_temp_bitmap_sprites.pix32(pixelOffsetY+y, pixelOffsetX+x) = color;
547554                        }
548555                     }
549556                  }
550557               }
551558            }
552559
553            state->m_blitterSerialCount++;
560            m_blitterSerialCount++;
554561         }
555562         break;
556563      }
r14845r14846
558565}
559566
560567
561static WRITE32_HANDLER( sysh1_pal_w )
568WRITE32_MEMBER(coolridr_state::sysh1_pal_w)
562569{
563570   int r,g,b;
564   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
571   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
565572
566   r = ((space->machine().generic.paletteram.u32[offset] & 0x00007c00) >> 10);
567   g = ((space->machine().generic.paletteram.u32[offset] & 0x000003e0) >> 5);
568   b = ((space->machine().generic.paletteram.u32[offset] & 0x0000001f) >> 0);
569   palette_set_color_rgb(space->machine(),(offset*2)+1,pal5bit(r),pal5bit(g),pal5bit(b));
570   r = ((space->machine().generic.paletteram.u32[offset] & 0x7c000000) >> 26);
571   g = ((space->machine().generic.paletteram.u32[offset] & 0x03e00000) >> 21);
572   b = ((space->machine().generic.paletteram.u32[offset] & 0x001f0000) >> 16);
573   palette_set_color_rgb(space->machine(),offset*2,pal5bit(r),pal5bit(g),pal5bit(b));
573   r = ((machine().generic.paletteram.u32[offset] & 0x00007c00) >> 10);
574   g = ((machine().generic.paletteram.u32[offset] & 0x000003e0) >> 5);
575   b = ((machine().generic.paletteram.u32[offset] & 0x0000001f) >> 0);
576   palette_set_color_rgb(machine(),(offset*2)+1,pal5bit(r),pal5bit(g),pal5bit(b));
577   r = ((machine().generic.paletteram.u32[offset] & 0x7c000000) >> 26);
578   g = ((machine().generic.paletteram.u32[offset] & 0x03e00000) >> 21);
579   b = ((machine().generic.paletteram.u32[offset] & 0x001f0000) >> 16);
580   palette_set_color_rgb(machine(),offset*2,pal5bit(r),pal5bit(g),pal5bit(b));
574581}
575582
576583
r14845r14846
651658   }while(!end_dma_mark );
652659}
653660
654static WRITE32_HANDLER( sysh1_dma_w )
661WRITE32_MEMBER(coolridr_state::sysh1_dma_w)
655662{
656   coolridr_state *state = space->machine().driver_data<coolridr_state>();
657   COMBINE_DATA(&state->m_framebuffer_vram[offset]);
663   COMBINE_DATA(&m_framebuffer_vram[offset]);
658664
659665   if(offset*4 == 0x000)
660666   {
661      if((state->m_framebuffer_vram[offset] & 0xff00000) == 0xfe00000)
662         sysh1_dma_transfer(space, state->m_framebuffer_vram[offset] & 0xffff);
667      if((m_framebuffer_vram[offset] & 0xff00000) == 0xfe00000)
668         sysh1_dma_transfer(&space, m_framebuffer_vram[offset] & 0xffff);
663669   }
664670}
665671
666static WRITE32_HANDLER( sysh1_char_w )
672WRITE32_MEMBER(coolridr_state::sysh1_char_w)
667673{
668   coolridr_state *state = space->machine().driver_data<coolridr_state>();
669   COMBINE_DATA(&state->m_h1_charram[offset]);
674   COMBINE_DATA(&m_h1_charram[offset]);
670675
671676   {
672      UINT8 *gfx = space->machine().region("ram_gfx")->base();
677      UINT8 *gfx = machine().region("ram_gfx")->base();
673678
674      gfx[offset*4+0] = (state->m_h1_charram[offset] & 0xff000000) >> 24;
675      gfx[offset*4+1] = (state->m_h1_charram[offset] & 0x00ff0000) >> 16;
676      gfx[offset*4+2] = (state->m_h1_charram[offset] & 0x0000ff00) >> 8;
677      gfx[offset*4+3] = (state->m_h1_charram[offset] & 0x000000ff) >> 0;
679      gfx[offset*4+0] = (m_h1_charram[offset] & 0xff000000) >> 24;
680      gfx[offset*4+1] = (m_h1_charram[offset] & 0x00ff0000) >> 16;
681      gfx[offset*4+2] = (m_h1_charram[offset] & 0x0000ff00) >> 8;
682      gfx[offset*4+3] = (m_h1_charram[offset] & 0x000000ff) >> 0;
678683
679      gfx_element_mark_dirty(space->machine().gfx[2], offset/64); //*4/256
684      gfx_element_mark_dirty(machine().gfx[2], offset/64); //*4/256
680685   }
681686}
682687
r14845r14846
685690   AM_RANGE(0x01000000, 0x01ffffff) AM_ROM AM_REGION("gfx_data",0x0000000)
686691
687692   AM_RANGE(0x03000000, 0x030fffff) AM_RAM AM_BASE(m_h1_vram)//bg vram
688   AM_RANGE(0x03c00000, 0x03c0ffff) AM_RAM_WRITE_LEGACY(sysh1_pal_w) AM_BASE_GENERIC(paletteram)
689   AM_RANGE(0x03d00000, 0x03dfffff) AM_RAM_WRITE_LEGACY(sysh1_char_w) AM_BASE(m_h1_charram) //FIXME: half size
690   AM_RANGE(0x03e00000, 0x03efffff) AM_RAM_WRITE_LEGACY(sysh1_dma_w) AM_BASE(m_framebuffer_vram) //FIXME: not all of it
693   AM_RANGE(0x03c00000, 0x03c0ffff) AM_RAM_WRITE(sysh1_pal_w) AM_BASE_GENERIC(paletteram)
694   AM_RANGE(0x03d00000, 0x03dfffff) AM_RAM_WRITE(sysh1_char_w) AM_BASE(m_h1_charram) //FIXME: half size
695   AM_RANGE(0x03e00000, 0x03efffff) AM_RAM_WRITE(sysh1_dma_w) AM_BASE(m_framebuffer_vram) //FIXME: not all of it
691696
692697   AM_RANGE(0x03f00000, 0x03f0ffff) AM_RAM AM_SHARE("share3") /*Communication area RAM*/
693698   AM_RANGE(0x03f40000, 0x03f4ffff) AM_RAM AM_BASE(m_txt_vram)//text tilemap + "lineram"
694   AM_RANGE(0x04000000, 0x0400003f) AM_RAM_WRITE_LEGACY(sysh1_txt_blit_w) AM_BASE(m_sysh1_txt_blit)
699   AM_RANGE(0x04000000, 0x0400003f) AM_RAM_WRITE(sysh1_txt_blit_w) AM_BASE(m_sysh1_txt_blit)
695700   AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_BASE(m_sysh1_workram_h)
696701   AM_RANGE(0x20000000, 0x201fffff) AM_ROM AM_SHARE("share1")
697702
r14845r14846
710715   AM_RANGE(0x03208900, 0x03208903) AM_RAM /*???*/
711716   AM_RANGE(0x03300400, 0x03300403) AM_RAM /*irq enable?*/
712717
713   AM_RANGE(0x04000000, 0x0400003f) AM_READWRITE_LEGACY(sysh1_unk_r,sysh1_unk_w) AM_BASE(m_h1_unk)
718   AM_RANGE(0x04000000, 0x0400003f) AM_READWRITE(sysh1_unk_r,sysh1_unk_w) AM_BASE(m_h1_unk)
714719   AM_RANGE(0x04200000, 0x0420003f) AM_RAM /*???*/
715720
716721   AM_RANGE(0x05000000, 0x05000fff) AM_RAM
r14845r14846
12151220ROM_END
12161221
12171222#if 0
1218static READ32_HANDLER( coolridr_hack1_r )
1223READ32_MEMBER(coolridr_state::coolridr_hack1_r)
12191224{
1220   coolridr_state *state = space->machine().driver_data<coolridr_state>();
1221   offs_t pc = downcast<cpu_device *>(&space->device())->pc();
1225   offs_t pc = downcast<cpu_device *>(&space.device())->pc();
12221226   if(pc == 0x6012374 || pc == 0x6012392)
12231227      return 0;
12241228
1225   return state->m_sysh1_workram_h[0xd88a4/4];
1229   return m_sysh1_workram_h[0xd88a4/4];
12261230}
12271231#endif
12281232
12291233/*TODO: there must be an irq line with custom vector located somewhere that writes to here...*/
1230static READ32_HANDLER( coolridr_hack2_r )
1234READ32_MEMBER(coolridr_state::coolridr_hack2_r)
12311235{
1232   coolridr_state *state = space->machine().driver_data<coolridr_state>();
1233   offs_t pc = downcast<cpu_device *>(&space->device())->pc();
1236   offs_t pc = downcast<cpu_device *>(&space.device())->pc();
12341237   if(pc == 0x6002cba || pc == 0x6002d42)
12351238      return 0;
12361239
1237   return state->m_sysh1_workram_h[0xd8894/4];
1240   return m_sysh1_workram_h[0xd8894/4];
12381241}
12391242
12401243static DRIVER_INIT( coolridr )
12411244{
1245   coolridr_state *state = machine.driver_data<coolridr_state>();
12421246//  machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x60d88a4, 0x060d88a7, FUNC(coolridr_hack1_r) );
1243   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x60d8894, 0x060d8897, FUNC(coolridr_hack2_r) );
1247   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x60d8894, 0x060d8897, read32_delegate(FUNC(coolridr_state::coolridr_hack2_r), state));
12441248}
12451249
12461250GAME( 1995, coolridr,    0, coolridr,    coolridr,    coolridr, ROT0,  "Sega", "Cool Riders (US)",GAME_NOT_WORKING|GAME_NO_SOUND )
src/mame/drivers/blitz.c
r14845r14846
302302   UINT8 *m_colorram;
303303   tilemap_t *m_bg_tilemap;
304304   int m_mux_data;
305   DECLARE_WRITE8_MEMBER(megadpkr_videoram_w);
306   DECLARE_WRITE8_MEMBER(megadpkr_colorram_w);
305307};
306308
307309
r14845r14846
311313*********************************************/
312314
313315
314static WRITE8_HANDLER( megadpkr_videoram_w )
316WRITE8_MEMBER(blitz_state::megadpkr_videoram_w)
315317{
316   blitz_state *state = space->machine().driver_data<blitz_state>();
317   state->m_videoram[offset] = data;
318   state->m_bg_tilemap->mark_tile_dirty(offset);
318   m_videoram[offset] = data;
319   m_bg_tilemap->mark_tile_dirty(offset);
319320}
320321
321static WRITE8_HANDLER( megadpkr_colorram_w )
322WRITE8_MEMBER(blitz_state::megadpkr_colorram_w)
322323{
323   blitz_state *state = space->machine().driver_data<blitz_state>();
324   state->m_colorram[offset] = data;
325   state->m_bg_tilemap->mark_tile_dirty(offset);
324   m_colorram[offset] = data;
325   m_bg_tilemap->mark_tile_dirty(offset);
326326}
327327
328328
r14845r14846
485485    AM_RANGE(0x10f8, 0x10fb) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
486486*/
487487
488   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE_LEGACY(megadpkr_videoram_w) AM_BASE(m_videoram)
489   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE_LEGACY(megadpkr_colorram_w) AM_BASE(m_colorram)
488   AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(megadpkr_videoram_w) AM_BASE(m_videoram)
489   AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(megadpkr_colorram_w) AM_BASE(m_colorram)
490490
491491   AM_RANGE(0xc000, 0xffff) AM_ROM
492492ADDRESS_MAP_END
src/mame/drivers/intrscti.c
r14845r14846
2222      : driver_device(mconfig, type, tag) { }
2323
2424   UINT8 *m_ram;
25   DECLARE_READ8_MEMBER(unk_r);
2526};
2627
2728
28static READ8_HANDLER( unk_r )
29READ8_MEMBER(intrscti_state::unk_r)
2930{
30   return space->machine().rand();
31   return machine().rand();
3132}
3233
3334static ADDRESS_MAP_START( intrscti_map, AS_PROGRAM, 8, intrscti_state )
r14845r14846
3940
4041static ADDRESS_MAP_START( readport, AS_IO, 8, intrscti_state )
4142   ADDRESS_MAP_GLOBAL_MASK(0xff)
42   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(unk_r )
43   AM_RANGE(0x01, 0x01) AM_READ_LEGACY(unk_r )
43   AM_RANGE(0x00, 0x00) AM_READ(unk_r )
44   AM_RANGE(0x01, 0x01) AM_READ(unk_r )
4445ADDRESS_MAP_END
4546
4647
src/mame/drivers/sfbonus.c
r14845r14846
301301   UINT8* m_3000_regs;
302302   UINT8* m_2801_regs;
303303   UINT8* m_2c01_regs;
304   DECLARE_WRITE8_MEMBER(sfbonus_videoram_w);
305   DECLARE_WRITE8_MEMBER(sfbonus_bank_w);
306   DECLARE_READ8_MEMBER(sfbonus_2800_r);
307   DECLARE_READ8_MEMBER(sfbonus_2801_r);
308   DECLARE_READ8_MEMBER(sfbonus_2c00_r);
309   DECLARE_READ8_MEMBER(sfbonus_2c01_r);
310   DECLARE_READ8_MEMBER(sfbonus_3800_r);
311   DECLARE_WRITE8_MEMBER(sfbonus_1800_w);
312   DECLARE_WRITE8_MEMBER(sfbonus_3800_w);
313   DECLARE_WRITE8_MEMBER(sfbonus_3000_w);
314   DECLARE_WRITE8_MEMBER(sfbonus_2801_w);
315   DECLARE_WRITE8_MEMBER(sfbonus_2c01_w);
304316};
305317
306318
r14845r14846
702714}
703715
704716
705static WRITE8_HANDLER( sfbonus_videoram_w )
717WRITE8_MEMBER(sfbonus_state::sfbonus_videoram_w)
706718{
707   sfbonus_state *state = space->machine().driver_data<sfbonus_state>();
708719   if (offset<0x4000) /* 0x0000 - 0x3fff */
709720   {
710      state->m_tilemap_ram[offset] = data;
711      state->m_tilemap->mark_tile_dirty(offset/2);
721      m_tilemap_ram[offset] = data;
722      m_tilemap->mark_tile_dirty(offset/2);
712723   }
713724   else if (offset<0x4800) /* 0x4000 - 0x47ff */
714725   {
715726      offset-=0x4000;
716727
717      state->m_reel_ram[offset] = data;
718      state->m_reel_tilemap->mark_tile_dirty(offset/2);
728      m_reel_ram[offset] = data;
729      m_reel_tilemap->mark_tile_dirty(offset/2);
719730   }
720731   else if (offset<0x5000)  /* 0x4800 - 0x4fff */
721732   {
722733      offset-=0x4800;
723734
724      state->m_reel2_ram[offset] = data;
725      state->m_reel2_tilemap->mark_tile_dirty(offset/2);
735      m_reel2_ram[offset] = data;
736      m_reel2_tilemap->mark_tile_dirty(offset/2);
726737   }
727738   else if (offset<0x5800) /* 0x5000 - 0x57ff */
728739   {
729740      offset-=0x5000;
730741
731      state->m_reel3_ram[offset] = data;
732      state->m_reel3_tilemap->mark_tile_dirty(offset/2);
742      m_reel3_ram[offset] = data;
743      m_reel3_tilemap->mark_tile_dirty(offset/2);
733744   }
734745   else if (offset<0x6000) /* 0x5800 - 0x5fff */
735746   {
736747      offset-=0x5800;
737748
738      state->m_reel4_ram[offset] = data;
739      state->m_reel4_tilemap->mark_tile_dirty(offset/2);
749      m_reel4_ram[offset] = data;
750      m_reel4_tilemap->mark_tile_dirty(offset/2);
740751   }
741752   else if (offset<0x8000)
742753   {
743754      offset -=0x6000;
744755      // scroll regs etc.
745756      //logerror("access vram at [%04x] <- %02x\n",offset,data);
746      state->m_videoram[offset] = data;
757      m_videoram[offset] = data;
747758   }
748759   else
749760   {
r14845r14846
10571068
10581069
10591070static ADDRESS_MAP_START( sfbonus_map, AS_PROGRAM, 8, sfbonus_state )
1060   AM_RANGE(0x0000, 0xefff) AM_ROMBANK("bank1") AM_WRITE_LEGACY(sfbonus_videoram_w)
1071   AM_RANGE(0x0000, 0xefff) AM_ROMBANK("bank1") AM_WRITE(sfbonus_videoram_w)
10611072   AM_RANGE(0xf000, 0xffff) AM_RAM AM_BASE(m_nvram) AM_SIZE(m_nvram_size)
10621073ADDRESS_MAP_END
10631074
1064static WRITE8_HANDLER( sfbonus_bank_w )
1075WRITE8_MEMBER(sfbonus_state::sfbonus_bank_w)
10651076{
1066   UINT8 *ROM = space->machine().region("maincpu")->base();
1077   UINT8 *ROM = machine().region("maincpu")->base();
10671078   UINT8 bank;
10681079
10691080   bank = data & 7;
10701081
1071   memory_set_bankptr(space->machine(), "bank1", &ROM[bank * 0x10000]);
1082   memory_set_bankptr(machine(), "bank1", &ROM[bank * 0x10000]);
10721083}
10731084
10741085
10751086
1076static READ8_HANDLER( sfbonus_2800_r )
1087READ8_MEMBER(sfbonus_state::sfbonus_2800_r)
10771088{
1078   return space->machine().rand();
1089   return machine().rand();
10791090}
10801091
1081static READ8_HANDLER( sfbonus_2801_r )
1092READ8_MEMBER(sfbonus_state::sfbonus_2801_r)
10821093{
1083   return space->machine().rand();
1094   return machine().rand();
10841095}
10851096
1086static READ8_HANDLER( sfbonus_2c00_r )
1097READ8_MEMBER(sfbonus_state::sfbonus_2c00_r)
10871098{
1088   return space->machine().rand();
1099   return machine().rand();
10891100}
10901101
1091static READ8_HANDLER( sfbonus_2c01_r )
1102READ8_MEMBER(sfbonus_state::sfbonus_2c01_r)
10921103{
1093   return space->machine().rand();
1104   return machine().rand();
10941105}
10951106
1096static READ8_HANDLER( sfbonus_3800_r )
1107READ8_MEMBER(sfbonus_state::sfbonus_3800_r)
10971108{
10981109   return 0xff;
10991110}
11001111
11011112
11021113// lamps and coin counters
1103static WRITE8_HANDLER( sfbonus_1800_w )
1114WRITE8_MEMBER(sfbonus_state::sfbonus_1800_w)
11041115{
1105   sfbonus_state *state = space->machine().driver_data<sfbonus_state>();
1106   state->m_1800_regs[offset] = data;
1116   m_1800_regs[offset] = data;
11071117}
11081118
1109static WRITE8_HANDLER( sfbonus_3800_w )
1119WRITE8_MEMBER(sfbonus_state::sfbonus_3800_w)
11101120{
1111   sfbonus_state *state = space->machine().driver_data<sfbonus_state>();
1112   state->m_3800_regs[offset] = data;
1121   m_3800_regs[offset] = data;
11131122}
11141123
1115static WRITE8_HANDLER( sfbonus_3000_w )
1124WRITE8_MEMBER(sfbonus_state::sfbonus_3000_w)
11161125{
1117   sfbonus_state *state = space->machine().driver_data<sfbonus_state>();
1118   state->m_3000_regs[offset] = data;
1126   m_3000_regs[offset] = data;
11191127}
11201128
1121static WRITE8_HANDLER( sfbonus_2801_w )
1129WRITE8_MEMBER(sfbonus_state::sfbonus_2801_w)
11221130{
1123   sfbonus_state *state = space->machine().driver_data<sfbonus_state>();
1124   state->m_2801_regs[offset] = data;
1131   m_2801_regs[offset] = data;
11251132}
11261133
1127static WRITE8_HANDLER( sfbonus_2c01_w )
1134WRITE8_MEMBER(sfbonus_state::sfbonus_2c01_w)
11281135{
1129   sfbonus_state *state = space->machine().driver_data<sfbonus_state>();
1130   state->m_2c01_regs[offset] = data;
1136   m_2c01_regs[offset] = data;
11311137}
11321138
11331139
r14845r14846
11481154   AM_RANGE(0x0c01, 0x0c01) AM_DEVWRITE("ramdac", ramdac_device, pal_w)
11491155   AM_RANGE(0x0c02, 0x0c02) AM_DEVWRITE("ramdac", ramdac_device, mask_w)
11501156
1151   AM_RANGE(0x1800, 0x1807) AM_WRITE_LEGACY(sfbonus_1800_w) AM_BASE(m_1800_regs) // lamps and coin counters
1157   AM_RANGE(0x1800, 0x1807) AM_WRITE(sfbonus_1800_w) AM_BASE(m_1800_regs) // lamps and coin counters
11521158
11531159   AM_RANGE(0x2400, 0x241f) AM_RAM AM_BASE(m_vregs)
11541160
1155   AM_RANGE(0x2800, 0x2800) AM_READ_LEGACY(sfbonus_2800_r)
1156   AM_RANGE(0x2801, 0x2801) AM_READ_LEGACY(sfbonus_2801_r) AM_WRITE_LEGACY(sfbonus_2801_w) AM_BASE(m_2801_regs)
1161   AM_RANGE(0x2800, 0x2800) AM_READ(sfbonus_2800_r)
1162   AM_RANGE(0x2801, 0x2801) AM_READ(sfbonus_2801_r) AM_WRITE(sfbonus_2801_w) AM_BASE(m_2801_regs)
11571163
1158   AM_RANGE(0x2c00, 0x2c00) AM_READ_LEGACY(sfbonus_2c00_r)
1159   AM_RANGE(0x2c01, 0x2c01) AM_READ_LEGACY(sfbonus_2c01_r) AM_WRITE_LEGACY(sfbonus_2c01_w) AM_BASE(m_2c01_regs)
1164   AM_RANGE(0x2c00, 0x2c00) AM_READ(sfbonus_2c00_r)
1165   AM_RANGE(0x2c01, 0x2c01) AM_READ(sfbonus_2c01_r) AM_WRITE(sfbonus_2c01_w) AM_BASE(m_2c01_regs)
11601166
1161   AM_RANGE(0x3000, 0x3000) AM_WRITE_LEGACY(sfbonus_3000_w) AM_BASE(m_3000_regs)
1162   AM_RANGE(0x3400, 0x3400) AM_WRITE_LEGACY(sfbonus_bank_w)
1163   AM_RANGE(0x3800, 0x3800) AM_READ_LEGACY(sfbonus_3800_r)
1167   AM_RANGE(0x3000, 0x3000) AM_WRITE(sfbonus_3000_w) AM_BASE(m_3000_regs)
1168   AM_RANGE(0x3400, 0x3400) AM_WRITE(sfbonus_bank_w)
1169   AM_RANGE(0x3800, 0x3800) AM_READ(sfbonus_3800_r)
11641170
1165   AM_RANGE(0x3800, 0x3807) AM_WRITE_LEGACY(sfbonus_3800_w) AM_BASE(m_3800_regs)
1171   AM_RANGE(0x3800, 0x3807) AM_WRITE(sfbonus_3800_w) AM_BASE(m_3800_regs)
11661172ADDRESS_MAP_END
11671173
11681174
src/mame/drivers/tempest.c
r14845r14846
289289      : driver_device(mconfig, type, tag) { }
290290
291291   UINT8 m_player_select;
292   DECLARE_WRITE8_MEMBER(wdclr_w);
293   DECLARE_WRITE8_MEMBER(tempest_led_w);
294   DECLARE_WRITE8_MEMBER(tempest_coin_w);
292295};
293296
294297
r14845r14846
314317 *
315318 *************************************/
316319
317static WRITE8_HANDLER( wdclr_w )
320WRITE8_MEMBER(tempest_state::wdclr_w)
318321{
319   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
320   watchdog_reset(space->machine());
322   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
323   watchdog_reset(machine());
321324}
322325
323326/*************************************
r14845r14846
367370 *
368371 *************************************/
369372
370static WRITE8_HANDLER( tempest_led_w )
373WRITE8_MEMBER(tempest_state::tempest_led_w)
371374{
372   tempest_state *state = space->machine().driver_data<tempest_state>();
373   set_led_status(space->machine(), 0, ~data & 0x02);
374   set_led_status(space->machine(), 1, ~data & 0x01);
375   set_led_status(machine(), 0, ~data & 0x02);
376   set_led_status(machine(), 1, ~data & 0x01);
375377   /* FLIP is bit 0x04 */
376   state->m_player_select = data & 0x04;
378   m_player_select = data & 0x04;
377379}
378380
379381
380static WRITE8_HANDLER( tempest_coin_w )
382WRITE8_MEMBER(tempest_state::tempest_coin_w)
381383{
382   coin_counter_w(space->machine(), 0, (data & 0x01));
383   coin_counter_w(space->machine(), 1, (data & 0x02));
384   coin_counter_w(space->machine(), 2, (data & 0x04));
384   coin_counter_w(machine(), 0, (data & 0x01));
385   coin_counter_w(machine(), 1, (data & 0x02));
386   coin_counter_w(machine(), 2, (data & 0x04));
385387   avg_set_flip_x(data & 0x08);
386388   avg_set_flip_y(data & 0x10);
387389}
r14845r14846
402404   AM_RANGE(0x0e00, 0x0e00) AM_READ_PORT("DSW2")
403405   AM_RANGE(0x2000, 0x2fff) AM_RAM AM_BASE_LEGACY(&avgdvg_vectorram) AM_SIZE_LEGACY(&avgdvg_vectorram_size) AM_REGION("maincpu", 0x2000)
404406   AM_RANGE(0x3000, 0x3fff) AM_ROM
405   AM_RANGE(0x4000, 0x4000) AM_WRITE_LEGACY(tempest_coin_w)
407   AM_RANGE(0x4000, 0x4000) AM_WRITE(tempest_coin_w)
406408   AM_RANGE(0x4800, 0x4800) AM_WRITE_LEGACY(avgdvg_go_w)
407   AM_RANGE(0x5000, 0x5000) AM_WRITE_LEGACY(wdclr_w)
409   AM_RANGE(0x5000, 0x5000) AM_WRITE(wdclr_w)
408410   AM_RANGE(0x5800, 0x5800) AM_WRITE_LEGACY(avgdvg_reset_w)
409411   AM_RANGE(0x6000, 0x603f) AM_DEVWRITE("earom", atari_vg_earom_device, write)
410412   AM_RANGE(0x6040, 0x6040) AM_DEVREAD_LEGACY("mathbox", mathbox_status_r) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
r14845r14846
414416   AM_RANGE(0x6080, 0x609f) AM_DEVWRITE_LEGACY("mathbox", mathbox_go_w)
415417   AM_RANGE(0x60c0, 0x60cf) AM_DEVREADWRITE_LEGACY("pokey1", pokey_r, pokey_w)
416418   AM_RANGE(0x60d0, 0x60df) AM_DEVREADWRITE_LEGACY("pokey2", pokey_r, pokey_w)
417   AM_RANGE(0x60e0, 0x60e0) AM_WRITE_LEGACY(tempest_led_w)
419   AM_RANGE(0x60e0, 0x60e0) AM_WRITE(tempest_led_w)
418420   AM_RANGE(0x9000, 0xdfff) AM_ROM
419421   AM_RANGE(0xf000, 0xffff) AM_ROM   /* for the reset / interrupt vectors */
420422ADDRESS_MAP_END
src/mame/drivers/crystal.c
r14845r14846
157157   device_t *m_maincpu;
158158   device_t *m_ds1302;
159159   device_t *m_vr0video;
160   DECLARE_READ32_MEMBER(FlipCount_r);
161   DECLARE_WRITE32_MEMBER(FlipCount_w);
162   DECLARE_READ32_MEMBER(Input_r);
163   DECLARE_WRITE32_MEMBER(IntAck_w);
164   DECLARE_WRITE32_MEMBER(Banksw_w);
165   DECLARE_WRITE32_MEMBER(Timer0_w);
166   DECLARE_READ32_MEMBER(Timer0_r);
167   DECLARE_WRITE32_MEMBER(Timer1_w);
168   DECLARE_READ32_MEMBER(Timer1_r);
169   DECLARE_WRITE32_MEMBER(Timer2_w);
170   DECLARE_READ32_MEMBER(Timer2_r);
171   DECLARE_WRITE32_MEMBER(Timer3_w);
172   DECLARE_READ32_MEMBER(Timer3_r);
173   DECLARE_READ32_MEMBER(FlashCmd_r);
174   DECLARE_WRITE32_MEMBER(FlashCmd_w);
175   DECLARE_READ32_MEMBER(PIO_r);
176   DECLARE_WRITE32_MEMBER(PIO_w);
177   DECLARE_READ32_MEMBER(DMA0_r);
178   DECLARE_WRITE32_MEMBER(DMA0_w);
179   DECLARE_READ32_MEMBER(DMA1_r);
180   DECLARE_WRITE32_MEMBER(DMA1_w);
160181};
161182
162183static void IntReq( running_machine &machine, int num )
r14845r14846
177198#endif
178199}
179200
180static READ32_HANDLER( FlipCount_r )
201READ32_MEMBER(crystal_state::FlipCount_r)
181202{
182   crystal_state *state = space->machine().driver_data<crystal_state>();
183203
184204#ifdef IDLE_LOOP_SPEEDUP
185   UINT32 IntPend = space->read_dword(0x01800c0c);
186   state->m_FlipCntRead++;
187   if (state->m_FlipCntRead >= 16 && !IntPend && state->m_FlipCount != 0)
188      device_suspend(state->m_maincpu, SUSPEND_REASON_SPIN, 1);
205   UINT32 IntPend = space.read_dword(0x01800c0c);
206   m_FlipCntRead++;
207   if (m_FlipCntRead >= 16 && !IntPend && m_FlipCount != 0)
208      device_suspend(m_maincpu, SUSPEND_REASON_SPIN, 1);
189209#endif
190   return ((UINT32) state->m_FlipCount) << 16;
210   return ((UINT32) m_FlipCount) << 16;
191211}
192212
193static WRITE32_HANDLER( FlipCount_w )
213WRITE32_MEMBER(crystal_state::FlipCount_w)
194214{
195   crystal_state *state = space->machine().driver_data<crystal_state>();
196215
197216   if (mem_mask & 0x00ff0000)
198217   {
199218      int fc = (data >> 16) & 0xff;
200219      if (fc == 1)
201         state->m_FlipCount++;
220         m_FlipCount++;
202221      else if (fc == 0)
203         state->m_FlipCount = 0;
222         m_FlipCount = 0;
204223   }
205224}
206225
207static READ32_HANDLER( Input_r )
226READ32_MEMBER(crystal_state::Input_r)
208227{
209   crystal_state *state = space->machine().driver_data<crystal_state>();
210228
211229   if (offset == 0)
212      return input_port_read(space->machine(), "P1_P2");
230      return input_port_read(machine(), "P1_P2");
213231   else if (offset == 1)
214      return input_port_read(space->machine(), "P3_P4");
232      return input_port_read(machine(), "P3_P4");
215233   else if( offset == 2)
216234   {
217      UINT8 Port4 = input_port_read(space->machine(), "SYSTEM");
218      if (!(Port4 & 0x10) && ((state->m_OldPort4 ^ Port4) & 0x10))   //coin buttons trigger IRQs
219         IntReq(space->machine(), 12);
220      if (!(Port4 & 0x20) && ((state->m_OldPort4 ^ Port4) & 0x20))
221         IntReq(space->machine(), 19);
222      state->m_OldPort4 = Port4;
223      return /*dips*/input_port_read(space->machine(), "DSW") | (Port4 << 16);
235      UINT8 Port4 = input_port_read(machine(), "SYSTEM");
236      if (!(Port4 & 0x10) && ((m_OldPort4 ^ Port4) & 0x10))   //coin buttons trigger IRQs
237         IntReq(machine(), 12);
238      if (!(Port4 & 0x20) && ((m_OldPort4 ^ Port4) & 0x20))
239         IntReq(machine(), 19);
240      m_OldPort4 = Port4;
241      return /*dips*/input_port_read(machine(), "DSW") | (Port4 << 16);
224242   }
225243   return 0;
226244}
227245
228static WRITE32_HANDLER( IntAck_w )
246WRITE32_MEMBER(crystal_state::IntAck_w)
229247{
230   crystal_state *state = space->machine().driver_data<crystal_state>();
231   UINT32 IntPend = space->read_dword(0x01800c0c);
248   UINT32 IntPend = space.read_dword(0x01800c0c);
232249
233250   if (mem_mask & 0xff)
234251   {
235252      IntPend &= ~(1 << (data & 0x1f));
236      space->write_dword(0x01800c0c, IntPend);
253      space.write_dword(0x01800c0c, IntPend);
237254      if (!IntPend)
238         device_set_input_line(state->m_maincpu, SE3208_INT, CLEAR_LINE);
255         device_set_input_line(m_maincpu, SE3208_INT, CLEAR_LINE);
239256   }
240257   if (mem_mask & 0xff00)
241      state->m_IntHigh = (data >> 8) & 7;
258      m_IntHigh = (data >> 8) & 7;
242259}
243260
244261static IRQ_CALLBACK( icallback )
r14845r14846
258275   return 0;      //This should never happen
259276}
260277
261static WRITE32_HANDLER( Banksw_w )
278WRITE32_MEMBER(crystal_state::Banksw_w)
262279{
263   crystal_state *state = space->machine().driver_data<crystal_state>();
264280
265   state->m_Bank = (data >> 1) & 7;
266   if (state->m_Bank <= 2)
267      memory_set_bankptr(space->machine(), "bank1", space->machine().region("user1")->base() + state->m_Bank * 0x1000000);
281   m_Bank = (data >> 1) & 7;
282   if (m_Bank <= 2)
283      memory_set_bankptr(machine(), "bank1", machine().region("user1")->base() + m_Bank * 0x1000000);
268284   else
269      memory_set_bankptr(space->machine(), "bank1", space->machine().region("user2")->base());
285      memory_set_bankptr(machine(), "bank1", machine().region("user2")->base());
270286}
271287
272288static TIMER_CALLBACK( Timercb )
r14845r14846
299315   COMBINE_DATA(&state->m_Timerctrl[which]);
300316}
301317
302static WRITE32_HANDLER( Timer0_w )
318WRITE32_MEMBER(crystal_state::Timer0_w)
303319{
304   Timer_w(space, 0, data, mem_mask);
320   Timer_w(&space, 0, data, mem_mask);
305321}
306322
307static READ32_HANDLER( Timer0_r )
323READ32_MEMBER(crystal_state::Timer0_r)
308324{
309   crystal_state *state = space->machine().driver_data<crystal_state>();
310   return state->m_Timerctrl[0];
325   return m_Timerctrl[0];
311326}
312327
313static WRITE32_HANDLER( Timer1_w )
328WRITE32_MEMBER(crystal_state::Timer1_w)
314329{
315   Timer_w(space, 1, data, mem_mask);
330   Timer_w(&space, 1, data, mem_mask);
316331}
317332
318static READ32_HANDLER( Timer1_r )
333READ32_MEMBER(crystal_state::Timer1_r)
319334{
320   crystal_state *state = space->machine().driver_data<crystal_state>();
321   return state->m_Timerctrl[1];
335   return m_Timerctrl[1];
322336}
323337
324static WRITE32_HANDLER( Timer2_w )
338WRITE32_MEMBER(crystal_state::Timer2_w)
325339{
326   Timer_w(space, 2, data, mem_mask);
340   Timer_w(&space, 2, data, mem_mask);
327341}
328342
329static READ32_HANDLER( Timer2_r )
343READ32_MEMBER(crystal_state::Timer2_r)
330344{
331   crystal_state *state = space->machine().driver_data<crystal_state>();
332   return state->m_Timerctrl[2];
345   return m_Timerctrl[2];
333346}
334347
335static WRITE32_HANDLER( Timer3_w )
348WRITE32_MEMBER(crystal_state::Timer3_w)
336349{
337   Timer_w(space, 3, data, mem_mask);
350   Timer_w(&space, 3, data, mem_mask);
338351}
339352
340static READ32_HANDLER( Timer3_r )
353READ32_MEMBER(crystal_state::Timer3_r)
341354{
342   crystal_state *state = space->machine().driver_data<crystal_state>();
343   return state->m_Timerctrl[3];
355   return m_Timerctrl[3];
344356}
345357
346static READ32_HANDLER( FlashCmd_r )
358READ32_MEMBER(crystal_state::FlashCmd_r)
347359{
348   crystal_state *state = space->machine().driver_data<crystal_state>();
349360
350   if ((state->m_FlashCmd & 0xff) == 0xff)
361   if ((m_FlashCmd & 0xff) == 0xff)
351362   {
352      if (state->m_Bank <= 2)
363      if (m_Bank <= 2)
353364      {
354         UINT32 *ptr = (UINT32*)(space->machine().region("user1")->base() + state->m_Bank * 0x1000000);
365         UINT32 *ptr = (UINT32*)(machine().region("user1")->base() + m_Bank * 0x1000000);
355366         return ptr[0];
356367      }
357368      else
358369         return 0xffffffff;
359370   }
360   if ((state->m_FlashCmd & 0xff) == 0x90)
371   if ((m_FlashCmd & 0xff) == 0x90)
361372   {
362      if (state->m_Bank <= 2)
373      if (m_Bank <= 2)
363374            return 0x00180089;   //Intel 128MBit
364375      else
365376         return 0xffffffff;
r14845r14846
367378   return 0;
368379}
369380
370static WRITE32_HANDLER( FlashCmd_w )
381WRITE32_MEMBER(crystal_state::FlashCmd_w)
371382{
372   crystal_state *state = space->machine().driver_data<crystal_state>();
373   state->m_FlashCmd = data;
383   m_FlashCmd = data;
374384}
375385
376static READ32_HANDLER( PIO_r )
386READ32_MEMBER(crystal_state::PIO_r)
377387{
378   crystal_state *state = space->machine().driver_data<crystal_state>();
379   return state->m_PIO;
388   return m_PIO;
380389}
381390
382static WRITE32_HANDLER( PIO_w )
391WRITE32_MEMBER(crystal_state::PIO_w)
383392{
384   crystal_state *state = space->machine().driver_data<crystal_state>();
385393   UINT32 RST = data & 0x01000000;
386394   UINT32 CLK = data & 0x02000000;
387395   UINT32 DAT = data & 0x10000000;
388396
389397   if (!RST)
390      state->m_ds1302->reset();
398      m_ds1302->reset();
391399
392   ds1302_dat_w(state->m_ds1302, 0, DAT ? 1 : 0);
393   ds1302_clk_w(state->m_ds1302, 0, CLK ? 1 : 0);
400   ds1302_dat_w(m_ds1302, 0, DAT ? 1 : 0);
401   ds1302_clk_w(m_ds1302, 0, CLK ? 1 : 0);
394402
395   if (ds1302_read(state->m_ds1302, 0))
396      space->write_dword(0x01802008, space->read_dword(0x01802008) | 0x10000000);
403   if (ds1302_read(m_ds1302, 0))
404      space.write_dword(0x01802008, space.read_dword(0x01802008) | 0x10000000);
397405   else
398      space->write_dword(0x01802008, space->read_dword(0x01802008) & (~0x10000000));
406      space.write_dword(0x01802008, space.read_dword(0x01802008) & (~0x10000000));
399407
400   COMBINE_DATA(&state->m_PIO);
408   COMBINE_DATA(&m_PIO);
401409}
402410
403411INLINE void DMA_w( address_space *space, int which, UINT32 data, UINT32 mem_mask )
r14845r14846
443451   COMBINE_DATA(&state->m_DMActrl[which]);
444452}
445453
446static READ32_HANDLER( DMA0_r )
454READ32_MEMBER(crystal_state::DMA0_r)
447455{
448   crystal_state *state = space->machine().driver_data<crystal_state>();
449   return state->m_DMActrl[0];
456   return m_DMActrl[0];
450457}
451458
452static WRITE32_HANDLER( DMA0_w )
459WRITE32_MEMBER(crystal_state::DMA0_w)
453460{
454   DMA_w(space, 0, data, mem_mask);
461   DMA_w(&space, 0, data, mem_mask);
455462}
456463
457static READ32_HANDLER( DMA1_r )
464READ32_MEMBER(crystal_state::DMA1_r)
458465{
459   crystal_state *state = space->machine().driver_data<crystal_state>();
460   return state->m_DMActrl[1];
466   return m_DMActrl[1];
461467}
462468
463static WRITE32_HANDLER( DMA1_w )
469WRITE32_MEMBER(crystal_state::DMA1_w)
464470{
465   DMA_w(space, 1, data, mem_mask);
471   DMA_w(&space, 1, data, mem_mask);
466472}
467473
468474
469475static ADDRESS_MAP_START( crystal_mem, AS_PROGRAM, 32, crystal_state )
470476   AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_WRITENOP
471477
472   AM_RANGE(0x01200000, 0x0120000f) AM_READ_LEGACY(Input_r)
473   AM_RANGE(0x01280000, 0x01280003) AM_WRITE_LEGACY(Banksw_w)
478   AM_RANGE(0x01200000, 0x0120000f) AM_READ(Input_r)
479   AM_RANGE(0x01280000, 0x01280003) AM_WRITE(Banksw_w)
474480   AM_RANGE(0x01400000, 0x0140ffff) AM_RAM AM_SHARE("nvram")
475481
476   AM_RANGE(0x01801400, 0x01801403) AM_READWRITE_LEGACY(Timer0_r, Timer0_w)
477   AM_RANGE(0x01801408, 0x0180140b) AM_READWRITE_LEGACY(Timer1_r, Timer1_w)
478   AM_RANGE(0x01801410, 0x01801413) AM_READWRITE_LEGACY(Timer2_r, Timer2_w)
479   AM_RANGE(0x01801418, 0x0180141b) AM_READWRITE_LEGACY(Timer3_r, Timer3_w)
480   AM_RANGE(0x01802004, 0x01802007) AM_READWRITE_LEGACY(PIO_r, PIO_w)
482   AM_RANGE(0x01801400, 0x01801403) AM_READWRITE(Timer0_r, Timer0_w)
483   AM_RANGE(0x01801408, 0x0180140b) AM_READWRITE(Timer1_r, Timer1_w)
484   AM_RANGE(0x01801410, 0x01801413) AM_READWRITE(Timer2_r, Timer2_w)
485   AM_RANGE(0x01801418, 0x0180141b) AM_READWRITE(Timer3_r, Timer3_w)
486   AM_RANGE(0x01802004, 0x01802007) AM_READWRITE(PIO_r, PIO_w)
481487
482   AM_RANGE(0x01800800, 0x01800803) AM_READWRITE_LEGACY(DMA0_r, DMA0_w)
483   AM_RANGE(0x01800810, 0x01800813) AM_READWRITE_LEGACY(DMA1_r, DMA1_w)
488   AM_RANGE(0x01800800, 0x01800803) AM_READWRITE(DMA0_r, DMA0_w)
489   AM_RANGE(0x01800810, 0x01800813) AM_READWRITE(DMA1_r, DMA1_w)
484490
485   AM_RANGE(0x01800c04, 0x01800c07) AM_WRITE_LEGACY(IntAck_w)
491   AM_RANGE(0x01800c04, 0x01800c07) AM_WRITE(IntAck_w)
486492   AM_RANGE(0x01800000, 0x0180ffff) AM_RAM AM_BASE(m_sysregs)
487493   AM_RANGE(0x02000000, 0x027fffff) AM_RAM AM_BASE(m_workram)
488494
489   AM_RANGE(0x030000a4, 0x030000a7) AM_READWRITE_LEGACY(FlipCount_r, FlipCount_w)
495   AM_RANGE(0x030000a4, 0x030000a7) AM_READWRITE(FlipCount_r, FlipCount_w)
490496
491497   AM_RANGE(0x03000000, 0x0300ffff) AM_RAM AM_BASE(m_vidregs)
492498   AM_RANGE(0x03800000, 0x03ffffff) AM_RAM AM_BASE(m_textureram)
493499   AM_RANGE(0x04000000, 0x047fffff) AM_RAM AM_BASE(m_frameram)
494500   AM_RANGE(0x04800000, 0x04800fff) AM_DEVREADWRITE_LEGACY("vrender", vr0_snd_read, vr0_snd_write)
495501
496   AM_RANGE(0x05000000, 0x05000003) AM_READWRITE_LEGACY(FlashCmd_r, FlashCmd_w)
502   AM_RANGE(0x05000000, 0x05000003) AM_READWRITE(FlashCmd_r, FlashCmd_w)
497503   AM_RANGE(0x05000000, 0x05ffffff) AM_ROMBANK("bank1")
498504
499505   AM_RANGE(0x44414F4C, 0x44414F7F) AM_RAM AM_BASE(m_ResetPatch)
src/mame/drivers/chinsan.c
r14845r14846
6262   UINT8    m_adpcm_idle;
6363   UINT8    m_adpcm_data;
6464   UINT8    m_trigger;
65   DECLARE_WRITE8_MEMBER(ctrl_w);
66   DECLARE_WRITE8_MEMBER(chinsan_port00_w);
67   DECLARE_READ8_MEMBER(chinsan_input_port_0_r);
68   DECLARE_READ8_MEMBER(chinsan_input_port_1_r);
6569};
6670
6771
r14845r14846
112116 *
113117 *************************************/
114118
115static WRITE8_HANDLER( ctrl_w )
119WRITE8_MEMBER(chinsan_state::ctrl_w)
116120{
117   memory_set_bank(space->machine(), "bank1", data >> 6);
121   memory_set_bank(machine(), "bank1", data >> 6);
118122}
119123
120124static WRITE8_DEVICE_HANDLER( ym_port_w1 )
r14845r14846
141145   },
142146};
143147
144static WRITE8_HANDLER( chinsan_port00_w )
148WRITE8_MEMBER(chinsan_state::chinsan_port00_w)
145149{
146   chinsan_state *state = space->machine().driver_data<chinsan_state>();
147150
148   state->m_port_select = data;
151   m_port_select = data;
149152
150153   if (
151154      (data != 0x40) &&
r14845r14846
159162
160163}
161164
162static READ8_HANDLER( chinsan_input_port_0_r )
165READ8_MEMBER(chinsan_state::chinsan_input_port_0_r)
163166{
164   chinsan_state *state = space->machine().driver_data<chinsan_state>();
165167
166168   //return 0xff; // the inputs don't seem to work, so just return ff for now
167169
168   switch (state->m_port_select)
170   switch (m_port_select)
169171   {
170172      /* i doubt these are both really the same.. */
171173      case 0x40:
172174      case 0x4f:
173         return input_port_read(space->machine(), "MAHJONG_P2_1");
175         return input_port_read(machine(), "MAHJONG_P2_1");
174176
175177      case 0x53:
176         return input_port_read(space->machine(), "MAHJONG_P2_2");
178         return input_port_read(machine(), "MAHJONG_P2_2");
177179
178180      case 0x57:
179         return input_port_read(space->machine(), "MAHJONG_P2_3");
181         return input_port_read(machine(), "MAHJONG_P2_3");
180182
181183      case 0x5b:
182         return input_port_read(space->machine(), "MAHJONG_P2_4");
184         return input_port_read(machine(), "MAHJONG_P2_4");
183185
184186      case 0x5d:
185         return input_port_read(space->machine(), "MAHJONG_P2_5");
187         return input_port_read(machine(), "MAHJONG_P2_5");
186188
187189      case 0x5e:
188         return input_port_read(space->machine(), "MAHJONG_P2_6");
190         return input_port_read(machine(), "MAHJONG_P2_6");
189191   }
190192
191   printf("chinsan_input_port_0_r unk_r %02x\n", state->m_port_select);
192   return space->machine().rand();
193   printf("chinsan_input_port_0_r unk_r %02x\n", m_port_select);
194   return machine().rand();
193195}
194196
195static READ8_HANDLER( chinsan_input_port_1_r )
197READ8_MEMBER(chinsan_state::chinsan_input_port_1_r)
196198{
197   chinsan_state *state = space->machine().driver_data<chinsan_state>();
198199
199   switch (state->m_port_select)
200   switch (m_port_select)
200201   {
201202      /* i doubt these are both really the same.. */
202203      case 0x40:
203204      case 0x4f:
204         return input_port_read(space->machine(), "MAHJONG_P1_1");
205         return input_port_read(machine(), "MAHJONG_P1_1");
205206
206207      case 0x53:
207         return input_port_read(space->machine(), "MAHJONG_P1_2");
208         return input_port_read(machine(), "MAHJONG_P1_2");
208209
209210      case 0x57:
210         return input_port_read(space->machine(), "MAHJONG_P1_3");
211         return input_port_read(machine(), "MAHJONG_P1_3");
211212
212213      case 0x5b:
213         return input_port_read(space->machine(), "MAHJONG_P1_4");
214         return input_port_read(machine(), "MAHJONG_P1_4");
214215
215216      case 0x5d:
216         return input_port_read(space->machine(), "MAHJONG_P1_5");
217         return input_port_read(machine(), "MAHJONG_P1_5");
217218
218219      case 0x5e:
219         return input_port_read(space->machine(), "MAHJONG_P1_6");
220         return input_port_read(machine(), "MAHJONG_P1_6");
220221   }
221222
222   printf("chinsan_input_port_1_r unk_r %02x\n", state->m_port_select);
223   return space->machine().rand();
223   printf("chinsan_input_port_1_r unk_r %02x\n", m_port_select);
224   return machine().rand();
224225}
225226
226227static WRITE8_DEVICE_HANDLER( chin_adpcm_w )
r14845r14846
246247
247248static ADDRESS_MAP_START( chinsan_io, AS_IO, 8, chinsan_state )
248249   ADDRESS_MAP_GLOBAL_MASK(0xff)
249   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(chinsan_port00_w)
250   AM_RANGE(0x01, 0x01) AM_READ_LEGACY(chinsan_input_port_0_r)
251   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(chinsan_input_port_1_r)
250   AM_RANGE(0x00, 0x00) AM_WRITE(chinsan_port00_w)
251   AM_RANGE(0x01, 0x01) AM_READ(chinsan_input_port_0_r)
252   AM_RANGE(0x02, 0x02) AM_READ(chinsan_input_port_1_r)
252253   AM_RANGE(0x10, 0x11) AM_DEVREADWRITE_LEGACY("ymsnd", ym2203_r, ym2203_w)
253254   AM_RANGE(0x20, 0x20) AM_DEVWRITE_LEGACY("adpcm", chin_adpcm_w)
254   AM_RANGE(0x30, 0x30) AM_WRITE_LEGACY(ctrl_w)   // ROM bank + unknown stuff (input mutliplex?)
255   AM_RANGE(0x30, 0x30) AM_WRITE(ctrl_w)   // ROM bank + unknown stuff (input mutliplex?)
255256ADDRESS_MAP_END
256257
257258
src/mame/drivers/famibox.c
r14845r14846
9191   emu_timer*   m_gameplay_timer;
9292   UINT8      m_money_reg;
9393
94   DECLARE_WRITE8_MEMBER(famibox_nt_w);
95   DECLARE_READ8_MEMBER(famibox_nt_r);
96   DECLARE_WRITE8_MEMBER(sprite_dma_w);
97   DECLARE_READ8_MEMBER(famibox_IN0_r);
98   DECLARE_WRITE8_MEMBER(famibox_IN0_w);
99   DECLARE_READ8_MEMBER(famibox_IN1_r);
100   DECLARE_READ8_MEMBER(famibox_system_r);
101   DECLARE_WRITE8_MEMBER(famibox_system_w);
94102};
95103
96104/******************************************************
r14845r14846
133141}
134142#endif
135143
136static WRITE8_HANDLER (famibox_nt_w)
144WRITE8_MEMBER(famibox_state::famibox_nt_w)
137145{
138   famibox_state *state = space->machine().driver_data<famibox_state>();
139146   int page = ((offset & 0xc00) >> 10);
140   state->m_nt_page[page][offset & 0x3ff] = data;
147   m_nt_page[page][offset & 0x3ff] = data;
141148}
142149
143150
144static READ8_HANDLER (famibox_nt_r)
151READ8_MEMBER(famibox_state::famibox_nt_r)
145152{
146   famibox_state *state = space->machine().driver_data<famibox_state>();
147153   int page = ((offset & 0xc00) >> 10);
148   return state->m_nt_page[page][offset & 0x3ff];
154   return m_nt_page[page][offset & 0x3ff];
149155}
150156
151157/******************************************************
r14845r14846
154160
155161*******************************************************/
156162
157static WRITE8_HANDLER( sprite_dma_w )
163WRITE8_MEMBER(famibox_state::sprite_dma_w)
158164{
159   ppu2c0x_device *ppu = space->machine().device<ppu2c0x_device>("ppu");
165   ppu2c0x_device *ppu = machine().device<ppu2c0x_device>("ppu");
160166   int source = (data & 7);
161   ppu->spriteram_dma(space, source);
167   ppu->spriteram_dma(&space, source);
162168}
163169
164170static READ8_DEVICE_HANDLER( psg_4015_r )
r14845r14846
183189*******************************************************/
184190
185191
186static READ8_HANDLER( famibox_IN0_r )
192READ8_MEMBER(famibox_state::famibox_IN0_r)
187193{
188   famibox_state *state = space->machine().driver_data<famibox_state>();
189   return ((state->m_in_0 >> state->m_in_0_shift++) & 0x01) | 0x40;
194   return ((m_in_0 >> m_in_0_shift++) & 0x01) | 0x40;
190195}
191196
192static WRITE8_HANDLER( famibox_IN0_w )
197WRITE8_MEMBER(famibox_state::famibox_IN0_w)
193198{
194   famibox_state *state = space->machine().driver_data<famibox_state>();
195199   if (data & 0x01)
196200   {
197201      return;
198202   }
199203
200   state->m_in_0_shift = 0;
201   state->m_in_1_shift = 0;
204   m_in_0_shift = 0;
205   m_in_1_shift = 0;
202206
203   state->m_in_0 = input_port_read(space->machine(), "P1");
204   state->m_in_1 = input_port_read(space->machine(), "P2");
207   m_in_0 = input_port_read(machine(), "P1");
208   m_in_1 = input_port_read(machine(), "P2");
205209}
206210
207static READ8_HANDLER( famibox_IN1_r )
211READ8_MEMBER(famibox_state::famibox_IN1_r)
208212{
209   famibox_state *state = space->machine().driver_data<famibox_state>();
210   return ((state->m_in_1 >> state->m_in_1_shift++) & 0x01) | 0x40;
213   return ((m_in_1 >> m_in_1_shift++) & 0x01) | 0x40;
211214}
212215
213216/******************************************************
r14845r14846
295298   }
296299}
297300
298static READ8_HANDLER( famibox_system_r )
301READ8_MEMBER(famibox_state::famibox_system_r)
299302{
300   famibox_state *state = space->machine().driver_data<famibox_state>();
301303   switch( offset & 0x07 )
302304   {
303305      case 0: /* device which caused exception */
304306         {
305            UINT8 ret = state->m_exception_cause;
306            state->m_exception_cause = 0xff;
307            UINT8 ret = m_exception_cause;
308            m_exception_cause = 0xff;
307309            return ret;
308310         }
309311      case 2:
310         return input_port_read(space->machine(), "DSW");
312         return input_port_read(machine(), "DSW");
311313      case 3:
312         return input_port_read(space->machine(), "KEYSWITCH");
314         return input_port_read(machine(), "KEYSWITCH");
313315      case 7:
314316         return 0x02;
315317      default:
316         logerror("%s: Unhandled famibox_system_r(%x)\n", space->machine().describe_context(), offset );
318         logerror("%s: Unhandled famibox_system_r(%x)\n", machine().describe_context(), offset );
317319         return 0;
318320   }
319321}
320322
321static WRITE8_HANDLER( famibox_system_w )
323WRITE8_MEMBER(famibox_state::famibox_system_w)
322324{
323   famibox_state *state = space->machine().driver_data<famibox_state>();
324325   switch( offset & 0x07 )
325326   {
326327      case 0:
327         logerror("%s: Interrupt enable\n", space->machine().describe_context());
328         logerror("%s: Interrupt enable\n", machine().describe_context());
328329         logerror("6.82Hz interrupt source (0 = enable): %d\n", BIT(data,0));
329330         logerror("8 bit timer expiration @ 5003W (1 = enable): %d\n", BIT(data,1));
330331         logerror("controller reads (1 = enable): %d\n", BIT(data,2));
r14845r14846
332333         logerror("money insertion (1 = enable): %d\n", BIT(data,4));
333334         logerror("reset button (1 = enable): %d\n", BIT(data,5));
334335         logerror("\"CATV connector\" pin 4 detection (1 = enable): %d\n", BIT(data,7));
335         state->m_exception_mask = data;
336         if ( BIT(state->m_exception_mask,1) && ( state->m_attract_timer_period != 0 ) )
336         m_exception_mask = data;
337         if ( BIT(m_exception_mask,1) && ( m_attract_timer_period != 0 ) )
337338         {
338            if (state->m_attract_timer->start() != attotime::never)
339            if (m_attract_timer->start() != attotime::never)
339340            {
340               state->m_attract_timer->adjust(attotime::from_seconds((INT32)((double)1.0/6.8274*state->m_attract_timer_period)), 0, attotime::never);
341               m_attract_timer->adjust(attotime::from_seconds((INT32)((double)1.0/6.8274*m_attract_timer_period)), 0, attotime::never);
341342            }
342343         }
343344         break;
344345      case 1:
345         state->m_money_reg = data;
346         logerror("%s: Money handling register: %02x\n", space->machine().describe_context(), data);
346         m_money_reg = data;
347         logerror("%s: Money handling register: %02x\n", machine().describe_context(), data);
347348         break;
348349      case 2:
349         logerror("%s: LED & memory protect register: %02x\n", space->machine().describe_context(), data);
350         logerror("%s: LED & memory protect register: %02x\n", machine().describe_context(), data);
350351         break;
351352      case 3:
352         logerror("%s: 8 bit down counter, for attract mode timing: %02x\n", space->machine().describe_context(), data);
353         state->m_attract_timer_period = data;
354         if ( BIT(state->m_exception_mask,1) && ( data != 0 ) )
353         logerror("%s: 8 bit down counter, for attract mode timing: %02x\n", machine().describe_context(), data);
354         m_attract_timer_period = data;
355         if ( BIT(m_exception_mask,1) && ( data != 0 ) )
355356         {
356            state->m_attract_timer->adjust(attotime::from_hz(6.8274/state->m_attract_timer_period), 0, attotime::never);
357            m_attract_timer->adjust(attotime::from_hz(6.8274/m_attract_timer_period), 0, attotime::never);
357358         }
358359         break;
359360      case 4:
360         logerror("%s: bankswitch %x\n", space->machine().describe_context(), data );
361         famicombox_bankswitch(space->machine(), data & 0x3f);
361         logerror("%s: bankswitch %x\n", machine().describe_context(), data );
362         famicombox_bankswitch(machine(), data & 0x3f);
362363         break;
363364      default:
364         logerror("%s: Unhandled famibox_system_w(%x,%02x)\n", space->machine().describe_context(), offset, data );
365         logerror("%s: Unhandled famibox_system_w(%x,%02x)\n", machine().describe_context(), offset, data );
365366   }
366367}
367368
r14845r14846
376377   AM_RANGE(0x0000, 0x1fff) AM_RAM
377378   AM_RANGE(0x2000, 0x3fff) AM_DEVREADWRITE("ppu", ppu2c0x_device, read, write)
378379   AM_RANGE(0x4000, 0x4013) AM_DEVREADWRITE_LEGACY("nes", nes_psg_r, nes_psg_w)         /* PSG primary registers */
379   AM_RANGE(0x4014, 0x4014) AM_WRITE_LEGACY(sprite_dma_w)
380   AM_RANGE(0x4014, 0x4014) AM_WRITE(sprite_dma_w)
380381   AM_RANGE(0x4015, 0x4015) AM_DEVREADWRITE_LEGACY("nes", psg_4015_r, psg_4015_w)         /* PSG status / first control register */
381   AM_RANGE(0x4016, 0x4016) AM_READWRITE_LEGACY(famibox_IN0_r, famibox_IN0_w)   /* IN0 - input port 1 */
382   AM_RANGE(0x4017, 0x4017) AM_READ_LEGACY(famibox_IN1_r) AM_DEVWRITE_LEGACY("nes", psg_4017_w)      /* IN1 - input port 2 / PSG second control register */
383   AM_RANGE(0x5000, 0x5fff) AM_READWRITE_LEGACY(famibox_system_r, famibox_system_w)
382   AM_RANGE(0x4016, 0x4016) AM_READWRITE(famibox_IN0_r, famibox_IN0_w)   /* IN0 - input port 1 */
383   AM_RANGE(0x4017, 0x4017) AM_READ(famibox_IN1_r) AM_DEVWRITE_LEGACY("nes", psg_4017_w)      /* IN1 - input port 2 / PSG second control register */
384   AM_RANGE(0x5000, 0x5fff) AM_READWRITE(famibox_system_r, famibox_system_w)
384385   AM_RANGE(0x6000, 0x7fff) AM_RAM
385386   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("cpubank1")
386387   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("cpubank2")
r14845r14846
553554   state->m_nt_page[2] = state->m_nt_ram + 0x800;
554555   state->m_nt_page[3] = state->m_nt_ram + 0xc00;
555556
556   machine.device("ppu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x2000, 0x3eff, FUNC(famibox_nt_r), FUNC(famibox_nt_w));
557   machine.device("ppu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x2000, 0x3eff, read8_delegate(FUNC(famibox_state::famibox_nt_r), state), write8_delegate(FUNC(famibox_state::famibox_nt_w), state));
557558   machine.device("ppu")->memory().space(AS_PROGRAM)->install_read_bank(0x0000, 0x1fff, "ppubank1");
558559
559560   famicombox_bankswitch(machine, 0);
src/mame/drivers/cshooter.c
r14845r14846
101101   int m_counter;
102102   UINT8 *m_spriteram;
103103   size_t m_spriteram_size;
104   DECLARE_WRITE8_MEMBER(cshooter_txram_w);
105   DECLARE_READ8_MEMBER(cshooter_coin_r);
106   DECLARE_WRITE8_MEMBER(cshooter_c500_w);
107   DECLARE_WRITE8_MEMBER(cshooter_c700_w);
108   DECLARE_WRITE8_MEMBER(bank_w);
109   DECLARE_WRITE8_MEMBER(pal_w);
110   DECLARE_WRITE8_MEMBER(pal2_w);
111   DECLARE_READ8_MEMBER(pal_r);
112   DECLARE_READ8_MEMBER(seibu_sound_comms_r);
113   DECLARE_WRITE8_MEMBER(seibu_sound_comms_w);
104114};
105115
106116
r14845r14846
121131         0);
122132}
123133
124static WRITE8_HANDLER(cshooter_txram_w)
134WRITE8_MEMBER(cshooter_state::cshooter_txram_w)
125135{
126   cshooter_state *state = space->machine().driver_data<cshooter_state>();
127   state->m_txram[offset] = data;
128   state->m_txtilemap->mark_tile_dirty(offset/2);
136   m_txram[offset] = data;
137   m_txtilemap->mark_tile_dirty(offset/2);
129138}
130139
131140static VIDEO_START(cshooter)
r14845r14846
210219   MACHINE_RESET_CALL(seibu_sound);
211220}
212221
213static READ8_HANDLER ( cshooter_coin_r )
222READ8_MEMBER(cshooter_state::cshooter_coin_r)
214223{
215   cshooter_state *state = space->machine().driver_data<cshooter_state>();
216224   /* Even reads must return 0xff - Odd reads must return the contents of input port 5.
217225       Code at 0x5061 is executed once during P.O.S.T. where there is one read.
218226       Code at 0x50b4 is then executed each frame (not sure) where there are 2 reads. */
219   return ( (state->m_counter++ & 1) ? 0xff : input_port_read(space->machine(), "COIN") );
227   return ( (m_counter++ & 1) ? 0xff : input_port_read(machine(), "COIN") );
220228}
221229
222static WRITE8_HANDLER ( cshooter_c500_w )
230WRITE8_MEMBER(cshooter_state::cshooter_c500_w)
223231{
224232}
225233
226static WRITE8_HANDLER ( cshooter_c700_w )
234WRITE8_MEMBER(cshooter_state::cshooter_c700_w)
227235{
228236}
229237
230static WRITE8_HANDLER ( bank_w )
238WRITE8_MEMBER(cshooter_state::bank_w)
231239{
232   memory_set_bankptr(space->machine(), "bank1",&space->machine().region("user1")->base()[0x4000*((data>>4)&3)]);
240   memory_set_bankptr(machine(), "bank1",&machine().region("user1")->base()[0x4000*((data>>4)&3)]);
233241}
234242
235243
236static WRITE8_HANDLER(pal_w)
244WRITE8_MEMBER(cshooter_state::pal_w)
237245{
238   space->machine().generic.paletteram.u8[offset]=data;
246   machine().generic.paletteram.u8[offset]=data;
239247   offset&=0xff;
240   palette_set_color_rgb(space->machine(), offset, pal4bit(space->machine().generic.paletteram.u8[offset] >> 4), pal4bit(space->machine().generic.paletteram.u8[offset]), pal4bit(space->machine().generic.paletteram.u8[offset+0x100]));
248   palette_set_color_rgb(machine(), offset, pal4bit(machine().generic.paletteram.u8[offset] >> 4), pal4bit(machine().generic.paletteram.u8[offset]), pal4bit(machine().generic.paletteram.u8[offset+0x100]));
241249}
242250
243static WRITE8_HANDLER(pal2_w)
251WRITE8_MEMBER(cshooter_state::pal2_w)
244252{
245   space->machine().generic.paletteram.u8[offset]=data;
253   machine().generic.paletteram.u8[offset]=data;
246254   offset&=0x1ff;
247   palette_set_color_rgb(space->machine(), offset, pal4bit(space->machine().generic.paletteram.u8[offset] >> 4), pal4bit(space->machine().generic.paletteram.u8[offset]), pal4bit(space->machine().generic.paletteram.u8[offset+0x200]));
255   palette_set_color_rgb(machine(), offset, pal4bit(machine().generic.paletteram.u8[offset] >> 4), pal4bit(machine().generic.paletteram.u8[offset]), pal4bit(machine().generic.paletteram.u8[offset+0x200]));
248256}
249257
250static READ8_HANDLER(pal_r)
258READ8_MEMBER(cshooter_state::pal_r)
251259{
252   return space->machine().generic.paletteram.u8[offset];
260   return machine().generic.paletteram.u8[offset];
253261}
254262
255263static ADDRESS_MAP_START( cshooter_map, AS_PROGRAM, 8, cshooter_state )
256264   AM_RANGE(0x0000, 0x7fff) AM_ROM
257265   AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank1") AM_WRITEONLY
258266   AM_RANGE(0xb000, 0xb0ff) AM_READONLY         // sound related ?
259   AM_RANGE(0xc000, 0xc1ff) AM_WRITE_LEGACY(pal_w) AM_READ_LEGACY(pal_r) AM_BASE_GENERIC(paletteram)
267   AM_RANGE(0xc000, 0xc1ff) AM_WRITE(pal_w) AM_READ(pal_r) AM_BASE_GENERIC(paletteram)
260268   AM_RANGE(0xc200, 0xc200) AM_READ_PORT("IN0")
261269   AM_RANGE(0xc201, 0xc201) AM_READ_PORT("IN1")
262270   AM_RANGE(0xc202, 0xc202) AM_READ_PORT("IN2")
263271   AM_RANGE(0xc203, 0xc203) AM_READ_PORT("DSW2")
264272   AM_RANGE(0xc204, 0xc204) AM_READ_PORT("DSW1")
265   AM_RANGE(0xc205, 0xc205) AM_READ_LEGACY(cshooter_coin_r)   // hack until I understand
266   AM_RANGE(0xc500, 0xc500) AM_WRITE_LEGACY(cshooter_c500_w)
273   AM_RANGE(0xc205, 0xc205) AM_READ(cshooter_coin_r)   // hack until I understand
274   AM_RANGE(0xc500, 0xc500) AM_WRITE(cshooter_c500_w)
267275   AM_RANGE(0xc600, 0xc600) AM_WRITENOP         // see notes
268   AM_RANGE(0xc700, 0xc700) AM_WRITE_LEGACY(cshooter_c700_w)
276   AM_RANGE(0xc700, 0xc700) AM_WRITE(cshooter_c700_w)
269277   AM_RANGE(0xc801, 0xc801) AM_WRITENOP         // see notes
270   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(cshooter_txram_w) AM_BASE(m_txram)
278   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_BASE(m_txram)
271279   AM_RANGE(0xd800, 0xdfff) AM_RAM
272280   AM_RANGE(0xe000, 0xffff) AM_RAM
273281ADDRESS_MAP_END
274282
275static READ8_HANDLER( seibu_sound_comms_r )
283READ8_MEMBER(cshooter_state::seibu_sound_comms_r)
276284{
277   return seibu_main_word_r(space,offset,0x00ff);
285   return seibu_main_word_r(&space,offset,0x00ff);
278286}
279287
280static WRITE8_HANDLER( seibu_sound_comms_w )
288WRITE8_MEMBER(cshooter_state::seibu_sound_comms_w)
281289{
282   seibu_main_word_w(space,offset,data,0x00ff);
290   seibu_main_word_w(&space,offset,data,0x00ff);
283291}
284292
285293static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8, cshooter_state )
r14845r14846
292300   AM_RANGE(0xc002, 0xc002) AM_READ_PORT("IN2")
293301   AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DSW2")
294302   AM_RANGE(0xc004, 0xc004) AM_READ_PORT("DSW1")
295   AM_RANGE(0xc500, 0xc500) AM_WRITE_LEGACY(cshooter_c500_w)
303   AM_RANGE(0xc500, 0xc500) AM_WRITE(cshooter_c500_w)
296304   AM_RANGE(0xc600, 0xc600) AM_WRITENOP         // see notes
297   AM_RANGE(0xc700, 0xc700) AM_WRITE_LEGACY(cshooter_c700_w)
305   AM_RANGE(0xc700, 0xc700) AM_WRITE(cshooter_c700_w)
298306   AM_RANGE(0xc801, 0xc801) AM_WRITENOP         // see notes
299   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(cshooter_txram_w) AM_BASE(m_txram)
300   AM_RANGE(0xd800, 0xdbff) AM_WRITE_LEGACY(pal2_w) AM_READ_LEGACY(pal_r) AM_BASE_GENERIC(paletteram)
301   AM_RANGE(0xdc11, 0xdc11) AM_WRITE_LEGACY(bank_w)
307   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_BASE(m_txram)
308   AM_RANGE(0xd800, 0xdbff) AM_WRITE(pal2_w) AM_READ(pal_r) AM_BASE_GENERIC(paletteram)
309   AM_RANGE(0xdc11, 0xdc11) AM_WRITE(bank_w)
302310   AM_RANGE(0xdc00, 0xdc1f) AM_RAM //video registers
303   AM_RANGE(0xde00, 0xde0f) AM_READWRITE_LEGACY(seibu_sound_comms_r,seibu_sound_comms_w)
311   AM_RANGE(0xde00, 0xde0f) AM_READWRITE(seibu_sound_comms_r,seibu_sound_comms_w)
304312   AM_RANGE(0xe000, 0xfdff) AM_RAM AM_BASE(m_mainram)
305313   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
306314ADDRESS_MAP_END
src/mame/drivers/ultrsprt.c
r14845r14846
2525
2626   UINT32 *m_vram;
2727   UINT32 *m_workram;
28   DECLARE_WRITE32_MEMBER(palette_w);
29   DECLARE_READ32_MEMBER(eeprom_r);
30   DECLARE_WRITE32_MEMBER(eeprom_w);
31   DECLARE_WRITE32_MEMBER(int_ack_w);
32   DECLARE_READ16_MEMBER(K056800_68k_r);
33   DECLARE_WRITE16_MEMBER(K056800_68k_w);
2834};
2935
3036
r14845r14846
5561   return 0;
5662}
5763
58static WRITE32_HANDLER( palette_w )
64WRITE32_MEMBER(ultrsprt_state::palette_w)
5965{
60   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
61   data = space->machine().generic.paletteram.u32[offset];
66   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
67   data = machine().generic.paletteram.u32[offset];
6268
63   palette_set_color(space->machine(), (offset*2)+0, MAKE_RGB(pal5bit(data >> 26), pal5bit(data >> 21), pal5bit(data >> 16)));
64   palette_set_color(space->machine(), (offset*2)+1, MAKE_RGB(pal5bit(data >> 10), pal5bit(data >>  5), pal5bit(data >>  0)));
69   palette_set_color(machine(), (offset*2)+0, MAKE_RGB(pal5bit(data >> 26), pal5bit(data >> 21), pal5bit(data >> 16)));
70   palette_set_color(machine(), (offset*2)+1, MAKE_RGB(pal5bit(data >> 10), pal5bit(data >>  5), pal5bit(data >>  0)));
6571}
6672
67static READ32_HANDLER( eeprom_r )
73READ32_MEMBER(ultrsprt_state::eeprom_r)
6874{
6975   UINT32 r = 0;
7076
7177   if (ACCESSING_BITS_24_31)
72      r |= input_port_read(space->machine(), "SERVICE");
78      r |= input_port_read(machine(), "SERVICE");
7379
7480   return r;
7581}
7682
77static WRITE32_HANDLER( eeprom_w )
83WRITE32_MEMBER(ultrsprt_state::eeprom_w)
7884{
7985   if (ACCESSING_BITS_24_31)
80      input_port_write(space->machine(), "EEPROMOUT", data, 0xffffffff);
86      input_port_write(machine(), "EEPROMOUT", data, 0xffffffff);
8187}
8288
8389static CUSTOM_INPUT( analog_ctrl_r )
r14845r14846
8692   return input_port_read(field.machine(), tag) & 0xfff;
8793}
8894
89static WRITE32_HANDLER( int_ack_w )
95WRITE32_MEMBER(ultrsprt_state::int_ack_w)
9096{
91   cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
97   cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
9298}
9399
94100static MACHINE_START( ultrsprt )
r14845r14846
106112
107113static ADDRESS_MAP_START( ultrsprt_map, AS_PROGRAM, 32, ultrsprt_state )
108114   AM_RANGE(0x00000000, 0x0007ffff) AM_RAM AM_BASE(m_vram)
109   AM_RANGE(0x70000000, 0x70000003) AM_READWRITE_LEGACY(eeprom_r, eeprom_w)
115   AM_RANGE(0x70000000, 0x70000003) AM_READWRITE(eeprom_r, eeprom_w)
110116   AM_RANGE(0x70000020, 0x70000023) AM_READ_PORT("P1")
111117   AM_RANGE(0x70000040, 0x70000043) AM_READ_PORT("P2")
112118   AM_RANGE(0x70000080, 0x70000087) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
113119   AM_RANGE(0x70000088, 0x7000008f) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
114   AM_RANGE(0x700000e0, 0x700000e3) AM_WRITE_LEGACY(int_ack_w)
120   AM_RANGE(0x700000e0, 0x700000e3) AM_WRITE(int_ack_w)
115121   AM_RANGE(0x7f000000, 0x7f01ffff) AM_RAM AM_BASE(m_workram)
116   AM_RANGE(0x7f700000, 0x7f703fff) AM_RAM_WRITE_LEGACY(palette_w) AM_BASE_GENERIC(paletteram)
122   AM_RANGE(0x7f700000, 0x7f703fff) AM_RAM_WRITE(palette_w) AM_BASE_GENERIC(paletteram)
117123   AM_RANGE(0x7f800000, 0x7f9fffff) AM_MIRROR(0x00600000) AM_ROM AM_REGION("user1", 0)
118124ADDRESS_MAP_END
119125
r14845r14846
121127/*****************************************************************************/
122128
123129
124static READ16_HANDLER( K056800_68k_r )
130READ16_MEMBER(ultrsprt_state::K056800_68k_r)
125131{
126   device_t *k056800 = space->machine().device("k056800");
132   device_t *k056800 = machine().device("k056800");
127133   UINT16 r = 0;
128134
129135   if (ACCESSING_BITS_8_15)
r14845r14846
135141   return r;
136142}
137143
138static WRITE16_HANDLER( K056800_68k_w )
144WRITE16_MEMBER(ultrsprt_state::K056800_68k_w)
139145{
140   device_t *k056800 = space->machine().device("k056800");
146   device_t *k056800 = machine().device("k056800");
141147
142148   if (ACCESSING_BITS_8_15)
143149      k056800_sound_w(k056800, (offset*2)+0, (data >> 8) & 0xff, 0x00ff);
r14845r14846
149155static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 16, ultrsprt_state )
150156   AM_RANGE(0x00000000, 0x0001ffff) AM_ROM
151157   AM_RANGE(0x00100000, 0x00101fff) AM_RAM
152   AM_RANGE(0x00200000, 0x00200007) AM_WRITE_LEGACY(K056800_68k_w)
153   AM_RANGE(0x00200008, 0x0020000f) AM_READ_LEGACY(K056800_68k_r)
158   AM_RANGE(0x00200000, 0x00200007) AM_WRITE(K056800_68k_w)
159   AM_RANGE(0x00200008, 0x0020000f) AM_READ(K056800_68k_r)
154160   AM_RANGE(0x00400000, 0x004002ff) AM_DEVREADWRITE8("konami", k054539_device, read, write, 0xffff)
155161ADDRESS_MAP_END
156162
src/mame/drivers/maygay1b.c
r14845r14846
125125   int m_optic_pattern;
126126   device_t *m_duart68681;
127127   i8279_state m_i8279[2];
128   DECLARE_READ8_MEMBER(m1_8279_r);
129   DECLARE_WRITE8_MEMBER(m1_8279_w);
130   DECLARE_READ8_MEMBER(m1_8279_2_r);
131   DECLARE_WRITE8_MEMBER(m1_8279_2_w);
132   DECLARE_WRITE8_MEMBER(reel12_w);
133   DECLARE_WRITE8_MEMBER(reel34_w);
134   DECLARE_WRITE8_MEMBER(reel56_w);
135   DECLARE_WRITE8_MEMBER(m1_latch_w);
136   DECLARE_WRITE8_MEMBER(latch_ch2_w);
137   DECLARE_READ8_MEMBER(latch_st_hi);
138   DECLARE_READ8_MEMBER(latch_st_lo);
139   DECLARE_WRITE8_MEMBER(m1ab_no_oki_w);
140   void m1_draw_lamps(int data,int strobe, int col);
128141};
129142
130143
131static void m1_draw_lamps(maygay1b_state *state, int data,int strobe, int col)
144void maygay1b_state::m1_draw_lamps(int data,int strobe, int col)
132145{
133146   int i;
134147   int scramble[8] = { 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08 };
135148
136   state->m_lamppos = strobe + col * 8;
149   m_lamppos = strobe + col * 8;
137150
138151   for ( i = 0; i < 8; i++ )
139152   {
140      state->m_Lamps[state->m_lamppos] = ( data & scramble[i] );
141      output_set_lamp_value(state->m_lamppos, state->m_Lamps[state->m_lamppos]);
153      m_Lamps[m_lamppos] = ( data & scramble[i] );
154      output_set_lamp_value(m_lamppos, m_Lamps[m_lamppos]);
142155   }
143   state->m_lamppos++;
156   m_lamppos++;
144157}
145158
146159
r14845r14846
174187      }
175188}
176189
177static READ8_HANDLER( m1_8279_r )
190READ8_MEMBER(maygay1b_state::m1_8279_r)
178191{
179   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
180   i8279_state *chip = state->m_i8279 + 0;
192   i8279_state *chip = m_i8279 + 0;
181193   static const char *const portnames[] = { "SW1","STROBE5","STROBE7","STROBE3","SW2","STROBE4","STROBE6","STROBE2" };
182194   UINT8 result = 0xff;
183195   UINT8 addr;
r14845r14846
190202         /* read sensor RAM */
191203         case 0x40:
192204            addr = chip->command & 0x07;
193            result = input_port_read(space->machine(),"SW1");
205            result = input_port_read(machine(),"SW1");
194206            /* handle autoincrement */
195207            if (chip->command & 0x10)
196208               chip->command = (chip->command & 0xf0) | ((addr + 1) & 0x0f);
r14845r14846
217229   {
218230      if ( chip->read_sensor )
219231      {
220         result = input_port_read(space->machine(),portnames[chip->sense_address]);
232         result = input_port_read(machine(),portnames[chip->sense_address]);
221233//          break
222234      }
223235      if ( chip->sense_auto_inc )
r14845r14846
234246   return result;
235247}
236248
237static WRITE8_HANDLER( m1_8279_w )
249WRITE8_MEMBER(maygay1b_state::m1_8279_w)
238250{
239   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
240   i8279_state *chip = state->m_i8279 + 0;
251   i8279_state *chip = m_i8279 + 0;
241252   UINT8 addr;
242253
243254   /* write data */
r14845r14846
345356   {  // Data
346357      if ( chip->ram[chip->disp_address] != data )
347358      {
348         m1_draw_lamps(state,chip->ram[chip->disp_address],chip->disp_address, 0);
359         m1_draw_lamps(chip->ram[chip->disp_address],chip->disp_address, 0);
349360      }
350361      chip->ram[chip->disp_address] = data;
351362      if ( chip->disp_auto_inc )
r14845r14846
353364   }
354365}
355366
356static READ8_HANDLER( m1_8279_2_r )
367READ8_MEMBER(maygay1b_state::m1_8279_2_r)
357368{
358   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
359   i8279_state *chip = state->m_i8279 + 1;
369   i8279_state *chip = m_i8279 + 1;
360370   UINT8 result = 0xff;
361371   UINT8 addr;
362372
r14845r14846
394404}
395405
396406
397static WRITE8_HANDLER( m1_8279_2_w )
407WRITE8_MEMBER(maygay1b_state::m1_8279_2_w)
398408{
399   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
400   i8279_state *chip = state->m_i8279 + 1;
409   i8279_state *chip = m_i8279 + 1;
401410   UINT8 addr;
402411
403412   /* write data */
r14845r14846
497506   {  // Data
498507      if ( chip->ram[chip->disp_address] != data )
499508      {
500         m1_draw_lamps(state,chip->ram[chip->disp_address],chip->disp_address, 128);
509         m1_draw_lamps(chip->ram[chip->disp_address],chip->disp_address, 128);
501510      }
502511      chip->ram[chip->disp_address] = data;
503512      if ( chip->disp_auto_inc )
r14845r14846
727736// setup the standard oki MSC1937 display ///////////////////////////////
728737   ROC10937_init(0, MSC1937,0);
729738}
730static WRITE8_HANDLER( reel12_w )
739WRITE8_MEMBER(maygay1b_state::reel12_w)
731740{
732   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
733741   stepper_update(0, data & 0x0F );
734742   stepper_update(1, (data>>4) & 0x0F );
735743
736   if ( stepper_optic_state(0) ) state->m_optic_pattern |=  0x01;
737   else                          state->m_optic_pattern &= ~0x01;
738   if ( stepper_optic_state(1) ) state->m_optic_pattern |=  0x02;
739   else                          state->m_optic_pattern &= ~0x02;
744   if ( stepper_optic_state(0) ) m_optic_pattern |=  0x01;
745   else                          m_optic_pattern &= ~0x01;
746   if ( stepper_optic_state(1) ) m_optic_pattern |=  0x02;
747   else                          m_optic_pattern &= ~0x02;
740748
741749   awp_draw_reel(0);
742750   awp_draw_reel(1);
743751}
744752
745static WRITE8_HANDLER( reel34_w )
753WRITE8_MEMBER(maygay1b_state::reel34_w)
746754{
747   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
748755   stepper_update(2, data & 0x0F );
749756   stepper_update(3, (data>>4) & 0x0F );
750757
751   if ( stepper_optic_state(2) ) state->m_optic_pattern |=  0x04;
752   else                          state->m_optic_pattern &= ~0x04;
753   if ( stepper_optic_state(3) ) state->m_optic_pattern |=  0x08;
754   else                          state->m_optic_pattern &= ~0x08;
758   if ( stepper_optic_state(2) ) m_optic_pattern |=  0x04;
759   else                          m_optic_pattern &= ~0x04;
760   if ( stepper_optic_state(3) ) m_optic_pattern |=  0x08;
761   else                          m_optic_pattern &= ~0x08;
755762
756763   awp_draw_reel(2);
757764   awp_draw_reel(3);
758765}
759766
760static WRITE8_HANDLER( reel56_w )
767WRITE8_MEMBER(maygay1b_state::reel56_w)
761768{
762   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
763769   stepper_update(4, data & 0x0F );
764770   stepper_update(5, (data>>4) & 0x0F );
765771
766   if ( stepper_optic_state(4) ) state->m_optic_pattern |=  0x10;
767   else                          state->m_optic_pattern &= ~0x10;
768   if ( stepper_optic_state(5) ) state->m_optic_pattern |=  0x20;
769   else                          state->m_optic_pattern &= ~0x20;
772   if ( stepper_optic_state(4) ) m_optic_pattern |=  0x10;
773   else                          m_optic_pattern &= ~0x10;
774   if ( stepper_optic_state(5) ) m_optic_pattern |=  0x20;
775   else                          m_optic_pattern &= ~0x20;
770776
771777   awp_draw_reel(4);
772778   awp_draw_reel(5);
r14845r14846
786792   if ( data & (1 << i) )   MechMtr_update(i, data & (1 << i) );
787793}
788794
789static WRITE8_HANDLER( m1_latch_w )
795WRITE8_MEMBER(maygay1b_state::m1_latch_w)
790796{
791   maygay1b_state *state = space->machine().driver_data<maygay1b_state>();
792797   switch ( offset )
793798   {
794      case 0: // state->m_RAMEN
795      state->m_RAMEN = (data & 1);
799      case 0: // m_RAMEN
800      m_RAMEN = (data & 1);
796801      break;
797802      case 1: // AlarmEn
798      state->m_ALARMEN = (data & 1);
803      m_ALARMEN = (data & 1);
799804      break;
800805      case 2: // Enable
801         cpu0_nmi(space->machine(),1);
802         cpu0_nmi(space->machine(),0);
806         cpu0_nmi(machine(),1);
807         cpu0_nmi(machine(),0);
803808
804809        //        if ( m1_enable == 0 && ( data & 1 ) && Vmm )
805810//      {
r14845r14846
812817      }
813818      break;
814819      case 4: // PSURelay
815      state->m_PSUrelay = (data & 1);
820      m_PSUrelay = (data & 1);
816821      break;
817822      case 5: // WDog
818      state->m_WDOG = (data & 1);
823      m_WDOG = (data & 1);
819824      break;
820825      case 6: // Srsel
821      state->m_SRSEL = (data & 1);
826      m_SRSEL = (data & 1);
822827      break;
823828   }
824829}
825830
826static WRITE8_HANDLER( latch_ch2_w )
831WRITE8_MEMBER(maygay1b_state::latch_ch2_w)
827832{
828   device_t *msm6376 = space->machine().device("msm6376");
833   device_t *msm6376 = machine().device("msm6376");
829834   okim6376_w(msm6376, 0, data&0x7f);
830835   okim6376_ch2_w(msm6376,data&0x80);
831836}
832837
833838//A strange setup this, the address lines are used to move st to the right level
834static READ8_HANDLER( latch_st_hi )
839READ8_MEMBER(maygay1b_state::latch_st_hi)
835840{
836   device_t *msm6376 = space->machine().device("msm6376");
841   device_t *msm6376 = machine().device("msm6376");
837842   okim6376_st_w(msm6376,1);
838843   return 0;
839844}
840845
841static READ8_HANDLER( latch_st_lo )
846READ8_MEMBER(maygay1b_state::latch_st_lo)
842847{
843   device_t *msm6376 = space->machine().device("msm6376");
848   device_t *msm6376 = machine().device("msm6376");
844849   okim6376_st_w(msm6376,0);
845850   return 0;
846851}
r14845r14846
848853static ADDRESS_MAP_START( m1_memmap, AS_PROGRAM, 8, maygay1b_state )
849854   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram")
850855
851   AM_RANGE(0x2000, 0x2000) AM_WRITE_LEGACY(reel12_w)
852   AM_RANGE(0x2010, 0x2010) AM_WRITE_LEGACY(reel34_w)
853   AM_RANGE(0x2020, 0x2020) AM_WRITE_LEGACY(reel56_w)
856   AM_RANGE(0x2000, 0x2000) AM_WRITE(reel12_w)
857   AM_RANGE(0x2010, 0x2010) AM_WRITE(reel34_w)
858   AM_RANGE(0x2020, 0x2020) AM_WRITE(reel56_w)
854859
855   AM_RANGE(0x2030, 0x2031) AM_READWRITE_LEGACY(m1_8279_r,m1_8279_w)
856   AM_RANGE(0x2040, 0x2041) AM_READWRITE_LEGACY(m1_8279_2_r,m1_8279_2_w)
860   AM_RANGE(0x2030, 0x2031) AM_READWRITE(m1_8279_r,m1_8279_w)
861   AM_RANGE(0x2040, 0x2041) AM_READWRITE(m1_8279_2_r,m1_8279_2_w)
857862   AM_RANGE(0x2050, 0x2050)// SCAN on M1B
858863
859864   AM_RANGE(0x2070, 0x207f) AM_DEVREADWRITE_LEGACY("duart68681", duart68681_r, duart68681_w )
r14845r14846
864869   AM_RANGE(0x20A0, 0x20A3) AM_DEVWRITE("pia", pia6821_device, write)
865870   AM_RANGE(0x20A0, 0x20A3) AM_DEVREAD("pia", pia6821_device, read)
866871
867   AM_RANGE(0x20C0, 0x20C7) AM_WRITE_LEGACY(m1_latch_w)
872   AM_RANGE(0x20C0, 0x20C7) AM_WRITE(m1_latch_w)
868873
869874   AM_RANGE(0x2400, 0x2401) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
870   AM_RANGE(0x2404, 0x2405) AM_READ_LEGACY(latch_st_lo)
871   AM_RANGE(0x2406, 0x2407) AM_READ_LEGACY(latch_st_hi)
875   AM_RANGE(0x2404, 0x2405) AM_READ(latch_st_lo)
876   AM_RANGE(0x2406, 0x2407) AM_READ(latch_st_hi)
872877
873   AM_RANGE(0x2420, 0x2421) AM_WRITE_LEGACY(latch_ch2_w ) // oki
878   AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
874879
875880   AM_RANGE(0x2800, 0xffff) AM_ROM
876881ADDRESS_MAP_END
r14845r14846
44044409   ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 )
44054410ROM_END
44064411
4407static WRITE8_HANDLER( m1ab_no_oki_w )
4412WRITE8_MEMBER(maygay1b_state::m1ab_no_oki_w)
44084413{
44094414   popmessage("write to OKI, but no OKI rom");
44104415}
r14845r14846
44124417static DRIVER_INIT( m1 )
44134418{
44144419
4415   //AM_RANGE(0x2420, 0x2421) AM_WRITE_LEGACY(latch_ch2_w ) // oki
4420   //AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
44164421   // if there is no OKI region disable writes here, the rom might be missing, so alert user
44174422
44184423   UINT8 *okirom = machine.region( "oki" )->base();
44194424
4420   if (!okirom)
4421      machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x2420, 0x2421, FUNC(m1ab_no_oki_w));
4422
4425   if (!okirom) {
4426      maygay1b_state *state = machine.driver_data<maygay1b_state>();
4427      machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x2420, 0x2421, write8_delegate(FUNC(maygay1b_state::m1ab_no_oki_w), state));
4428   }
44234429   // print out the rom id / header info to give us some hints
44244430   // note this isn't always correct, alley cat has 'Calpsyo' still in the ident string?
44254431   {
src/mame/drivers/spool99.c
r14845r14846
104104   tilemap_t *m_sc0_tilemap;
105105   UINT8 *m_cram;
106106   UINT8 *m_vram;
107   DECLARE_WRITE8_MEMBER(spool99_vram_w);
108   DECLARE_WRITE8_MEMBER(spool99_cram_w);
109   DECLARE_READ8_MEMBER(spool99_io_r);
110   DECLARE_READ8_MEMBER(vcarn_io_r);
107111};
108112
109113static TILE_GET_INFO( get_spool99_tile_info )
r14845r14846
134138   return 0;
135139}
136140
137static WRITE8_HANDLER( spool99_vram_w )
141WRITE8_MEMBER(spool99_state::spool99_vram_w)
138142{
139   spool99_state *state = space->machine().driver_data<spool99_state>();
140143
141   state->m_vram[offset] = data;
142   state->m_sc0_tilemap->mark_tile_dirty(offset/2);
144   m_vram[offset] = data;
145   m_sc0_tilemap->mark_tile_dirty(offset/2);
143146}
144147
145static WRITE8_HANDLER( spool99_cram_w )
148WRITE8_MEMBER(spool99_state::spool99_cram_w)
146149{
147   spool99_state *state = space->machine().driver_data<spool99_state>();
148150
149   state->m_cram[offset] = data;
150   state->m_sc0_tilemap->mark_tile_dirty(offset/2);
151   m_cram[offset] = data;
152   m_sc0_tilemap->mark_tile_dirty(offset/2);
151153}
152154
153155
154156
155static READ8_HANDLER( spool99_io_r )
157READ8_MEMBER(spool99_state::spool99_io_r)
156158{
157   UINT8 *ROM = space->machine().region("maincpu")->base();
159   UINT8 *ROM = machine().region("maincpu")->base();
158160
159161//  if(!(io_switch))
160162   {
161163      switch(offset+0xaf00)
162164      {
163         case 0xafd8: return input_port_read(space->machine(),"COIN1");
165         case 0xafd8: return input_port_read(machine(),"COIN1");
164166//          case 0xafd9: return 1;
165         case 0xafda: return input_port_read(space->machine(),"COIN2");
167         case 0xafda: return input_port_read(machine(),"COIN2");
166168         case 0xafdb: return 1;
167         case 0xafdc: return input_port_read(space->machine(),"SERVICE1");//attract mode
168         case 0xafdd: return input_port_read(space->machine(),"HOLD3");
169         case 0xafde: return input_port_read(space->machine(),"HOLD4");
170         case 0xafdf: return input_port_read(space->machine(),"HOLD2");
171         case 0xafe0: return input_port_read(space->machine(),"HOLD1");
172         case 0xafe1: return input_port_read(space->machine(),"HOLD5");
173         case 0xafe2: return input_port_read(space->machine(),"START");
174         case 0xafe3: return input_port_read(space->machine(),"BET");//system 2
175         case 0xafe4: return input_port_read(space->machine(),"SERVICE2");//attract mode
169         case 0xafdc: return input_port_read(machine(),"SERVICE1");//attract mode
170         case 0xafdd: return input_port_read(machine(),"HOLD3");
171         case 0xafde: return input_port_read(machine(),"HOLD4");
172         case 0xafdf: return input_port_read(machine(),"HOLD2");
173         case 0xafe0: return input_port_read(machine(),"HOLD1");
174         case 0xafe1: return input_port_read(machine(),"HOLD5");
175         case 0xafe2: return input_port_read(machine(),"START");
176         case 0xafe3: return input_port_read(machine(),"BET");//system 2
177         case 0xafe4: return input_port_read(machine(),"SERVICE2");//attract mode
176178//          case 0xafe5: return 1;
177179//          case 0xafe6: return 1;
178         case 0xafe7: return space->machine().device<eeprom_device>("eeprom")->read_bit();
179         case 0xaff8: return space->machine().device<okim6295_device>("oki")->read(*space,0);
180         case 0xafe7: return machine().device<eeprom_device>("eeprom")->read_bit();
181         case 0xaff8: return machine().device<okim6295_device>("oki")->read(*&space,0);
180182      }
181183   }
182184//  printf("%04x %d\n",offset+0xaf00,io_switch);
r14845r14846
209211static ADDRESS_MAP_START( spool99_map, AS_PROGRAM, 8, spool99_state )
210212   AM_RANGE(0x0000, 0x00ff) AM_RAM AM_BASE(m_main)
211213   AM_RANGE(0x0100, 0xaeff) AM_ROM AM_REGION("maincpu", 0x100) AM_WRITENOP
212   AM_RANGE(0xaf00, 0xafff) AM_READ_LEGACY(spool99_io_r)
214   AM_RANGE(0xaf00, 0xafff) AM_READ(spool99_io_r)
213215   AM_RANGE(0xafed, 0xafed) AM_DEVWRITE_LEGACY("eeprom", eeprom_resetline_w )
214216   AM_RANGE(0xafee, 0xafee) AM_DEVWRITE_LEGACY("eeprom", eeprom_clockline_w )
215217   AM_RANGE(0xafef, 0xafef) AM_DEVWRITE_LEGACY("eeprom", eeprom_dataline_w )
r14845r14846
218220   AM_RANGE(0xb000, 0xb3ff) AM_RAM_WRITE_LEGACY(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram)
219221
220222   AM_RANGE(0xb800, 0xdfff) AM_RAM
221   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE_LEGACY(spool99_vram_w) AM_BASE(m_vram)
222   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE_LEGACY(spool99_cram_w) AM_BASE(m_cram)
223   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(spool99_vram_w) AM_BASE(m_vram)
224   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(spool99_cram_w) AM_BASE(m_cram)
223225ADDRESS_MAP_END
224226
225static READ8_HANDLER( vcarn_io_r )
227READ8_MEMBER(spool99_state::vcarn_io_r)
226228{
227   UINT8 *ROM = space->machine().region("maincpu")->base();
229   UINT8 *ROM = machine().region("maincpu")->base();
228230
229231//  if(!(io_switch))
230232   {
231233      switch(offset+0xa700)
232234      {
233         case 0xa720: return input_port_read(space->machine(),"SERVICE1");//attract mode
234         case 0xa722: return input_port_read(space->machine(),"COIN1");
235         case 0xa723: return input_port_read(space->machine(),"COIN2");
236         case 0xa724: return input_port_read(space->machine(),"SERVICE2");//attract mode
237         case 0xa725: return input_port_read(space->machine(),"HOLD3");
238         case 0xa726: return input_port_read(space->machine(),"HOLD4");
239         case 0xa727: return input_port_read(space->machine(),"HOLD2");
240         case 0xa780: return space->machine().device<okim6295_device>("oki")->read(*space,0);
241         case 0xa7a0: return input_port_read(space->machine(),"HOLD1");
242         case 0xa7a1: return input_port_read(space->machine(),"HOLD5");
243         case 0xa7a2: return input_port_read(space->machine(),"START");
244         case 0xa7a3: return input_port_read(space->machine(),"BET");//system 2
235         case 0xa720: return input_port_read(machine(),"SERVICE1");//attract mode
236         case 0xa722: return input_port_read(machine(),"COIN1");
237         case 0xa723: return input_port_read(machine(),"COIN2");
238         case 0xa724: return input_port_read(machine(),"SERVICE2");//attract mode
239         case 0xa725: return input_port_read(machine(),"HOLD3");
240         case 0xa726: return input_port_read(machine(),"HOLD4");
241         case 0xa727: return input_port_read(machine(),"HOLD2");
242         case 0xa780: return machine().device<okim6295_device>("oki")->read(*&space,0);
243         case 0xa7a0: return input_port_read(machine(),"HOLD1");
244         case 0xa7a1: return input_port_read(machine(),"HOLD5");
245         case 0xa7a2: return input_port_read(machine(),"START");
246         case 0xa7a3: return input_port_read(machine(),"BET");//system 2
245247
246         case 0xa7a7: return space->machine().device<eeprom_device>("eeprom")->read_bit();
248         case 0xa7a7: return machine().device<eeprom_device>("eeprom")->read_bit();
247249
248250      }
249251   }
r14845r14846
255257static ADDRESS_MAP_START( vcarn_map, AS_PROGRAM, 8, spool99_state )
256258   AM_RANGE(0x0000, 0x00ff) AM_RAM AM_BASE(m_main)
257259   AM_RANGE(0x0100, 0xa6ff) AM_ROM AM_REGION("maincpu", 0x100) AM_WRITENOP
258   AM_RANGE(0xa700, 0xa7ff) AM_READ_LEGACY(vcarn_io_r)
260   AM_RANGE(0xa700, 0xa7ff) AM_READ(vcarn_io_r)
259261   AM_RANGE(0xa745, 0xa745) AM_DEVWRITE_LEGACY("eeprom", eeprom_resetline_w )
260262   AM_RANGE(0xa746, 0xa746) AM_DEVWRITE_LEGACY("eeprom", eeprom_clockline_w )
261263   AM_RANGE(0xa747, 0xa747) AM_DEVWRITE_LEGACY("eeprom", eeprom_dataline_w )
r14845r14846
264266   AM_RANGE(0xa800, 0xabff) AM_RAM_WRITE_LEGACY(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram)
265267
266268   AM_RANGE(0xb000, 0xdfff) AM_RAM
267//  AM_RANGE(0xdf00, 0xdfff) AM_READWRITE_LEGACY(vcarn_io_r,vcarn_io_w) AM_BASE_LEGACY(&vcarn_io)
268   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE_LEGACY(spool99_vram_w) AM_BASE(m_vram)
269   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE_LEGACY(spool99_cram_w) AM_BASE(m_cram)
269//  AM_RANGE(0xdf00, 0xdfff) AM_READWRITE(vcarn_io_r,vcarn_io_w) AM_BASE_LEGACY(&vcarn_io)
270   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(spool99_vram_w) AM_BASE(m_vram)
271   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(spool99_cram_w) AM_BASE(m_cram)
270272ADDRESS_MAP_END
271273
272274
src/mame/drivers/30test.c
r14845r14846
5656
5757   UINT8 m_mux_data;
5858   UINT8 m_oki_bank;
59   DECLARE_WRITE8_MEMBER(namco_30test_led_w);
60   DECLARE_WRITE8_MEMBER(namco_30test_led_rank_w);
61   DECLARE_WRITE8_MEMBER(namco_30test_lamps_w);
62   DECLARE_READ8_MEMBER(namco_30test_mux_r);
63   DECLARE_READ8_MEMBER(hc11_mux_r);
64   DECLARE_WRITE8_MEMBER(hc11_mux_w);
5965};
6066
6167
6268static const UINT8 led_map[16] =
6369   { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x00 };
6470
65static WRITE8_HANDLER( namco_30test_led_w )
71WRITE8_MEMBER(namco_30test_state::namco_30test_led_w)
6672{
6773   output_set_digit_value(0 + offset * 2, led_map[(data & 0xf0) >> 4]);
6874   output_set_digit_value(1 + offset * 2, led_map[(data & 0x0f) >> 0]);
6975}
7076
71static WRITE8_HANDLER( namco_30test_led_rank_w )
77WRITE8_MEMBER(namco_30test_state::namco_30test_led_rank_w)
7278{
7379   output_set_digit_value(64 + offset * 2, led_map[(data & 0xf0) >> 4]);
7480   output_set_digit_value(65 + offset * 2, led_map[(data & 0x0f) >> 0]);
7581}
7682
77static WRITE8_HANDLER( namco_30test_lamps_w )
83WRITE8_MEMBER(namco_30test_state::namco_30test_lamps_w)
7884{
7985   // d0-d5: ranking, d6: game over, d7: assume marquee lamp
8086   for (int i = 0; i < 8; i++)
8187      output_set_lamp_value(i, data >> i & 1);
8288}
8389
84static READ8_HANDLER(namco_30test_mux_r)
90READ8_MEMBER(namco_30test_state::namco_30test_mux_r)
8591{
86   namco_30test_state *state = space->machine().driver_data<namco_30test_state>();
8792   UINT8 res = 0xff;
8893
89   switch(state->m_mux_data)
94   switch(m_mux_data)
9095   {
91      case 0x01: res = input_port_read(space->machine(), "IN0"); break;
92      case 0x02: res = input_port_read(space->machine(), "IN1"); break;
93      case 0x04: res = input_port_read(space->machine(), "IN2"); break;
94      case 0x08: res = input_port_read(space->machine(), "IN3"); break;
96      case 0x01: res = input_port_read(machine(), "IN0"); break;
97      case 0x02: res = input_port_read(machine(), "IN1"); break;
98      case 0x04: res = input_port_read(machine(), "IN2"); break;
99      case 0x08: res = input_port_read(machine(), "IN3"); break;
95100   }
96101
97102   return res;
98103}
99104
100static READ8_HANDLER(hc11_mux_r)
105READ8_MEMBER(namco_30test_state::hc11_mux_r)
101106{
102   namco_30test_state *state = space->machine().driver_data<namco_30test_state>();
103   return state->m_mux_data;
107   return m_mux_data;
104108}
105109
106static WRITE8_HANDLER(hc11_mux_w)
110WRITE8_MEMBER(namco_30test_state::hc11_mux_w)
107111{
108   namco_30test_state *state = space->machine().driver_data<namco_30test_state>();
109   state->m_mux_data = data;
112   m_mux_data = data;
110113}
111114
112115static READ8_DEVICE_HANDLER( hc11_okibank_r )
r14845r14846
127130
128131static ADDRESS_MAP_START( namco_30test_map, AS_PROGRAM, 8, namco_30test_state )
129132   AM_RANGE(0x0000, 0x003f) AM_RAM // internal I/O
130   AM_RANGE(0x007c, 0x007c) AM_READWRITE_LEGACY(hc11_mux_r,hc11_mux_w)
133   AM_RANGE(0x007c, 0x007c) AM_READWRITE(hc11_mux_r,hc11_mux_w)
131134   AM_RANGE(0x007e, 0x007e) AM_DEVREADWRITE_LEGACY("oki",hc11_okibank_r,hc11_okibank_w)
132135   AM_RANGE(0x0040, 0x007f) AM_RAM // more internal I/O, HC11 change pending
133136   AM_RANGE(0x0080, 0x037f) AM_RAM // internal RAM
134137   AM_RANGE(0x0d80, 0x0dbf) AM_RAM   // EEPROM read-back data goes there
135138   AM_RANGE(0x2000, 0x2000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
136139   /* 0x401e-0x401f: time */
137   AM_RANGE(0x4000, 0x401f) AM_WRITE_LEGACY(namco_30test_led_w) // 7-seg leds
140   AM_RANGE(0x4000, 0x401f) AM_WRITE(namco_30test_led_w) // 7-seg leds
138141   /* 0x6000: 1st place 7-seg led */
139142   /* 0x6001: 2nd place 7-seg led */
140143   /* 0x6002: 3rd place 7-seg led */
141144   /* 0x6003: current / last play score */
142145   /* 0x6004: lamps */
143   AM_RANGE(0x6000, 0x6003) AM_WRITE_LEGACY(namco_30test_led_rank_w)
144   AM_RANGE(0x6004, 0x6004) AM_WRITE_LEGACY(namco_30test_lamps_w)
146   AM_RANGE(0x6000, 0x6003) AM_WRITE(namco_30test_led_rank_w)
147   AM_RANGE(0x6004, 0x6004) AM_WRITE(namco_30test_lamps_w)
145148   AM_RANGE(0x8000, 0xffff) AM_ROM
146149ADDRESS_MAP_END
147150
148151static ADDRESS_MAP_START( namco_30test_io, AS_IO, 8, namco_30test_state )
149   AM_RANGE(MC68HC11_IO_PORTA,MC68HC11_IO_PORTA) AM_READ_LEGACY(namco_30test_mux_r)
152   AM_RANGE(MC68HC11_IO_PORTA,MC68HC11_IO_PORTA) AM_READ(namco_30test_mux_r)
150153//  AM_RANGE(MC68HC11_IO_PORTD,MC68HC11_IO_PORTD) AM_RAM
151154   AM_RANGE(MC68HC11_IO_PORTE,MC68HC11_IO_PORTE) AM_READ_PORT("SYSTEM")
152155ADDRESS_MAP_END
src/mame/drivers/lgp.c
r14845r14846
8080   UINT8 *m_tile_ram;
8181   UINT8 *m_tile_control_ram;
8282   emu_timer *m_irq_timer;
83   DECLARE_READ8_MEMBER(ldp_read);
84   DECLARE_WRITE8_MEMBER(ldp_write);
8385};
8486
8587
r14845r14846
122124
123125/* MEMORY HANDLERS */
124126/* Main Z80 R/W */
125static READ8_HANDLER(ldp_read)
127READ8_MEMBER(lgp_state::ldp_read)
126128{
127   lgp_state *state = space->machine().driver_data<lgp_state>();
128   return state->m_laserdisc->status_r();
129   return m_laserdisc->status_r();
129130}
130131
131static WRITE8_HANDLER(ldp_write)
132WRITE8_MEMBER(lgp_state::ldp_write)
132133{
133   lgp_state *state = space->machine().driver_data<lgp_state>();
134   state->m_laserdisc->data_w(data);
134   m_laserdisc->data_w(data);
135135}
136136
137137
r14845r14846
145145   AM_RANGE(0xe400,0xe7ff) AM_RAM AM_BASE(m_tile_control_ram)
146146
147147//  AM_RANGE(0xef00,0xef00) AM_READ_PORT("IN_TEST")
148   AM_RANGE(0xef80,0xef80) AM_READWRITE_LEGACY(ldp_read,ldp_write)
149   AM_RANGE(0xefb8,0xefb8) AM_READ_LEGACY(ldp_read)      /* Likely not right, calms it down though */
148   AM_RANGE(0xef80,0xef80) AM_READWRITE(ldp_read,ldp_write)
149   AM_RANGE(0xefb8,0xefb8) AM_READ(ldp_read)      /* Likely not right, calms it down though */
150150   AM_RANGE(0xefc0,0xefc0) AM_READ_PORT("DSWA")   /* Not tested */
151151   AM_RANGE(0xefc8,0xefc8) AM_READ_PORT("DSWB")
152152   AM_RANGE(0xefd0,0xefd0) AM_READ_PORT("DSWC")
src/mame/drivers/cliffhgr.c
r14845r14846
9999   UINT32 m_phillips_code;
100100
101101   emu_timer *m_irq_timer;
102   DECLARE_WRITE8_MEMBER(cliff_test_led_w);
103   DECLARE_WRITE8_MEMBER(cliff_port_bank_w);
104   DECLARE_READ8_MEMBER(cliff_port_r);
105   DECLARE_READ8_MEMBER(cliff_phillips_code_r);
106   DECLARE_WRITE8_MEMBER(cliff_phillips_clear_w);
107   DECLARE_WRITE8_MEMBER(cliff_coin_counter_w);
108   DECLARE_READ8_MEMBER(cliff_irq_ack_r);
109   DECLARE_WRITE8_MEMBER(cliff_ldwire_w);
102110};
103111
104112
105113/********************************************************/
106114
107static WRITE8_HANDLER( cliff_test_led_w )
115WRITE8_MEMBER(cliffhgr_state::cliff_test_led_w)
108116{
109   set_led_status(space->machine(), 0, offset ^ 1);
117   set_led_status(machine(), 0, offset ^ 1);
110118}
111119
112static WRITE8_HANDLER( cliff_port_bank_w )
120WRITE8_MEMBER(cliffhgr_state::cliff_port_bank_w)
113121{
114   cliffhgr_state *state = space->machine().driver_data<cliffhgr_state>();
115122
116123   /* writing 0x0f clears the LS174 flip flop */
117124   if (data == 0x0f)
118      state->m_port_bank = 0;
125      m_port_bank = 0;
119126   else
120      state->m_port_bank = data & 0x0f; /* only D3-D0 are connected */
127      m_port_bank = data & 0x0f; /* only D3-D0 are connected */
121128}
122129
123static READ8_HANDLER( cliff_port_r )
130READ8_MEMBER(cliffhgr_state::cliff_port_r)
124131{
125132   static const char *const banknames[] = { "BANK0", "BANK1", "BANK2", "BANK3", "BANK4", "BANK5", "BANK6" };
126133
127   cliffhgr_state *state = space->machine().driver_data<cliffhgr_state>();
128134
129   if (state->m_port_bank < 7)
130      return input_port_read(space->machine(),  banknames[state->m_port_bank]);
131135
136   if (m_port_bank < 7)
137      return input_port_read(machine(),  banknames[m_port_bank]);
138
132139   /* output is pulled up for non-mapped ports */
133140   return 0xff;
134141}
135142
136static READ8_HANDLER( cliff_phillips_code_r )
143READ8_MEMBER(cliffhgr_state::cliff_phillips_code_r)
137144{
138   cliffhgr_state *state = space->machine().driver_data<cliffhgr_state>();
139   return (state->m_phillips_code >> (8 * offset)) & 0xff;
145   return (m_phillips_code >> (8 * offset)) & 0xff;
140146}
141147
142static WRITE8_HANDLER( cliff_phillips_clear_w )
148WRITE8_MEMBER(cliffhgr_state::cliff_phillips_clear_w)
143149{
144150   /* reset serial to parallel converters */
145151}
146152
147static WRITE8_HANDLER( cliff_coin_counter_w )
153WRITE8_MEMBER(cliffhgr_state::cliff_coin_counter_w)
148154{
149   coin_counter_w(space->machine(), 0, (data & 0x40) ? 1 : 0 );
155   coin_counter_w(machine(), 0, (data & 0x40) ? 1 : 0 );
150156}
151157
152static READ8_HANDLER( cliff_irq_ack_r )
158READ8_MEMBER(cliffhgr_state::cliff_irq_ack_r)
153159{
154160   /* deassert IRQ on the CPU */
155   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
161   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
156162
157163   return 0x00;
158164}
r14845r14846
166172   // bit 4 (data & 0x10) is overlay related?
167173}
168174
169static WRITE8_HANDLER( cliff_ldwire_w )
175WRITE8_MEMBER(cliffhgr_state::cliff_ldwire_w)
170176{
171   cliffhgr_state *state = space->machine().driver_data<cliffhgr_state>();
172   state->m_laserdisc->control_w((data & 1) ? ASSERT_LINE : CLEAR_LINE);
177   m_laserdisc->control_w((data & 1) ? ASSERT_LINE : CLEAR_LINE);
173178}
174179
175180
r14845r14846
237242   AM_RANGE(0x44, 0x44) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write)
238243   AM_RANGE(0x45, 0x45) AM_DEVREAD("tms9928a", tms9928a_device, vram_read)
239244   AM_RANGE(0x46, 0x46) AM_DEVWRITE_LEGACY("discrete", cliff_sound_overlay_w)
240   AM_RANGE(0x50, 0x52) AM_READ_LEGACY(cliff_phillips_code_r)
241   AM_RANGE(0x53, 0x53) AM_READ_LEGACY(cliff_irq_ack_r)
245   AM_RANGE(0x50, 0x52) AM_READ(cliff_phillips_code_r)
246   AM_RANGE(0x53, 0x53) AM_READ(cliff_irq_ack_r)
242247   AM_RANGE(0x54, 0x54) AM_DEVWRITE("tms9928a", tms9928a_device, register_write)
243248   AM_RANGE(0x55, 0x55) AM_DEVREAD("tms9928a", tms9928a_device, register_read)
244   AM_RANGE(0x57, 0x57) AM_WRITE_LEGACY(cliff_phillips_clear_w)
245   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(cliff_port_bank_w)
246   AM_RANGE(0x62, 0x62) AM_READ_LEGACY(cliff_port_r)
249   AM_RANGE(0x57, 0x57) AM_WRITE(cliff_phillips_clear_w)
250   AM_RANGE(0x60, 0x60) AM_WRITE(cliff_port_bank_w)
251   AM_RANGE(0x62, 0x62) AM_READ(cliff_port_r)
247252   AM_RANGE(0x64, 0x64) AM_WRITENOP /* unused in schematics, may be used as timing delay for IR interface */
248   AM_RANGE(0x66, 0x66) AM_WRITE_LEGACY(cliff_ldwire_w)
249   AM_RANGE(0x68, 0x68) AM_WRITE_LEGACY(cliff_coin_counter_w)
253   AM_RANGE(0x66, 0x66) AM_WRITE(cliff_ldwire_w)
254   AM_RANGE(0x68, 0x68) AM_WRITE(cliff_coin_counter_w)
250255   AM_RANGE(0x6a, 0x6a) AM_WRITENOP /* /LAMP0 (Infrared?) */
251   AM_RANGE(0x6e, 0x6f) AM_WRITE_LEGACY(cliff_test_led_w)
256   AM_RANGE(0x6e, 0x6f) AM_WRITE(cliff_test_led_w)
252257ADDRESS_MAP_END
253258
254259
src/mame/drivers/multfish.c
r14845r14846
197197   UINT8 m_hopper;
198198
199199   UINT8 m_vid[multfish_VIDRAM_SIZE];
200   DECLARE_WRITE8_MEMBER(multfish_vid_w);
201   DECLARE_WRITE8_MEMBER(multfish_bank_w);
202   DECLARE_READ8_MEMBER(bankedram_r);
203   DECLARE_WRITE8_MEMBER(bankedram_w);
204   DECLARE_WRITE8_MEMBER(multfish_rambank_w);
205   DECLARE_READ8_MEMBER(ray_r);
206   DECLARE_WRITE8_MEMBER(multfish_hopper_w);
207   DECLARE_WRITE8_MEMBER(rollfr_hopper_w);
208   DECLARE_WRITE8_MEMBER(multfish_lamps1_w);
209   DECLARE_WRITE8_MEMBER(multfish_lamps2_w);
210   DECLARE_WRITE8_MEMBER(multfish_lamps3_w);
211   DECLARE_WRITE8_MEMBER(multfish_counters_w);
212   DECLARE_WRITE8_MEMBER(multfish_f3_w);
213   DECLARE_WRITE8_MEMBER(multfish_dispenable_w);
200214};
201215
202216static TILE_GET_INFO( get_multfish_tile_info )
r14845r14846
267281   return 0;
268282}
269283
270static WRITE8_HANDLER( multfish_vid_w )
284WRITE8_MEMBER(multfish_state::multfish_vid_w)
271285{
272   multfish_state *state = space->machine().driver_data<multfish_state>();
273286
274   state->m_vid[offset]=data;
287   m_vid[offset]=data;
275288
276289   // 0x0000 - 0x1fff is normal tilemap
277290   if (offset < 0x2000)
278291   {
279      state->m_tilemap->mark_tile_dirty((offset&0xfff)/2);
292      m_tilemap->mark_tile_dirty((offset&0xfff)/2);
280293
281294   }
282295   // 0x2000 - 0x2fff is for the reels
283296   else if (offset < 0x4000)
284297   {
285      state->m_reel_tilemap->mark_tile_dirty((offset&0x1fff)/2);
298      m_reel_tilemap->mark_tile_dirty((offset&0x1fff)/2);
286299   }
287300   else if (offset < 0x6000)
288301   {
289302      int r,g,b;
290303      int coldat;
291304
292      coldat = state->m_vid[(offset&0xfffe)] | (state->m_vid[(offset&0xfffe)^1] << 8);
305      coldat = m_vid[(offset&0xfffe)] | (m_vid[(offset&0xfffe)^1] << 8);
293306
294307      /* xor and bitswap palette */
295      switch (state->m_xor_paltype) {
308      switch (m_xor_paltype) {
296309         case 1:
297            coldat ^= state->m_xor_palette;
310            coldat ^= m_xor_palette;
298311            coldat ^= ((coldat&0x2) >>1) | ((coldat&0x80) >>3) ;
299312            coldat = BITSWAP16(coldat,10,15,5,13,8,12,11,2,0,4,7,14,9,3,1,6);
300313            break;
301314         case 2:
302                           coldat ^= state->m_xor_palette;
315                           coldat ^= m_xor_palette;
303316                           coldat ^= ((coldat&0x0001) <<1) ^ ((coldat&0x0010) <<1) ^ ((coldat&0x0010) <<2) ^ ((coldat&0x0020) <<1) ^ ((coldat&0x0080) >>1);
304317                           coldat = BITSWAP16(coldat,4,10,13,14,8,11,15,12,2,6,5,0,7,3,1,9);
305318            break;
r14845r14846
309322      b = ( (coldat &0x00e0)>> (5));
310323      b|= ( (coldat &0xe000)>> (8+5-3));
311324
312      palette_set_color_rgb(space->machine(), (offset-0x4000)/2, r<<3, g<<3, b<<2);
325      palette_set_color_rgb(machine(), (offset-0x4000)/2, r<<3, g<<3, b<<2);
313326   }
314327   else
315328   {
r14845r14846
317330   }
318331}
319332
320static WRITE8_HANDLER( multfish_bank_w )
333WRITE8_MEMBER(multfish_state::multfish_bank_w)
321334{
322   memory_set_bank(space->machine(), "bank1", data & 0x0f);
335   memory_set_bank(machine(), "bank1", data & 0x0f);
323336}
324337
325338static READ8_DEVICE_HANDLER( multfish_timekeeper_r )
r14845r14846
332345   timekeeper_w(device, offset + 0x6000, data);
333346}
334347
335static READ8_HANDLER( bankedram_r )
348READ8_MEMBER(multfish_state::bankedram_r)
336349{
337   multfish_state *state = space->machine().driver_data<multfish_state>();
338350
339   if ((state->m_rambk & 0x80) == 0x00)
351   if ((m_rambk & 0x80) == 0x00)
340352   {
341      return timekeeper_r(space->machine().device("m48t35"), offset + 0x2000*(state->m_rambk & 0x03));
353      return timekeeper_r(machine().device("m48t35"), offset + 0x2000*(m_rambk & 0x03));
342354   }
343355   else
344356   {
345      return state->m_vid[offset+0x2000*(state->m_rambk & 0x03)];
357      return m_vid[offset+0x2000*(m_rambk & 0x03)];
346358   }
347359
348360}
349361
350static WRITE8_HANDLER( bankedram_w )
362WRITE8_MEMBER(multfish_state::bankedram_w)
351363{
352   multfish_state *state = space->machine().driver_data<multfish_state>();
353364
354   if ((state->m_rambk & 0x80) == 0x00)
365   if ((m_rambk & 0x80) == 0x00)
355366   {
356      timekeeper_w(space->machine().device("m48t35"), offset + 0x2000*(state->m_rambk & 0x03), data);
367      timekeeper_w(machine().device("m48t35"), offset + 0x2000*(m_rambk & 0x03), data);
357368   }
358369   else
359370   {
360      multfish_vid_w(space, offset+0x2000*(state->m_rambk & 0x03), data);
371      multfish_vid_w(space, offset+0x2000*(m_rambk & 0x03), data);
361372   }
362373}
363374
364static WRITE8_HANDLER( multfish_rambank_w )
375WRITE8_MEMBER(multfish_state::multfish_rambank_w)
365376{
366   multfish_state *state = space->machine().driver_data<multfish_state>();
367377
368   state->m_rambk = data;
378   m_rambk = data;
369379}
370380
371381
372static READ8_HANDLER( ray_r )
382READ8_MEMBER(multfish_state::ray_r)
373383{
374384   // the games read the raster beam position as part of the hardware checks..
375385   // with a 6mhz clock and 640x480 resolution this seems to give the right results.
376   return space->machine().primary_screen->vpos();
386   return machine().primary_screen->vpos();
377387}
378388
379389static CUSTOM_INPUT( multfish_hopper_r )
r14845r14846
391401   }
392402}
393403
394static WRITE8_HANDLER( multfish_hopper_w )
404WRITE8_MEMBER(multfish_state::multfish_hopper_w)
395405{
396406/*  Port 0x33
397407
r14845r14846
400410    ---- -X-- Bill Acceptor Lock 24B
401411    ---X ---- Hopper Motor 33B
402412*/
403   multfish_state *state = space->machine().driver_data<multfish_state>();
404413
405   state->m_hopper_motor = data & 0x10;
406        coin_lockout_w(space->machine(), 0, data & 0x01);
407        coin_lockout_w(space->machine(), 1, data & 0x01);
408        coin_lockout_w(space->machine(), 2, data & 0x01);
409        coin_lockout_w(space->machine(), 3, data & 0x01);
410        coin_lockout_w(space->machine(), 4, data & 0x04);
411        coin_lockout_w(space->machine(), 5, data & 0x04);
412        coin_lockout_w(space->machine(), 6, data & 0x04);
413        coin_lockout_w(space->machine(), 7, data & 0x04);
414
415   m_hopper_motor = data & 0x10;
416        coin_lockout_w(machine(), 0, data & 0x01);
417        coin_lockout_w(machine(), 1, data & 0x01);
418        coin_lockout_w(machine(), 2, data & 0x01);
419        coin_lockout_w(machine(), 3, data & 0x01);
420        coin_lockout_w(machine(), 4, data & 0x04);
421        coin_lockout_w(machine(), 5, data & 0x04);
422        coin_lockout_w(machine(), 6, data & 0x04);
423        coin_lockout_w(machine(), 7, data & 0x04);
414424}
415425
416static WRITE8_HANDLER( rollfr_hopper_w )
426WRITE8_MEMBER(multfish_state::rollfr_hopper_w)
417427{
418428/*
419429    By default RollFruit use inverted coinlock bit.
420430*/
421   multfish_state *state = space->machine().driver_data<multfish_state>();
422431
423   state->m_hopper_motor = data & 0x10;
424        coin_lockout_w(space->machine(), 0, !data & 0x01);
425        coin_lockout_w(space->machine(), 1, !data & 0x01);
426        coin_lockout_w(space->machine(), 2, !data & 0x01);
427        coin_lockout_w(space->machine(), 3, !data & 0x01);
428        coin_lockout_w(space->machine(), 4, data & 0x04);
429        coin_lockout_w(space->machine(), 5, data & 0x04);
430        coin_lockout_w(space->machine(), 6, data & 0x04);
431        coin_lockout_w(space->machine(), 7, data & 0x04);
432
433   m_hopper_motor = data & 0x10;
434        coin_lockout_w(machine(), 0, !data & 0x01);
435        coin_lockout_w(machine(), 1, !data & 0x01);
436        coin_lockout_w(machine(), 2, !data & 0x01);
437        coin_lockout_w(machine(), 3, !data & 0x01);
438        coin_lockout_w(machine(), 4, data & 0x04);
439        coin_lockout_w(machine(), 5, data & 0x04);
440        coin_lockout_w(machine(), 6, data & 0x04);
441        coin_lockout_w(machine(), 7, data & 0x04);
432442}
433443
434444DRIVER_INIT( customl )
r14845r14846
669679}
670680
671681static ADDRESS_MAP_START( multfish_map, AS_PROGRAM, 8, multfish_state )
672   AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITE_LEGACY(multfish_vid_w)
682   AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITE(multfish_vid_w)
673683   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
674684   AM_RANGE(0xc000, 0xdfff) AM_DEVREADWRITE_LEGACY("m48t35", multfish_timekeeper_r, multfish_timekeeper_w)
675   AM_RANGE(0xe000, 0xffff) AM_READWRITE_LEGACY(bankedram_r, bankedram_w)
685   AM_RANGE(0xe000, 0xffff) AM_READWRITE(bankedram_r, bankedram_w)
676686ADDRESS_MAP_END
677687
678688// According to control panel the user buttons are arranged as
r14845r14846
820830INPUT_PORTS_END
821831
822832
823static WRITE8_HANDLER( multfish_lamps1_w )
833WRITE8_MEMBER(multfish_state::multfish_lamps1_w)
824834{
825835/*  Port 0x30
826836
r14845r14846
844854   output_set_lamp_value(0, ((data >> 7) & 1)); /* Bet/Double Lamp */
845855}
846856
847static WRITE8_HANDLER( multfish_lamps2_w )
857WRITE8_MEMBER(multfish_state::multfish_lamps2_w)
848858{
849859/*  Port 0x34
850860
r14845r14846
860870   output_set_lamp_value(10, ((data >> 4) & 1)); /* Upper Lamp Green */
861871}
862872
863static WRITE8_HANDLER( multfish_lamps3_w )
873WRITE8_MEMBER(multfish_state::multfish_lamps3_w)
864874{
865875/*  Port 0x35
866876
r14845r14846
870880   output_set_lamp_value(11, ((data >> 1) & 1)); /* Upper Lamp Red */
871881}
872882
873static WRITE8_HANDLER( multfish_counters_w )
883WRITE8_MEMBER(multfish_state::multfish_counters_w)
874884{
875885/*  Port 0x31
876886
r14845r14846
882892    -X-- ---- Key Out Counter 27A
883893    X--- ---- Total Bet Counter 28B
884894*/
885        coin_counter_w(space->machine(), 0, data & 0x01);
886        coin_counter_w(space->machine(), 1, data & 0x02);
887        coin_counter_w(space->machine(), 2, data & 0x04);
888        coin_counter_w(space->machine(), 3, data & 0x10);
889        coin_counter_w(space->machine(), 4, data & 0x40);
890        coin_counter_w(space->machine(), 5, data & 0x80);
895        coin_counter_w(machine(), 0, data & 0x01);
896        coin_counter_w(machine(), 1, data & 0x02);
897        coin_counter_w(machine(), 2, data & 0x04);
898        coin_counter_w(machine(), 3, data & 0x10);
899        coin_counter_w(machine(), 4, data & 0x40);
900        coin_counter_w(machine(), 5, data & 0x80);
891901}
892902
893static WRITE8_HANDLER( multfish_f3_w )
903WRITE8_MEMBER(multfish_state::multfish_f3_w)
894904{
895905   //popmessage("multfish_f3_w %02x",data);
896906}
897907
898static WRITE8_HANDLER( multfish_dispenable_w )
908WRITE8_MEMBER(multfish_state::multfish_dispenable_w)
899909{
900   multfish_state *state = space->machine().driver_data<multfish_state>();
901910   //popmessage("multfish_f4_w %02x",data); // display enable?
902   state->m_disp_enable = data;
911   m_disp_enable = data;
903912}
904913
905914static ADDRESS_MAP_START( multfish_portmap, AS_IO, 8, multfish_state )
r14845r14846
914923   AM_RANGE(0x17, 0x17) AM_READ_PORT("IN7")
915924
916925   /* Write ports not hooked up yet */
917   AM_RANGE(0x30, 0x30) AM_WRITE_LEGACY(multfish_lamps1_w)
918        AM_RANGE(0x31, 0x31) AM_WRITE_LEGACY(multfish_counters_w)
926   AM_RANGE(0x30, 0x30) AM_WRITE(multfish_lamps1_w)
927        AM_RANGE(0x31, 0x31) AM_WRITE(multfish_counters_w)
919928//  AM_RANGE(0x32, 0x32) AM_WRITE_LEGACY(multfish_port32_w)
920   AM_RANGE(0x33, 0x33) AM_WRITE_LEGACY(multfish_hopper_w)
921   AM_RANGE(0x34, 0x34) AM_WRITE_LEGACY(multfish_lamps2_w)
922   AM_RANGE(0x35, 0x35) AM_WRITE_LEGACY(multfish_lamps3_w)
929   AM_RANGE(0x33, 0x33) AM_WRITE(multfish_hopper_w)
930   AM_RANGE(0x34, 0x34) AM_WRITE(multfish_lamps2_w)
931   AM_RANGE(0x35, 0x35) AM_WRITE(multfish_lamps3_w)
923932//  AM_RANGE(0x36, 0x36) AM_WRITE_LEGACY(multfish_port36_w)
924933   AM_RANGE(0x37, 0x37) AM_WRITE_LEGACY(watchdog_reset_w)
925934   AM_RANGE(0x38, 0x38) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
926935   AM_RANGE(0x39, 0x39) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
927936   AM_RANGE(0x3a, 0x3a) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
928937
929   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(multfish_dispenable_w) // display enable mirror for lottery sets
938   AM_RANGE(0x60, 0x60) AM_WRITE(multfish_dispenable_w) // display enable mirror for lottery sets
930939
931   AM_RANGE(0x90, 0x90) AM_READ_LEGACY(ray_r)
940   AM_RANGE(0x90, 0x90) AM_READ(ray_r)
932941
933   AM_RANGE(0xa0, 0xa0)  AM_WRITE_LEGACY(multfish_bank_w) // Crazy Monkey 2 banking
934   AM_RANGE(0xb0, 0xb0)  AM_WRITE_LEGACY(multfish_bank_w) // Fruit Cocktail 2 lottery banking
935   AM_RANGE(0xb1, 0xb1)  AM_WRITE_LEGACY(multfish_bank_w) // Crazy Monkey Ent banking
936   AM_RANGE(0xb2, 0xb2)  AM_WRITE_LEGACY(multfish_bank_w) // Lacky Haunter Ent banking
937   AM_RANGE(0xb6, 0xb6)  AM_WRITE_LEGACY(multfish_bank_w) // Resident Ent banking
938   AM_RANGE(0xbf, 0xbf)  AM_WRITE_LEGACY(multfish_bank_w) // Gnome Ent banking
939   AM_RANGE(0xc7, 0xc7)  AM_WRITE_LEGACY(multfish_bank_w) // Resident lottery banking
940   AM_RANGE(0xca, 0xca)  AM_WRITE_LEGACY(multfish_bank_w) // Gnome lottery banking
941   AM_RANGE(0xcb, 0xcb)  AM_WRITE_LEGACY(multfish_bank_w) // Keks lottery banking
942   AM_RANGE(0xcc, 0xcc)  AM_WRITE_LEGACY(multfish_bank_w) // Sweet Life 2 lottery banking
943   AM_RANGE(0xcd, 0xcd)  AM_WRITE_LEGACY(multfish_bank_w) // Island 2 lottery banking
944   AM_RANGE(0xce, 0xce)  AM_WRITE_LEGACY(multfish_bank_w) // Pirate 2 lottery banking
945   AM_RANGE(0xd0, 0xd0)  AM_WRITE_LEGACY(multfish_bank_w) // rollfr_4 banking
946   AM_RANGE(0xe1, 0xe1)  AM_WRITE_LEGACY(multfish_bank_w) // Island 2 banking
947   AM_RANGE(0xe5, 0xe5)  AM_WRITE_LEGACY(multfish_bank_w) // Gnome banking
948   AM_RANGE(0xe8, 0xe8)  AM_WRITE_LEGACY(multfish_bank_w) // Sweet Life 2 banking
949   AM_RANGE(0xea, 0xea)  AM_WRITE_LEGACY(multfish_bank_w) // Fruit Cocktail 2 banking
950   AM_RANGE(0xec, 0xec)  AM_WRITE_LEGACY(multfish_bank_w) // Crazy Monkey lottery banking
942   AM_RANGE(0xa0, 0xa0)  AM_WRITE(multfish_bank_w) // Crazy Monkey 2 banking
943   AM_RANGE(0xb0, 0xb0)  AM_WRITE(multfish_bank_w) // Fruit Cocktail 2 lottery banking
944   AM_RANGE(0xb1, 0xb1)  AM_WRITE(multfish_bank_w) // Crazy Monkey Ent banking
945   AM_RANGE(0xb2, 0xb2)  AM_WRITE(multfish_bank_w) // Lacky Haunter Ent banking
946   AM_RANGE(0xb6, 0xb6)  AM_WRITE(multfish_bank_w) // Resident Ent banking
947   AM_RANGE(0xbf, 0xbf)  AM_WRITE(multfish_bank_w) // Gnome Ent banking
948   AM_RANGE(0xc7, 0xc7)  AM_WRITE(multfish_bank_w) // Resident lottery banking
949   AM_RANGE(0xca, 0xca)  AM_WRITE(multfish_bank_w) // Gnome lottery banking
950   AM_RANGE(0xcb, 0xcb)  AM_WRITE(multfish_bank_w) // Keks lottery banking
951   AM_RANGE(0xcc, 0xcc)  AM_WRITE(multfish_bank_w) // Sweet Life 2 lottery banking
952   AM_RANGE(0xcd, 0xcd)  AM_WRITE(multfish_bank_w) // Island 2 lottery banking
953   AM_RANGE(0xce, 0xce)  AM_WRITE(multfish_bank_w) // Pirate 2 lottery banking
954   AM_RANGE(0xd0, 0xd0)  AM_WRITE(multfish_bank_w) // rollfr_4 banking
955   AM_RANGE(0xe1, 0xe1)  AM_WRITE(multfish_bank_w) // Island 2 banking
956   AM_RANGE(0xe5, 0xe5)  AM_WRITE(multfish_bank_w) // Gnome banking
957   AM_RANGE(0xe8, 0xe8)  AM_WRITE(multfish_bank_w) // Sweet Life 2 banking
958   AM_RANGE(0xea, 0xea)  AM_WRITE(multfish_bank_w) // Fruit Cocktail 2 banking
959   AM_RANGE(0xec, 0xec)  AM_WRITE(multfish_bank_w) // Crazy Monkey lottery banking
951960
952   AM_RANGE(0xf0, 0xf0)  AM_WRITE_LEGACY(multfish_bank_w) // Gold Fish banking
953   AM_RANGE(0xf1, 0xf1)  AM_WRITE_LEGACY(multfish_rambank_w)
954   AM_RANGE(0xf3, 0xf3)  AM_WRITE_LEGACY(multfish_f3_w) // from 00->01 at startup, irq enable maybe?
955   AM_RANGE(0xf4, 0xf4)  AM_WRITE_LEGACY(multfish_dispenable_w) // display enable
961   AM_RANGE(0xf0, 0xf0)  AM_WRITE(multfish_bank_w) // Gold Fish banking
962   AM_RANGE(0xf1, 0xf1)  AM_WRITE(multfish_rambank_w)
963   AM_RANGE(0xf3, 0xf3)  AM_WRITE(multfish_f3_w) // from 00->01 at startup, irq enable maybe?
964   AM_RANGE(0xf4, 0xf4)  AM_WRITE(multfish_dispenable_w) // display enable
956965
957966   /* mirrors of the rom banking */
958   AM_RANGE(0xf8, 0xfd)  AM_WRITE_LEGACY(multfish_bank_w)
967   AM_RANGE(0xf8, 0xfd)  AM_WRITE(multfish_bank_w)
959968ADDRESS_MAP_END
960969
961970static ADDRESS_MAP_START( rollfr_portmap, AS_IO, 8, multfish_state )
962   AM_RANGE(0x33, 0x33) AM_WRITE_LEGACY(rollfr_hopper_w)
971   AM_RANGE(0x33, 0x33) AM_WRITE(rollfr_hopper_w)
963972   AM_IMPORT_FROM(multfish_portmap)
964973ADDRESS_MAP_END
965974
src/mame/drivers/timetrv.c
r14845r14846
3535
3636   UINT8 *m_led_vram_lo;
3737   UINT8 *m_led_vram_hi;
38   DECLARE_READ8_MEMBER(test1_r);
39   DECLARE_READ8_MEMBER(test2_r);
40   DECLARE_READ8_MEMBER(in_r);
41   DECLARE_READ8_MEMBER(ld_r);
3842};
3943
4044
r14845r14846
5155   return 0;
5256}
5357
54static READ8_HANDLER( test1_r )
58READ8_MEMBER(timetrv_state::test1_r)
5559{
56   return input_port_read(space->machine(), "IN0");//space->machine().rand();
60   return input_port_read(machine(), "IN0");//machine().rand();
5761}
5862
59static READ8_HANDLER( test2_r )
63READ8_MEMBER(timetrv_state::test2_r)
6064{
6165   /*bit 7,eeprom read bit*/
62   return (input_port_read(space->machine(), "IN1") & 0x7f);//space->machine().rand();
66   return (input_port_read(machine(), "IN1") & 0x7f);//machine().rand();
6367}
6468
6569
66static READ8_HANDLER( in_r )
70READ8_MEMBER(timetrv_state::in_r)
6771{
6872   return 0xff;
6973}
7074
71static READ8_HANDLER( ld_r )
75READ8_MEMBER(timetrv_state::ld_r)
7276{
73   return space->machine().rand();
77   return machine().rand();
7478}
7579
7680static ADDRESS_MAP_START( timetrv_map, AS_PROGRAM, 8, timetrv_state )
r14845r14846
8185
8286static ADDRESS_MAP_START( timetrv_io, AS_IO, 8, timetrv_state )
8387   AM_RANGE(0x0122, 0x0123) AM_WRITENOP //eeprom write bits
84   AM_RANGE(0x1000, 0x1000) AM_READ_LEGACY(test1_r) //inputs
85   AM_RANGE(0x1001, 0x1001) AM_READ_LEGACY(test2_r) //eeprom read bit + inputs
88   AM_RANGE(0x1000, 0x1000) AM_READ(test1_r) //inputs
89   AM_RANGE(0x1001, 0x1001) AM_READ(test2_r) //eeprom read bit + inputs
8690
87   AM_RANGE(0x1080, 0x1082) AM_READ_LEGACY(in_r) //dsw
91   AM_RANGE(0x1080, 0x1082) AM_READ(in_r) //dsw
8892   AM_RANGE(0x1100, 0x1105) AM_WRITENOP //laserdisc write area
89   AM_RANGE(0x1100, 0x1105) AM_READ_LEGACY(ld_r) //5 -> laserdisc read status
93   AM_RANGE(0x1100, 0x1105) AM_READ(ld_r) //5 -> laserdisc read status
9094   AM_RANGE(0x1180, 0x1187) AM_RAM AM_BASE(m_led_vram_lo)//led string,part 1
9195   AM_RANGE(0x1200, 0x1207) AM_RAM AM_BASE(m_led_vram_hi)//led string,part 2
9296   AM_RANGE(0xff80, 0xffff) AM_RAM //am80188-em-like cpu internal regs?
src/mame/drivers/quizo.c
r14845r14846
3737   UINT8 *m_videoram;
3838   UINT8 m_port60;
3939   UINT8 m_port70;
40   DECLARE_WRITE8_MEMBER(vram_w);
41   DECLARE_WRITE8_MEMBER(port70_w);
42   DECLARE_WRITE8_MEMBER(port60_w);
4043};
4144
4245
r14845r14846
105108   return 0;
106109}
107110
108static WRITE8_HANDLER(vram_w)
111WRITE8_MEMBER(quizo_state::vram_w)
109112{
110   quizo_state *state = space->machine().driver_data<quizo_state>();
111   UINT8 *videoram = state->m_videoram;
112   int bank=(state->m_port70&8)?1:0;
113   UINT8 *videoram = m_videoram;
114   int bank=(m_port70&8)?1:0;
113115   videoram[offset+bank*0x4000]=data;
114116}
115117
116static WRITE8_HANDLER(port70_w)
118WRITE8_MEMBER(quizo_state::port70_w)
117119{
118   quizo_state *state = space->machine().driver_data<quizo_state>();
119   state->m_port70=data;
120   m_port70=data;
120121}
121122
122static WRITE8_HANDLER(port60_w)
123WRITE8_MEMBER(quizo_state::port60_w)
123124{
124   quizo_state *state = space->machine().driver_data<quizo_state>();
125125   if(data>9)
126126   {
127      logerror("ROMBANK %x @ %x\n", data, cpu_get_pc(&space->device()));
127      logerror("ROMBANK %x @ %x\n", data, cpu_get_pc(&space.device()));
128128      data=0;
129129   }
130   state->m_port60=data;
131   memory_set_bankptr(space->machine(),  "bank1", &space->machine().region("user1")->base()[rombankLookup[data]*0x4000] );
130   m_port60=data;
131   memory_set_bankptr(machine(),  "bank1", &machine().region("user1")->base()[rombankLookup[data]*0x4000] );
132132}
133133
134134static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, quizo_state )
135135   AM_RANGE(0x0000, 0x3fff) AM_ROM
136136   AM_RANGE(0x4000, 0x47ff) AM_RAM
137137   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
138   AM_RANGE(0xc000, 0xffff) AM_WRITE_LEGACY(vram_w)
138   AM_RANGE(0xc000, 0xffff) AM_WRITE(vram_w)
139139
140140ADDRESS_MAP_END
141141
r14845r14846
145145   AM_RANGE(0x10, 0x10) AM_READ_PORT("IN1")
146146   AM_RANGE(0x40, 0x40) AM_READ_PORT("IN2")
147147   AM_RANGE(0x50, 0x51) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
148   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(port60_w)
149   AM_RANGE(0x70, 0x70) AM_WRITE_LEGACY(port70_w)
148   AM_RANGE(0x60, 0x60) AM_WRITE(port60_w)
149   AM_RANGE(0x70, 0x70) AM_WRITE(port70_w)
150150ADDRESS_MAP_END
151151
152152static INPUT_PORTS_START( quizo )
src/mame/drivers/bfm_sc2.c
r14845r14846
228228   int m_e2dummywrite;
229229   int m_e2data_to_read;
230230   UINT8 m_codec_data[256];
231   DECLARE_WRITE8_MEMBER(bankswitch_w);
232   DECLARE_WRITE8_MEMBER(reel12_vid_w);
233   DECLARE_WRITE8_MEMBER(reel12_w);
234   DECLARE_WRITE8_MEMBER(reel34_w);
235   DECLARE_WRITE8_MEMBER(reel56_w);
236   DECLARE_WRITE8_MEMBER(mmtr_w);
237   DECLARE_WRITE8_MEMBER(mux_output_w);
238   DECLARE_READ8_MEMBER(mux_input_r);
239   DECLARE_WRITE8_MEMBER(unlock_w);
240   DECLARE_WRITE8_MEMBER(dimas_w);
241   DECLARE_WRITE8_MEMBER(dimcnt_w);
242   DECLARE_WRITE8_MEMBER(unknown_w);
243   DECLARE_WRITE8_MEMBER(volume_override_w);
244   DECLARE_READ8_MEMBER(vfd_status_hop_r);
245   DECLARE_WRITE8_MEMBER(expansion_latch_w);
246   DECLARE_READ8_MEMBER(expansion_latch_r);
247   DECLARE_WRITE8_MEMBER(muxena_w);
248   DECLARE_WRITE8_MEMBER(timerirq_w);
249   DECLARE_READ8_MEMBER(timerirqclr_r);
250   DECLARE_READ8_MEMBER(irqstatus_r);
251   DECLARE_WRITE8_MEMBER(coininhib_w);
252   DECLARE_READ8_MEMBER(coin_input_r);
253   DECLARE_WRITE8_MEMBER(payout_latch_w);
254   DECLARE_WRITE8_MEMBER(payout_triac_w);
255   DECLARE_WRITE8_MEMBER(payout_select_w);
256   DECLARE_WRITE8_MEMBER(vfd2_data_w);
257   DECLARE_WRITE8_MEMBER(vfd_reset_w);
258   DECLARE_READ8_MEMBER(uart1stat_r);
259   DECLARE_READ8_MEMBER(uart1data_r);
260   DECLARE_WRITE8_MEMBER(uart1ctrl_w);
261   DECLARE_WRITE8_MEMBER(uart1data_w);
262   DECLARE_READ8_MEMBER(uart2stat_r);
263   DECLARE_READ8_MEMBER(uart2data_r);
264   DECLARE_WRITE8_MEMBER(uart2ctrl_w);
265   DECLARE_WRITE8_MEMBER(uart2data_w);
266   DECLARE_WRITE8_MEMBER(vid_uart_tx_w);
267   DECLARE_WRITE8_MEMBER(vid_uart_ctrl_w);
268   DECLARE_READ8_MEMBER(vid_uart_rx_r);
269   DECLARE_READ8_MEMBER(vid_uart_ctrl_r);
270   DECLARE_READ8_MEMBER(key_r);
271   DECLARE_READ8_MEMBER(vfd_status_r);
272   DECLARE_WRITE8_MEMBER(vfd1_data_w);
273   DECLARE_WRITE8_MEMBER(e2ram_w);
274   DECLARE_READ8_MEMBER(direct_input_r);
275   DECLARE_READ8_MEMBER(sc3_expansion_r);
276   DECLARE_WRITE8_MEMBER(sc3_expansion_w);
277   int recdata(int changed, int data);
231278};
232279
233280
r14845r14846
427474
428475///////////////////////////////////////////////////////////////////////////
429476
430static WRITE8_HANDLER( bankswitch_w )
477WRITE8_MEMBER(bfm_sc2_state::bankswitch_w)
431478{
432   memory_set_bank(space->machine(), "bank1",data & 0x03);
479   memory_set_bank(machine(), "bank1",data & 0x03);
433480}
434481
435482///////////////////////////////////////////////////////////////////////////
r14845r14846
450497
451498///////////////////////////////////////////////////////////////////////////
452499
453static WRITE8_HANDLER( reel12_vid_w )  // in a video cabinet this is used to drive a hopper
500WRITE8_MEMBER(bfm_sc2_state::reel12_vid_w)// in a video cabinet this is used to drive a hopper
454501{
455   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
456   state->m_reel12_latch = data;
502   m_reel12_latch = data;
457503
458   if ( state->m_has_hopper )
504   if ( m_has_hopper )
459505   {
460      int oldhop = state->m_hopper_running;
506      int oldhop = m_hopper_running;
461507
462508      if ( data & 0x01 )
463509      { // hopper power
464510         if ( data & 0x02 )
465511         {
466            state->m_hopper_running    = 1;
512            m_hopper_running    = 1;
467513         }
468514         else
469515         {
470            state->m_hopper_running    = 0;
516            m_hopper_running    = 0;
471517         }
472518      }
473519      else
474520      {
475         //state->m_hopper_coin_sense = 0;
476         state->m_hopper_running    = 0;
521         //m_hopper_coin_sense = 0;
522         m_hopper_running    = 0;
477523      }
478524
479      if ( oldhop != state->m_hopper_running )
525      if ( oldhop != m_hopper_running )
480526      {
481         state->m_hopper_coin_sense = 0;
482         oldhop = state->m_hopper_running;
527         m_hopper_coin_sense = 0;
528         oldhop = m_hopper_running;
483529      }
484530   }
485531}
486532
487533
488534/* Reels 1 and 2 */
489static WRITE8_HANDLER( reel12_w )
535WRITE8_MEMBER(bfm_sc2_state::reel12_w)
490536{
491   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
492   state->m_reel12_latch = data;
537   m_reel12_latch = data;
493538
494   if ( stepper_update(0, data&0x0f   ) ) state->m_reel_changed |= 0x01;
495   if ( stepper_update(1, (data>>4))&0x0f ) state->m_reel_changed |= 0x02;
539   if ( stepper_update(0, data&0x0f   ) ) m_reel_changed |= 0x01;
540   if ( stepper_update(1, (data>>4))&0x0f ) m_reel_changed |= 0x02;
496541
497   if ( stepper_optic_state(0) ) state->m_optic_pattern |=  0x01;
498   else                          state->m_optic_pattern &= ~0x01;
499   if ( stepper_optic_state(1) ) state->m_optic_pattern |=  0x02;
500   else                          state->m_optic_pattern &= ~0x02;
542   if ( stepper_optic_state(0) ) m_optic_pattern |=  0x01;
543   else                          m_optic_pattern &= ~0x01;
544   if ( stepper_optic_state(1) ) m_optic_pattern |=  0x02;
545   else                          m_optic_pattern &= ~0x02;
501546
502547   awp_draw_reel(0);
503548   awp_draw_reel(1);
504549}
505550
506static WRITE8_HANDLER( reel34_w )
551WRITE8_MEMBER(bfm_sc2_state::reel34_w)
507552{
508   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
509   state->m_reel34_latch = data;
553   m_reel34_latch = data;
510554
511   if ( stepper_update(2, data&0x0f ) ) state->m_reel_changed |= 0x04;
512   if ( stepper_update(3, (data>>4)&0x0f) ) state->m_reel_changed |= 0x08;
555   if ( stepper_update(2, data&0x0f ) ) m_reel_changed |= 0x04;
556   if ( stepper_update(3, (data>>4)&0x0f) ) m_reel_changed |= 0x08;
513557
514   if ( stepper_optic_state(2) ) state->m_optic_pattern |=  0x04;
515   else                          state->m_optic_pattern &= ~0x04;
516   if ( stepper_optic_state(3) ) state->m_optic_pattern |=  0x08;
517   else                          state->m_optic_pattern &= ~0x08;
558   if ( stepper_optic_state(2) ) m_optic_pattern |=  0x04;
559   else                          m_optic_pattern &= ~0x04;
560   if ( stepper_optic_state(3) ) m_optic_pattern |=  0x08;
561   else                          m_optic_pattern &= ~0x08;
518562
519563   awp_draw_reel(2);
520564   awp_draw_reel(3);
r14845r14846
522566
523567///////////////////////////////////////////////////////////////////////////
524568
525static WRITE8_HANDLER( reel56_w )
569WRITE8_MEMBER(bfm_sc2_state::reel56_w)
526570{
527   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
528   state->m_reel56_latch = data;
571   m_reel56_latch = data;
529572
530   if ( stepper_update(4, data&0x0f   ) ) state->m_reel_changed |= 0x10;
531   if ( stepper_update(5, (data>>4)&0x0f) ) state->m_reel_changed |= 0x20;
573   if ( stepper_update(4, data&0x0f   ) ) m_reel_changed |= 0x10;
574   if ( stepper_update(5, (data>>4)&0x0f) ) m_reel_changed |= 0x20;
532575
533   if ( stepper_optic_state(4) ) state->m_optic_pattern |=  0x10;
534   else                          state->m_optic_pattern &= ~0x10;
535   if ( stepper_optic_state(5) ) state->m_optic_pattern |=  0x20;
536   else                          state->m_optic_pattern &= ~0x20;
576   if ( stepper_optic_state(4) ) m_optic_pattern |=  0x10;
577   else                          m_optic_pattern &= ~0x10;
578   if ( stepper_optic_state(5) ) m_optic_pattern |=  0x20;
579   else                          m_optic_pattern &= ~0x20;
537580
538581   awp_draw_reel(4);
539582   awp_draw_reel(5);
r14845r14846
545588// mechanical meters //////////////////////////////////////////////////////
546589///////////////////////////////////////////////////////////////////////////
547590
548static WRITE8_HANDLER( mmtr_w )
591WRITE8_MEMBER(bfm_sc2_state::mmtr_w)
549592{
550   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
551593   int i;
552   int  changed = state->m_mmtr_latch ^ data;
594   int  changed = m_mmtr_latch ^ data;
553595
554   state->m_mmtr_latch = data;
596   m_mmtr_latch = data;
555597
556598   for (i = 0; i<8; i++)
557599   {
r14845r14846
560602         MechMtr_update(i, data & (1 << i) );
561603      }
562604   }
563   if ( data & 0x1F ) cputag_set_input_line(space->machine(), "maincpu", M6809_FIRQ_LINE, ASSERT_LINE );
605   if ( data & 0x1F ) cputag_set_input_line(machine(), "maincpu", M6809_FIRQ_LINE, ASSERT_LINE );
564606}
565607
566608///////////////////////////////////////////////////////////////////////////
567609
568static WRITE8_HANDLER( mux_output_w )
610WRITE8_MEMBER(bfm_sc2_state::mux_output_w)
569611{
570612   int i;
571613   int off = offset<<3;
r14845r14846
577619
578620///////////////////////////////////////////////////////////////////////////
579621
580static READ8_HANDLER( mux_input_r )
622READ8_MEMBER(bfm_sc2_state::mux_input_r)
581623{
582   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
583624   int result = 0xFF,t1,t2;
584625   static const char *const port[] = { "STROBE0", "STROBE1", "STROBE2", "STROBE3", "STROBE4", "STROBE5", "STROBE6", "STROBE7", "STROBE8", "STROBE9", "STROBE10", "STROBE11" };
585626
586627   if (offset < 8)
587628   {
588629      int idx = (offset & 4) ? 4 : 8;
589      t1 = state->m_input_override[offset];   // strobe 0-7 data 0-4
590      t2 = state->m_input_override[offset+idx];   // strobe 8-B data 0-4
630      t1 = m_input_override[offset];   // strobe 0-7 data 0-4
631      t2 = m_input_override[offset+idx];   // strobe 8-B data 0-4
591632
592      t1 = (state->m_sc2_Inputs[offset]   & t1) | ( ( input_port_read(space->machine(), port[offset])   & ~t1) & 0x1F);
633      t1 = (m_sc2_Inputs[offset]   & t1) | ( ( input_port_read(machine(), port[offset])   & ~t1) & 0x1F);
593634      if (idx == 8)
594         t2 = (state->m_sc2_Inputs[offset+8] & t2) | ( ( input_port_read(space->machine(), port[offset+8]) & ~t2) << 5);
635         t2 = (m_sc2_Inputs[offset+8] & t2) | ( ( input_port_read(machine(), port[offset+8]) & ~t2) << 5);
595636      else
596         t2 =  (state->m_sc2_Inputs[offset+4] & t2) | ( ( ( input_port_read(space->machine(), port[offset+4]) & ~t2) << 2) & 0x60);
637         t2 =  (m_sc2_Inputs[offset+4] & t2) | ( ( ( input_port_read(machine(), port[offset+4]) & ~t2) << 2) & 0x60);
597638
598      state->m_sc2_Inputs[offset]   = (state->m_sc2_Inputs[offset]   & ~0x1F) | t1;
599      state->m_sc2_Inputs[offset+idx] = (state->m_sc2_Inputs[offset+idx] & ~0x60) | t2;
639      m_sc2_Inputs[offset]   = (m_sc2_Inputs[offset]   & ~0x1F) | t1;
640      m_sc2_Inputs[offset+idx] = (m_sc2_Inputs[offset+idx] & ~0x60) | t2;
600641      result = t1 | t2;
601642   }
602643
r14845r14846
605646
606647///////////////////////////////////////////////////////////////////////////
607648
608static WRITE8_HANDLER( unlock_w )
649WRITE8_MEMBER(bfm_sc2_state::unlock_w)
609650{
610651}
611652
612653///////////////////////////////////////////////////////////////////////////
613654
614static WRITE8_HANDLER( dimas_w )
655WRITE8_MEMBER(bfm_sc2_state::dimas_w)
615656{
616657}
617658
618659///////////////////////////////////////////////////////////////////////////
619660
620static WRITE8_HANDLER( dimcnt_w )
661WRITE8_MEMBER(bfm_sc2_state::dimcnt_w)
621662{
622663}
623664
624665///////////////////////////////////////////////////////////////////////////
625666
626static WRITE8_HANDLER( unknown_w )
667WRITE8_MEMBER(bfm_sc2_state::unknown_w)
627668{
628669}
629670
630671///////////////////////////////////////////////////////////////////////////
631672
632static WRITE8_HANDLER( volume_override_w )
673WRITE8_MEMBER(bfm_sc2_state::volume_override_w)
633674{
634   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
635   int old = state->m_volume_override;
675   int old = m_volume_override;
636676
637   state->m_volume_override = data?1:0;
677   m_volume_override = data?1:0;
638678
639   if ( old != state->m_volume_override )
679   if ( old != m_volume_override )
640680   {
641      ym2413_device *ym = space->machine().device<ym2413_device>("ymsnd");
642      upd7759_device *upd = space->machine().device<upd7759_device>("upd");
643      float percent = state->m_volume_override? 1.0f : (32-state->m_global_volume)/32.0f;
681      ym2413_device *ym = machine().device<ym2413_device>("ymsnd");
682      upd7759_device *upd = machine().device<upd7759_device>("upd");
683      float percent = m_volume_override? 1.0f : (32-m_global_volume)/32.0f;
644684
645685      ym->set_output_gain(0, percent);
646686      ym->set_output_gain(1, percent);
r14845r14846
675715
676716///////////////////////////////////////////////////////////////////////////
677717
678static READ8_HANDLER( vfd_status_hop_r )   // on video games, hopper inputs are connected to this
718READ8_MEMBER(bfm_sc2_state::vfd_status_hop_r)// on video games, hopper inputs are connected to this
679719{
680   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
681720   // b7 = NEC busy
682721   // b6 = alpha busy (also matrix board)
683722   // b5 - b0 = reel optics
684723
685724   int result = 0;
686725
687   if ( state->m_has_hopper )
726   if ( m_has_hopper )
688727   {
689728      result |= 0x04; // hopper high level
690729      result |= 0x08; // hopper low  level
691730
692731      result |= 0x01|0x02;
693732
694      if ( state->m_hopper_running )
733      if ( m_hopper_running )
695734      {
696735         result &= ~0x01;                          // set motor running input
697736
698         if ( state->m_timercnt & 0x04 ) state->m_hopper_coin_sense ^= 1;     // toggle coin seen
737         if ( m_timercnt & 0x04 ) m_hopper_coin_sense ^= 1;     // toggle coin seen
699738
700         if ( state->m_hopper_coin_sense ) result &= ~0x02;        // update coin seen input
739         if ( m_hopper_coin_sense ) result &= ~0x02;        // update coin seen input
701740      }
702741   }
703742
704   if ( !upd7759_busy_r(space->machine().device("upd")) ) result |= 0x80;           // update sound busy input
743   if ( !upd7759_busy_r(machine().device("upd")) ) result |= 0x80;           // update sound busy input
705744
706745   return result;
707746}
708747
709748///////////////////////////////////////////////////////////////////////////
710749
711static WRITE8_HANDLER( expansion_latch_w )
750WRITE8_MEMBER(bfm_sc2_state::expansion_latch_w)
712751{
713   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
714   int changed = state->m_expansion_latch^data;
752   int changed = m_expansion_latch^data;
715753
716   state->m_expansion_latch = data;
754   m_expansion_latch = data;
717755
718756   // bit0,  1 = lamp mux disabled, 0 = lamp mux enabled
719757   // bit1,  ? used in Del's millions
r14845r14846
730768      { // changed from high to low,
731769         if ( !(data & 0x08) )
732770         {
733            if ( state->m_global_volume < 31 ) state->m_global_volume++; //0-31 expressed as 1-32
771            if ( m_global_volume < 31 ) m_global_volume++; //0-31 expressed as 1-32
734772         }
735773         else
736774         {
737            if ( state->m_global_volume > 0  ) state->m_global_volume--;
775            if ( m_global_volume > 0  ) m_global_volume--;
738776         }
739777
740778         {
741            ym2413_device *ym = space->machine().device<ym2413_device>("ymsnd");
742            upd7759_device *upd = space->machine().device<upd7759_device>("upd");
743            float percent = state->m_volume_override ? 1.0f : (32-state->m_global_volume)/32.0f;
779            ym2413_device *ym = machine().device<ym2413_device>("ymsnd");
780            upd7759_device *upd = machine().device<upd7759_device>("upd");
781            float percent = m_volume_override ? 1.0f : (32-m_global_volume)/32.0f;
744782
745783            ym->set_output_gain(0, percent);
746784            ym->set_output_gain(1, percent);
r14845r14846
752790
753791///////////////////////////////////////////////////////////////////////////
754792
755static READ8_HANDLER( expansion_latch_r )
793READ8_MEMBER(bfm_sc2_state::expansion_latch_r)
756794{
757795   return 0;
758796}
759797
760798///////////////////////////////////////////////////////////////////////////
761799
762static WRITE8_HANDLER( muxena_w )
800WRITE8_MEMBER(bfm_sc2_state::muxena_w)
763801{
764802}
765803
766804///////////////////////////////////////////////////////////////////////////
767805
768static WRITE8_HANDLER( timerirq_w )
806WRITE8_MEMBER(bfm_sc2_state::timerirq_w)
769807{
770   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
771   state->m_is_timer_enabled = data & 1;
808   m_is_timer_enabled = data & 1;
772809}
773810
774811///////////////////////////////////////////////////////////////////////////
775812
776static READ8_HANDLER( timerirqclr_r )
813READ8_MEMBER(bfm_sc2_state::timerirqclr_r)
777814{
778   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
779   state->m_irq_timer_stat = 0;
780   state->m_irq_status     = 0;
815   m_irq_timer_stat = 0;
816   m_irq_status     = 0;
781817
782818   return 0;
783819}
784820
785821///////////////////////////////////////////////////////////////////////////
786822
787static READ8_HANDLER( irqstatus_r )
823READ8_MEMBER(bfm_sc2_state::irqstatus_r)
788824{
789   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
790   int result = state->m_irq_status | state->m_irq_timer_stat | 0x80;   // 0x80 = ~MUXERROR
825   int result = m_irq_status | m_irq_timer_stat | 0x80;   // 0x80 = ~MUXERROR
791826
792   state->m_irq_timer_stat = 0;
827   m_irq_timer_stat = 0;
793828
794829   return result;
795830}
796831
797832///////////////////////////////////////////////////////////////////////////
798833
799static WRITE8_HANDLER( coininhib_w )
834WRITE8_MEMBER(bfm_sc2_state::coininhib_w)
800835{
801   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
802   int changed = state->m_coin_inhibits^data,i,p;
836   int changed = m_coin_inhibits^data,i,p;
803837
804   state->m_coin_inhibits = data;
838   m_coin_inhibits = data;
805839
806840   p = 0x01;
807841   i = 0;
r14845r14846
810844   {
811845      if ( changed & p )
812846      { // this inhibit line has changed
813         coin_lockout_w(space->machine(), i, (~data & p) ); // update lockouts
847         coin_lockout_w(machine(), i, (~data & p) ); // update lockouts
814848         changed &= ~p;
815849      }
816850
r14845r14846
821855
822856///////////////////////////////////////////////////////////////////////////
823857
824static READ8_HANDLER( coin_input_r )
858READ8_MEMBER(bfm_sc2_state::coin_input_r)
825859{
826   return input_port_read(space->machine(), "COINS");
860   return input_port_read(machine(), "COINS");
827861}
828862
829863///////////////////////////////////////////////////////////////////////////
830864
831static WRITE8_HANDLER( payout_latch_w )
865WRITE8_MEMBER(bfm_sc2_state::payout_latch_w)
832866{
833   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
834   state->m_pay_latch = data;
867   m_pay_latch = data;
835868}
836869
837870///////////////////////////////////////////////////////////////////////////
838871
839static WRITE8_HANDLER( payout_triac_w )
872WRITE8_MEMBER(bfm_sc2_state::payout_triac_w)
840873{
841   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
842   if ( state->m_triac_select == 0x57 )
874   if ( m_triac_select == 0x57 )
843875   {
844876      int slide = 0;
845877
846      switch ( state->m_pay_latch )
878      switch ( m_pay_latch )
847879      {
848880         case 0x01: slide = 1;
849881            break;
r14845r14846
868900      {
869901         if ( data == 0x4D )
870902         {
871            if ( !state->m_slide_states[slide] )
903            if ( !m_slide_states[slide] )
872904            {
873               if ( state->m_slide_pay_sensor[slide] )
905               if ( m_slide_pay_sensor[slide] )
874906               {
875                  int strobe = state->m_slide_pay_sensor[slide]>>4, data = state->m_slide_pay_sensor[slide]&0x0F;
907                  int strobe = m_slide_pay_sensor[slide]>>4, data = m_slide_pay_sensor[slide]&0x0F;
876908
877                  Scorpion2_SetSwitchState(space->machine(), strobe, data, 0);
909                  Scorpion2_SetSwitchState(machine(), strobe, data, 0);
878910               }
879               state->m_slide_states[slide] = 1;
911               m_slide_states[slide] = 1;
880912            }
881913         }
882914         else
883915         {
884            if ( state->m_slide_states[slide] )
916            if ( m_slide_states[slide] )
885917            {
886               if ( state->m_slide_pay_sensor[slide] )
918               if ( m_slide_pay_sensor[slide] )
887919               {
888                  int strobe = state->m_slide_pay_sensor[slide]>>4, data = state->m_slide_pay_sensor[slide]&0x0F;
920                  int strobe = m_slide_pay_sensor[slide]>>4, data = m_slide_pay_sensor[slide]&0x0F;
889921
890                  Scorpion2_SetSwitchState(space->machine(), strobe, data, 1);
922                  Scorpion2_SetSwitchState(machine(), strobe, data, 1);
891923               }
892               state->m_slide_states[slide] = 0;
924               m_slide_states[slide] = 0;
893925            }
894926         }
895927      }
r14845r14846
898930
899931///////////////////////////////////////////////////////////////////////////
900932
901static WRITE8_HANDLER( payout_select_w )
933WRITE8_MEMBER(bfm_sc2_state::payout_select_w)
902934{
903   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
904   state->m_triac_select = data;
935   m_triac_select = data;
905936}
906937
907938
908939
909940///////////////////////////////////////////////////////////////////////////
910941
911static WRITE8_HANDLER( vfd2_data_w )
942WRITE8_MEMBER(bfm_sc2_state::vfd2_data_w)
912943{
913   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
914   state->m_vfd2_latch = data;
944   m_vfd2_latch = data;
915945   BFM_BD1_newdata(1, data);
916946   BFM_BD1_draw(1);
917947}
918948
919949///////////////////////////////////////////////////////////////////////////
920950
921static WRITE8_HANDLER( vfd_reset_w )
951WRITE8_MEMBER(bfm_sc2_state::vfd_reset_w)
922952{
923953   BFM_BD1_reset(0);     // reset both VFD's
924954   BFM_BD1_reset(1);
r14845r14846
930960// serial port ////////////////////////////////////////////////////////////
931961///////////////////////////////////////////////////////////////////////////
932962
933static READ8_HANDLER( uart1stat_r )
963READ8_MEMBER(bfm_sc2_state::uart1stat_r)
934964{
935   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
936965   int status = 0x06;
937966
938   if ( state->m_data_to_uart1  ) status |= 0x01;
939   if ( !state->m_data_to_uart2 ) status |= 0x02;
967   if ( m_data_to_uart1  ) status |= 0x01;
968   if ( !m_data_to_uart2 ) status |= 0x02;
940969
941970   return status;
942971}
943972///////////////////////////////////////////////////////////////////////////
944973
945static READ8_HANDLER( uart1data_r )
974READ8_MEMBER(bfm_sc2_state::uart1data_r)
946975{
947   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
948   return state->m_uart1_data;
976   return m_uart1_data;
949977}
950978
951979//////////////////////////////////////////////////////////////////////////
952980
953static WRITE8_HANDLER( uart1ctrl_w )
981WRITE8_MEMBER(bfm_sc2_state::uart1ctrl_w)
954982{
955983   UART_LOG(("uart1ctrl:%x\n", data));
956984}
957985///////////////////////////////////////////////////////////////////////////
958986
959static WRITE8_HANDLER( uart1data_w )
987WRITE8_MEMBER(bfm_sc2_state::uart1data_w)
960988{
961   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
962   state->m_data_to_uart2 = 1;
963   state->m_uart1_data    = data;
989   m_data_to_uart2 = 1;
990   m_uart1_data    = data;
964991   UART_LOG(("uart1:%x\n", data));
965992}
966993///////////////////////////////////////////////////////////////////////////
967994
968static READ8_HANDLER( uart2stat_r )
995READ8_MEMBER(bfm_sc2_state::uart2stat_r)
969996{
970   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
971997   int status = 0x06;
972998
973   if ( state->m_data_to_uart2  ) status |= 0x01;
974   if ( !state->m_data_to_uart1 ) status |= 0x02;
999   if ( m_data_to_uart2  ) status |= 0x01;
1000   if ( !m_data_to_uart1 ) status |= 0x02;
9751001
9761002   return status;
9771003}
9781004///////////////////////////////////////////////////////////////////////////
9791005
980static READ8_HANDLER( uart2data_r )
1006READ8_MEMBER(bfm_sc2_state::uart2data_r)
9811007{
982   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
983   return state->m_uart2_data;
1008   return m_uart2_data;
9841009}
9851010
9861011///////////////////////////////////////////////////////////////////////////
9871012
988static WRITE8_HANDLER( uart2ctrl_w )
1013WRITE8_MEMBER(bfm_sc2_state::uart2ctrl_w)
9891014{
9901015   UART_LOG(("uart2ctrl:%x\n", data));
9911016}
9921017
9931018///////////////////////////////////////////////////////////////////////////
9941019
995static WRITE8_HANDLER( uart2data_w )
1020WRITE8_MEMBER(bfm_sc2_state::uart2data_w)
9961021{
997   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
998   state->m_data_to_uart1 = 1;
999   state->m_uart2_data    = data;
1022   m_data_to_uart1 = 1;
1023   m_uart2_data    = data;
10001024   UART_LOG(("uart2:%x\n", data));
10011025}
10021026
10031027///////////////////////////////////////////////////////////////////////////
10041028
1005static WRITE8_HANDLER( vid_uart_tx_w )
1029WRITE8_MEMBER(bfm_sc2_state::vid_uart_tx_w)
10061030{
10071031   adder2_send(data);
1008   cputag_set_input_line(space->machine(), "adder2", M6809_IRQ_LINE, HOLD_LINE );
1032   cputag_set_input_line(machine(), "adder2", M6809_IRQ_LINE, HOLD_LINE );
10091033
10101034   LOG_SERIAL(("sadder  %02X  (%c)\n",data, data ));
10111035}
10121036
10131037///////////////////////////////////////////////////////////////////////////
10141038
1015static WRITE8_HANDLER( vid_uart_ctrl_w )
1039WRITE8_MEMBER(bfm_sc2_state::vid_uart_ctrl_w)
10161040{
10171041}
10181042
10191043///////////////////////////////////////////////////////////////////////////
10201044
1021static READ8_HANDLER( vid_uart_rx_r )
1045READ8_MEMBER(bfm_sc2_state::vid_uart_rx_r)
10221046{
10231047   int data = adder2_receive();
10241048
r14845r14846
10291053
10301054///////////////////////////////////////////////////////////////////////////
10311055
1032static READ8_HANDLER( vid_uart_ctrl_r )
1056READ8_MEMBER(bfm_sc2_state::vid_uart_ctrl_r)
10331057{
10341058   return adder2_status();
10351059}
10361060
10371061///////////////////////////////////////////////////////////////////////////
10381062
1039static READ8_HANDLER( key_r )
1063READ8_MEMBER(bfm_sc2_state::key_r)
10401064{
1041   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
1042   int result = state->m_key[ offset ];
1065   int result = m_key[ offset ];
10431066
10441067   if ( offset == 7 )
10451068   {
1046      result = (result & 0xFE) | read_e2ram(space->machine());
1069      result = (result & 0xFE) | read_e2ram(machine());
10471070   }
10481071
10491072   return result;
r14845r14846
10791102   state->m_e2data_to_read = 0;
10801103}
10811104
1082static int recdata(bfm_sc2_state *state, int changed, int data)
1105int bfm_sc2_state::recdata(int changed, int data)
10831106{
10841107   int res = 1;
10851108
1086   if ( state->m_e2cnt < 8 )
1109   if ( m_e2cnt < 8 )
10871110   {
10881111      res = 0;
10891112
10901113      if ( (changed & SCL) && (data & SCL) )
10911114      { // clocked in new data
1092         int pattern = 1 << (7-state->m_e2cnt);
1115         int pattern = 1 << (7-m_e2cnt);
10931116
1094         if ( data & SDA ) state->m_e2data |=  pattern;
1095         else              state->m_e2data &= ~pattern;
1117         if ( data & SDA ) m_e2data |=  pattern;
1118         else              m_e2data &= ~pattern;
10961119
1097         state->m_e2data_pin = state->m_e2data_to_read & 0x80 ? 1 : 0;
1120         m_e2data_pin = m_e2data_to_read & 0x80 ? 1 : 0;
10981121
1099         state->m_e2data_to_read <<= 1;
1122         m_e2data_to_read <<= 1;
11001123
1101         LOG(("e2d pin= %d\n", state->m_e2data_pin));
1124         LOG(("e2d pin= %d\n", m_e2data_pin));
11021125
1103         state->m_e2cnt++;
1104         if ( state->m_e2cnt >= 8 )
1126         m_e2cnt++;
1127         if ( m_e2cnt >= 8 )
11051128         {
11061129            res++;
11071130         }
r14845r14846
11331156
11341157
11351158/* VFD Status */
1136static READ8_HANDLER( vfd_status_r )
1159READ8_MEMBER(bfm_sc2_state::vfd_status_r)
11371160{
1138   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
11391161   /* b7 = NEC busy */
11401162   /* b6 = alpha busy (also matrix board) */
11411163   /* b5 - b0 = reel optics */
11421164
1143   int result = state->m_optic_pattern;
1165   int result = m_optic_pattern;
11441166
1145   if ( !upd7759_busy_r(space->machine().device("upd")) ) result |= 0x80;
1167   if ( !upd7759_busy_r(machine().device("upd")) ) result |= 0x80;
11461168
1147   if (space->machine().device("matrix"))
1169   if (machine().device("matrix"))
11481170      if ( BFM_dm01_busy() ) result |= 0x40;
11491171
11501172   return result;
11511173}
11521174
1153static WRITE8_HANDLER( vfd1_data_w )
1175WRITE8_MEMBER(bfm_sc2_state::vfd1_data_w)
11541176{
1155   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>();
1156   state->m_vfd1_latch = data;
1177   m_vfd1_latch = data;
11571178
1158   if (space->machine().device("matrix"))
1179   if (machine().device("matrix"))
11591180   {
1160      BFM_dm01_writedata(space->machine(),data);
1181      BFM_dm01_writedata(machine(),data);
11611182   }
11621183   else
11631184   {
r14845r14846
11681189
11691190
11701191//
1171static WRITE8_HANDLER( e2ram_w )
1192WRITE8_MEMBER(bfm_sc2_state::e2ram_w)
11721193{
1173   bfm_sc2_state *state = space->machine().driver_data<bfm_sc2_state>(); // b0 = clock b1 = data
11741194
11751195   int changed, ack;
11761196
11771197   data ^= (SDA|SCL);  // invert signals
11781198
1179   changed  = (state->m_e2reg^data) & 0x03;
1199   changed  = (m_e2reg^data) & 0x03;
11801200
1181   state->m_e2reg = data;
1201   m_e2reg = data;
11821202
11831203   if ( changed )
11841204   {
r14845r14846
11881208            ( !(changed & SCL) && (data & SCL) )    // SCL=1 and not changed
11891209            )
11901210         {   // X24C08 Start condition (1->0 on SDA while SCL=1)
1191            state->m_e2dummywrite = ( state->m_e2state == 5 );
1211            m_e2dummywrite = ( m_e2state == 5 );
11921212
1193            LOG(("e2ram:   c:%d d:%d Start condition dummywrite=%d\n", (data & SCL)?1:0, (data&SDA)?1:0, state->m_e2dummywrite ));
1213            LOG(("e2ram:   c:%d d:%d Start condition dummywrite=%d\n", (data & SCL)?1:0, (data&SDA)?1:0, m_e2dummywrite ));
11941214
1195            state->m_e2state = 1; // ready for commands
1196            state->m_e2cnt   = 0;
1197            state->m_e2data  = 0;
1215            m_e2state = 1; // ready for commands
1216            m_e2cnt   = 0;
1217            m_e2data  = 0;
11981218            break;
11991219         }
12001220
r14845r14846
12031223            )
12041224         {   // X24C08 Stop condition (0->1 on SDA while SCL=1)
12051225            LOG(("e2ram:   c:%d d:%d Stop condition\n", (data & SCL)?1:0, (data&SDA)?1:0 ));
1206            state->m_e2state = 0;
1207            state->m_e2data  = 0;
1226            m_e2state = 0;
1227            m_e2data  = 0;
12081228            break;
12091229         }
12101230
1211         switch ( state->m_e2state )
1231         switch ( m_e2state )
12121232         {
12131233            case 1: // Receiving address + R/W bit
12141234
1215               if ( recdata(state, changed, data) )
1235               if ( recdata(changed, data) )
12161236               {
1217                  state->m_e2address = (state->m_e2address & 0x00FF) | ((state->m_e2data>>1) & 0x03) << 8;
1218                  state->m_e2cnt   = 0;
1219                  state->m_e2rw    = state->m_e2data & 1;
1237                  m_e2address = (m_e2address & 0x00FF) | ((m_e2data>>1) & 0x03) << 8;
1238                  m_e2cnt   = 0;
1239                  m_e2rw    = m_e2data & 1;
12201240
12211241                  LOG(("e2ram: Slave address received !!  device id=%01X device adr=%01d high order adr %0X RW=%d) %02X\n",
1222                     state->m_e2data>>4, (state->m_e2data & 0x08)?1:0, (state->m_e2data>>1) & 0x03, state->m_e2rw , state->m_e2data ));
1242                     m_e2data>>4, (m_e2data & 0x08)?1:0, (m_e2data>>1) & 0x03, m_e2rw , m_e2data ));
12231243
1224                  state->m_e2state = 2;
1244                  m_e2state = 2;
12251245               }
12261246               break;
12271247
r14845r14846
12301250               ack = recAck(changed,data);
12311251               if ( ack )
12321252               {
1233                  state->m_e2data_pin = 0;
1253                  m_e2data_pin = 0;
12341254
12351255                  if ( ack < 0 )
12361256                  {
12371257                     LOG(("ACK = 0\n"));
1238                     state->m_e2state = 0;
1258                     m_e2state = 0;
12391259                  }
12401260                  else
12411261                  {
12421262                     LOG(("ACK = 1\n"));
1243                     if ( state->m_e2dummywrite )
1263                     if ( m_e2dummywrite )
12441264                     {
1245                        state->m_e2dummywrite = 0;
1265                        m_e2dummywrite = 0;
12461266
1247                        state->m_e2data_to_read = state->m_e2ram[state->m_e2address];
1267                        m_e2data_to_read = m_e2ram[m_e2address];
12481268
1249                        if ( state->m_e2rw & 1 ) state->m_e2state = 7; // read data
1250                        else        state->m_e2state = 0; //?not sure
1269                        if ( m_e2rw & 1 ) m_e2state = 7; // read data
1270                        else        m_e2state = 0; //?not sure
12511271                     }
12521272                     else
12531273                     {
1254                        if ( state->m_e2rw & 1 ) state->m_e2state = 7; // reading
1255                        else            state->m_e2state = 3; // writing
1274                        if ( m_e2rw & 1 ) m_e2state = 7; // reading
1275                        else            m_e2state = 3; // writing
12561276                     }
1257                     switch ( state->m_e2state )
1277                     switch ( m_e2state )
12581278                     {
12591279                        case 7:
1260                           LOG(("read address %04X\n",state->m_e2address));
1261                           state->m_e2data_to_read = state->m_e2ram[state->m_e2address];
1280                           LOG(("read address %04X\n",m_e2address));
1281                           m_e2data_to_read = m_e2ram[m_e2address];
12621282                           break;
12631283                        case 3:
12641284                           LOG(("write, awaiting address\n"));
12651285                           break;
12661286                        default:
1267                           LOG(("?unknow action %04X\n",state->m_e2address));
1287                           LOG(("?unknow action %04X\n",m_e2address));
12681288                           break;
12691289                     }
12701290                  }
1271                  state->m_e2data = 0;
1291                  m_e2data = 0;
12721292               }
12731293               break;
12741294
12751295            case 3: // writing data, receiving address
12761296
1277               if ( recdata(state, changed, data) )
1297               if ( recdata(changed, data) )
12781298               {
1279                  state->m_e2data_pin = 0;
1280                  state->m_e2address = (state->m_e2address & 0xFF00) | state->m_e2data;
1299                  m_e2data_pin = 0;
1300                  m_e2address = (m_e2address & 0xFF00) | m_e2data;
12811301
1282                  LOG(("write address = %04X waiting for ACK\n", state->m_e2address));
1283                  state->m_e2state = 4;
1284                  state->m_e2cnt   = 0;
1285                  state->m_e2data  = 0;
1302                  LOG(("write address = %04X waiting for ACK\n", m_e2address));
1303                  m_e2state = 4;
1304                  m_e2cnt   = 0;
1305                  m_e2data  = 0;
12861306               }
12871307               break;
12881308
r14845r14846
12911311               ack = recAck(changed,data);
12921312               if ( ack )
12931313               {
1294                  state->m_e2data_pin = 0;   // pin=0, no error !!
1314                  m_e2data_pin = 0;   // pin=0, no error !!
12951315
12961316                  if ( ack < 0 )
12971317                  {
1298                     state->m_e2state = 0;
1318                     m_e2state = 0;
12991319                     LOG(("ACK = 0, cancel write\n" ));
13001320                  }
13011321                  else
13021322                  {
1303                     state->m_e2state = 5;
1323                     m_e2state = 5;
13041324                     LOG(("ACK = 1, awaiting data to write\n" ));
13051325                  }
13061326               }
13071327               break;
13081328
13091329            case 5: // receive data to write
1310               if ( recdata(state, changed, data) )
1330               if ( recdata(changed, data) )
13111331               {
1312                  LOG(("write data = %02X received, awaiting ACK\n", state->m_e2data));
1313                  state->m_e2cnt   = 0;
1314                  state->m_e2state = 6;  // wait ack
1332                  LOG(("write data = %02X received, awaiting ACK\n", m_e2data));
1333                  m_e2cnt   = 0;
1334                  m_e2state = 6;  // wait ack
13151335               }
13161336               break;
13171337
r14845r14846
13221342               {
13231343                  if ( ack < 0 )
13241344                  {
1325                     state->m_e2state = 0;
1345                     m_e2state = 0;
13261346                     LOG(("ACK=0, write canceled\n"));
13271347                  }
13281348                  else
13291349                  {
1330                     LOG(("ACK=1, writing %02X to %04X\n", state->m_e2data, state->m_e2address));
1350                     LOG(("ACK=1, writing %02X to %04X\n", m_e2data, m_e2address));
13311351
1332                     state->m_e2ram[state->m_e2address] = state->m_e2data;
1352                     m_e2ram[m_e2address] = m_e2data;
13331353
1334                     state->m_e2address = (state->m_e2address & ~0x000F) | ((state->m_e2address+1)&0x0F);
1354                     m_e2address = (m_e2address & ~0x000F) | ((m_e2address+1)&0x0F);
13351355
1336                     state->m_e2state = 5; // write next address
1356                     m_e2state = 5; // write next address
13371357                  }
13381358               }
13391359               break;
13401360
13411361            case 7: // receive address from read
13421362
1343               if ( recdata(state, changed, data) )
1363               if ( recdata(changed, data) )
13441364               {
1345                  //state->m_e2data_pin = 0;
1365                  //m_e2data_pin = 0;
13461366
1347                  LOG(("address read, data = %02X waiting for ACK\n", state->m_e2data ));
1367                  LOG(("address read, data = %02X waiting for ACK\n", m_e2data ));
13481368
1349                  state->m_e2state = 8;
1369                  m_e2state = 8;
13501370               }
13511371               break;
13521372
r14845r14846
13541374
13551375               if ( recAck(changed, data) )
13561376               {
1357                  state->m_e2state = 7;
1377                  m_e2state = 7;
13581378
1359                  state->m_e2address = (state->m_e2address & ~0x0F) | ((state->m_e2address+1)&0x0F); // lower 4 bits wrap around
1379                  m_e2address = (m_e2address & ~0x0F) | ((m_e2address+1)&0x0F); // lower 4 bits wrap around
13601380
1361                  state->m_e2data_to_read = state->m_e2ram[state->m_e2address];
1381                  m_e2data_to_read = m_e2ram[m_e2address];
13621382
1363                  LOG(("ready for next address %04X\n", state->m_e2address));
1383                  LOG(("ready for next address %04X\n", m_e2address));
13641384
1365                  state->m_e2cnt   = 0;
1366                  state->m_e2data  = 0;
1385                  m_e2cnt   = 0;
1386                  m_e2data  = 0;
13671387               }
13681388               break;
13691389
r14845r14846
14131433}
14141434
14151435
1416static READ8_HANDLER( direct_input_r )
1436READ8_MEMBER(bfm_sc2_state::direct_input_r)
14171437{
14181438   return 0;
14191439}
r14845r14846
14231443
14241444static ADDRESS_MAP_START( sc2_basemap, AS_PROGRAM, 8, bfm_sc2_state )
14251445   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram") //8k
1426   AM_RANGE(0x2000, 0x2000) AM_READ_LEGACY(vfd_status_r)
1427   AM_RANGE(0x2000, 0x20FF) AM_WRITE_LEGACY(reel12_w)
1428   AM_RANGE(0x2100, 0x21FF) AM_WRITE_LEGACY(reel34_w)
1429   AM_RANGE(0x2200, 0x22FF) AM_WRITE_LEGACY(reel56_w)
1446   AM_RANGE(0x2000, 0x2000) AM_READ(vfd_status_r)
1447   AM_RANGE(0x2000, 0x20FF) AM_WRITE(reel12_w)
1448   AM_RANGE(0x2100, 0x21FF) AM_WRITE(reel34_w)
1449   AM_RANGE(0x2200, 0x22FF) AM_WRITE(reel56_w)
14301450
1431   AM_RANGE(0x2300, 0x230B) AM_READ_LEGACY(mux_input_r)
1432   AM_RANGE(0x2300, 0x231F) AM_WRITE_LEGACY(mux_output_w)
1433   AM_RANGE(0x2320, 0x2323) AM_WRITE_LEGACY(dimas_w)            /* ?unknown dim related */
1451   AM_RANGE(0x2300, 0x230B) AM_READ(mux_input_r)
1452   AM_RANGE(0x2300, 0x231F) AM_WRITE(mux_output_w)
1453   AM_RANGE(0x2320, 0x2323) AM_WRITE(dimas_w)            /* ?unknown dim related */
14341454
1435   AM_RANGE(0x2324, 0x2324) AM_READWRITE_LEGACY(expansion_latch_r, expansion_latch_w)
1436   AM_RANGE(0x2325, 0x2327) AM_WRITE_LEGACY(unknown_w)
1437   AM_RANGE(0x2328, 0x2328) AM_WRITE_LEGACY(muxena_w)
1438   AM_RANGE(0x2329, 0x2329) AM_READWRITE_LEGACY(timerirqclr_r, timerirq_w)
1439   AM_RANGE(0x232A, 0x232D) AM_WRITE_LEGACY(unknown_w)
1440   AM_RANGE(0x232E, 0x232E) AM_READ_LEGACY(irqstatus_r)
1455   AM_RANGE(0x2324, 0x2324) AM_READWRITE(expansion_latch_r, expansion_latch_w)
1456   AM_RANGE(0x2325, 0x2327) AM_WRITE(unknown_w)
1457   AM_RANGE(0x2328, 0x2328) AM_WRITE(muxena_w)
1458   AM_RANGE(0x2329, 0x2329) AM_READWRITE(timerirqclr_r, timerirq_w)
1459   AM_RANGE(0x232A, 0x232D) AM_WRITE(unknown_w)
1460   AM_RANGE(0x232E, 0x232E) AM_READ(irqstatus_r)
14411461
1442   AM_RANGE(0x232F, 0x232F) AM_WRITE_LEGACY(coininhib_w)
1443   AM_RANGE(0x2330, 0x2330) AM_WRITE_LEGACY(payout_latch_w)
1444   AM_RANGE(0x2331, 0x2331) AM_WRITE_LEGACY(payout_triac_w)
1462   AM_RANGE(0x232F, 0x232F) AM_WRITE(coininhib_w)
1463   AM_RANGE(0x2330, 0x2330) AM_WRITE(payout_latch_w)
1464   AM_RANGE(0x2331, 0x2331) AM_WRITE(payout_triac_w)
14451465   AM_RANGE(0x2332, 0x2332) AM_WRITE_LEGACY(watchdog_reset_w)
1446   AM_RANGE(0x2333, 0x2333) AM_WRITE_LEGACY(mmtr_w)
1447   AM_RANGE(0x2334, 0x2335) AM_WRITE_LEGACY(unknown_w)
1448   AM_RANGE(0x2336, 0x2336) AM_WRITE_LEGACY(dimcnt_w)
1449   AM_RANGE(0x2337, 0x2337) AM_WRITE_LEGACY(volume_override_w)
1450   AM_RANGE(0x2338, 0x2338) AM_WRITE_LEGACY(payout_select_w)
1451   AM_RANGE(0x2339, 0x2339) AM_WRITE_LEGACY(unknown_w)
1452   AM_RANGE(0x2400, 0x2400) AM_READWRITE_LEGACY(uart1stat_r, uart1ctrl_w)   /* mc6850 compatible uart */
1453   AM_RANGE(0x2500, 0x2500) AM_READWRITE_LEGACY(uart1data_r, uart1data_w)
1454   AM_RANGE(0x2600, 0x2600) AM_READWRITE_LEGACY(uart2stat_r, uart2ctrl_w)   /* mc6850 compatible uart */
1455   AM_RANGE(0x2700, 0x2700) AM_READWRITE_LEGACY(uart2data_r, uart2data_w)
1456   AM_RANGE(0x2800, 0x2800) AM_WRITE_LEGACY(vfd1_data_w)               /* vfd1 data */
1457   AM_RANGE(0x2900, 0x2900) AM_WRITE_LEGACY(vfd_reset_w)               /* vfd1+vfd2 reset line */
1466   AM_RANGE(0x2333, 0x2333) AM_WRITE(mmtr_w)
1467   AM_RANGE(0x2334, 0x2335) AM_WRITE(unknown_w)
1468   AM_RANGE(0x2336, 0x2336) AM_WRITE(dimcnt_w)
1469   AM_RANGE(0x2337, 0x2337) AM_WRITE(volume_override_w)
1470   AM_RANGE(0x2338, 0x2338) AM_WRITE(payout_select_w)
1471   AM_RANGE(0x2339, 0x2339) AM_WRITE(unknown_w)
1472   AM_RANGE(0x2400, 0x2400) AM_READWRITE(uart1stat_r, uart1ctrl_w)   /* mc6850 compatible uart */
1473   AM_RANGE(0x2500, 0x2500) AM_READWRITE(uart1data_r, uart1data_w)
1474   AM_RANGE(0x2600, 0x2600) AM_READWRITE(uart2stat_r, uart2ctrl_w)   /* mc6850 compatible uart */
1475   AM_RANGE(0x2700, 0x2700) AM_READWRITE(uart2data_r, uart2data_w)
1476   AM_RANGE(0x2800, 0x2800) AM_WRITE(vfd1_data_w)               /* vfd1 data */
1477   AM_RANGE(0x2900, 0x2900) AM_WRITE(vfd_reset_w)               /* vfd1+vfd2 reset line */
14581478   AM_RANGE(0x2A00, 0x2AFF) AM_DEVWRITE_LEGACY("upd", nec_latch_w)
14591479   AM_RANGE(0x2B00, 0x2BFF) AM_DEVWRITE_LEGACY("upd", nec_reset_w)
1460   AM_RANGE(0x2C00, 0x2C00) AM_WRITE_LEGACY(unlock_w)                  /* custom chip unlock */
1480   AM_RANGE(0x2C00, 0x2C00) AM_WRITE(unlock_w)                  /* custom chip unlock */
14611481   AM_RANGE(0x2D00, 0x2D01) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w)
1462   AM_RANGE(0x2E00, 0x2E00) AM_WRITE_LEGACY(bankswitch_w)               /* write bank (rom page select for 0x6000 - 0x7fff ) */
1463   AM_RANGE(0x2F00, 0x2F00) AM_WRITE_LEGACY(vfd2_data_w)               /* vfd2 data */
1482   AM_RANGE(0x2E00, 0x2E00) AM_WRITE(bankswitch_w)               /* write bank (rom page select for 0x6000 - 0x7fff ) */
1483   AM_RANGE(0x2F00, 0x2F00) AM_WRITE(vfd2_data_w)               /* vfd2 data */
14641484
1465   AM_RANGE(0x3FFE, 0x3FFE) AM_READ_LEGACY(direct_input_r )
1466   AM_RANGE(0x3FFF, 0x3FFF) AM_READ_LEGACY(coin_input_r)
1485   AM_RANGE(0x3FFE, 0x3FFE) AM_READ(direct_input_r )
1486   AM_RANGE(0x3FFF, 0x3FFF) AM_READ(coin_input_r)
14671487   AM_RANGE(0x4000, 0x5FFF) AM_ROM
1468   AM_RANGE(0x4000, 0xFFFF) AM_WRITE_LEGACY(unknown_w)         // contains unknown I/O registers
1488   AM_RANGE(0x4000, 0xFFFF) AM_WRITE(unknown_w)         // contains unknown I/O registers
14691489   AM_RANGE(0x6000, 0x7FFF) AM_ROMBANK("bank1")
14701490   AM_RANGE(0x8000, 0xFFFF) AM_ROM
14711491ADDRESS_MAP_END
r14845r14846
14751495static ADDRESS_MAP_START( memmap_vid, AS_PROGRAM, 8, bfm_sc2_state )
14761496   AM_IMPORT_FROM( sc2_basemap )
14771497
1478   AM_RANGE(0x2000, 0x2000) AM_READ_LEGACY(vfd_status_hop_r)      // vfd status register
1479   AM_RANGE(0x2000, 0x20FF) AM_WRITE_LEGACY(reel12_vid_w)
1498   AM_RANGE(0x2000, 0x2000) AM_READ(vfd_status_hop_r)      // vfd status register
1499   AM_RANGE(0x2000, 0x20FF) AM_WRITE(reel12_vid_w)
14801500   AM_RANGE(0x2100, 0x21FF) AM_WRITENOP
14811501   AM_RANGE(0x2200, 0x22FF) AM_WRITENOP
14821502
1483   AM_RANGE(0x3C00, 0x3C07) AM_READ_LEGACY(key_r   )
1484   AM_RANGE(0x3C80, 0x3C80) AM_WRITE_LEGACY(e2ram_w )
1503   AM_RANGE(0x3C00, 0x3C07) AM_READ(key_r   )
1504   AM_RANGE(0x3C80, 0x3C80) AM_WRITE(e2ram_w )
14851505
1486   AM_RANGE(0x3E00, 0x3E00) AM_READWRITE_LEGACY(vid_uart_ctrl_r, vid_uart_ctrl_w)      // video uart control reg
1487   AM_RANGE(0x3E01, 0x3E01) AM_READWRITE_LEGACY(vid_uart_rx_r, vid_uart_tx_w)         // video uart data  reg
1506   AM_RANGE(0x3E00, 0x3E00) AM_READWRITE(vid_uart_ctrl_r, vid_uart_ctrl_w)      // video uart control reg
1507   AM_RANGE(0x3E01, 0x3E01) AM_READWRITE(vid_uart_rx_r, vid_uart_tx_w)         // video uart data  reg
14881508ADDRESS_MAP_END
14891509
14901510// input ports for pyramid ////////////////////////////////////////
r14845r14846
25462566
25472567#ifdef UNUSED_FUNCTION
25482568/* Scorpion 3 expansion */
2549static READ8_HANDLER( sc3_expansion_r )
2569READ8_MEMBER(bfm_sc2_state::sc3_expansion_r)
25502570{
25512571    int result = 0;
25522572
r14845r14846
25612581}
25622582
25632583
2564static WRITE8_HANDLER( sc3_expansion_w )
2584WRITE8_MEMBER(bfm_sc2_state::sc3_expansion_w)
25652585{
25662586    switch ( offset )
25672587    {
src/mame/drivers/tmmjprd.c
r14845r14846
4949   UINT8 m_system_in;
5050   double m_old_brt1;
5151   double m_old_brt2;
52   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap0_w);
53   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap1_w);
54   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap2_w);
55   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap3_w);
56   DECLARE_READ32_MEMBER(tmmjprd_tilemap0_r);
57   DECLARE_READ32_MEMBER(tmmjprd_tilemap1_r);
58   DECLARE_READ32_MEMBER(tmmjprd_tilemap2_r);
59   DECLARE_READ32_MEMBER(tmmjprd_tilemap3_r);
60   DECLARE_READ32_MEMBER(randomtmmjprds);
61   DECLARE_WRITE32_MEMBER(tmmjprd_blitter_w);
62   DECLARE_READ32_MEMBER(tmmjprd_mux_r);
63   DECLARE_WRITE32_MEMBER(tmmjprd_paletteram_dword_w);
64   DECLARE_WRITE32_MEMBER(tmmjprd_brt_1_w);
65   DECLARE_WRITE32_MEMBER(tmmjprd_brt_2_w);
5266};
5367
5468
55static WRITE32_HANDLER( tmmjprd_tilemap0_w )
69WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap0_w)
5670{
57   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
58   COMBINE_DATA(&state->m_tilemap_ram[0][offset]);
71   COMBINE_DATA(&m_tilemap_ram[0][offset]);
5972}
6073
6174
6275
63static WRITE32_HANDLER( tmmjprd_tilemap1_w )
76WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap1_w)
6477{
65   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
66   COMBINE_DATA(&state->m_tilemap_ram[1][offset]);
78   COMBINE_DATA(&m_tilemap_ram[1][offset]);
6779}
6880
69static WRITE32_HANDLER( tmmjprd_tilemap2_w )
81WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap2_w)
7082{
71   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
72   COMBINE_DATA(&state->m_tilemap_ram[2][offset]);
83   COMBINE_DATA(&m_tilemap_ram[2][offset]);
7384}
7485
75static WRITE32_HANDLER( tmmjprd_tilemap3_w )
86WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap3_w)
7687{
77   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
78   COMBINE_DATA(&state->m_tilemap_ram[3][offset]);
88   COMBINE_DATA(&m_tilemap_ram[3][offset]);
7989}
8090
8191static void draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int screen)
r14845r14846
335345   state->m_tilemap_ram[3] = auto_alloc_array_clear(machine, UINT32, 0x8000);
336346}
337347
338static READ32_HANDLER( tmmjprd_tilemap0_r )
348READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap0_r)
339349{
340   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
341   return state->m_tilemap_ram[0][offset];
350   return m_tilemap_ram[0][offset];
342351}
343352
344static READ32_HANDLER( tmmjprd_tilemap1_r )
353READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap1_r)
345354{
346   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
347   return state->m_tilemap_ram[1][offset];
355   return m_tilemap_ram[1][offset];
348356}
349357
350static READ32_HANDLER( tmmjprd_tilemap2_r )
358READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap2_r)
351359{
352   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
353   return state->m_tilemap_ram[2][offset];
360   return m_tilemap_ram[2][offset];
354361}
355362
356static READ32_HANDLER( tmmjprd_tilemap3_r )
363READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap3_r)
357364{
358   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
359   return state->m_tilemap_ram[3][offset];
365   return m_tilemap_ram[3][offset];
360366}
361367
362static READ32_HANDLER( randomtmmjprds )
368READ32_MEMBER(tmmjprd_state::randomtmmjprds)
363369{
364   return 0x0000;//space->machine().rand();
370   return 0x0000;//machine().rand();
365371}
366372
367373
r14845r14846
470476
471477
472478
473static WRITE32_HANDLER( tmmjprd_blitter_w )
479WRITE32_MEMBER(tmmjprd_state::tmmjprd_blitter_w)
474480{
475481   COMBINE_DATA(&tmmjprd_blitterregs[offset]);
476482
477483   if (offset == 0x0c/4)
478484   {
479      tmmjprd_do_blit(space->machine());
485      tmmjprd_do_blit(machine());
480486   }
481487}
482488#endif
r14845r14846
504510   }
505511}
506512
507static READ32_HANDLER( tmmjprd_mux_r )
513READ32_MEMBER(tmmjprd_state::tmmjprd_mux_r)
508514{
509   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
510515
511   state->m_system_in = input_port_read(space->machine(), "SYSTEM");
516   m_system_in = input_port_read(machine(), "SYSTEM");
512517
513   switch(state->m_mux_data)
518   switch(m_mux_data)
514519   {
515      case 0x01: return (state->m_system_in & 0xff) | (input_port_read(space->machine(), "PL1_1")<<8) | (input_port_read(space->machine(), "PL2_1")<<16) | 0xff000000;
516      case 0x02: return (state->m_system_in & 0xff) | (input_port_read(space->machine(), "PL1_2")<<8) | (input_port_read(space->machine(), "PL2_2")<<16) | 0xff000000;
517      case 0x04: return (state->m_system_in & 0xff) | (input_port_read(space->machine(), "PL1_3")<<8) | (input_port_read(space->machine(), "PL2_3")<<16) | 0xff000000;
518      case 0x08: return (state->m_system_in & 0xff) | (input_port_read(space->machine(), "PL1_4")<<8) | (input_port_read(space->machine(), "PL2_4")<<16) | 0xff000000;
519      case 0x10: return (state->m_system_in & 0xff) | (input_port_read(space->machine(), "PL1_5")<<8) | (input_port_read(space->machine(), "PL2_5")<<16) | 0xff000000;
520      case 0x01: return (m_system_in & 0xff) | (input_port_read(machine(), "PL1_1")<<8) | (input_port_read(machine(), "PL2_1")<<16) | 0xff000000;
521      case 0x02: return (m_system_in & 0xff) | (input_port_read(machine(), "PL1_2")<<8) | (input_port_read(machine(), "PL2_2")<<16) | 0xff000000;
522      case 0x04: return (m_system_in & 0xff) | (input_port_read(machine(), "PL1_3")<<8) | (input_port_read(machine(), "PL2_3")<<16) | 0xff000000;
523      case 0x08: return (m_system_in & 0xff) | (input_port_read(machine(), "PL1_4")<<8) | (input_port_read(machine(), "PL2_4")<<16) | 0xff000000;
524      case 0x10: return (m_system_in & 0xff) | (input_port_read(machine(), "PL1_5")<<8) | (input_port_read(machine(), "PL2_5")<<16) | 0xff000000;
520525   }
521526
522   return (state->m_system_in & 0xff) | 0xffffff00;
527   return (m_system_in & 0xff) | 0xffffff00;
523528}
524529
525530static INPUT_PORTS_START( tmmjprd )
r14845r14846
609614INPUT_PORTS_END
610615
611616
612static WRITE32_HANDLER( tmmjprd_paletteram_dword_w )
617WRITE32_MEMBER(tmmjprd_state::tmmjprd_paletteram_dword_w)
613618{
614619   int r,g,b;
615   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
620   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
616621
617   b = ((space->machine().generic.paletteram.u32[offset] & 0x000000ff) >>0);
618   r = ((space->machine().generic.paletteram.u32[offset] & 0x0000ff00) >>8);
619   g = ((space->machine().generic.paletteram.u32[offset] & 0x00ff0000) >>16);
622   b = ((machine().generic.paletteram.u32[offset] & 0x000000ff) >>0);
623   r = ((machine().generic.paletteram.u32[offset] & 0x0000ff00) >>8);
624   g = ((machine().generic.paletteram.u32[offset] & 0x00ff0000) >>16);
620625
621   palette_set_color(space->machine(),offset,MAKE_RGB(r,g,b));
626   palette_set_color(machine(),offset,MAKE_RGB(r,g,b));
622627}
623628
624629
625630/* notice that data & 0x4 is always cleared on brt_1 and set on brt_2.        *
626631 * My wild guess is that bits 0,1 and 2 controls what palette entries to dim. */
627static WRITE32_HANDLER( tmmjprd_brt_1_w )
632WRITE32_MEMBER(tmmjprd_state::tmmjprd_brt_1_w)
628633{
629   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
630634   int i;
631635   double brt;
632636   int bank;
r14845r14846
635639   brt = ((data & 0x78)>>3) / 15.0;
636640   bank = data & 0x4 ? 0x800 : 0; //guess
637641
638   if(data & 0x80 && state->m_old_brt1 != brt)
642   if(data & 0x80 && m_old_brt1 != brt)
639643   {
640      state->m_old_brt1 = brt;
644      m_old_brt1 = brt;
641645      for (i = bank; i < 0x800+bank; i++)
642         palette_set_pen_contrast(space->machine(), i, brt);
646         palette_set_pen_contrast(machine(), i, brt);
643647   }
644648}
645649
646static WRITE32_HANDLER( tmmjprd_brt_2_w )
650WRITE32_MEMBER(tmmjprd_state::tmmjprd_brt_2_w)
647651{
648   tmmjprd_state *state = space->machine().driver_data<tmmjprd_state>();
649652   int i;
650653   double brt;
651654   int bank;
r14845r14846
654657   brt = ((data & 0x78)>>3) / 15.0;
655658   bank = data & 0x4 ? 0x800 : 0; //guess
656659
657   if(data & 0x80 && state->m_old_brt2 != brt)
660   if(data & 0x80 && m_old_brt2 != brt)
658661   {
659      state->m_old_brt2 = brt;
662      m_old_brt2 = brt;
660663      for (i = bank; i < 0x800+bank; i++)
661         palette_set_pen_contrast(space->machine(), i, brt);
664         palette_set_pen_contrast(machine(), i, brt);
662665   }
663666}
664667
665668static ADDRESS_MAP_START( tmmjprd_map, AS_PROGRAM, 32, tmmjprd_state )
666669   AM_RANGE(0x000000, 0x1fffff) AM_ROM
667   AM_RANGE(0x200010, 0x200013) AM_READ_LEGACY(randomtmmjprds) // gfx chip status?
668   AM_RANGE(0x200980, 0x200983) AM_READ_LEGACY(randomtmmjprds) // sound chip status?
669   AM_RANGE(0x200984, 0x200987) AM_READ_LEGACY(randomtmmjprds) // sound chip status?
670   AM_RANGE(0x200010, 0x200013) AM_READ(randomtmmjprds) // gfx chip status?
671   AM_RANGE(0x200980, 0x200983) AM_READ(randomtmmjprds) // sound chip status?
672   AM_RANGE(0x200984, 0x200987) AM_READ(randomtmmjprds) // sound chip status?
670673   /* check these are used .. */
671674//  AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_BASE_LEGACY(&tmmjprd_viewregs0 )
672675   AM_RANGE(0x200100, 0x200117) AM_WRITEONLY AM_BASE(m_tilemap_regs[0] ) // tilemap regs1
r14845r14846
675678   AM_RANGE(0x200160, 0x200177) AM_WRITEONLY AM_BASE(m_tilemap_regs[3] ) // tilemap regs4
676679   AM_RANGE(0x200200, 0x20021b) AM_WRITEONLY AM_BASE(m_spriteregs ) // sprregs?
677680//  AM_RANGE(0x200300, 0x200303) AM_WRITE_LEGACY(tmmjprd_rombank_w) // used during rom testing, rombank/area select + something else?
678   AM_RANGE(0x20040c, 0x20040f) AM_WRITE_LEGACY(tmmjprd_brt_1_w)
679    AM_RANGE(0x200410, 0x200413) AM_WRITE_LEGACY(tmmjprd_brt_2_w)
681   AM_RANGE(0x20040c, 0x20040f) AM_WRITE(tmmjprd_brt_1_w)
682    AM_RANGE(0x200410, 0x200413) AM_WRITE(tmmjprd_brt_2_w)
680683//  AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_BASE_LEGACY(&tmmjprd_viewregs7 )
681//  AM_RANGE(0x200700, 0x20070f) AM_WRITE_LEGACY(tmmjprd_blitter_w) AM_BASE_LEGACY(&tmmjprd_blitterregs )
684//  AM_RANGE(0x200700, 0x20070f) AM_WRITE(tmmjprd_blitter_w) AM_BASE_LEGACY(&tmmjprd_blitterregs )
682685//  AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_BASE_LEGACY(&tmmjprd_viewregs9 ) // never changes?
683686//  AM_RANGE(0x200900, 0x20098f) AM_WRITE_LEGACY(tmmjprd_audio_w)
684687   /* hmm */
685688//  AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE_LEGACY(&tmmjprd_viewregs10 )
686689   /* tilemaps */
687   AM_RANGE(0x280000, 0x283fff) AM_READWRITE_LEGACY(tmmjprd_tilemap0_r,tmmjprd_tilemap0_w)
688   AM_RANGE(0x284000, 0x287fff) AM_READWRITE_LEGACY(tmmjprd_tilemap1_r,tmmjprd_tilemap1_w)
689   AM_RANGE(0x288000, 0x28bfff) AM_READWRITE_LEGACY(tmmjprd_tilemap2_r,tmmjprd_tilemap2_w)
690   AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE_LEGACY(tmmjprd_tilemap3_r,tmmjprd_tilemap3_w)
690   AM_RANGE(0x280000, 0x283fff) AM_READWRITE(tmmjprd_tilemap0_r,tmmjprd_tilemap0_w)
691   AM_RANGE(0x284000, 0x287fff) AM_READWRITE(tmmjprd_tilemap1_r,tmmjprd_tilemap1_w)
692   AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(tmmjprd_tilemap2_r,tmmjprd_tilemap2_w)
693   AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(tmmjprd_tilemap3_r,tmmjprd_tilemap3_w)
691694   /* ?? is palette ram shared with sprites in this case or just a different map */
692695   AM_RANGE(0x290000, 0x29bfff) AM_RAM AM_BASE(m_spriteram)
693   AM_RANGE(0x29c000, 0x29ffff) AM_RAM_WRITE_LEGACY(tmmjprd_paletteram_dword_w) AM_BASE_GENERIC(paletteram)
696   AM_RANGE(0x29c000, 0x29ffff) AM_RAM_WRITE(tmmjprd_paletteram_dword_w) AM_BASE_GENERIC(paletteram)
694697
695   AM_RANGE(0x400000, 0x400003) AM_READ_LEGACY(tmmjprd_mux_r) AM_DEVWRITE_LEGACY("eeprom", tmmjprd_eeprom_write)
698   AM_RANGE(0x400000, 0x400003) AM_READ(tmmjprd_mux_r) AM_DEVWRITE_LEGACY("eeprom", tmmjprd_eeprom_write)
696699   AM_RANGE(0xf00000, 0xffffff) AM_RAM
697700ADDRESS_MAP_END
698701
src/mame/drivers/witch.c
r14845r14846
214214   int m_scrolly;
215215   UINT8 m_reg_a002;
216216   int m_bank;
217   DECLARE_WRITE8_MEMBER(gfx0_vram_w);
218   DECLARE_WRITE8_MEMBER(gfx0_cram_w);
219   DECLARE_READ8_MEMBER(gfx0_vram_r);
220   DECLARE_READ8_MEMBER(gfx0_cram_r);
221   DECLARE_WRITE8_MEMBER(gfx1_vram_w);
222   DECLARE_WRITE8_MEMBER(gfx1_cram_w);
223   DECLARE_READ8_MEMBER(gfx1_vram_r);
224   DECLARE_READ8_MEMBER(gfx1_cram_r);
225   DECLARE_READ8_MEMBER(read_a00x);
226   DECLARE_WRITE8_MEMBER(write_a00x);
227   DECLARE_READ8_MEMBER(prot_read_700x);
217228};
218229
219230
r14845r14846
273284         0);
274285}
275286
276static WRITE8_HANDLER( gfx0_vram_w )
287WRITE8_MEMBER(witch_state::gfx0_vram_w)
277288{
278   witch_state *state = space->machine().driver_data<witch_state>();
279   state->m_gfx0_vram[offset] = data;
280   state->m_gfx0a_tilemap->mark_tile_dirty(offset);
281   state->m_gfx0b_tilemap->mark_tile_dirty(offset);
289   m_gfx0_vram[offset] = data;
290   m_gfx0a_tilemap->mark_tile_dirty(offset);
291   m_gfx0b_tilemap->mark_tile_dirty(offset);
282292}
283293
284static WRITE8_HANDLER( gfx0_cram_w )
294WRITE8_MEMBER(witch_state::gfx0_cram_w)
285295{
286   witch_state *state = space->machine().driver_data<witch_state>();
287   state->m_gfx0_cram[offset] = data;
288   state->m_gfx0a_tilemap->mark_tile_dirty(offset);
289   state->m_gfx0b_tilemap->mark_tile_dirty(offset);
296   m_gfx0_cram[offset] = data;
297   m_gfx0a_tilemap->mark_tile_dirty(offset);
298   m_gfx0b_tilemap->mark_tile_dirty(offset);
290299}
291static READ8_HANDLER( gfx0_vram_r )
300READ8_MEMBER(witch_state::gfx0_vram_r)
292301{
293   witch_state *state = space->machine().driver_data<witch_state>();
294   return state->m_gfx0_vram[offset];
302   return m_gfx0_vram[offset];
295303}
296304
297static READ8_HANDLER( gfx0_cram_r )
305READ8_MEMBER(witch_state::gfx0_cram_r)
298306{
299   witch_state *state = space->machine().driver_data<witch_state>();
300   return state->m_gfx0_cram[offset];
307   return m_gfx0_cram[offset];
301308}
302309
303310#define FIX_OFFSET() do { \
304   offset=(((offset + ((state->m_scrolly & 0xf8) << 2) ) & 0x3e0)+((offset + (state->m_scrollx >> 3) ) & 0x1f)+32)&0x3ff; } while(0)
311   offset=(((offset + ((m_scrolly & 0xf8) << 2) ) & 0x3e0)+((offset + (m_scrollx >> 3) ) & 0x1f)+32)&0x3ff; } while(0)
305312
306static WRITE8_HANDLER( gfx1_vram_w )
313WRITE8_MEMBER(witch_state::gfx1_vram_w)
307314{
308   witch_state *state = space->machine().driver_data<witch_state>();
309315   FIX_OFFSET();
310   state->m_gfx1_vram[offset] = data;
311   state->m_gfx1_tilemap->mark_tile_dirty(offset);
316   m_gfx1_vram[offset] = data;
317   m_gfx1_tilemap->mark_tile_dirty(offset);
312318}
313319
314static WRITE8_HANDLER( gfx1_cram_w )
320WRITE8_MEMBER(witch_state::gfx1_cram_w)
315321{
316   witch_state *state = space->machine().driver_data<witch_state>();
317322   FIX_OFFSET();
318   state->m_gfx1_cram[offset] = data;
319   state->m_gfx1_tilemap->mark_tile_dirty(offset);
323   m_gfx1_cram[offset] = data;
324   m_gfx1_tilemap->mark_tile_dirty(offset);
320325}
321static READ8_HANDLER( gfx1_vram_r )
326READ8_MEMBER(witch_state::gfx1_vram_r)
322327{
323   witch_state *state = space->machine().driver_data<witch_state>();
324328   FIX_OFFSET();
325   return state->m_gfx1_vram[offset];
329   return m_gfx1_vram[offset];
326330}
327331
328static READ8_HANDLER( gfx1_cram_r )
332READ8_MEMBER(witch_state::gfx1_cram_r)
329333{
330   witch_state *state = space->machine().driver_data<witch_state>();
331334   FIX_OFFSET();
332   return state->m_gfx1_cram[offset];
335   return m_gfx1_cram[offset];
333336}
334337
335static READ8_HANDLER(read_a00x)
338READ8_MEMBER(witch_state::read_a00x)
336339{
337   witch_state *state = space->machine().driver_data<witch_state>();
338340   switch(offset)
339341   {
340      case 0x02: return state->m_reg_a002;
341      case 0x04: return input_port_read(space->machine(), "A004");
342      case 0x05: return input_port_read(space->machine(), "A005");
343      case 0x0c: return input_port_read(space->machine(), "SERVICE");   // stats / reset
344      case 0x0e: return input_port_read(space->machine(), "A00E");      // coin/reset
342      case 0x02: return m_reg_a002;
343      case 0x04: return input_port_read(machine(), "A004");
344      case 0x05: return input_port_read(machine(), "A005");
345      case 0x0c: return input_port_read(machine(), "SERVICE");   // stats / reset
346      case 0x0e: return input_port_read(machine(), "A00E");      // coin/reset
345347   }
346348
347349   if(offset == 0x00) //muxed with A002?
348350   {
349      switch(state->m_reg_a002 & 0x3f)
351      switch(m_reg_a002 & 0x3f)
350352      {
351353      case 0x3b:
352         return input_port_read(space->machine(), "UNK");   //bet10 / pay out
354         return input_port_read(machine(), "UNK");   //bet10 / pay out
353355      case 0x3e:
354         return input_port_read(space->machine(), "INPUTS");   //TODO : trace f564
356         return input_port_read(machine(), "INPUTS");   //TODO : trace f564
355357      case 0x3d:
356         return input_port_read(space->machine(), "A005");
358         return input_port_read(machine(), "A005");
357359      default:
358         logerror("A000 read with mux=0x%02x\n", state->m_reg_a002 & 0x3f);
360         logerror("A000 read with mux=0x%02x\n", m_reg_a002 & 0x3f);
359361      }
360362   }
361363   return 0xff;
362364}
363365
364static WRITE8_HANDLER(write_a00x)
366WRITE8_MEMBER(witch_state::write_a00x)
365367{
366   witch_state *state = space->machine().driver_data<witch_state>();
367368   switch(offset)
368369   {
369      case 0x02: //A002 bit 7&6 = state->m_bank ????
370      case 0x02: //A002 bit 7&6 = m_bank ????
370371      {
371372         int newbank;
372         state->m_reg_a002 = data;
373         m_reg_a002 = data;
373374         newbank = (data>>6)&3;
374375
375         if(newbank != state->m_bank)
376         if(newbank != m_bank)
376377         {
377            UINT8 *ROM = space->machine().region("maincpu")->base();
378            state->m_bank = newbank;
378            UINT8 *ROM = machine().region("maincpu")->base();
379            m_bank = newbank;
379380            ROM = &ROM[0x10000+0x8000 * newbank + UNBANKED_SIZE];
380            memory_set_bankptr(space->machine(), "bank1",ROM);
381            memory_set_bankptr(machine(), "bank1",ROM);
381382         }
382383      }
383384      break;
r14845r14846
386387      break;
387388
388389      case 0x08: //A008
389         device_set_input_line(&space->device(),0,CLEAR_LINE);
390         device_set_input_line(&space.device(),0,CLEAR_LINE);
390391      break;
391392   }
392393}
393394
394static READ8_HANDLER(prot_read_700x)
395READ8_MEMBER(witch_state::prot_read_700x)
395396{
396397/*
397398    Code @$21a looks like simple protection check.
r14845r14846
403404    Otherwise later in game some I/O (controls) reads are skipped.
404405*/
405406
406  switch(cpu_get_pc(&space->device()))
407  switch(cpu_get_pc(&space.device()))
407408  {
408409   case 0x23f:
409410   case 0x246:
r14845r14846
413414   case 0x25e:
414415      return offset;//enough to pass...
415416  }
416  return space->machine().region("sub")->base()[0x7000+offset];
417  return machine().region("sub")->base()[0x7000+offset];
417418}
418419
419420/*
r14845r14846
464465   AM_RANGE(UNBANKED_SIZE, 0x7fff) AM_ROMBANK("bank1")
465466   AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE_LEGACY("ym1", ym2203_r, ym2203_w)
466467   AM_RANGE(0x8008, 0x8009) AM_DEVREADWRITE_LEGACY("ym2", ym2203_r, ym2203_w)
467   AM_RANGE(0xa000, 0xa00f) AM_READWRITE_LEGACY(read_a00x, write_a00x)
468   AM_RANGE(0xc000, 0xc3ff) AM_READWRITE_LEGACY(gfx0_vram_r, gfx0_vram_w) AM_BASE(m_gfx0_vram)
469   AM_RANGE(0xc400, 0xc7ff) AM_READWRITE_LEGACY(gfx0_cram_r, gfx0_cram_w) AM_BASE(m_gfx0_cram)
470   AM_RANGE(0xc800, 0xcbff) AM_READWRITE_LEGACY(gfx1_vram_r, gfx1_vram_w) AM_BASE(m_gfx1_vram)
471   AM_RANGE(0xcc00, 0xcfff) AM_READWRITE_LEGACY(gfx1_cram_r, gfx1_cram_w) AM_BASE(m_gfx1_cram)
468   AM_RANGE(0xa000, 0xa00f) AM_READWRITE(read_a00x, write_a00x)
469   AM_RANGE(0xc000, 0xc3ff) AM_READWRITE(gfx0_vram_r, gfx0_vram_w) AM_BASE(m_gfx0_vram)
470   AM_RANGE(0xc400, 0xc7ff) AM_READWRITE(gfx0_cram_r, gfx0_cram_w) AM_BASE(m_gfx0_cram)
471   AM_RANGE(0xc800, 0xcbff) AM_READWRITE(gfx1_vram_r, gfx1_vram_w) AM_BASE(m_gfx1_vram)
472   AM_RANGE(0xcc00, 0xcfff) AM_READWRITE(gfx1_cram_r, gfx1_cram_w) AM_BASE(m_gfx1_cram)
472473   AM_RANGE(0xd000, 0xdfff) AM_RAM AM_BASE(m_sprite_ram)
473474   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split1_w) AM_BASE_GENERIC(paletteram)
474475   AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split2_w) AM_BASE_GENERIC(paletteram2)
r14845r14846
483484   AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE_LEGACY("ym1", ym2203_r, ym2203_w)
484485   AM_RANGE(0x8008, 0x8009) AM_DEVREADWRITE_LEGACY("ym2", ym2203_r, ym2203_w)
485486   AM_RANGE(0x8010, 0x8016) AM_DEVREADWRITE_LEGACY("essnd", read_8010, es8712_w)
486   AM_RANGE(0xa000, 0xa00f) AM_READWRITE_LEGACY(read_a00x, write_a00x)
487   AM_RANGE(0xa000, 0xa00f) AM_READWRITE(read_a00x, write_a00x)
487488   AM_RANGE(0xf000, 0xf0ff) AM_RAM AM_SHARE("share1")
488489   AM_RANGE(0xf180, 0xffff) AM_RAM AM_SHARE("share2")
489490ADDRESS_MAP_END
r14845r14846
867868   UINT8 *ROM = (UINT8 *)machine.region("maincpu")->base();
868869   memory_set_bankptr(machine, "bank1", &ROM[0x10000+UNBANKED_SIZE]);
869870
870   machine.device("sub")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x7000, 0x700f, FUNC(prot_read_700x));
871   machine.device("sub")->memory().space(AS_PROGRAM)->install_read_handler(0x7000, 0x700f, read8_delegate(FUNC(witch_state::prot_read_700x), state));
871872   state->m_bank = -1;
872873}
873874
src/mame/drivers/luckgrln.c
r14845r14846
111111   UINT8* m_reel4_attr;
112112   int m_palette_count;
113113   UINT8 m_palette_ram[0x10000];
114   DECLARE_WRITE8_MEMBER(luckgrln_reel1_ram_w);
115   DECLARE_WRITE8_MEMBER(luckgrln_reel1_attr_w);
116   DECLARE_WRITE8_MEMBER(luckgrln_reel2_ram_w);
117   DECLARE_WRITE8_MEMBER(luckgrln_reel2_attr_w);
118   DECLARE_WRITE8_MEMBER(luckgrln_reel3_ram_w);
119   DECLARE_WRITE8_MEMBER(luckgrln_reel3_attr_w);
120   DECLARE_WRITE8_MEMBER(luckgrln_reel4_ram_w);
121   DECLARE_WRITE8_MEMBER(luckgrln_reel4_attr_w);
122   DECLARE_WRITE8_MEMBER(output_w);
123   DECLARE_WRITE8_MEMBER(palette_offset_low_w);
124   DECLARE_WRITE8_MEMBER(palette_offset_high_w);
125   DECLARE_WRITE8_MEMBER(palette_w);
126   DECLARE_READ8_MEMBER(rtc_r);
127   DECLARE_WRITE8_MEMBER(lamps_a_w);
128   DECLARE_WRITE8_MEMBER(lamps_b_w);
129   DECLARE_WRITE8_MEMBER(counters_w);
130   DECLARE_READ8_MEMBER(test_r);
114131};
115132
116133
117static WRITE8_HANDLER( luckgrln_reel1_ram_w )
134WRITE8_MEMBER(luckgrln_state::luckgrln_reel1_ram_w)
118135{
119   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
120   state->m_reel1_ram[offset] = data;
121   state->m_reel1_tilemap->mark_tile_dirty(offset);
136   m_reel1_ram[offset] = data;
137   m_reel1_tilemap->mark_tile_dirty(offset);
122138}
123139
124static WRITE8_HANDLER( luckgrln_reel1_attr_w )
140WRITE8_MEMBER(luckgrln_state::luckgrln_reel1_attr_w)
125141{
126   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
127   state->m_reel1_attr[offset] = data;
128   state->m_reel1_tilemap->mark_tile_dirty(offset);
142   m_reel1_attr[offset] = data;
143   m_reel1_tilemap->mark_tile_dirty(offset);
129144}
130145
131146
r14845r14846
148163}
149164
150165
151static WRITE8_HANDLER( luckgrln_reel2_ram_w )
166WRITE8_MEMBER(luckgrln_state::luckgrln_reel2_ram_w)
152167{
153   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
154   state->m_reel2_ram[offset] = data;
155   state->m_reel2_tilemap->mark_tile_dirty(offset);
168   m_reel2_ram[offset] = data;
169   m_reel2_tilemap->mark_tile_dirty(offset);
156170}
157171
158static WRITE8_HANDLER( luckgrln_reel2_attr_w )
172WRITE8_MEMBER(luckgrln_state::luckgrln_reel2_attr_w)
159173{
160   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
161   state->m_reel2_attr[offset] = data;
162   state->m_reel2_tilemap->mark_tile_dirty(offset);
174   m_reel2_attr[offset] = data;
175   m_reel2_tilemap->mark_tile_dirty(offset);
163176}
164177
165178
r14845r14846
180193         0);
181194}
182195
183static WRITE8_HANDLER( luckgrln_reel3_ram_w )
196WRITE8_MEMBER(luckgrln_state::luckgrln_reel3_ram_w)
184197{
185   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
186   state->m_reel3_ram[offset] = data;
187   state->m_reel3_tilemap->mark_tile_dirty(offset);
198   m_reel3_ram[offset] = data;
199   m_reel3_tilemap->mark_tile_dirty(offset);
188200}
189201
190static WRITE8_HANDLER( luckgrln_reel3_attr_w )
202WRITE8_MEMBER(luckgrln_state::luckgrln_reel3_attr_w)
191203{
192   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
193   state->m_reel3_attr[offset] = data;
194   state->m_reel3_tilemap->mark_tile_dirty(offset);
204   m_reel3_attr[offset] = data;
205   m_reel3_tilemap->mark_tile_dirty(offset);
195206}
196207
197208
r14845r14846
211222         0);
212223}
213224
214static WRITE8_HANDLER( luckgrln_reel4_ram_w )
225WRITE8_MEMBER(luckgrln_state::luckgrln_reel4_ram_w)
215226{
216   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
217   state->m_reel4_ram[offset] = data;
218   state->m_reel4_tilemap->mark_tile_dirty(offset);
227   m_reel4_ram[offset] = data;
228   m_reel4_tilemap->mark_tile_dirty(offset);
219229}
220230
221static WRITE8_HANDLER( luckgrln_reel4_attr_w )
231WRITE8_MEMBER(luckgrln_state::luckgrln_reel4_attr_w)
222232{
223   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
224   state->m_reel4_attr[offset] = data;
225   state->m_reel4_tilemap->mark_tile_dirty(offset);
233   m_reel4_attr[offset] = data;
234   m_reel4_tilemap->mark_tile_dirty(offset);
226235}
227236
228237
r14845r14846
363372   AM_RANGE(0x10000, 0x1ffff) AM_ROM AM_REGION("rom_data",0x10000)
364373   AM_RANGE(0x20000, 0x2ffff) AM_ROM AM_REGION("rom_data",0x00000)
365374
366   AM_RANGE(0x0c000, 0x0c1ff) AM_RAM_WRITE_LEGACY(luckgrln_reel1_ram_w)  AM_BASE(m_reel1_ram) // only written to half way
367   AM_RANGE(0x0c800, 0x0c9ff) AM_RAM_WRITE_LEGACY(luckgrln_reel1_attr_w) AM_BASE(m_reel1_attr)
375   AM_RANGE(0x0c000, 0x0c1ff) AM_RAM_WRITE(luckgrln_reel1_ram_w)  AM_BASE(m_reel1_ram) // only written to half way
376   AM_RANGE(0x0c800, 0x0c9ff) AM_RAM_WRITE(luckgrln_reel1_attr_w) AM_BASE(m_reel1_attr)
368377   AM_RANGE(0x0d000, 0x0d03f) AM_RAM AM_BASE(m_reel1_scroll) AM_MIRROR(0x000c0)
369378
370   AM_RANGE(0x0c200, 0x0c3ff) AM_RAM_WRITE_LEGACY(luckgrln_reel2_ram_w)  AM_BASE(m_reel2_ram)
371   AM_RANGE(0x0ca00, 0x0cbff) AM_RAM_WRITE_LEGACY(luckgrln_reel2_attr_w) AM_BASE(m_reel2_attr)
379   AM_RANGE(0x0c200, 0x0c3ff) AM_RAM_WRITE(luckgrln_reel2_ram_w)  AM_BASE(m_reel2_ram)
380   AM_RANGE(0x0ca00, 0x0cbff) AM_RAM_WRITE(luckgrln_reel2_attr_w) AM_BASE(m_reel2_attr)
372381   AM_RANGE(0x0d200, 0x0d23f) AM_RAM AM_BASE(m_reel2_scroll) AM_MIRROR(0x000c0)
373382
374   AM_RANGE(0x0c400, 0x0c5ff) AM_RAM_WRITE_LEGACY(luckgrln_reel3_ram_w ) AM_BASE(m_reel3_ram)
375   AM_RANGE(0x0cc00, 0x0cdff) AM_RAM_WRITE_LEGACY(luckgrln_reel3_attr_w) AM_BASE(m_reel3_attr)
383   AM_RANGE(0x0c400, 0x0c5ff) AM_RAM_WRITE(luckgrln_reel3_ram_w ) AM_BASE(m_reel3_ram)
384   AM_RANGE(0x0cc00, 0x0cdff) AM_RAM_WRITE(luckgrln_reel3_attr_w) AM_BASE(m_reel3_attr)
376385   AM_RANGE(0x0d400, 0x0d43f) AM_RAM AM_BASE(m_reel3_scroll) AM_MIRROR(0x000c0)
377386
378   AM_RANGE(0x0c600, 0x0c7ff) AM_RAM_WRITE_LEGACY(luckgrln_reel4_ram_w ) AM_BASE(m_reel4_ram)
379   AM_RANGE(0x0ce00, 0x0cfff) AM_RAM_WRITE_LEGACY(luckgrln_reel4_attr_w) AM_BASE(m_reel4_attr)
387   AM_RANGE(0x0c600, 0x0c7ff) AM_RAM_WRITE(luckgrln_reel4_ram_w ) AM_BASE(m_reel4_ram)
388   AM_RANGE(0x0ce00, 0x0cfff) AM_RAM_WRITE(luckgrln_reel4_attr_w) AM_BASE(m_reel4_attr)
380389   AM_RANGE(0x0d600, 0x0d63f) AM_RAM AM_BASE(m_reel4_scroll)
381390
382391//  AM_RANGE(0x0d200, 0x0d2ff) AM_RAM
r14845r14846
400409   AM_RANGE(0xf0000, 0xfffff) AM_UNMAP
401410ADDRESS_MAP_END
402411
403static WRITE8_HANDLER( output_w )
412WRITE8_MEMBER(luckgrln_state::output_w)
404413{
405   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
406414   /* correct? */
407415   if (data==0x84)
408      state->m_nmi_enable = 0;
416      m_nmi_enable = 0;
409417   else if (data==0x85)
410      state->m_nmi_enable = 1;
418      m_nmi_enable = 1;
411419   else
412420      printf("output_w unk data %02x\n",data);
413421}
414422
415423
416424
417static WRITE8_HANDLER( palette_offset_low_w )
425WRITE8_MEMBER(luckgrln_state::palette_offset_low_w)
418426{
419   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
420   state->m_palette_count = data<<1;
427   m_palette_count = data<<1;
421428}
422static WRITE8_HANDLER( palette_offset_high_w )
429WRITE8_MEMBER(luckgrln_state::palette_offset_high_w)
423430{
424   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
425   state->m_palette_count = state->m_palette_count | data<<9;
431   m_palette_count = m_palette_count | data<<9;
426432}
427433
428434
429static WRITE8_HANDLER( palette_w )
435WRITE8_MEMBER(luckgrln_state::palette_w)
430436{
431   luckgrln_state *state = space->machine().driver_data<luckgrln_state>();
432   state->m_palette_ram[state->m_palette_count] = data;
437   m_palette_ram[m_palette_count] = data;
433438
434439
435440   {
436441      int r,g,b;
437442      int offs;
438443      UINT16 dat;
439      offs = state->m_palette_count&~0x1;
440      dat = state->m_palette_ram[offs] | state->m_palette_ram[offs+1]<<8;
444      offs = m_palette_count&~0x1;
445      dat = m_palette_ram[offs] | m_palette_ram[offs+1]<<8;
441446
442447      r = (dat >> 0) & 0x1f;
443448      g = (dat >> 5) & 0x1f;
444449      b = (dat >> 10) & 0x1f;
445450
446      palette_set_color_rgb(space->machine(), offs/2, pal5bit(r), pal5bit(g), pal5bit(b));
451      palette_set_color_rgb(machine(), offs/2, pal5bit(r), pal5bit(g), pal5bit(b));
447452
448453   }
449454
450   state->m_palette_count++;
455   m_palette_count++;
451456
452457}
453458
454459// Oki M62X428 is a 4-bit RTC, doesn't seem to be millennium bug proof ...
455static READ8_HANDLER( rtc_r )
460READ8_MEMBER(luckgrln_state::rtc_r)
456461{
457462   system_time systime;
458   space->machine().base_datetime(systime);
463   machine().base_datetime(systime);
459464
460465   switch(offset)
461466   {
r14845r14846
479484}
480485
481486/* Analizing the lamps, the game should has a 12-buttons control layout */
482static WRITE8_HANDLER(lamps_a_w)
487WRITE8_MEMBER(luckgrln_state::lamps_a_w)
483488{
484489/*  LAMPS A:
485490
r14845r14846
504509   output_set_lamp_value(7, (data >> 7) & 1);      /* TAKE */
505510}
506511
507static WRITE8_HANDLER(lamps_b_w)
512WRITE8_MEMBER(luckgrln_state::lamps_b_w)
508513{
509514/*  LAMPS B:
510515
r14845r14846
523528   output_set_lamp_value(11, (data >> 3) & 1);      /* CANCEL */
524529}
525530
526static WRITE8_HANDLER(counters_w)
531WRITE8_MEMBER(luckgrln_state::counters_w)
527532{
528533/*  COUNTERS:
529534
r14845r14846
535540    xxxx ----  unused
536541
537542*/
538   coin_counter_w(space->machine(), 0, data & 0x01);   /* COIN 1 */
539   coin_counter_w(space->machine(), 1, data & 0x04);   /* COIN 2 */
540   coin_counter_w(space->machine(), 2, data & 0x08);   /* COIN 3 */
541   coin_counter_w(space->machine(), 3, data & 0x02);   /* KEY IN */
543   coin_counter_w(machine(), 0, data & 0x01);   /* COIN 1 */
544   coin_counter_w(machine(), 1, data & 0x04);   /* COIN 2 */
545   coin_counter_w(machine(), 2, data & 0x08);   /* COIN 3 */
546   coin_counter_w(machine(), 3, data & 0x02);   /* KEY IN */
542547}
543548
544549
r14845r14846
546551static ADDRESS_MAP_START( portmap, AS_IO, 8, luckgrln_state )
547552   ADDRESS_MAP_GLOBAL_MASK(0xff)
548553   AM_RANGE(0x0000, 0x003f) AM_RAM // Z180 internal regs
549   AM_RANGE(0x0060, 0x0060) AM_WRITE_LEGACY(output_w)
554   AM_RANGE(0x0060, 0x0060) AM_WRITE(output_w)
550555
551   AM_RANGE(0x0090, 0x009f) AM_READ_LEGACY(rtc_r) //AM_WRITENOP
556   AM_RANGE(0x0090, 0x009f) AM_READ(rtc_r) //AM_WRITENOP
552557
553   AM_RANGE(0x00a0, 0x00a0) AM_WRITE_LEGACY(palette_offset_low_w)
554   AM_RANGE(0x00a1, 0x00a1) AM_WRITE_LEGACY(palette_offset_high_w)
555   AM_RANGE(0x00a2, 0x00a2) AM_WRITE_LEGACY(palette_w)
558   AM_RANGE(0x00a0, 0x00a0) AM_WRITE(palette_offset_low_w)
559   AM_RANGE(0x00a1, 0x00a1) AM_WRITE(palette_offset_high_w)
560   AM_RANGE(0x00a2, 0x00a2) AM_WRITE(palette_w)
556561
557562   AM_RANGE(0x00b0, 0x00b0) AM_DEVWRITE("crtc", mc6845_device, address_w)
558563   AM_RANGE(0x00b1, 0x00b1) AM_DEVWRITE("crtc", mc6845_device, register_w)
559564
560565   AM_RANGE(0x00b8, 0x00b8) AM_READ_PORT("IN0")
561   AM_RANGE(0x00b9, 0x00b9) AM_READ_PORT("IN1") AM_WRITE_LEGACY(counters_w)
562   AM_RANGE(0x00ba, 0x00ba) AM_READ_PORT("IN2") AM_WRITE_LEGACY(lamps_a_w)
563   AM_RANGE(0x00bb, 0x00bb) AM_READ_PORT("IN3") AM_WRITE_LEGACY(lamps_b_w)
566   AM_RANGE(0x00b9, 0x00b9) AM_READ_PORT("IN1") AM_WRITE(counters_w)
567   AM_RANGE(0x00ba, 0x00ba) AM_READ_PORT("IN2") AM_WRITE(lamps_a_w)
568   AM_RANGE(0x00bb, 0x00bb) AM_READ_PORT("IN3") AM_WRITE(lamps_b_w)
564569   AM_RANGE(0x00bc, 0x00bc) AM_READ_PORT("DSW1")
565570
566571   AM_RANGE(0x00c0, 0x00c3) AM_WRITENOP
r14845r14846
598603ADDRESS_MAP_END
599604
600605/* reads a bit 1 status there after every round played */
601static READ8_HANDLER( test_r )
606READ8_MEMBER(luckgrln_state::test_r)
602607{
603608   return 0xff;
604609}
605610
606611static ADDRESS_MAP_START( _7smash_io, AS_IO, 8, luckgrln_state )
607   AM_RANGE(0x66, 0x66) AM_READ_LEGACY(test_r)
612   AM_RANGE(0x66, 0x66) AM_READ(test_r)
608613   AM_IMPORT_FROM( portmap )
609614ADDRESS_MAP_END
610615
src/mame/drivers/sigmab98.c
r14845r14846
122122   UINT8 m_vblank_vector;
123123   UINT8 m_timer0_vector;
124124   UINT8 m_timer1_vector;
125   DECLARE_WRITE8_MEMBER(regs_w);
126   DECLARE_READ8_MEMBER(regs_r);
127   DECLARE_WRITE8_MEMBER(regs2_w);
128   DECLARE_READ8_MEMBER(regs2_r);
129   DECLARE_WRITE8_MEMBER(c4_w);
130   DECLARE_WRITE8_MEMBER(c6_w);
131   DECLARE_WRITE8_MEMBER(c8_w);
132   DECLARE_WRITE8_MEMBER(animalc_rombank_w);
133   DECLARE_READ8_MEMBER(animalc_rombank_r);
134   DECLARE_WRITE8_MEMBER(animalc_rambank_w);
135   DECLARE_READ8_MEMBER(animalc_rambank_r);
136   DECLARE_READ8_MEMBER(unk_34_r);
137   DECLARE_READ8_MEMBER(vblank_r);
138   DECLARE_WRITE8_MEMBER(vblank_w);
139   DECLARE_WRITE8_MEMBER(sammymdl_coin_w);
140   DECLARE_WRITE8_MEMBER(sammymdl_leds_w);
141   DECLARE_WRITE8_MEMBER(sammymdl_hopper_w);
142   DECLARE_READ8_MEMBER(sammymdl_coin_hopper_r);
143   DECLARE_WRITE8_MEMBER(haekaka_rombank_w);
144   DECLARE_READ8_MEMBER(haekaka_rombank_r);
145   DECLARE_WRITE8_MEMBER(haekaka_rambank_w);
146   DECLARE_READ8_MEMBER(haekaka_rambank_r);
147   DECLARE_READ8_MEMBER(haekaka_vblank_r);
148   DECLARE_READ8_MEMBER(haekaka_b000_r);
149   DECLARE_WRITE8_MEMBER(haekaka_b000_w);
150   DECLARE_WRITE8_MEMBER(haekaka_leds_w);
151   DECLARE_WRITE8_MEMBER(haekaka_coin_w);
152   DECLARE_WRITE8_MEMBER(itazuram_rombank_w);
153   DECLARE_READ8_MEMBER(itazuram_rombank_r);
154   DECLARE_WRITE8_MEMBER(itazuram_rambank_w);
155   DECLARE_READ8_MEMBER(itazuram_rambank_r);
156   DECLARE_WRITE8_MEMBER(itazuram_nvram_palette_w);
157   DECLARE_WRITE8_MEMBER(itazuram_palette_w);
158   DECLARE_READ8_MEMBER(itazuram_palette_r);
159   DECLARE_WRITE8_MEMBER(tdoboon_rombank_w);
160   DECLARE_READ8_MEMBER(tdoboon_rombank_r);
161   DECLARE_WRITE8_MEMBER(tdoboon_rambank_w);
162   DECLARE_READ8_MEMBER(tdoboon_rambank_r);
163   DECLARE_READ8_MEMBER(tdoboon_c000_r);
164   DECLARE_WRITE8_MEMBER(tdoboon_c000_w);
165   void show_outputs();
166   void show_3_outputs();
125167};
126168
127169
r14845r14846
289331***************************************************************************/
290332
291333// rombank
292static WRITE8_HANDLER( regs_w )
334WRITE8_MEMBER(sigmab98_state::regs_w)
293335{
294   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
295336   if (offset == 0)
296337   {
297      state->m_reg = data;
338      m_reg = data;
298339      return;
299340   }
300341
301   switch ( state->m_reg )
342   switch ( m_reg )
302343   {
303344      case 0x1f:
304         state->m_rombank = data;
345         m_rombank = data;
305346         if (data >= 0x18)
306            logerror("%s: unknown rom bank = %02x\n", space->machine().describe_context(), data);
347            logerror("%s: unknown rom bank = %02x\n", machine().describe_context(), data);
307348         else
308            memory_set_bank(space->machine(), "rombank", data);
349            memory_set_bank(machine(), "rombank", data);
309350         break;
310351
311352      default:
312         logerror("%s: unknown reg written: %02x = %02x\n", space->machine().describe_context(), state->m_reg, data);
353         logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data);
313354   }
314355}
315static READ8_HANDLER( regs_r )
356READ8_MEMBER(sigmab98_state::regs_r)
316357{
317   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
318358   if (offset == 0)
319      return state->m_reg;
359      return m_reg;
320360
321   switch ( state->m_reg )
361   switch ( m_reg )
322362   {
323363      case 0x1f:
324         return state->m_rombank;
364         return m_rombank;
325365
326366      default:
327         logerror("%s: unknown reg read: %02x\n", space->machine().describe_context(), state->m_reg);
367         logerror("%s: unknown reg read: %02x\n", machine().describe_context(), m_reg);
328368         return 0x00;
329369   }
330370}
331371
332372// rambank
333static WRITE8_HANDLER( regs2_w )
373WRITE8_MEMBER(sigmab98_state::regs2_w)
334374{
335   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
336375   if (offset == 0)
337376   {
338      state->m_reg2 = data;
377      m_reg2 = data;
339378      return;
340379   }
341380
342   switch ( state->m_reg2 )
381   switch ( m_reg2 )
343382   {
344383      case 0xb5:
345         state->m_rambank = data;
384         m_rambank = data;
346385         switch (data)
347386         {
348387            case 0x32:
349               memory_set_bank(space->machine(), "rambank", 0);
388               memory_set_bank(machine(), "rambank", 0);
350389               break;
351390            case 0x36:
352               memory_set_bank(space->machine(), "rambank", 1);
391               memory_set_bank(machine(), "rambank", 1);
353392               break;
354393            default:
355               logerror("%s: unknown ram bank = %02x\n", space->machine().describe_context(), data);
394               logerror("%s: unknown ram bank = %02x\n", machine().describe_context(), data);
356395         }
357396         break;
358397
359398      default:
360         logerror("%s: unknown reg2 written: %02x = %02x\n", space->machine().describe_context(), state->m_reg2, data);
399         logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data);
361400   }
362401}
363static READ8_HANDLER( regs2_r )
402READ8_MEMBER(sigmab98_state::regs2_r)
364403{
365   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
366404   if (offset == 0)
367      return state->m_reg2;
405      return m_reg2;
368406
369   switch ( state->m_reg2 )
407   switch ( m_reg2 )
370408   {
371409      case 0xb5:
372         return state->m_rambank;
410         return m_rambank;
373411
374412      default:
375         logerror("%s: unknown reg2 read: %02x\n", space->machine().describe_context(), state->m_reg2);
413         logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2);
376414         return 0x00;
377415   }
378416}
r14845r14846
380418
381419// Outputs
382420
383static void show_outputs(sigmab98_state *state)
421void sigmab98_state::show_outputs()
384422{
385423#ifdef MAME_DEBUG
386//  popmessage("0: %02X  4: %02X  6: %02X  8: %02X",state->m_c0,state->m_c4,state->m_c6,state->m_c8);
424//  popmessage("0: %02X  4: %02X  6: %02X  8: %02X",m_c0,m_c4,m_c6,m_c8);
387425#endif
388426}
389427
r14845r14846
403441   eeprom->set_clock_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
404442
405443   state->m_c0 = data;
406   show_outputs(state);
444   //show_outputs(state);
407445}
408446
409447// Port c4
410448// 10 led?
411static WRITE8_HANDLER( c4_w )
449WRITE8_MEMBER(sigmab98_state::c4_w)
412450{
413   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
414   set_led_status(space->machine(), 0, (data & 0x10));
451   set_led_status(machine(), 0, (data & 0x10));
415452
416   state->m_c4 = data;
417   show_outputs(state);
453   m_c4 = data;
454   show_outputs();
418455}
419456
420457// Port c6
r14845r14846
423460// 08 always blinks
424461// 10 led?
425462// 20 blinks after coin up
426static WRITE8_HANDLER( c6_w )
463WRITE8_MEMBER(sigmab98_state::c6_w)
427464{
428   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
429   coin_lockout_w(space->machine(), 0, (~data) & 0x02);
465   coin_lockout_w(machine(), 0, (~data) & 0x02);
430466
431   coin_counter_w(space->machine(), 0,   data  & 0x04);
467   coin_counter_w(machine(), 0,   data  & 0x04);
432468
433   set_led_status(space->machine(), 1,   data  & 0x08);
434   set_led_status(space->machine(), 2,   data  & 0x10);
435   set_led_status(space->machine(), 3,   data  & 0x20);   //
469   set_led_status(machine(), 1,   data  & 0x08);
470   set_led_status(machine(), 2,   data  & 0x10);
471   set_led_status(machine(), 3,   data  & 0x20);   //
436472
437   state->m_c6 = data;
438   show_outputs(state);
473   m_c6 = data;
474   show_outputs();
439475}
440476
441477// Port c8
442478// 01 hopper enable?
443479// 02 hopper motor on (active low)?
444static WRITE8_HANDLER( c8_w )
480WRITE8_MEMBER(sigmab98_state::c8_w)
445481{
446   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
447   ticket_dispenser_w(space->machine().device("hopper"), 0, (!(data & 0x02) && (data & 0x01)) ? 0x00 : 0x80);
482   ticket_dispenser_w(machine().device("hopper"), 0, (!(data & 0x02) && (data & 0x01)) ? 0x00 : 0x80);
448483
449   state->m_c8 = data;
450   show_outputs(state);
484   m_c8 = data;
485   show_outputs();
451486}
452487
453488static ADDRESS_MAP_START( gegege_mem_map, AS_PROGRAM, 8, sigmab98_state )
r14845r14846
473508
474509   AM_RANGE( 0x00, 0x01 ) AM_DEVWRITE_LEGACY("ymz", ymz280b_w )
475510
476   AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE_LEGACY(regs_r,  regs_w )
511   AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE(regs_r,  regs_w )
477512//  AM_RANGE( 0xa2, 0xa3 )
478   AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE_LEGACY(regs2_r, regs2_w )
513   AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE(regs2_r, regs2_w )
479514
480515   AM_RANGE( 0xc0, 0xc0 ) AM_READ_PORT( "EEPROM" )
481516   AM_RANGE( 0xc0, 0xc0 ) AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
r14845r14846
483518   AM_RANGE( 0xc2, 0xc2 ) AM_READ_PORT( "IN1" )
484519
485520   AM_RANGE( 0xc4, 0xc4 ) AM_READ_PORT( "IN2" )
486   AM_RANGE( 0xc4, 0xc4 ) AM_WRITE_LEGACY(c4_w )
521   AM_RANGE( 0xc4, 0xc4 ) AM_WRITE(c4_w )
487522
488   AM_RANGE( 0xc6, 0xc6 ) AM_WRITE_LEGACY(c6_w )
523   AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(c6_w )
489524
490   AM_RANGE( 0xc8, 0xc8 ) AM_WRITE_LEGACY(c8_w )
525   AM_RANGE( 0xc8, 0xc8 ) AM_WRITE(c8_w )
491526
492527   AM_RANGE( 0xe5, 0xe5 ) AM_READNOP   // during irq
493528ADDRESS_MAP_END
r14845r14846
498533***************************************************************************/
499534
500535// rombank
501static WRITE8_HANDLER( animalc_rombank_w )
536WRITE8_MEMBER(sigmab98_state::animalc_rombank_w)
502537{
503   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
504538   if (offset == 0)
505539   {
506      state->m_reg = data;
540      m_reg = data;
507541      return;
508542   }
509543
510   UINT8 *rom = space->machine().region("maincpu")->base();
511   switch ( state->m_reg )
544   UINT8 *rom = machine().region("maincpu")->base();
545   switch ( m_reg )
512546   {
513547      case 0x0f:
514         state->m_rombank = data;
548         m_rombank = data;
515549         switch (data)
516550         {
517            case 0x10:   memory_set_bankptr(space->machine(), "rombank", rom + 0x400 + 0x4000);   break;
518            case 0x14:   memory_set_bankptr(space->machine(), "rombank", rom + 0x400 + 0x8000);   break;
519            case 0x18:   memory_set_bankptr(space->machine(), "rombank", rom + 0x400 + 0xc000);   break;
551            case 0x10:   memory_set_bankptr(machine(), "rombank", rom + 0x400 + 0x4000);   break;
552            case 0x14:   memory_set_bankptr(machine(), "rombank", rom + 0x400 + 0x8000);   break;
553            case 0x18:   memory_set_bankptr(machine(), "rombank", rom + 0x400 + 0xc000);   break;
520554            default:
521               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
555               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
522556         }
523557         break;
524558
525559      default:
526         logerror("%s: unknown reg written: %02x = %02x\n", space->machine().describe_context(), state->m_reg, data);
560         logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data);
527561   }
528562}
529static READ8_HANDLER( animalc_rombank_r )
563READ8_MEMBER(sigmab98_state::animalc_rombank_r)
530564{
531   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
532565   if (offset == 0)
533      return state->m_reg;
566      return m_reg;
534567
535   switch ( state->m_reg )
568   switch ( m_reg )
536569   {
537570      case 0x0f:
538         return state->m_rombank;
571         return m_rombank;
539572
540573      default:
541         logerror("%s: unknown reg read: %02x\n", space->machine().describe_context(), state->m_reg);
574         logerror("%s: unknown reg read: %02x\n", machine().describe_context(), m_reg);
542575         return 0x00;
543576   }
544577}
545578
546579// rambank
547static WRITE8_HANDLER( animalc_rambank_w )
580WRITE8_MEMBER(sigmab98_state::animalc_rambank_w)
548581{
549   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
550582   if (offset == 0)
551583   {
552      state->m_reg2 = data;
584      m_reg2 = data;
553585      return;
554586   }
555587
556588   int bank = 0;
557   switch ( state->m_reg2 )
589   switch ( m_reg2 )
558590   {
559591      case 0x1f:
560         state->m_rambank = data;
592         m_rambank = data;
561593         switch (data)
562594         {
563595            case 0x58:   bank = 0;   break;
r14845r14846
566598            case 0x64:   bank = 3;   break;
567599            case 0x65:   bank = 4;   break;
568600            default:
569               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", space->machine().describe_context(), data, state->m_reg2);
601               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", machine().describe_context(), data, m_reg2);
570602               return;
571603         }
572         memory_set_bank(space->machine(), "rambank", bank);
604         memory_set_bank(machine(), "rambank", bank);
573605         if ( (bank == 1) || (bank == 2) || (bank == 3) )
574            memory_set_bank(space->machine(), "sprbank", bank-1);
606            memory_set_bank(machine(), "sprbank", bank-1);
575607         break;
576608
577609      default:
578         logerror("%s: unknown reg2 written: %02x = %02x\n", space->machine().describe_context(), state->m_reg2, data);
610         logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data);
579611   }
580612}
581static READ8_HANDLER( animalc_rambank_r )
613READ8_MEMBER(sigmab98_state::animalc_rambank_r)
582614{
583   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
584615   if (offset == 0)
585      return state->m_reg2;
616      return m_reg2;
586617
587   switch ( state->m_reg2 )
618   switch ( m_reg2 )
588619   {
589620      case 0x1f:
590         return state->m_rambank;
621         return m_rambank;
591622
592623      default:
593         logerror("%s: unknown reg2 read: %02x\n", space->machine().describe_context(), state->m_reg2);
624         logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2);
594625         return 0x00;
595626   }
596627}
r14845r14846
618649      logerror("%s: unknown eeeprom bits written %02x\n", device->machine().describe_context(), data);
619650}
620651
621static READ8_HANDLER( unk_34_r )
652READ8_MEMBER(sigmab98_state::unk_34_r)
622653{
623654   // mask 0x01?
624655   return 0x01;
625656}
626657
627static READ8_HANDLER( vblank_r )
658READ8_MEMBER(sigmab98_state::vblank_r)
628659{
629   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
630660   // mask 0x04 must be set before writing sprite list
631661   // mask 0x10 must be set or irq/00 hangs?
632   return   state->m_vblank | 0x14;
662   return   m_vblank | 0x14;
633663}
634664
635static WRITE8_HANDLER( vblank_w )
665WRITE8_MEMBER(sigmab98_state::vblank_w)
636666{
637   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
638   state->m_vblank = (state->m_vblank & ~0x03) | (data & 0x03);
667   m_vblank = (m_vblank & ~0x03) | (data & 0x03);
639668}
640669
641670static SCREEN_VBLANK( sammymdl )
r14845r14846
648677   }
649678}
650679
651static void show_3_outputs(sigmab98_state *state)
680void sigmab98_state::show_3_outputs()
652681{
653682#ifdef MAME_DEBUG
654//  popmessage("COIN: %02X  LED: %02X  HOP: %02X", state->m_out[0], state->m_out[1], state->m_out[2]);
683//  popmessage("COIN: %02X  LED: %02X  HOP: %02X", m_out[0], m_out[1], m_out[2]);
655684#endif
656685}
657686// Port 31
658static WRITE8_HANDLER( sammymdl_coin_w )
687WRITE8_MEMBER(sigmab98_state::sammymdl_coin_w)
659688{
660   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
661   coin_counter_w(space->machine(), 0,   data  & 0x01 );   // coin1 in
662   coin_counter_w(space->machine(), 1,   data  & 0x02 );   // coin2 in
663   coin_counter_w(space->machine(), 2,   data  & 0x04 );   // medal in
689   coin_counter_w(machine(), 0,   data  & 0x01 );   // coin1 in
690   coin_counter_w(machine(), 1,   data  & 0x02 );   // coin2 in
691   coin_counter_w(machine(), 2,   data  & 0x04 );   // medal in
664692
665//  coin_lockout_w(space->machine(), 1, (~data) & 0x08 ); // coin2 lockout?
666//  coin_lockout_w(space->machine(), 0, (~data) & 0x10 ); // coin1 lockout
667//  coin_lockout_w(space->machine(), 2, (~data) & 0x20 ); // medal lockout?
693//  coin_lockout_w(machine(), 1, (~data) & 0x08 ); // coin2 lockout?
694//  coin_lockout_w(machine(), 0, (~data) & 0x10 ); // coin1 lockout
695//  coin_lockout_w(machine(), 2, (~data) & 0x20 ); // medal lockout?
668696
669   state->m_out[0] = data;
670   show_3_outputs(state);
697   m_out[0] = data;
698   show_3_outputs();
671699}
672700
673701// Port 32
674static WRITE8_HANDLER( sammymdl_leds_w )
702WRITE8_MEMBER(sigmab98_state::sammymdl_leds_w)
675703{
676   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
677   set_led_status(space->machine(), 0,   data & 0x01);   // button
704   set_led_status(machine(), 0,   data & 0x01);   // button
678705
679   state->m_out[1] = data;
680   show_3_outputs(state);
706   m_out[1] = data;
707   show_3_outputs();
681708}
682709
683710// Port b0
684711// 02 hopper enable?
685712// 01 hopper motor on (active low)?
686static WRITE8_HANDLER( sammymdl_hopper_w )
713WRITE8_MEMBER(sigmab98_state::sammymdl_hopper_w)
687714{
688   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
689   ticket_dispenser_w(space->machine().device("hopper"), 0, (!(data & 0x01) && (data & 0x02)) ? 0x00 : 0x80);
715   ticket_dispenser_w(machine().device("hopper"), 0, (!(data & 0x01) && (data & 0x02)) ? 0x00 : 0x80);
690716
691   state->m_out[2] = data;
692   show_3_outputs(state);
717   m_out[2] = data;
718   show_3_outputs();
693719}
694720
695static READ8_HANDLER( sammymdl_coin_hopper_r )
721READ8_MEMBER(sigmab98_state::sammymdl_coin_hopper_r)
696722{
697   UINT8 ret = input_port_read(space->machine(), "COIN");
723   UINT8 ret = input_port_read(machine(), "COIN");
698724
699//  if ( !ticket_dispenser_r(space->machine().device("hopper"), 0) )
725//  if ( !ticket_dispenser_r(machine().device("hopper"), 0) )
700726//      ret &= ~0x01;
701727
702728   return ret;
r14845r14846
715741   AM_RANGE( 0xd800, 0xd87f ) AM_RAM   // table?
716742
717743   AM_RANGE( 0xe011, 0xe011 ) AM_WRITENOP   // IRQ Enable? Screen disable?
718   AM_RANGE( 0xe013, 0xe013 ) AM_READWRITE_LEGACY(vblank_r, vblank_w )   // IRQ Ack?
744   AM_RANGE( 0xe013, 0xe013 ) AM_READWRITE(vblank_r, vblank_w )   // IRQ Ack?
719745
720746   AM_RANGE( 0xfe00, 0xffff ) AM_RAM   // High speed internal RAM
721747ADDRESS_MAP_END
722748
723749static ADDRESS_MAP_START( animalc_io, AS_IO, 8, sigmab98_state )
724750   ADDRESS_MAP_GLOBAL_MASK(0xff)
725   AM_RANGE( 0x02, 0x03 ) AM_READWRITE_LEGACY(animalc_rombank_r, animalc_rombank_w )
726   AM_RANGE( 0x04, 0x05 ) AM_READWRITE_LEGACY(animalc_rambank_r, animalc_rambank_w )
751   AM_RANGE( 0x02, 0x03 ) AM_READWRITE(animalc_rombank_r, animalc_rombank_w )
752   AM_RANGE( 0x04, 0x05 ) AM_READWRITE(animalc_rambank_r, animalc_rambank_w )
727753
728754   AM_RANGE( 0x2c, 0x2c ) AM_DEVREADWRITE_LEGACY("eeprom", sammymdl_eeprom_r, sammymdl_eeprom_w )
729   AM_RANGE( 0x2e, 0x2e ) AM_READ_LEGACY(sammymdl_coin_hopper_r )
755   AM_RANGE( 0x2e, 0x2e ) AM_READ(sammymdl_coin_hopper_r )
730756   AM_RANGE( 0x30, 0x30 ) AM_READ_PORT( "BUTTON" )
731   AM_RANGE( 0x31, 0x31 ) AM_WRITE_LEGACY(sammymdl_coin_w )
732   AM_RANGE( 0x32, 0x32 ) AM_WRITE_LEGACY(sammymdl_leds_w )
733   AM_RANGE( 0x34, 0x34 ) AM_READ_LEGACY(unk_34_r )
757   AM_RANGE( 0x31, 0x31 ) AM_WRITE(sammymdl_coin_w )
758   AM_RANGE( 0x32, 0x32 ) AM_WRITE(sammymdl_leds_w )
759   AM_RANGE( 0x34, 0x34 ) AM_READ(unk_34_r )
734760   AM_RANGE( 0x90, 0x90 ) AM_DEVWRITE("oki", okim9810_device, write )
735761   AM_RANGE( 0x91, 0x91 ) AM_DEVWRITE("oki", okim9810_device, write_TMP_register )
736762   AM_RANGE( 0x92, 0x92 ) AM_DEVREAD("oki", okim9810_device, read )
737   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE_LEGACY(sammymdl_hopper_w )
763   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE(sammymdl_hopper_w )
738764   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE_LEGACY(watchdog_reset_w )   // 1
739765ADDRESS_MAP_END
740766
r14845r14846
743769***************************************************************************/
744770
745771// rombank
746static WRITE8_HANDLER( haekaka_rombank_w )
772WRITE8_MEMBER(sigmab98_state::haekaka_rombank_w)
747773{
748   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
749774   if (offset == 0)
750775   {
751      state->m_reg = data;
776      m_reg = data;
752777      return;
753778   }
754779
755   switch ( state->m_reg )
780   switch ( m_reg )
756781   {
757782      case 0x2b:
758         state->m_rombank = data;
783         m_rombank = data;
759784         switch (data)
760785         {
761786            case 0x10:   // ROM
r14845r14846
780805               break;
781806
782807            default:
783               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
808               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
784809         }
785810         break;
786811
787812      default:
788         logerror("%s: unknown reg written: %02x = %02x\n", space->machine().describe_context(), state->m_reg, data);
813         logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data);
789814   }
790815}
791static READ8_HANDLER( haekaka_rombank_r )
816READ8_MEMBER(sigmab98_state::haekaka_rombank_r)
792817{
793   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
794818   if (offset == 0)
795      return state->m_reg;
819      return m_reg;
796820
797   switch ( state->m_reg )
821   switch ( m_reg )
798822   {
799823      case 0x2b:
800         return state->m_rombank;
824         return m_rombank;
801825
802826      default:
803         logerror("%s: unknown reg read: %02x\n", space->machine().describe_context(), state->m_reg);
827         logerror("%s: unknown reg read: %02x\n", machine().describe_context(), m_reg);
804828         return 0x00;
805829   }
806830}
807831
808832// rambank
809static WRITE8_HANDLER( haekaka_rambank_w )
833WRITE8_MEMBER(sigmab98_state::haekaka_rambank_w)
810834{
811   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
812835   if (offset == 0)
813836   {
814      state->m_reg2 = data;
837      m_reg2 = data;
815838      return;
816839   }
817840
818   switch ( state->m_reg2 )
841   switch ( m_reg2 )
819842   {
820843      case 0x33:
821         state->m_rambank = data;
844         m_rambank = data;
822845         switch (data)
823846         {
824847            case 0x53:
825848               break;
826849
827850            default:
828               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", space->machine().describe_context(), data, state->m_reg2);
851               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", machine().describe_context(), data, m_reg2);
829852         }
830853         break;
831854
832855      default:
833         logerror("%s: unknown reg2 written: %02x = %02x\n", space->machine().describe_context(), state->m_reg2, data);
856         logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data);
834857   }
835858}
836static READ8_HANDLER( haekaka_rambank_r )
859READ8_MEMBER(sigmab98_state::haekaka_rambank_r)
837860{
838   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
839861   if (offset == 0)
840      return state->m_reg2;
862      return m_reg2;
841863
842   switch ( state->m_reg2 )
864   switch ( m_reg2 )
843865   {
844866      case 0x33:
845         return state->m_rambank;
867         return m_rambank;
846868
847869      default:
848         logerror("%s: unknown reg2 read: %02x\n", space->machine().describe_context(), state->m_reg2);
870         logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2);
849871         return 0x00;
850872   }
851873}
852874
853static READ8_HANDLER( haekaka_vblank_r )
875READ8_MEMBER(sigmab98_state::haekaka_vblank_r)
854876{
855   return space->machine().primary_screen->vblank() ? 0 : 0x1c;
877   return machine().primary_screen->vblank() ? 0 : 0x1c;
856878}
857879
858static READ8_HANDLER( haekaka_b000_r )
880READ8_MEMBER(sigmab98_state::haekaka_b000_r)
859881{
860   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
861   switch (state->m_rombank)
882   switch (m_rombank)
862883   {
863884      case 0x10:   // ROM
864885      case 0x11:
r14845r14846
876897      case 0x1d:
877898      case 0x1e:
878899      case 0x1f:
879         return space->machine().region("maincpu")->base()[offset + 0xb400 + 0x1000 * (state->m_rombank-0x10)];
900         return machine().region("maincpu")->base()[offset + 0xb400 + 0x1000 * (m_rombank-0x10)];
880901
881902      case 0x65:   // SPRITERAM
882903         if (offset < 0x1000)
883            return state->m_spriteram[offset];
904            return m_spriteram[offset];
884905
885906      case 0x67:   // PALETTERAM + TABLE? + REGS
886907         if (offset < 0x200)
887            return space->machine().generic.paletteram.u8[offset];
908            return machine().generic.paletteram.u8[offset];
888909         else if (offset == (0xc013-0xb000))
889910            return haekaka_vblank_r(space, offset);
890911         break;
891912   }
892913
893   logerror("%s: unknown read from %02x with rombank = %02x\n", space->machine().describe_context(), offset+0xb000, state->m_rombank);
914   logerror("%s: unknown read from %02x with rombank = %02x\n", machine().describe_context(), offset+0xb000, m_rombank);
894915   return 0x00;
895916}
896917
897static WRITE8_HANDLER( haekaka_b000_w )
918WRITE8_MEMBER(sigmab98_state::haekaka_b000_w)
898919{
899   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
900   switch (state->m_rombank)
920   switch (m_rombank)
901921   {
902922      case 0x65:   // SPRITERAM
903923         if (offset < 0x1000)
904924         {
905            state->m_spriteram[offset] = data;
925            m_spriteram[offset] = data;
906926            return;
907927         }
908928         break;
r14845r14846
911931         if (offset < 0x200)
912932         {
913933            paletteram_xRRRRRGGGGGBBBBB_be_w(space, offset, data);
914//              space->machine().generic.paletteram.u8[offset] = data;
934//              machine().generic.paletteram.u8[offset] = data;
915935            return;
916936         }
917937         else if ((offset >= 0x800) && (offset < 0x880))
r14845r14846
922942         break;
923943   }
924944
925   logerror("%s: unknown write to %02x = %02x with rombank = %02x\n", space->machine().describe_context(), offset+0xb000, data, state->m_rombank);
945   logerror("%s: unknown write to %02x = %02x with rombank = %02x\n", machine().describe_context(), offset+0xb000, data, m_rombank);
926946}
927947
928static WRITE8_HANDLER( haekaka_leds_w )
948WRITE8_MEMBER(sigmab98_state::haekaka_leds_w)
929949{
930   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
931950   // All used
932   set_led_status(space->machine(), 0,   data & 0x01);
933   set_led_status(space->machine(), 1,   data & 0x02);
934   set_led_status(space->machine(), 2,   data & 0x04);
935   set_led_status(space->machine(), 3,   data & 0x08);
936   set_led_status(space->machine(), 4,   data & 0x10);
937   set_led_status(space->machine(), 5,   data & 0x20);
938   set_led_status(space->machine(), 6,   data & 0x40);
939   set_led_status(space->machine(), 7,   data & 0x80);
951   set_led_status(machine(), 0,   data & 0x01);
952   set_led_status(machine(), 1,   data & 0x02);
953   set_led_status(machine(), 2,   data & 0x04);
954   set_led_status(machine(), 3,   data & 0x08);
955   set_led_status(machine(), 4,   data & 0x10);
956   set_led_status(machine(), 5,   data & 0x20);
957   set_led_status(machine(), 6,   data & 0x40);
958   set_led_status(machine(), 7,   data & 0x80);
940959
941   state->m_out[1] = data;
942   show_3_outputs(state);
960   m_out[1] = data;
961   show_3_outputs();
943962}
944963
945static WRITE8_HANDLER( haekaka_coin_w )
964WRITE8_MEMBER(sigmab98_state::haekaka_coin_w)
946965{
947   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
948   coin_counter_w(space->machine(), 0,   data & 0x01 );   // medal out
966   coin_counter_w(machine(), 0,   data & 0x01 );   // medal out
949967//                                      data & 0x02 ?
950968//                                      data & 0x04 ?
951969//                                      data & 0x10 ?
952970
953   state->m_out[0] = data;
954   show_3_outputs(state);
971   m_out[0] = data;
972   show_3_outputs();
955973}
956974
957975static ADDRESS_MAP_START( haekaka_map, AS_PROGRAM, 8, sigmab98_state )
958976   AM_RANGE( 0x0000, 0x7fff ) AM_ROM
959   AM_RANGE( 0xb000, 0xcfff ) AM_READWRITE_LEGACY(haekaka_b000_r, haekaka_b000_w )
977   AM_RANGE( 0xb000, 0xcfff ) AM_READWRITE(haekaka_b000_r, haekaka_b000_w )
960978   AM_RANGE( 0xd000, 0xefff ) AM_RAM AM_SHARE( "nvram" ) AM_BASE(m_nvram )
961979   AM_RANGE( 0xfe00, 0xffff ) AM_RAM   // High speed internal RAM
962980ADDRESS_MAP_END
963981
964982static ADDRESS_MAP_START( haekaka_io, AS_IO, 8, sigmab98_state )
965983   ADDRESS_MAP_GLOBAL_MASK(0xff)
966   AM_RANGE( 0x02, 0x03 ) AM_READWRITE_LEGACY(haekaka_rombank_r, haekaka_rombank_w )
967   AM_RANGE( 0x04, 0x05 ) AM_READWRITE_LEGACY(haekaka_rambank_r, haekaka_rambank_w )
984   AM_RANGE( 0x02, 0x03 ) AM_READWRITE(haekaka_rombank_r, haekaka_rombank_w )
985   AM_RANGE( 0x04, 0x05 ) AM_READWRITE(haekaka_rambank_r, haekaka_rambank_w )
968986
969987   AM_RANGE( 0x2c, 0x2c ) AM_DEVREADWRITE_LEGACY("eeprom", sammymdl_eeprom_r, sammymdl_eeprom_w )
970   AM_RANGE( 0x2e, 0x2e ) AM_READ_LEGACY(sammymdl_coin_hopper_r )
988   AM_RANGE( 0x2e, 0x2e ) AM_READ(sammymdl_coin_hopper_r )
971989   AM_RANGE( 0x30, 0x30 ) AM_READ_PORT( "BUTTON" )
972   AM_RANGE( 0x31, 0x31 ) AM_WRITE_LEGACY(haekaka_coin_w )
973   AM_RANGE( 0x32, 0x32 ) AM_WRITE_LEGACY(haekaka_leds_w )
990   AM_RANGE( 0x31, 0x31 ) AM_WRITE(haekaka_coin_w )
991   AM_RANGE( 0x32, 0x32 ) AM_WRITE(haekaka_leds_w )
974992   AM_RANGE( 0x90, 0x90 ) AM_DEVWRITE("oki", okim9810_device, write )
975993   AM_RANGE( 0x91, 0x91 ) AM_DEVWRITE("oki", okim9810_device, write_TMP_register )
976994   AM_RANGE( 0x92, 0x92 ) AM_DEVREAD("oki", okim9810_device, read )
977   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE_LEGACY(sammymdl_hopper_w )
995   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE(sammymdl_hopper_w )
978996   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE_LEGACY(watchdog_reset_w )   // 1
979997ADDRESS_MAP_END
980998
r14845r14846
9831001***************************************************************************/
9841002
9851003// rombank
986static WRITE8_HANDLER( itazuram_rombank_w )
1004WRITE8_MEMBER(sigmab98_state::itazuram_rombank_w)
9871005{
988   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
9891006   if (offset == 0)
9901007   {
991      state->m_reg = data;
1008      m_reg = data;
9921009      return;
9931010   }
9941011
995   UINT8 *rom = space->machine().region("maincpu")->base();
996   switch ( state->m_reg )
1012   UINT8 *rom = machine().region("maincpu")->base();
1013   switch ( m_reg )
9971014   {
9981015      case 0x0d:
999         state->m_rombank = data;
1016         m_rombank = data;
10001017         switch (data)
10011018         {
10021019            case 0x11:   // 3800 IS ROM
1003               memory_set_bankptr(space->machine(), "rombank0", rom + 0x4c00);
1004               memory_set_bankptr(space->machine(), "rombank1", rom + 0x5c00);
1005               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram + 0x1000*4);   // scratch
1006               memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*4);   // scratch
1020               memory_set_bankptr(machine(), "rombank0", rom + 0x4c00);
1021               memory_set_bankptr(machine(), "rombank1", rom + 0x5c00);
1022               memory_set_bankptr(machine(), "sprbank0", m_spriteram + 0x1000*4);   // scratch
1023               memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*4);   // scratch
10071024               break;
10081025
10091026            default:
1010               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
1027               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
10111028         }
10121029         break;
10131030
10141031      case 0x4d:
1015         state->m_rombank = data;
1032         m_rombank = data;
10161033         switch (data)
10171034         {
10181035            case 0x14:   // 3800 IS ROM
1019               memory_set_bankptr(space->machine(), "rombank0", rom + 0x8000);
1020               memory_set_bankptr(space->machine(), "rombank1", rom + 0x9000);
1021               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram + 0x1000*4);   // scratch
1022               memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*4);   // scratch
1036               memory_set_bankptr(machine(), "rombank0", rom + 0x8000);
1037               memory_set_bankptr(machine(), "rombank1", rom + 0x9000);
1038               memory_set_bankptr(machine(), "sprbank0", m_spriteram + 0x1000*4);   // scratch
1039               memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*4);   // scratch
10231040               break;
10241041
10251042            default:
1026               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
1043               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
10271044         }
10281045         break;
10291046
10301047      case 0x8d:
1031         state->m_rombank = data;
1048         m_rombank = data;
10321049         switch (data)
10331050         {
10341051            case 0x0f:   // 3800 IS ROM
1035               memory_set_bankptr(space->machine(), "rombank0", rom + 0x3400);
1036               memory_set_bankptr(space->machine(), "rombank1", rom + 0x4400);
1037               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram + 0x1000*4);   // scratch
1038               memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*4);   // scratch
1052               memory_set_bankptr(machine(), "rombank0", rom + 0x3400);
1053               memory_set_bankptr(machine(), "rombank1", rom + 0x4400);
1054               memory_set_bankptr(machine(), "sprbank0", m_spriteram + 0x1000*4);   // scratch
1055               memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*4);   // scratch
10391056               break;
10401057
10411058            case 0x12:   // 3800 IS ROM
1042               memory_set_bankptr(space->machine(), "rombank0", rom + 0x6400);
1043               memory_set_bankptr(space->machine(), "rombank1", rom + 0x7400);
1044               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram + 0x1000*4);   // scratch
1045               memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*4);   // scratch
1059               memory_set_bankptr(machine(), "rombank0", rom + 0x6400);
1060               memory_set_bankptr(machine(), "rombank1", rom + 0x7400);
1061               memory_set_bankptr(machine(), "sprbank0", m_spriteram + 0x1000*4);   // scratch
1062               memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*4);   // scratch
10461063               break;
10471064
10481065            // used in test mode:
1049//              case 0x5c:  memory_set_bankptr(space->machine(), "rombank", rom + 0x400 + 0x0000);    break;  // 3800 IS RAM! (8000 bytes)
1066//              case 0x5c:  memory_set_bankptr(machine(), "rombank", rom + 0x400 + 0x0000);    break;  // 3800 IS RAM! (8000 bytes)
10501067
10511068            case 0x5e:   // 3800 IS RAM! (1404 bytes)
1052               memory_set_bankptr(space->machine(), "rombank0", state->m_spriteram + 0x1000*1);
1053               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram + 0x1000*1);
1054               memory_set_bankptr(space->machine(), "rombank1", state->m_spriteram + 0x1000*2);
1055               memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*2);
1069               memory_set_bankptr(machine(), "rombank0", m_spriteram + 0x1000*1);
1070               memory_set_bankptr(machine(), "sprbank0", m_spriteram + 0x1000*1);
1071               memory_set_bankptr(machine(), "rombank1", m_spriteram + 0x1000*2);
1072               memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*2);
10561073               break;
10571074
10581075            case 0x6c:   // 3800 IS RAM! (1000 bytes) - SPRITERAM
1059               memory_set_bankptr(space->machine(), "rombank0", state->m_spriteram);
1060               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram);
1061//                  memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*4);    // scratch
1076               memory_set_bankptr(machine(), "rombank0", m_spriteram);
1077               memory_set_bankptr(machine(), "sprbank0", m_spriteram);
1078//                  memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*4);    // scratch
10621079               break;
10631080
10641081            default:
1065               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
1082               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
10661083         }
10671084         break;
10681085
10691086      case 0xcd:
1070         state->m_rombank = data;
1087         m_rombank = data;
10711088         switch (data)
10721089         {
10731090            case 0x14:   // 3800 IS ROM
1074               memory_set_bankptr(space->machine(), "rombank0", rom + 0x8800);
1075               memory_set_bankptr(space->machine(), "rombank1", rom + 0x9800);
1076               memory_set_bankptr(space->machine(), "sprbank0", state->m_spriteram + 0x1000*4);   // scratch
1077               memory_set_bankptr(space->machine(), "sprbank1", state->m_spriteram + 0x1000*4);   // scratch
1091               memory_set_bankptr(machine(), "rombank0", rom + 0x8800);
1092               memory_set_bankptr(machine(), "rombank1", rom + 0x9800);
1093               memory_set_bankptr(machine(), "sprbank0", m_spriteram + 0x1000*4);   // scratch
1094               memory_set_bankptr(machine(), "sprbank1", m_spriteram + 0x1000*4);   // scratch
10781095               break;
10791096
10801097            default:
1081               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
1098               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
10821099         }
10831100         break;
10841101
10851102      default:
1086         logerror("%s: unknown reg written: %02x = %02x\n", space->machine().describe_context(), state->m_reg, data);
1103         logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data);
10871104   }
10881105}
1089static READ8_HANDLER( itazuram_rombank_r )
1106READ8_MEMBER(sigmab98_state::itazuram_rombank_r)
10901107{
1091   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
10921108   if (offset == 0)
1093      return state->m_reg;
1109      return m_reg;
10941110
1095   switch ( state->m_reg )
1111   switch ( m_reg )
10961112   {
10971113      // FIXME different registers
10981114      case 0x0d:
10991115      case 0x4d:
11001116      case 0x8d:
11011117      case 0xcd:
1102         return state->m_rombank;
1118         return m_rombank;
11031119
11041120      default:
1105         logerror("%s: unknown reg read: %02x\n", space->machine().describe_context(), state->m_reg);
1121         logerror("%s: unknown reg read: %02x\n", machine().describe_context(), m_reg);
11061122         return 0x00;
11071123   }
11081124}
11091125
11101126// rambank
1111static WRITE8_HANDLER( itazuram_rambank_w )
1127WRITE8_MEMBER(sigmab98_state::itazuram_rambank_w)
11121128{
1113   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
11141129   if (offset == 0)
11151130   {
1116      state->m_reg2 = data;
1131      m_reg2 = data;
11171132      return;
11181133   }
11191134
1120   switch ( state->m_reg2 )
1135   switch ( m_reg2 )
11211136   {
11221137      case 0x76:
1123         state->m_rambank = data;
1138         m_rambank = data;
11241139         switch (data)
11251140         {
1126            case 0x52:   memory_set_bankptr(space->machine(), "palbank", state->m_nvram);                           break;
1127            case 0x64:   memory_set_bankptr(space->machine(), "palbank", space->machine().generic.paletteram.u8);   break;
1141            case 0x52:   memory_set_bankptr(machine(), "palbank", m_nvram);                           break;
1142            case 0x64:   memory_set_bankptr(machine(), "palbank", machine().generic.paletteram.u8);   break;
11281143            default:
1129               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", space->machine().describe_context(), data, state->m_reg2);
1144               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", machine().describe_context(), data, m_reg2);
11301145               return;
11311146         }
11321147         break;
11331148
11341149      default:
1135         logerror("%s: unknown reg2 written: %02x = %02x\n", space->machine().describe_context(), state->m_reg2, data);
1150         logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data);
11361151   }
11371152}
11381153
1139static READ8_HANDLER( itazuram_rambank_r )
1154READ8_MEMBER(sigmab98_state::itazuram_rambank_r)
11401155{
1141   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
11421156   if (offset == 0)
1143      return state->m_reg2;
1157      return m_reg2;
11441158
1145   switch ( state->m_reg2 )
1159   switch ( m_reg2 )
11461160   {
11471161      case 0x76:
1148         return state->m_rambank;
1162         return m_rambank;
11491163
11501164      default:
1151         logerror("%s: unknown reg2 read: %02x\n", space->machine().describe_context(), state->m_reg2);
1165         logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2);
11521166         return 0x00;
11531167   }
11541168}
11551169
1156static WRITE8_HANDLER( itazuram_nvram_palette_w )
1170WRITE8_MEMBER(sigmab98_state::itazuram_nvram_palette_w)
11571171{
1158   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
1159   if (state->m_rambank == 0x64)
1172   if (m_rambank == 0x64)
11601173   {
11611174      paletteram_xRRRRRGGGGGBBBBB_be_w(space, offset, data);
1162//      space->machine().generic.paletteram.u8[offset] = data;
1175//      machine().generic.paletteram.u8[offset] = data;
11631176   }
1164   else if (state->m_rambank == 0x52)
1177   else if (m_rambank == 0x52)
11651178   {
1166      state->m_nvram[offset] = data;
1179      m_nvram[offset] = data;
11671180   }
11681181   else
11691182   {
1170      logerror("%s: itazuram_nvram_palette_w offset = %03x with unknown bank = %02x\n", space->machine().describe_context(), offset, state->m_rambank);
1183      logerror("%s: itazuram_nvram_palette_w offset = %03x with unknown bank = %02x\n", machine().describe_context(), offset, m_rambank);
11711184   }
11721185}
11731186
1174static WRITE8_HANDLER( itazuram_palette_w )
1187WRITE8_MEMBER(sigmab98_state::itazuram_palette_w)
11751188{
1176   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
1177   if (state->m_rombank == 0x6c)
1189   if (m_rombank == 0x6c)
11781190   {
11791191      if (offset < 0x200)
11801192         paletteram_xRRRRRGGGGGBBBBB_be_w(space, offset, data);
1181//          space->machine().generic.paletteram.u8[offset] = data;
1193//          machine().generic.paletteram.u8[offset] = data;
11821194   }
11831195   else
11841196   {
1185      logerror("%s: itazuram_palette_w offset = %03x with unknown bank = %02x\n", space->machine().describe_context(), offset, state->m_rombank);
1197      logerror("%s: itazuram_palette_w offset = %03x with unknown bank = %02x\n", machine().describe_context(), offset, m_rombank);
11861198   }
11871199}
1188static READ8_HANDLER( itazuram_palette_r )
1200READ8_MEMBER(sigmab98_state::itazuram_palette_r)
11891201{
1190   return space->machine().generic.paletteram.u8[offset];
1202   return machine().generic.paletteram.u8[offset];
11911203}
11921204
11931205static ADDRESS_MAP_START( itazuram_map, AS_PROGRAM, 8, sigmab98_state )
r14845r14846
11951207   AM_RANGE( 0x3800, 0x47ff ) AM_READ_BANK( "rombank0" ) AM_WRITE_BANK( "sprbank0" )
11961208   AM_RANGE( 0x4800, 0x57ff ) AM_READ_BANK( "rombank1" ) AM_WRITE_BANK( "sprbank1" )
11971209
1198   AM_RANGE( 0x5800, 0x59ff ) AM_READWRITE_LEGACY(itazuram_palette_r, itazuram_palette_w )
1210   AM_RANGE( 0x5800, 0x59ff ) AM_READWRITE(itazuram_palette_r, itazuram_palette_w )
11991211   AM_RANGE( 0x6000, 0x607f ) AM_RAM   // table?
12001212
12011213   AM_RANGE( 0x6811, 0x6811 ) AM_WRITENOP   // IRQ Enable? Screen disable?
12021214   AM_RANGE( 0x6813, 0x6813 ) AM_WRITENOP   // IRQ Ack?
1203   AM_RANGE( 0xdc00, 0xfdff ) AM_READ_BANK( "palbank" ) AM_WRITE_LEGACY(itazuram_nvram_palette_w ) AM_SHARE( "nvram" ) AM_BASE(m_nvram )   // nvram | paletteram
1215   AM_RANGE( 0xdc00, 0xfdff ) AM_READ_BANK( "palbank" ) AM_WRITE(itazuram_nvram_palette_w ) AM_SHARE( "nvram" ) AM_BASE(m_nvram )   // nvram | paletteram
12041216
12051217   AM_RANGE( 0xfe00, 0xffff ) AM_RAM   // High speed internal RAM
12061218ADDRESS_MAP_END
12071219
12081220static ADDRESS_MAP_START( itazuram_io, AS_IO, 8, sigmab98_state )
12091221   ADDRESS_MAP_GLOBAL_MASK(0xff)
1210   AM_RANGE( 0x02, 0x03 ) AM_READWRITE_LEGACY(itazuram_rombank_r, itazuram_rombank_w )
1211   AM_RANGE( 0x04, 0x05 ) AM_READWRITE_LEGACY(itazuram_rambank_r, itazuram_rambank_w )
1222   AM_RANGE( 0x02, 0x03 ) AM_READWRITE(itazuram_rombank_r, itazuram_rombank_w )
1223   AM_RANGE( 0x04, 0x05 ) AM_READWRITE(itazuram_rambank_r, itazuram_rambank_w )
12121224
12131225   AM_RANGE( 0x2c, 0x2c ) AM_DEVREADWRITE_LEGACY("eeprom", sammymdl_eeprom_r, sammymdl_eeprom_w )
1214   AM_RANGE( 0x2e, 0x2e ) AM_READ_LEGACY(sammymdl_coin_hopper_r )
1226   AM_RANGE( 0x2e, 0x2e ) AM_READ(sammymdl_coin_hopper_r )
12151227   AM_RANGE( 0x30, 0x30 ) AM_READ_PORT( "BUTTON" )
1216   AM_RANGE( 0x31, 0x31 ) AM_WRITE_LEGACY(sammymdl_coin_w )
1217   AM_RANGE( 0x32, 0x32 ) AM_WRITE_LEGACY(sammymdl_leds_w )
1228   AM_RANGE( 0x31, 0x31 ) AM_WRITE(sammymdl_coin_w )
1229   AM_RANGE( 0x32, 0x32 ) AM_WRITE(sammymdl_leds_w )
12181230   AM_RANGE( 0x90, 0x90 ) AM_DEVWRITE("oki", okim9810_device, write )
12191231   AM_RANGE( 0x91, 0x91 ) AM_DEVWRITE("oki", okim9810_device, write_TMP_register )
12201232   AM_RANGE( 0x92, 0x92 ) AM_DEVREAD("oki", okim9810_device, read )
1221   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE_LEGACY(sammymdl_hopper_w )
1233   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE(sammymdl_hopper_w )
12221234   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE_LEGACY(watchdog_reset_w )   // 1
12231235ADDRESS_MAP_END
12241236
r14845r14846
12271239***************************************************************************/
12281240
12291241static ADDRESS_MAP_START( pyenaget_io, AS_IO, 8, sigmab98_state )
1230   AM_RANGE( 0x31, 0x31 ) AM_WRITE_LEGACY(sammymdl_coin_w )
1242   AM_RANGE( 0x31, 0x31 ) AM_WRITE(sammymdl_coin_w )
12311243   AM_IMPORT_FROM( haekaka_io )
12321244ADDRESS_MAP_END
12331245
r14845r14846
12361248***************************************************************************/
12371249
12381250// rombank
1239static WRITE8_HANDLER( tdoboon_rombank_w )
1251WRITE8_MEMBER(sigmab98_state::tdoboon_rombank_w)
12401252{
1241   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
12421253   if (offset == 0)
12431254   {
1244      state->m_reg = data;
1255      m_reg = data;
12451256      return;
12461257   }
12471258
1248   switch ( state->m_reg )
1259   switch ( m_reg )
12491260   {
12501261      case 0x2f:
1251         state->m_rombank = data;
1262         m_rombank = data;
12521263         switch (data)
12531264         {
12541265            case 0x10:   // ROM
r14845r14846
12741285               break;
12751286
12761287            default:
1277               logerror("%s: unknown rom bank = %02x, reg = %02x\n", space->machine().describe_context(), data, state->m_reg);
1288               logerror("%s: unknown rom bank = %02x, reg = %02x\n", machine().describe_context(), data, m_reg);
12781289         }
12791290         break;
12801291
12811292      default:
1282         logerror("%s: unknown reg written: %02x = %02x\n", space->machine().describe_context(), state->m_reg, data);
1293         logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data);
12831294   }
12841295}
1285static READ8_HANDLER( tdoboon_rombank_r )
1296READ8_MEMBER(sigmab98_state::tdoboon_rombank_r)
12861297{
1287   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
12881298   if (offset == 0)
1289      return state->m_reg;
1299      return m_reg;
12901300
1291   switch ( state->m_reg )
1301   switch ( m_reg )
12921302   {
12931303      case 0x2f:
1294         return state->m_rombank;
1304         return m_rombank;
12951305
12961306      default:
1297         logerror("%s: unknown reg read: %02x\n", space->machine().describe_context(), state->m_reg);
1307         logerror("%s: unknown reg read: %02x\n", machine().describe_context(), m_reg);
12981308         return 0x00;
12991309   }
13001310}
13011311
13021312// rambank
1303static WRITE8_HANDLER( tdoboon_rambank_w )
1313WRITE8_MEMBER(sigmab98_state::tdoboon_rambank_w)
13041314{
1305   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
13061315   if (offset == 0)
13071316   {
1308      state->m_reg2 = data;
1317      m_reg2 = data;
13091318      return;
13101319   }
13111320
1312   switch ( state->m_reg2 )
1321   switch ( m_reg2 )
13131322   {
13141323      case 0x33:
1315         state->m_rambank = data;
1324         m_rambank = data;
13161325         switch (data)
13171326         {
13181327            case 0x53:
13191328               break;
13201329
13211330            default:
1322               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", space->machine().describe_context(), data, state->m_reg2);
1331               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", machine().describe_context(), data, m_reg2);
13231332         }
13241333         break;
13251334
13261335      default:
1327         logerror("%s: unknown reg2 written: %02x = %02x\n", space->machine().describe_context(), state->m_reg2, data);
1336         logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data);
13281337   }
13291338}
1330static READ8_HANDLER( tdoboon_rambank_r )
1339READ8_MEMBER(sigmab98_state::tdoboon_rambank_r)
13311340{
1332   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
13331341   if (offset == 0)
1334      return state->m_reg2;
1342      return m_reg2;
13351343
1336   switch ( state->m_reg2 )
1344   switch ( m_reg2 )
13371345   {
13381346      case 0x33:
1339         return state->m_rambank;
1347         return m_rambank;
13401348
13411349      default:
1342         logerror("%s: unknown reg2 read: %02x\n", space->machine().describe_context(), state->m_reg2);
1350         logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2);
13431351         return 0x00;
13441352   }
13451353}
13461354
1347static READ8_HANDLER( tdoboon_c000_r )
1355READ8_MEMBER(sigmab98_state::tdoboon_c000_r)
13481356{
1349   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
1350   switch (state->m_rombank)
1357   switch (m_rombank)
13511358   {
13521359      case 0x10:   // ROM
13531360      case 0x11:
r14845r14846
13651372      case 0x1d:
13661373      case 0x1e:
13671374      case 0x1f:
1368         return space->machine().region("maincpu")->base()[offset + 0xc400 + 0x1000 * (state->m_rombank-0x10)];
1375         return machine().region("maincpu")->base()[offset + 0xc400 + 0x1000 * (m_rombank-0x10)];
13691376
13701377      case 0x64:   // SPRITERAM
13711378         if (offset < 0x1000)
1372            return state->m_spriteram[offset];
1379            return m_spriteram[offset];
13731380         break;
13741381
13751382      case 0x66:   // PALETTERAM + TABLE?
13761383         if (offset < 0x200)
1377            return space->machine().generic.paletteram.u8[offset];
1384            return machine().generic.paletteram.u8[offset];
13781385         break;
13791386
13801387      case 0x67:   // REGS
r14845r14846
13831390         break;
13841391   }
13851392
1386   logerror("%s: unknown read from %02x with rombank = %02x\n", space->machine().describe_context(), offset+0xc000, state->m_rombank);
1393   logerror("%s: unknown read from %02x with rombank = %02x\n", machine().describe_context(), offset+0xc000, m_rombank);
13871394   return 0x00;
13881395}
13891396
1390static WRITE8_HANDLER( tdoboon_c000_w )
1397WRITE8_MEMBER(sigmab98_state::tdoboon_c000_w)
13911398{
1392   sigmab98_state *state = space->machine().driver_data<sigmab98_state>();
1393   switch (state->m_rombank)
1399   switch (m_rombank)
13941400   {
13951401      case 0x64:   // SPRITERAM
13961402         if (offset < 0x1000)
13971403         {
1398            state->m_spriteram[offset] = data;
1404            m_spriteram[offset] = data;
13991405            return;
14001406         }
14011407         break;
r14845r14846
14041410         if (offset < 0x200)
14051411         {
14061412            paletteram_xRRRRRGGGGGBBBBB_be_w(space, offset, data);
1407//              space->machine().generic.paletteram.u8[offset] = data;
1413//              machine().generic.paletteram.u8[offset] = data;
14081414            return;
14091415         }
14101416         else if ((offset >= 0x800) && (offset < 0x880))
r14845r14846
14151421         break;
14161422   }
14171423
1418   logerror("%s: unknown write to %02x = %02x with rombank = %02x\n", space->machine().describe_context(), offset+0xc000, data, state->m_rombank);
1424   logerror("%s: unknown write to %02x = %02x with rombank = %02x\n", machine().describe_context(), offset+0xc000, data, m_rombank);
14191425}
14201426
14211427static ADDRESS_MAP_START( tdoboon_map, AS_PROGRAM, 8, sigmab98_state )
14221428   AM_RANGE( 0x0000, 0xbfff ) AM_ROM
1423   AM_RANGE( 0xc000, 0xcfff ) AM_READWRITE_LEGACY(tdoboon_c000_r, tdoboon_c000_w )
1429   AM_RANGE( 0xc000, 0xcfff ) AM_READWRITE(tdoboon_c000_r, tdoboon_c000_w )
14241430   AM_RANGE( 0xd000, 0xefff ) AM_RAM AM_SHARE( "nvram" ) AM_BASE(m_nvram )
14251431   AM_RANGE( 0xfe00, 0xffff ) AM_RAM   // High speed internal RAM
14261432ADDRESS_MAP_END
14271433
14281434static ADDRESS_MAP_START( tdoboon_io, AS_IO, 8, sigmab98_state )
14291435   ADDRESS_MAP_GLOBAL_MASK(0xff)
1430   AM_RANGE( 0x02, 0x03 ) AM_READWRITE_LEGACY(tdoboon_rombank_r, tdoboon_rombank_w )
1431   AM_RANGE( 0x04, 0x05 ) AM_READWRITE_LEGACY(tdoboon_rambank_r, tdoboon_rambank_w )
1436   AM_RANGE( 0x02, 0x03 ) AM_READWRITE(tdoboon_rombank_r, tdoboon_rombank_w )
1437   AM_RANGE( 0x04, 0x05 ) AM_READWRITE(tdoboon_rambank_r, tdoboon_rambank_w )
14321438
14331439   AM_RANGE( 0x2c, 0x2c ) AM_DEVREADWRITE_LEGACY("eeprom", sammymdl_eeprom_r, sammymdl_eeprom_w )
1434   AM_RANGE( 0x2e, 0x2e ) AM_READ_LEGACY(sammymdl_coin_hopper_r )
1440   AM_RANGE( 0x2e, 0x2e ) AM_READ(sammymdl_coin_hopper_r )
14351441   AM_RANGE( 0x30, 0x30 ) AM_READ_PORT( "BUTTON" )
1436   AM_RANGE( 0x31, 0x31 ) AM_WRITE_LEGACY(sammymdl_coin_w )
1437   AM_RANGE( 0x32, 0x32 ) AM_WRITE_LEGACY(sammymdl_leds_w )
1442   AM_RANGE( 0x31, 0x31 ) AM_WRITE(sammymdl_coin_w )
1443   AM_RANGE( 0x32, 0x32 ) AM_WRITE(sammymdl_leds_w )
14381444   AM_RANGE( 0x90, 0x90 ) AM_DEVWRITE("oki", okim9810_device, write )
14391445   AM_RANGE( 0x91, 0x91 ) AM_DEVWRITE("oki", okim9810_device, write_TMP_register )
14401446   AM_RANGE( 0x92, 0x92 ) AM_DEVREAD("oki", okim9810_device, read )
1441   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE_LEGACY(sammymdl_hopper_w )
1447   AM_RANGE( 0xb0, 0xb0 ) AM_WRITE(sammymdl_hopper_w )
14421448   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE_LEGACY(watchdog_reset_w )   // 1
14431449ADDRESS_MAP_END
14441450
src/mame/drivers/popobear.c
r14845r14846
9090   UINT16 *m_vram;
9191   UINT16 *m_spr;
9292   required_device<cpu_device> m_maincpu;
93   DECLARE_READ8_MEMBER(popo_620000_r);
94   DECLARE_WRITE8_MEMBER(popobear_irq_ack_w);
9395};
9496
9597VIDEO_START(popobear)
r14845r14846
267269}
268270
269271/* ??? */
270static READ8_HANDLER( popo_620000_r )
272READ8_MEMBER(popobear_state::popo_620000_r)
271273{
272274   return 9;
273275}
274276
275static WRITE8_HANDLER( popobear_irq_ack_w )
277WRITE8_MEMBER(popobear_state::popobear_irq_ack_w)
276278{
277   popobear_state *state = space->machine().driver_data<popobear_state>();
278279   int i;
279280
280281   for(i=0;i<8;i++)
281282   {
282283      if(data & 1 << i)
283         device_set_input_line(state->m_maincpu, i, CLEAR_LINE);
284         device_set_input_line(m_maincpu, i, CLEAR_LINE);
284285   }
285286}
286287
r14845r14846
298299//  AM_RANGE(0x480020, 0x480021) AM_NOP //AM_READ_LEGACY(popo_480020_r) AM_WRITE_LEGACY(popo_480020_w)
299300//  AM_RANGE(0x480028, 0x480029) AM_NOP //AM_WRITE_LEGACY(popo_480028_w)
300301//  AM_RANGE(0x48002c, 0x48002d) AM_NOP //AM_WRITE_LEGACY(popo_48002c_w)
301   AM_RANGE(0x480030, 0x480031) AM_WRITE8_LEGACY(popobear_irq_ack_w, 0x00ff)
302   AM_RANGE(0x480030, 0x480031) AM_WRITE8(popobear_irq_ack_w, 0x00ff)
302303   AM_RANGE(0x480034, 0x480035) AM_RAM // coin counter or coin lockout
303304   AM_RANGE(0x48003a, 0x48003b) AM_RAM //AM_READ_LEGACY(popo_48003a_r) AM_WRITE_LEGACY(popo_48003a_w)
304305
r14845r14846
310311   AM_RANGE(0x550000, 0x550003) AM_DEVWRITE8_LEGACY("ymsnd", ym2413_w, 0x00ff )
311312
312313   AM_RANGE(0x600000, 0x600001) AM_WRITENOP
313   AM_RANGE(0x620000, 0x620001) AM_READ8_LEGACY(popo_620000_r,0xff00) AM_WRITENOP
314   AM_RANGE(0x620000, 0x620001) AM_READ8(popo_620000_r,0xff00) AM_WRITENOP
314315   AM_RANGE(0x800000, 0x9fffff) AM_ROM AM_REGION("gfx1", 0) // u5 & u6
315316   AM_RANGE(0xa00000, 0xbfffff) AM_ROM AM_REGION("gfx2", 0) // u7 & u8
316317ADDRESS_MAP_END
src/mame/drivers/mpu3.c
r14845r14846
152152int m_optic_pattern;
153153
154154emu_timer *m_ic21_timer;
155   DECLARE_WRITE8_MEMBER(characteriser_w);
156   DECLARE_READ8_MEMBER(characteriser_r);
157   DECLARE_WRITE8_MEMBER(mpu3ptm_w);
158   DECLARE_READ8_MEMBER(mpu3ptm_r);
155159};
156160
157161#define DISPLAY_PORT 0
r14845r14846
790794address of the PAL in memory varies between games. Once found, the memory location of the data table is easily found from the X register of the CPU.
791795*/
792796
793static WRITE8_HANDLER( characteriser_w )
797WRITE8_MEMBER(mpu3_state::characteriser_w)
794798{
795   mpu3_state *state = space->machine().driver_data<mpu3_state>();
796799   int x;
797800   int call=data;
798   if (!state->m_current_chr_table)
799      fatalerror("No Characteriser Table @ %04x\n", cpu_get_previouspc(&space->device()));
801   if (!m_current_chr_table)
802      fatalerror("No Characteriser Table @ %04x\n", cpu_get_previouspc(&space.device()));
800803
801804   if (offset == 0)
802805   {
803806      {
804807         if (call == 0)
805808         {
806            state->m_prot_col = 0;
809            m_prot_col = 0;
807810         }
808811         else
809812         {
810            for (x = state->m_prot_col; x < 64; x++)
813            for (x = m_prot_col; x < 64; x++)
811814            {
812               if   (state->m_current_chr_table[(x)].call == call)
815               if   (m_current_chr_table[(x)].call == call)
813816               {
814                  state->m_prot_col = x;
817                  m_prot_col = x;
815818                  break;
816819               }
817820            }
r14845r14846
821824}
822825
823826
824static READ8_HANDLER( characteriser_r )
827READ8_MEMBER(mpu3_state::characteriser_r)
825828{
826   mpu3_state *state = space->machine().driver_data<mpu3_state>();
827   if (!state->m_current_chr_table)
828      fatalerror("No Characteriser Table @ %04x\n", cpu_get_previouspc(&space->device()));
829   if (!m_current_chr_table)
830      fatalerror("No Characteriser Table @ %04x\n", cpu_get_previouspc(&space.device()));
829831
830832   if (offset == 0)
831833   {
832      return state->m_current_chr_table[state->m_prot_col].response;
834      return m_current_chr_table[m_prot_col].response;
833835   }
834836   return 0;
835837}
r14845r14846
857859   timer.machine().device<pia6821_device>("pia_ic4")->ca1_w(state->m_ic10_output);
858860
859861}
860static WRITE8_HANDLER( mpu3ptm_w )
862WRITE8_MEMBER(mpu3_state::mpu3ptm_w)
861863{
862   ptm6840_device *ptm2 = space->machine().device<ptm6840_device>("ptm_ic2");
864   ptm6840_device *ptm2 = machine().device<ptm6840_device>("ptm_ic2");
863865
864866   ptm2->write(offset >>2,data);//((offset & 0x1f) >>2),data);
865867}
866868
867static READ8_HANDLER( mpu3ptm_r )
869READ8_MEMBER(mpu3_state::mpu3ptm_r)
868870{
869   ptm6840_device *ptm2 = space->machine().device<ptm6840_device>("ptm_ic2");
871   ptm6840_device *ptm2 = machine().device<ptm6840_device>("ptm_ic2");
870872
871873   return ptm2->read(offset >>2);
872874}
873875
874876static ADDRESS_MAP_START( mpu3_basemap, AS_PROGRAM, 8, mpu3_state )
875877   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")
876   AM_RANGE(0x8800, 0x881f) AM_READWRITE_LEGACY(mpu3ptm_r, mpu3ptm_w)/* PTM6840 IC2 */
878   AM_RANGE(0x8800, 0x881f) AM_READWRITE(mpu3ptm_r, mpu3ptm_w)/* PTM6840 IC2 */
877879   AM_RANGE(0x9000, 0x9003) AM_DEVREADWRITE("pia_ic3", pia6821_device, read, write)      /* PIA6821 IC3 */
878880   AM_RANGE(0x9800, 0x9803) AM_DEVREADWRITE("pia_ic4", pia6821_device, read, write)      /* PIA6821 IC4 */
879881   AM_RANGE(0xa000, 0xa003) AM_DEVREADWRITE("pia_ic5", pia6821_device, read, write)      /* PIA6821 IC5 */
r14845r14846
923925
924926   state->m_disp_func=METER_PORT;
925927   state->m_current_chr_table = hprvpr_data;
926   space->install_legacy_readwrite_handler(0xc000, 0xc000 , FUNC(characteriser_r),FUNC(characteriser_w));
928   space->install_readwrite_handler(0xc000, 0xc000 , read8_delegate(FUNC(mpu3_state::characteriser_r), state),write8_delegate(FUNC(mpu3_state::characteriser_w), state));
927929
928930}
929931
src/mame/drivers/goodejan.c
r14845r14846
6464      : driver_device(mconfig, type, tag) { }
6565
6666   UINT16 m_mux_data;
67   DECLARE_WRITE16_MEMBER(goodejan_gfxbank_w);
68   DECLARE_READ16_MEMBER(mahjong_panel_r);
69   DECLARE_WRITE16_MEMBER(mahjong_panel_w);
6770};
6871
6972
r14845r14846
7275#define GOODEJAN_MHZ3 12000000
7376
7477
75static WRITE16_HANDLER( goodejan_gfxbank_w )
78WRITE16_MEMBER(goodejan_state::goodejan_gfxbank_w)
7679{
7780   seibucrtc_sc0bank_w((data & 0x100)>>8);// = (data & 0x100)>>8;
7881}
7982
8083/* Multiplexer device for the mahjong panel */
81static READ16_HANDLER( mahjong_panel_r )
84READ16_MEMBER(goodejan_state::mahjong_panel_r)
8285{
83   goodejan_state *state = space->machine().driver_data<goodejan_state>();
8486   UINT16 ret;
8587   ret = 0xffff;
8688
87   switch(state->m_mux_data)
89   switch(m_mux_data)
8890   {
89      case 1:    ret = input_port_read(space->machine(), "KEY0"); break;
90      case 2:    ret = input_port_read(space->machine(), "KEY1"); break;
91      case 4:    ret = input_port_read(space->machine(), "KEY2"); break;
92      case 8:    ret = input_port_read(space->machine(), "KEY3"); break;
93      case 0x10: ret = input_port_read(space->machine(), "KEY4"); break;
91      case 1:    ret = input_port_read(machine(), "KEY0"); break;
92      case 2:    ret = input_port_read(machine(), "KEY1"); break;
93      case 4:    ret = input_port_read(machine(), "KEY2"); break;
94      case 8:    ret = input_port_read(machine(), "KEY3"); break;
95      case 0x10: ret = input_port_read(machine(), "KEY4"); break;
9496   }
9597
9698   return ret;
9799}
98100
99static WRITE16_HANDLER( mahjong_panel_w )
101WRITE16_MEMBER(goodejan_state::mahjong_panel_w)
100102{
101   goodejan_state *state = space->machine().driver_data<goodejan_state>();
102   state->m_mux_data = data;
103   m_mux_data = data;
103104}
104105
105106static ADDRESS_MAP_START( goodejan_map, AS_PROGRAM, 16, goodejan_state )
r14845r14846
116117
117118/*totmejan CRT is at 8000-804f,goodejan is at 8040-807f(808f but not tested)*/
118119static ADDRESS_MAP_START( common_io_map, AS_IO, 16, goodejan_state )
119   AM_RANGE(0x9000, 0x9001) AM_WRITE_LEGACY(goodejan_gfxbank_w)
120   AM_RANGE(0x9000, 0x9001) AM_WRITE(goodejan_gfxbank_w)
120121   AM_RANGE(0xb000, 0xb003) AM_WRITENOP
121   AM_RANGE(0xb004, 0xb005) AM_WRITE_LEGACY(mahjong_panel_w)
122   AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w)
122123
123124   AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1")
124   AM_RANGE(0xc002, 0xc003) AM_READ_LEGACY(mahjong_panel_r)
125   AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r)
125126   AM_RANGE(0xc004, 0xc005) AM_READ_PORT("DSW2") // switches
126127   AM_RANGE(0xd000, 0xd00f) AM_READWRITE_LEGACY(seibu_main_word_r, seibu_main_word_w)
127128ADDRESS_MAP_END
src/mame/drivers/quizshow.c
r14845r14846
4545   int m_blink_state;
4646   int m_category_enable;
4747   int m_tape_head_pos;
48   DECLARE_WRITE8_MEMBER(quizshow_lamps1_w);
49   DECLARE_WRITE8_MEMBER(quizshow_lamps2_w);
50   DECLARE_WRITE8_MEMBER(quizshow_lamps3_w);
51   DECLARE_WRITE8_MEMBER(quizshow_tape_control_w);
52   DECLARE_WRITE8_MEMBER(quizshow_audio_w);
53   DECLARE_WRITE8_MEMBER(quizshow_video_disable_w);
54   DECLARE_READ8_MEMBER(quizshow_timing_r);
55   DECLARE_READ8_MEMBER(quizshow_tape_signal_r);
56   DECLARE_WRITE8_MEMBER(quizshow_main_ram_w);
4857};
4958
5059
r14845r14846
104113
105114***************************************************************************/
106115
107static WRITE8_HANDLER(quizshow_lamps1_w)
116WRITE8_MEMBER(quizshow_state::quizshow_lamps1_w)
108117{
109118   // d0-d3: P1 answer button lamps
110119   for (int i = 0; i < 4; i++)
r14845r14846
113122   // d4-d7: N/C
114123}
115124
116static WRITE8_HANDLER(quizshow_lamps2_w)
125WRITE8_MEMBER(quizshow_state::quizshow_lamps2_w)
117126{
118127   // d0-d3: P2 answer button lamps
119128   for (int i = 0; i < 4; i++)
r14845r14846
122131   // d4-d7: N/C
123132}
124133
125static WRITE8_HANDLER(quizshow_lamps3_w)
134WRITE8_MEMBER(quizshow_state::quizshow_lamps3_w)
126135{
127136   // d0-d1: start button lamps
128137   output_set_lamp_value(8, data >> 0 & 1);
r14845r14846
132141   // d4-d7: N/C
133142}
134143
135static WRITE8_HANDLER(quizshow_tape_control_w)
144WRITE8_MEMBER(quizshow_state::quizshow_tape_control_w)
136145{
137   quizshow_state *state = space->machine().driver_data<quizshow_state>();
138146
139147   // d2: enable user category select (changes tape head position)
140148   output_set_lamp_value(10, data >> 2 & 1);
141   state->m_category_enable = (data & 0xc) == 0xc;
149   m_category_enable = (data & 0xc) == 0xc;
142150
143151   // d3: tape motor
144152   // TODO
r14845r14846
147155   // d4-d7: N/C
148156}
149157
150static WRITE8_HANDLER(quizshow_audio_w)
158WRITE8_MEMBER(quizshow_state::quizshow_audio_w)
151159{
152160   // d1: audio beep on/off
153161   // TODO
r14845r14846
155163   // d0, d2-d7: N/C
156164}
157165
158static WRITE8_HANDLER(quizshow_video_disable_w)
166WRITE8_MEMBER(quizshow_state::quizshow_video_disable_w)
159167{
160168   // d0: video disable (looked glitchy when I implemented it, maybe there's more to it)
161169   // d1-d7: N/C
162170}
163171
164static READ8_HANDLER(quizshow_timing_r)
172READ8_MEMBER(quizshow_state::quizshow_timing_r)
165173{
166   quizshow_state *state = space->machine().driver_data<quizshow_state>();
167174   UINT8 ret = 0x80;
168175
169176   // d0-d3: 1R-8R (16-line counter)
170   ret |= state->m_clocks >> 1 & 0xf;
177   ret |= m_clocks >> 1 & 0xf;
171178
172179   // d4: 8VAC?, use 8V instead
173   ret |= state->m_clocks << 4 & 0x10;
180   ret |= m_clocks << 4 & 0x10;
174181
175182   // d5-d6: 4F-8F
176   ret |= state->m_clocks >> 2 & 0x60;
183   ret |= m_clocks >> 2 & 0x60;
177184
178185   // d7: display busy/idle, during in-between tilerows(?) and blanking
179   if (space->machine().primary_screen->vpos() >= VBSTART || (space->machine().primary_screen->vpos() + 4) & 8)
186   if (machine().primary_screen->vpos() >= VBSTART || (machine().primary_screen->vpos() + 4) & 8)
180187      ret &= 0x7f;
181188
182189   return ret;
183190}
184191
185static READ8_HANDLER(quizshow_tape_signal_r)
192READ8_MEMBER(quizshow_state::quizshow_tape_signal_r)
186193{
187194   // TODO (for now, hold INS to fastforward and it'll show garbage questions where D is always(?) the right answer)
188   return space->machine().rand() & 0x80;
195   return machine().rand() & 0x80;
189196}
190197
191static WRITE8_HANDLER(quizshow_main_ram_w)
198WRITE8_MEMBER(quizshow_state::quizshow_main_ram_w)
192199{
193   quizshow_state *state = space->machine().driver_data<quizshow_state>();
194   state->m_main_ram[offset]=data;
195   state->m_tilemap->mark_tile_dirty(offset);
200   m_main_ram[offset]=data;
201   m_tilemap->mark_tile_dirty(offset);
196202}
197203
198204
199205static ADDRESS_MAP_START( quizshow_mem_map, AS_PROGRAM, 8, quizshow_state )
200206   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
201207   AM_RANGE(0x0000, 0x0bff) AM_ROM
202   AM_RANGE(0x1802, 0x1802) AM_WRITE_LEGACY(quizshow_audio_w)
203   AM_RANGE(0x1804, 0x1804) AM_WRITE_LEGACY(quizshow_lamps1_w)
204   AM_RANGE(0x1808, 0x1808) AM_WRITE_LEGACY(quizshow_lamps2_w)
205   AM_RANGE(0x1810, 0x1810) AM_WRITE_LEGACY(quizshow_lamps3_w)
206   AM_RANGE(0x1820, 0x1820) AM_WRITE_LEGACY(quizshow_tape_control_w)
207   AM_RANGE(0x1840, 0x1840) AM_WRITE_LEGACY(quizshow_video_disable_w)
208   AM_RANGE(0x1802, 0x1802) AM_WRITE(quizshow_audio_w)
209   AM_RANGE(0x1804, 0x1804) AM_WRITE(quizshow_lamps1_w)
210   AM_RANGE(0x1808, 0x1808) AM_WRITE(quizshow_lamps2_w)
211   AM_RANGE(0x1810, 0x1810) AM_WRITE(quizshow_lamps3_w)
212   AM_RANGE(0x1820, 0x1820) AM_WRITE(quizshow_tape_control_w)
213   AM_RANGE(0x1840, 0x1840) AM_WRITE(quizshow_video_disable_w)
208214   AM_RANGE(0x1881, 0x1881) AM_READ_PORT("IN0")
209215   AM_RANGE(0x1882, 0x1882) AM_READ_PORT("IN1")
210216   AM_RANGE(0x1884, 0x1884) AM_READ_PORT("IN2")
211217   AM_RANGE(0x1888, 0x1888) AM_READ_PORT("IN3")
212   AM_RANGE(0x1900, 0x1900) AM_READ_LEGACY(quizshow_timing_r)
213   AM_RANGE(0x1e00, 0x1fff) AM_RAM_WRITE_LEGACY(quizshow_main_ram_w) AM_BASE(m_main_ram)
218   AM_RANGE(0x1900, 0x1900) AM_READ(quizshow_timing_r)
219   AM_RANGE(0x1e00, 0x1fff) AM_RAM_WRITE(quizshow_main_ram_w) AM_BASE(m_main_ram)
214220ADDRESS_MAP_END
215221
216222static ADDRESS_MAP_START( quizshow_io_map, AS_IO, 8, quizshow_state )
217223   ADDRESS_MAP_UNMAP_HIGH
218224//   AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_NOP // unused
219225//   AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_NOP // unused
220   AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_LEGACY(quizshow_tape_signal_r)
226   AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(quizshow_tape_signal_r)
221227   AM_RANGE(S2650_FO_PORT, S2650_FO_PORT) AM_RAM AM_BASE(m_fo_state)
222228ADDRESS_MAP_END
223229
src/mame/drivers/peyper.c
r14845r14846
1212
1313    UINT8 display_block;
1414    UINT8 display[16];
15   DECLARE_READ8_MEMBER(sw_r);
16   DECLARE_WRITE8_MEMBER(col_w);
17   DECLARE_WRITE8_MEMBER(disp_w);
18   DECLARE_WRITE8_MEMBER(lamp_w);
19   DECLARE_WRITE8_MEMBER(lamp7_w);
20   DECLARE_WRITE8_MEMBER(sol_w);
1521};
1622
1723
18static READ8_HANDLER(sw_r)
24READ8_MEMBER(peyper_state::sw_r)
1925{
2026    return 0xff;
2127}
2228
23static WRITE8_HANDLER(col_w)
29WRITE8_MEMBER(peyper_state::col_w)
2430{
25    peyper_state *state = space->machine().driver_data<peyper_state>();
2631
27    if (data==0x90) state->display_block = 0;
32    if (data==0x90) display_block = 0;
2833}
2934
3035static const UINT8 hex_to_7seg[16] =
r14845r14846
3439     0x00, 0x00, 0x00, 0x00 };
3540
3641/* seems to only work correctly for 'solarwap', 'poleposn' and 'sonstwar' (look at how high-scores are displayed for example) - or shall layout be changed ? */
37static WRITE8_HANDLER(disp_w)
42WRITE8_MEMBER(peyper_state::disp_w)
3843{
39    peyper_state *state = space->machine().driver_data<peyper_state>();
40    state->display[state->display_block] = data;
44    display[display_block] = data;
4145
4246    UINT8 a = data & 0x0f;
4347    UINT8 b = data >> 4;
r14845r14846
53576 -> DPL19,DPL1
54587 -> DPL30,DPL33
5559*/
56    switch(state->display_block) {
60    switch(display_block) {
5761        case 0 :
5862                output_set_indexed_value("dpl_",25,hex_a);
5963                output_set_indexed_value("dpl_",27,hex_b);
r14845r14846
141145                break;
142146    }
143147
144    state->display_block++;
145    state->display_block&=0x0f;
148    display_block++;
149    display_block&=0x0f;
146150}
147151
148static WRITE8_HANDLER(lamp_w)
152WRITE8_MEMBER(peyper_state::lamp_w)
149153{
150154    //logerror("lamp_w %02x\n",data);
151155    //logerror("[%d]= %02x\n",4+offset/4,data);
152156}
153157
154static WRITE8_HANDLER(lamp7_w)
158WRITE8_MEMBER(peyper_state::lamp7_w)
155159{
156160    //logerror("[7]= %02x\n",data);
157161}
158162
159static WRITE8_HANDLER(sol_w)
163WRITE8_MEMBER(peyper_state::sol_w)
160164{
161165    //logerror("sol_w %02x\n",data);
162166}
r14845r14846
190194//  AM_RANGE(0x0000, 0xffff) AM_NOP
191195   ADDRESS_MAP_UNMAP_HIGH
192196   ADDRESS_MAP_GLOBAL_MASK(0xff)
193   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(sw_r,disp_w)
194   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(col_w)
197   AM_RANGE(0x00, 0x00) AM_READWRITE(sw_r,disp_w)
198   AM_RANGE(0x01, 0x01) AM_WRITE(col_w)
195199//  AM_RANGE(0x04, 0x04) AM_DEVWRITE_LEGACY("ay8910_0", ay8910_address_w)
196200//  AM_RANGE(0x06, 0x06) AM_DEVWRITE_LEGACY("ay8910_0", ay8910_data_w)
197201//  AM_RANGE(0x08, 0x08) AM_DEVWRITE_LEGACY("ay8910_1", ay8910_address_w)
198202//  AM_RANGE(0x0a, 0x0a) AM_DEVWRITE_LEGACY("ay8910_1", ay8910_data_w)
199   AM_RANGE(0x0c, 0x0c) AM_WRITE_LEGACY(sol_w)
200   AM_RANGE(0x10, 0x18) AM_WRITE_LEGACY(lamp_w)
203   AM_RANGE(0x0c, 0x0c) AM_WRITE(sol_w)
204   AM_RANGE(0x10, 0x18) AM_WRITE(lamp_w)
201205   AM_RANGE(0x20, 0x20) AM_READ_PORT("DSW0")
202206   AM_RANGE(0x24, 0x24) AM_READ_PORT("DSW1")
203207   AM_RANGE(0x28, 0x28) AM_READ_PORT("SYSTEM")
204   AM_RANGE(0x2c, 0x2c) AM_WRITE_LEGACY(lamp7_w)
208   AM_RANGE(0x2c, 0x2c) AM_WRITE(lamp7_w)
205209ADDRESS_MAP_END
206210
207211static INPUT_PORTS_START( pbsonic_generic )
src/mame/drivers/tourvis.c
r14845r14846
193193   tourvision_state(const machine_config &mconfig, device_type type, const char *tag)
194194      : driver_device(mconfig, type, tag) { }
195195
196   DECLARE_WRITE8_MEMBER(tourvision_8085_d000_w);
196197};
197198
198199
r14845r14846
287288   AM_RANGE( 0x00, 0x03) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w )
288289ADDRESS_MAP_END
289290
290static WRITE8_HANDLER( tourvision_8085_d000_w )
291WRITE8_MEMBER(tourvision_state::tourvision_8085_d000_w)
291292{
292293   //logerror( "D000 (8085) write %02x\n", data );
293294}
r14845r14846
300301   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW2")
301302   AM_RANGE(0xb000, 0xb000) AM_READNOP // unknown (must NOT be == 0x03 ? code at 0x1154)
302303   AM_RANGE(0xc000, 0xc000) AM_READ_PORT("SYSTEM")
303   AM_RANGE(0xd000, 0xd000) AM_WRITE_LEGACY(tourvision_8085_d000_w )
304   AM_RANGE(0xd000, 0xd000) AM_WRITE(tourvision_8085_d000_w )
304305   AM_RANGE(0xe000, 0xe1ff) AM_RAM
305306   AM_RANGE(0xf000, 0xf000) AM_READNOP // protection or internal counter ? there is sometimes some data in BIOS0 which is replaced by 0xff in BIOS1
306307ADDRESS_MAP_END
src/mame/drivers/enigma2.c
r14845r14846
7878   /* devices */
7979   device_t *m_maincpu;
8080   device_t *m_audiocpu;
81   DECLARE_READ8_MEMBER(dip_switch_r);
82   DECLARE_WRITE8_MEMBER(sound_data_w);
83   DECLARE_WRITE8_MEMBER(enigma2_flip_screen_w);
8184};
8285
8386
r14845r14846
346349
347350
348351
349static READ8_HANDLER( dip_switch_r )
352READ8_MEMBER(enigma2_state::dip_switch_r)
350353{
351   enigma2_state *state = space->machine().driver_data<enigma2_state>();
352354   UINT8 ret = 0x00;
353355
354   if (LOG_PROT) logerror("DIP SW Read: %x at %x (prot data %x)\n", offset, cpu_get_pc(&space->device()), state->m_protection_data);
356   if (LOG_PROT) logerror("DIP SW Read: %x at %x (prot data %x)\n", offset, cpu_get_pc(&space.device()), m_protection_data);
355357   switch (offset)
356358   {
357359   case 0x01:
358360      /* For the DIP switches to be read, protection_data must be
359361           0xff on reset. The AY8910 reset ensures this. */
360      if (state->m_protection_data != 0xff)
361         ret = state->m_protection_data ^ 0x88;
362      if (m_protection_data != 0xff)
363         ret = m_protection_data ^ 0x88;
362364      else
363         ret = input_port_read(space->machine(), "DSW");
365         ret = input_port_read(machine(), "DSW");
364366      break;
365367
366368   case 0x02:
367      if (cpu_get_pc(&space->device()) == 0x07e5)
369      if (cpu_get_pc(&space.device()) == 0x07e5)
368370         ret = 0xaa;
369371      else
370372         ret = 0xf4;
r14845r14846
379381}
380382
381383
382static WRITE8_HANDLER( sound_data_w )
384WRITE8_MEMBER(enigma2_state::sound_data_w)
383385{
384   enigma2_state *state = space->machine().driver_data<enigma2_state>();
385386   /* clock sound latch shift register on rising edge of D2 */
386   if (!(data & 0x04) && (state->m_last_sound_data & 0x04))
387      state->m_sound_latch = (state->m_sound_latch << 1) | (~data & 0x01);
387   if (!(data & 0x04) && (m_last_sound_data & 0x04))
388      m_sound_latch = (m_sound_latch << 1) | (~data & 0x01);
388389
389   device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, (data & 0x02) ? ASSERT_LINE : CLEAR_LINE);
390   device_set_input_line(m_audiocpu, INPUT_LINE_NMI, (data & 0x02) ? ASSERT_LINE : CLEAR_LINE);
390391
391   state->m_last_sound_data = data;
392   m_last_sound_data = data;
392393}
393394
394395
r14845r14846
407408}
408409
409410
410static WRITE8_HANDLER( enigma2_flip_screen_w )
411WRITE8_MEMBER(enigma2_state::enigma2_flip_screen_w)
411412{
412   enigma2_state *state = space->machine().driver_data<enigma2_state>();
413   state->m_flip_screen = ((data >> 5) & 0x01) && ((input_port_read(space->machine(), "DSW") & 0x20) == 0x20);
413   m_flip_screen = ((data >> 5) & 0x01) && ((input_port_read(machine(), "DSW") & 0x20) == 0x20);
414414}
415415
416416
r14845r14846
448448   AM_RANGE(0x0000, 0x1fff) AM_ROM AM_WRITENOP
449449   AM_RANGE(0x2000, 0x3fff) AM_MIRROR(0x4000) AM_RAM AM_BASE(m_videoram)
450450   AM_RANGE(0x4000, 0x4fff) AM_ROM AM_WRITENOP
451   AM_RANGE(0x5000, 0x57ff) AM_READ_LEGACY(dip_switch_r) AM_WRITENOP
451   AM_RANGE(0x5000, 0x57ff) AM_READ(dip_switch_r) AM_WRITENOP
452452   AM_RANGE(0x5800, 0x5800) AM_MIRROR(0x07f8) AM_NOP
453453   AM_RANGE(0x5801, 0x5801) AM_MIRROR(0x07f8) AM_READ_PORT("IN0") AM_WRITENOP
454454   AM_RANGE(0x5802, 0x5802) AM_MIRROR(0x07f8) AM_READ_PORT("IN1") AM_WRITENOP
455   AM_RANGE(0x5803, 0x5803) AM_MIRROR(0x07f8) AM_READNOP AM_WRITE_LEGACY(sound_data_w)
455   AM_RANGE(0x5803, 0x5803) AM_MIRROR(0x07f8) AM_READNOP AM_WRITE(sound_data_w)
456456   AM_RANGE(0x5804, 0x5804) AM_MIRROR(0x07f8) AM_NOP
457   AM_RANGE(0x5805, 0x5805) AM_MIRROR(0x07f8) AM_READNOP AM_WRITE_LEGACY(enigma2_flip_screen_w)
457   AM_RANGE(0x5805, 0x5805) AM_MIRROR(0x07f8) AM_READNOP AM_WRITE(enigma2_flip_screen_w)
458458   AM_RANGE(0x5806, 0x5807) AM_MIRROR(0x07f8) AM_NOP
459459ADDRESS_MAP_END
460460
r14845r14846
463463   AM_RANGE(0x0000, 0x1fff) AM_ROM AM_WRITENOP
464464   AM_RANGE(0x2000, 0x3fff) AM_MIRROR(0x4000) AM_RAM AM_BASE(m_videoram)
465465   AM_RANGE(0x4000, 0x4fff) AM_ROM AM_WRITENOP
466   AM_RANGE(0x5000, 0x57ff) AM_READ_LEGACY(dip_switch_r) AM_WRITENOP
466   AM_RANGE(0x5000, 0x57ff) AM_READ(dip_switch_r) AM_WRITENOP
467467   AM_RANGE(0x5800, 0x5fff) AM_NOP
468468ADDRESS_MAP_END
469469
r14845r14846
473473   AM_RANGE(0x00, 0x00) AM_NOP
474474   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITENOP
475475   AM_RANGE(0x02, 0x02) AM_READ_PORT("IN1") AM_WRITENOP
476   AM_RANGE(0x03, 0x03) AM_READNOP AM_WRITE_LEGACY(sound_data_w)
476   AM_RANGE(0x03, 0x03) AM_READNOP AM_WRITE(sound_data_w)
477477   AM_RANGE(0x04, 0x04) AM_NOP
478   AM_RANGE(0x05, 0x05) AM_READNOP AM_WRITE_LEGACY(enigma2_flip_screen_w)
478   AM_RANGE(0x05, 0x05) AM_READNOP AM_WRITE(enigma2_flip_screen_w)
479479   AM_RANGE(0x06, 0x07) AM_NOP
480480ADDRESS_MAP_END
481481
src/mame/drivers/videopkr.c
r14845r14846
336336   UINT8 m_sbp2;
337337   UINT8 m_sbp3;
338338   tilemap_t *m_bg_tilemap;
339   DECLARE_READ8_MEMBER(videopkr_io_r);
340   DECLARE_WRITE8_MEMBER(videopkr_io_w);
341   DECLARE_READ8_MEMBER(videopkr_p1_data_r);
342   DECLARE_READ8_MEMBER(videopkr_p2_data_r);
343   DECLARE_WRITE8_MEMBER(videopkr_p1_data_w);
344   DECLARE_WRITE8_MEMBER(videopkr_p2_data_w);
345   DECLARE_READ8_MEMBER(videopkr_t0_latch);
346   DECLARE_WRITE8_MEMBER(prog_w);
347   DECLARE_READ8_MEMBER(sound_io_r);
348   DECLARE_WRITE8_MEMBER(sound_io_w);
349   DECLARE_READ8_MEMBER(sound_p2_r);
350   DECLARE_WRITE8_MEMBER(sound_p2_w);
351   DECLARE_READ8_MEMBER(baby_sound_p0_r);
352   DECLARE_WRITE8_MEMBER(baby_sound_p0_w);
353   DECLARE_READ8_MEMBER(baby_sound_p1_r);
354   DECLARE_WRITE8_MEMBER(baby_sound_p1_w);
355   DECLARE_READ8_MEMBER(baby_sound_p2_r);
339356};
340357
341358
r14845r14846
506523*      R/W Handlers      *
507524*************************/
508525
509static READ8_HANDLER( videopkr_io_r )
526READ8_MEMBER(videopkr_state::videopkr_io_r)
510527{
511   videopkr_state *state = space->machine().driver_data<videopkr_state>();
512528   UINT8 valor = 0, hf, co;
513529
514530   UINT16 kbdin;
515531
516   switch (state->m_p2)
532   switch (m_p2)
517533   {
518534      case 0xef:   /* inputs are multiplexed through a diode matrix */
519535      {
520         hf = ((input_port_read(space->machine(), "IN1") & 0x10 ) >> 4) & 1;         /* Hopper full detection */
521         co = 0x10 * ((input_port_read(space->machine(), "IN1") & 0x20 ) >> 5);      /* Coin Out detection */
522         kbdin = ((input_port_read(space->machine(), "IN1") & 0xaf ) << 8) + input_port_read(space->machine(), "IN0");
536         hf = ((input_port_read(machine(), "IN1") & 0x10 ) >> 4) & 1;         /* Hopper full detection */
537         co = 0x10 * ((input_port_read(machine(), "IN1") & 0x20 ) >> 5);      /* Coin Out detection */
538         kbdin = ((input_port_read(machine(), "IN1") & 0xaf ) << 8) + input_port_read(machine(), "IN0");
523539
524540         switch (kbdin)
525541         {
r14845r14846
551567
552568      case 0xdf:
553569      {
554         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
555         valor = state->m_data_ram[offset];
570         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
571         valor = m_data_ram[offset];
556572         break;
557573      }
558574
559575      case 0x5f:
560576      {
561         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
562         valor = state->m_data_ram[offset];
577         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
578         valor = m_data_ram[offset];
563579         break;
564580      }
565581
r14845r14846
568584      case 0x7e:
569585      case 0x7f:
570586      {
571         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
572         valor = state->m_color_ram[state->m_n_offs];
587         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
588         valor = m_color_ram[m_n_offs];
573589         break;
574590      }
575591
r14845r14846
578594      case 0xbe:
579595      case 0xbf:
580596      {
581         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
582         valor = state->m_video_ram[state->m_n_offs];
597         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
598         valor = m_video_ram[m_n_offs];
583599         break;
584600      }
585601   }
r14845r14846
587603   return valor;
588604}
589605
590static WRITE8_HANDLER( videopkr_io_w )
606WRITE8_MEMBER(videopkr_state::videopkr_io_w)
591607{
592   videopkr_state *state = space->machine().driver_data<videopkr_state>();
593   switch (state->m_p2)
608   switch (m_p2)
594609   {
595610      case 0x3c:
596611      case 0x3d:
597612      case 0x3e:
598613      case 0x3f:
599614      {
600         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
601         state->m_color_ram[state->m_n_offs] = data & 0x0f;
602         state->m_video_ram[state->m_n_offs] = data;
603         state->m_bg_tilemap->mark_tile_dirty(state->m_n_offs);
615         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
616         m_color_ram[m_n_offs] = data & 0x0f;
617         m_video_ram[m_n_offs] = data;
618         m_bg_tilemap->mark_tile_dirty(m_n_offs);
604619         break;
605620      }
606621
607622      case 0xdf:
608623      {
609         state->m_data_ram[offset] = (data & 0x0f) + 0xf0;
624         m_data_ram[offset] = (data & 0x0f) + 0xf0;
610625         break;
611626      }
612627
r14845r14846
615630      case 0x7e:
616631      case 0x7f:
617632      {
618         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
619         state->m_color_ram[state->m_n_offs] = data & 0x0f;
620         state->m_bg_tilemap->mark_tile_dirty(state->m_n_offs);
633         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
634         m_color_ram[m_n_offs] = data & 0x0f;
635         m_bg_tilemap->mark_tile_dirty(m_n_offs);
621636         break;
622637      }
623638
r14845r14846
626641      case 0xbe:
627642      case 0xbf:
628643      {
629         state->m_n_offs = ((state->m_p1 & 0xc0) << 2 ) + offset;
630         state->m_video_ram[state->m_n_offs] = data;
631         state->m_bg_tilemap->mark_tile_dirty(state->m_n_offs);
644         m_n_offs = ((m_p1 & 0xc0) << 2 ) + offset;
645         m_video_ram[m_n_offs] = data;
646         m_bg_tilemap->mark_tile_dirty(m_n_offs);
632647         break;
633648      }
634649
r14845r14846
642657         output_set_lamp_value(5, ((data >> 5) & 1));   /* Hopper_1 */
643658         output_set_lamp_value(6, ((data >> 6) & 1));   /* Hopper_2 */
644659         output_set_lamp_value(7, ((data >> 7) & 1));   /* Diverter */
645         state->m_p24_data = data;
646         state->m_hp_1 = (~state->m_p24_data >> 6) & 1;
647         state->m_hp_2 = (~state->m_p24_data >> 5) & 1;
648         state->m_dvrt = (~state->m_p24_data >> 7) & 1;
660         m_p24_data = data;
661         m_hp_1 = (~m_p24_data >> 6) & 1;
662         m_hp_2 = (~m_p24_data >> 5) & 1;
663         m_dvrt = (~m_p24_data >> 7) & 1;
649664         break;
650665      }
651666
652667      case 0xff:
653668      {
654         state->m_t0_latch = state->m_t0_latch ^ 0x01;      /* fix the bookkeeping mode */
669         m_t0_latch = m_t0_latch ^ 0x01;      /* fix the bookkeeping mode */
655670         break;
656671      }
657672   }
658673}
659674
660static READ8_HANDLER( videopkr_p1_data_r )
675READ8_MEMBER(videopkr_state::videopkr_p1_data_r)
661676{
662   videopkr_state *state = space->machine().driver_data<videopkr_state>();
663   return state->m_p1;
677   return m_p1;
664678}
665679
666static READ8_HANDLER( videopkr_p2_data_r )
680READ8_MEMBER(videopkr_state::videopkr_p2_data_r)
667681{
668   videopkr_state *state = space->machine().driver_data<videopkr_state>();
669   return state->m_p2;
682   return m_p2;
670683}
671684
672static WRITE8_HANDLER( videopkr_p1_data_w )
685WRITE8_MEMBER(videopkr_state::videopkr_p1_data_w)
673686{
674   videopkr_state *state = space->machine().driver_data<videopkr_state>();
675   state->m_p1 = data;
687   m_p1 = data;
676688
677689   output_set_lamp_value(8, (data & 1));         /* Aux_0 - Jackpot mech. counter (Baby Games)*/
678690   output_set_lamp_value(9, ((data >> 1) & 1));   /* Aux_1 - */
r14845r14846
681693   output_set_lamp_value(12, ((data >> 4) & 1));   /* Aux_4 - Bell */
682694   output_set_lamp_value(13, ((data >> 5) & 1));   /* Aux_5 - /CIO */
683695
684   state->m_jckp = state->m_p1 & 1;
696   m_jckp = m_p1 & 1;
685697
686   if ((~state->m_c_io & 1) & state->m_ant_cio & state->m_hp_1 & state->m_hp_2)
698   if ((~m_c_io & 1) & m_ant_cio & m_hp_1 & m_hp_2)
687699   {
688      ++state->m_count1;   /* Decoded Coin In Mech. Counter*/
700      ++m_count1;   /* Decoded Coin In Mech. Counter*/
689701   }
690702
691   if ((~state->m_c_io & 1) & state->m_ant_cio & (~state->m_hp_1 & 1) & (~state->m_hp_2 & 1))
703   if ((~m_c_io & 1) & m_ant_cio & (~m_hp_1 & 1) & (~m_hp_2 & 1))
692704   {
693      ++state->m_count2;   /* Decoded Coind Out Mech. Counter */
705      ++m_count2;   /* Decoded Coind Out Mech. Counter */
694706   }
695707
696   if (~state->m_c_io & state->m_ant_cio & state->m_hp_1 & state->m_hp_2 & ~state->m_dvrt)
708   if (~m_c_io & m_ant_cio & m_hp_1 & m_hp_2 & ~m_dvrt)
697709   {
698      ++state->m_count3;   /* Decoded Coin to Drop Mech. Counter */
710      ++m_count3;   /* Decoded Coin to Drop Mech. Counter */
699711   }
700712
701   if (~state->m_jckp & state->m_ant_jckp)
713   if (~m_jckp & m_ant_jckp)
702714   {
703      ++state->m_count4;   /* Decoded Jackpot Mech. Counter */
715      ++m_count4;   /* Decoded Jackpot Mech. Counter */
704716   }
705717
706   count_7dig(state->m_count1, 0);
707   count_7dig(state->m_count2, 7);
708   count_7dig(state->m_count3, 14);
709   count_7dig(state->m_count4, 21);
718   count_7dig(m_count1, 0);
719   count_7dig(m_count2, 7);
720   count_7dig(m_count3, 14);
721   count_7dig(m_count4, 21);
710722
711   state->m_ant_cio = state->m_c_io;
712   state->m_ant_jckp = state->m_jckp;
723   m_ant_cio = m_c_io;
724   m_ant_jckp = m_jckp;
713725}
714726
715static WRITE8_HANDLER( videopkr_p2_data_w )
727WRITE8_MEMBER(videopkr_state::videopkr_p2_data_w)
716728{
717   videopkr_state *state = space->machine().driver_data<videopkr_state>();
718   state->m_p2 = data;
729   m_p2 = data;
719730}
720731
721static READ8_HANDLER( videopkr_t0_latch )
732READ8_MEMBER(videopkr_state::videopkr_t0_latch)
722733{
723   videopkr_state *state = space->machine().driver_data<videopkr_state>();
724   return state->m_t0_latch;
734   return m_t0_latch;
725735}
726736
727static WRITE8_HANDLER( prog_w )
737WRITE8_MEMBER(videopkr_state::prog_w)
728738{
729739   if (!data)
730      cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);   /* clear interrupt FF */
740      cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);   /* clear interrupt FF */
731741}
732742
733743/*************************
r14845r14846
766776
767777*/
768778
769static READ8_HANDLER(sound_io_r)
779READ8_MEMBER(videopkr_state::sound_io_r)
770780{
771   videopkr_state *state = space->machine().driver_data<videopkr_state>();
772   switch (state->m_vp_sound_p2)
781   switch (m_vp_sound_p2)
773782   {
774783      case 0xbf:
775784      {
776         state->m_c_io = (state->m_p1 >> 5) & 1;
777         state->m_hp_1 = (~state->m_p24_data >> 6) & 1;
778         state->m_hp_2 = (~state->m_p24_data >> 5) & 1;
779         state->m_bell = (state->m_p1 >> 4) & 1;
780         state->m_aux3 = (state->m_p1 >> 3) & 1;
781         state->m_dvrt = (~state->m_p24_data >> 7) & 1;
782         state->m_sound_ant = state->m_sound_latch;
783         state->m_sound_latch = state->m_c_io + (state->m_hp_1 << 1) + (state->m_hp_2 << 2) + (state->m_bell << 3) + 0xf0;
785         m_c_io = (m_p1 >> 5) & 1;
786         m_hp_1 = (~m_p24_data >> 6) & 1;
787         m_hp_2 = (~m_p24_data >> 5) & 1;
788         m_bell = (m_p1 >> 4) & 1;
789         m_aux3 = (m_p1 >> 3) & 1;
790         m_dvrt = (~m_p24_data >> 7) & 1;
791         m_sound_ant = m_sound_latch;
792         m_sound_latch = m_c_io + (m_hp_1 << 1) + (m_hp_2 << 2) + (m_bell << 3) + 0xf0;
784793
785794         break;
786795      }
787796   }
788797
789   return state->m_sound_latch;
798   return m_sound_latch;
790799}
791800
792static WRITE8_HANDLER(sound_io_w)
801WRITE8_MEMBER(videopkr_state::sound_io_w)
793802{
794   videopkr_state *state = space->machine().driver_data<videopkr_state>();
795   if (state->m_vp_sound_p2 == 0x5f || state->m_vp_sound_p2 == 0xdf)
803   if (m_vp_sound_p2 == 0x5f || m_vp_sound_p2 == 0xdf)
796804   {
797      state->m_dc_40103 = data;
798      state->m_dc_4020 = 0;
805      m_dc_40103 = data;
806      m_dc_4020 = 0;
799807   }
800808}
801809
802static READ8_HANDLER(sound_p2_r)
810READ8_MEMBER(videopkr_state::sound_p2_r)
803811{
804   videopkr_state *state = space->machine().driver_data<videopkr_state>();
805   return state->m_vp_sound_p2;
812   return m_vp_sound_p2;
806813}
807814
808static WRITE8_HANDLER(sound_p2_w)
815WRITE8_MEMBER(videopkr_state::sound_p2_w)
809816{
810   videopkr_state *state = space->machine().driver_data<videopkr_state>();
811   state->m_vp_sound_p2 = data;
817   m_vp_sound_p2 = data;
812818
813819   switch (data)
814820   {
815821      case 0x5f:
816822      {
817         state->m_te_40103 = 0;   /* p2.7 LOW */
818         state->m_ld_40103 = 0;   /* p2.5 LOW */
823         m_te_40103 = 0;   /* p2.7 LOW */
824         m_ld_40103 = 0;   /* p2.5 LOW */
819825         break;
820826      }
821827
822828      case 0x7f:
823829      {
824         state->m_te_40103 = 0;
825         state->m_ld_40103 = 1;
830         m_te_40103 = 0;
831         m_ld_40103 = 1;
826832         break;
827833      }
828834
829835      case 0xff:
830836      {
831         state->m_te_40103 = 1;
832         state->m_ld_40103 = 1;
837         m_te_40103 = 1;
838         m_ld_40103 = 1;
833839         break;
834840      }
835841   }
r14845r14846
838844
839845/* Baby Sound Handlers */
840846
841static READ8_HANDLER(baby_sound_p0_r)
847READ8_MEMBER(videopkr_state::baby_sound_p0_r)
842848{
843   videopkr_state *state = space->machine().driver_data<videopkr_state>();
844   return state->m_sbp0;
849   return m_sbp0;
845850}
846851
847static WRITE8_HANDLER(baby_sound_p0_w)
852WRITE8_MEMBER(videopkr_state::baby_sound_p0_w)
848853{
849   videopkr_state *state = space->machine().driver_data<videopkr_state>();
850   state->m_sbp0 = data;
854   m_sbp0 = data;
851855}
852856
853static READ8_HANDLER(baby_sound_p1_r)
857READ8_MEMBER(videopkr_state::baby_sound_p1_r)
854858{
855   videopkr_state *state = space->machine().driver_data<videopkr_state>();
856   state->m_c_io = (state->m_p1 >> 5) & 1;
857   state->m_hp_1 = (~state->m_p24_data >> 6) & 1;
858   state->m_hp_2 = (~state->m_p24_data >> 5) & 1;
859   state->m_bell = (state->m_p1 >> 4) & 1;
860   state->m_aux3 = (state->m_p1 >> 3) & 1;
861   state->m_baby_latch = state->m_c_io + (state->m_hp_1 << 1) + (state->m_hp_2 << 2) + (state->m_bell << 3) + (state->m_aux3 << 4) + 0xe0;
862   return state->m_baby_latch;
859   m_c_io = (m_p1 >> 5) & 1;
860   m_hp_1 = (~m_p24_data >> 6) & 1;
861   m_hp_2 = (~m_p24_data >> 5) & 1;
862   m_bell = (m_p1 >> 4) & 1;
863   m_aux3 = (m_p1 >> 3) & 1;
864   m_baby_latch = m_c_io + (m_hp_1 << 1) + (m_hp_2 << 2) + (m_bell << 3) + (m_aux3 << 4) + 0xe0;
865   return m_baby_latch;
863866}
864867
865static WRITE8_HANDLER(baby_sound_p1_w)
868WRITE8_MEMBER(videopkr_state::baby_sound_p1_w)
866869{
867   videopkr_state *state = space->machine().driver_data<videopkr_state>();
868   state->m_baby_latch = state->m_baby_latch | data;
870   m_baby_latch = m_baby_latch | data;
869871}
870872
871static READ8_HANDLER(baby_sound_p2_r)
873READ8_MEMBER(videopkr_state::baby_sound_p2_r)
872874{
873   videopkr_state *state = space->machine().driver_data<videopkr_state>();
874   return state->m_sbp2;
875   return m_sbp2;
875876}
876877
877878static WRITE8_DEVICE_HANDLER(baby_sound_p2_w)
r14845r14846
943944ADDRESS_MAP_END
944945
945946static ADDRESS_MAP_START( i8039_io_port, AS_IO, 8, videopkr_state )
946   AM_RANGE(0x00,            0xff           ) AM_READWRITE_LEGACY(videopkr_io_r, videopkr_io_w)
947   AM_RANGE(MCS48_PORT_P1,   MCS48_PORT_P1  ) AM_READWRITE_LEGACY(videopkr_p1_data_r, videopkr_p1_data_w)
948   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2  ) AM_READWRITE_LEGACY(videopkr_p2_data_r, videopkr_p2_data_w)
949   AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_WRITE_LEGACY(prog_w)
950   AM_RANGE(MCS48_PORT_T0,   MCS48_PORT_T0  ) AM_READ_LEGACY(videopkr_t0_latch)
947   AM_RANGE(0x00,            0xff           ) AM_READWRITE(videopkr_io_r, videopkr_io_w)
948   AM_RANGE(MCS48_PORT_P1,   MCS48_PORT_P1  ) AM_READWRITE(videopkr_p1_data_r, videopkr_p1_data_w)
949   AM_RANGE(MCS48_PORT_P2,   MCS48_PORT_P2  ) AM_READWRITE(videopkr_p2_data_r, videopkr_p2_data_w)
950   AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_WRITE(prog_w)
951   AM_RANGE(MCS48_PORT_T0,   MCS48_PORT_T0  ) AM_READ(videopkr_t0_latch)
951952ADDRESS_MAP_END
952953
953954static ADDRESS_MAP_START( i8039_sound_mem, AS_PROGRAM, 8, videopkr_state )
r14845r14846
955956ADDRESS_MAP_END
956957
957958static ADDRESS_MAP_START( i8039_sound_port, AS_IO, 8, videopkr_state )
958   AM_RANGE(0x00         , 0xff         ) AM_READWRITE_LEGACY(sound_io_r, sound_io_w)
959   AM_RANGE(0x00         , 0xff         ) AM_READWRITE(sound_io_r, sound_io_w)
959960   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE_LEGACY("dac", dac_w)
960   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE_LEGACY(sound_p2_r, sound_p2_w)
961   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(sound_p2_r, sound_p2_w)
961962ADDRESS_MAP_END
962963
963964
r14845r14846
968969static ADDRESS_MAP_START( i8051_sound_port, AS_IO, 8, videopkr_state )
969970   AM_RANGE(0x0000, 0x1ff) AM_RAM
970971   /* ports */
971   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE_LEGACY(baby_sound_p0_r, baby_sound_p0_w)
972   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE_LEGACY(baby_sound_p1_r, baby_sound_p1_w)
973   AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READ_LEGACY(baby_sound_p2_r) AM_DEVWRITE_LEGACY("dac", baby_sound_p2_w)
972   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE(baby_sound_p0_r, baby_sound_p0_w)
973   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE(baby_sound_p1_r, baby_sound_p1_w)
974   AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READ(baby_sound_p2_r) AM_DEVWRITE_LEGACY("dac", baby_sound_p2_w)
974975   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_DEVREADWRITE_LEGACY("aysnd", baby_sound_p3_r, baby_sound_p3_w)
975976ADDRESS_MAP_END
976977
src/mame/drivers/igspoker.c
r14845r14846
9191   size_t m_protection_res;
9292
9393   required_device<cpu_device> m_maincpu;
94   DECLARE_READ8_MEMBER(igs_irqack_r);
95   DECLARE_WRITE8_MEMBER(igs_irqack_w);
96   DECLARE_WRITE8_MEMBER(bg_tile_w);
97   DECLARE_WRITE8_MEMBER(fg_tile_w);
98   DECLARE_WRITE8_MEMBER(fg_color_w);
99   DECLARE_WRITE8_MEMBER(igs_nmi_and_coins_w);
100   DECLARE_WRITE8_MEMBER(igs_lamps_w);
101   DECLARE_READ8_MEMBER(custom_io_r);
102   DECLARE_WRITE8_MEMBER(custom_io_w);
103   DECLARE_READ8_MEMBER(exp_rom_r);
104   void show_out();
94105};
95106
96107
r14845r14846
119130}
120131
121132
122static READ8_HANDLER( igs_irqack_r )
133READ8_MEMBER(igspoker_state::igs_irqack_r)
123134{
124   igspoker_state *state = space->machine().driver_data<igspoker_state>();
125   device_set_input_line(state->m_maincpu, 0, CLEAR_LINE);
135   device_set_input_line(m_maincpu, 0, CLEAR_LINE);
126136   return 0;
127137}
128138
129static WRITE8_HANDLER( igs_irqack_w )
139WRITE8_MEMBER(igspoker_state::igs_irqack_w)
130140{
131//  cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
141//  cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
132142}
133143
134144
r14845r14846
147157   SET_TILE_INFO(0, code, tile != 0x1fff ? ((code >> 12) & 0xe) + 1 : 0, 0);
148158}
149159
150static WRITE8_HANDLER( bg_tile_w )
160WRITE8_MEMBER(igspoker_state::bg_tile_w)
151161{
152   igspoker_state *state = space->machine().driver_data<igspoker_state>();
153   state->m_bg_tile_ram[offset] = data;
154   state->m_bg_tilemap->mark_tile_dirty(offset);
162   m_bg_tile_ram[offset] = data;
163   m_bg_tilemap->mark_tile_dirty(offset);
155164}
156165
157static WRITE8_HANDLER( fg_tile_w )
166WRITE8_MEMBER(igspoker_state::fg_tile_w)
158167{
159   igspoker_state *state = space->machine().driver_data<igspoker_state>();
160   state->m_fg_tile_ram[offset] = data;
161   state->m_fg_tilemap->mark_tile_dirty(offset);
168   m_fg_tile_ram[offset] = data;
169   m_fg_tilemap->mark_tile_dirty(offset);
162170}
163171
164static WRITE8_HANDLER( fg_color_w )
172WRITE8_MEMBER(igspoker_state::fg_color_w)
165173{
166   igspoker_state *state = space->machine().driver_data<igspoker_state>();
167   state->m_fg_color_ram[offset] = data;
168   state->m_fg_tilemap->mark_tile_dirty(offset);
174   m_fg_color_ram[offset] = data;
175   m_fg_tilemap->mark_tile_dirty(offset);
169176}
170177
171178static VIDEO_START(igs_video)
r14845r14846
205212}
206213
207214
208static void show_out(igspoker_state *state)
215void igspoker_state::show_out()
209216{
210217#ifdef MAME_DEBUG
211   popmessage("%02x %02x", state->m_out[0], state->m_out[1]);
218   popmessage("%02x %02x", m_out[0], m_out[1]);
212219#endif
213220}
214221
215static WRITE8_HANDLER( igs_nmi_and_coins_w )
222WRITE8_MEMBER(igspoker_state::igs_nmi_and_coins_w)
216223{
217   igspoker_state *state = space->machine().driver_data<igspoker_state>();
218   coin_counter_w(space->machine(), 0,      data & 0x01);   // coin_a
219   coin_counter_w(space->machine(), 1,      data & 0x04);   // coin_c
220   coin_counter_w(space->machine(), 2,      data & 0x08);   // key in
221   coin_counter_w(space->machine(), 3,      data & 0x10);   // coin state->m_out mech
224   coin_counter_w(machine(), 0,      data & 0x01);   // coin_a
225   coin_counter_w(machine(), 1,      data & 0x04);   // coin_c
226   coin_counter_w(machine(), 2,      data & 0x08);   // key in
227   coin_counter_w(machine(), 3,      data & 0x10);   // coin m_out mech
222228
223   set_led_status(space->machine(), 6,      data & 0x20);   // led for coin state->m_out / state->m_hopper active
229   set_led_status(machine(), 6,      data & 0x20);   // led for coin m_out / m_hopper active
224230
225   state->m_nmi_enable = data & 0x80;     // nmi enable?
231   m_nmi_enable = data & 0x80;     // nmi enable?
226232#ifdef VERBOSE
227   logerror("PC %06X: NMI change %02x\n",cpu_get_pc(&space->device()),state->m_nmi_enable);
233   logerror("PC %06X: NMI change %02x\n",cpu_get_pc(&space.device()),m_nmi_enable);
228234#endif
229235
230   state->m_out[0] = data;
231   show_out(state);
236   m_out[0] = data;
237   show_out();
232238}
233239
234static WRITE8_HANDLER( igs_lamps_w )
240WRITE8_MEMBER(igspoker_state::igs_lamps_w)
235241{
236   igspoker_state *state = space->machine().driver_data<igspoker_state>();
237242/*
238243    - Lbits -
239244    7654 3210
r14845r14846
266271   output_set_lamp_value(5, (data >> 2) & 1);      /* Lamp 5 - HOLD 5 */
267272   output_set_lamp_value(6, (data & 1));         /* Lamp 6 - START */
268273
269   state->m_hopper         =   (~data)& 0x80;
274   m_hopper         =   (~data)& 0x80;
270275
271   state->m_out[1] = data;
272   show_out(state);
276   m_out[1] = data;
277   show_out();
273278}
274279
275280
276281
277static READ8_HANDLER( custom_io_r )
282READ8_MEMBER(igspoker_state::custom_io_r)
278283{
279   igspoker_state *state = space->machine().driver_data<igspoker_state>();
280284#ifdef VERBOSE
281   logerror("PC %06X: Protection read %02x\n",cpu_get_pc(&space->device()), (int) state->m_protection_res);
285   logerror("PC %06X: Protection read %02x\n",cpu_get_pc(&space.device()), (int) m_protection_res);
282286#endif
283   return state->m_protection_res;
287   return m_protection_res;
284288}
285289
286static WRITE8_HANDLER( custom_io_w )
290WRITE8_MEMBER(igspoker_state::custom_io_w)
287291{
288   igspoker_state *state = space->machine().driver_data<igspoker_state>();
289292#ifdef VERBOSE
290   logerror("PC %06X: Protection write %02x\n",cpu_get_pc(&space->device()),data);
293   logerror("PC %06X: Protection write %02x\n",cpu_get_pc(&space.device()),data);
291294#endif
292295
293296   switch (data)
294297   {
295      case 0x00: state->m_protection_res = input_port_read(space->machine(), "BUTTONS1"); break;
298      case 0x00: m_protection_res = input_port_read(machine(), "BUTTONS1"); break;
296299      // CSK227
297      case 0x20: state->m_protection_res = 0x49; break;
298      case 0x21: state->m_protection_res = 0x47; break;
299      case 0x22: state->m_protection_res = 0x53; break;
300      case 0x24: state->m_protection_res = 0x41; break;
301      case 0x25: state->m_protection_res = 0x41; break;
302      case 0x26: state->m_protection_res = 0x7f; break;
303      case 0x27: state->m_protection_res = 0x41; break;
304      case 0x28: state->m_protection_res = 0x41; break;
305      case 0x2a: state->m_protection_res = 0x3e; break;
306      case 0x2b: state->m_protection_res = 0x41; break;
300      case 0x20: m_protection_res = 0x49; break;
301      case 0x21: m_protection_res = 0x47; break;
302      case 0x22: m_protection_res = 0x53; break;
303      case 0x24: m_protection_res = 0x41; break;
304      case 0x25: m_protection_res = 0x41; break;
305      case 0x26: m_protection_res = 0x7f; break;
306      case 0x27: m_protection_res = 0x41; break;
307      case 0x28: m_protection_res = 0x41; break;
308      case 0x2a: m_protection_res = 0x3e; break;
309      case 0x2b: m_protection_res = 0x41; break;
307310      // CSK227 and NUMBER10
308      case 0x2c: state->m_protection_res = 0x49; break;
309      case 0x2d: state->m_protection_res = 0xf9; break;
310      case 0x2e: state->m_protection_res = 0x0a; break;
311      case 0x30: state->m_protection_res = 0x26; break;
312      case 0x31: state->m_protection_res = 0x49; break;
313      case 0x32: state->m_protection_res = 0x49; break;
314      case 0x33: state->m_protection_res = 0x49; break;
315      case 0x34: state->m_protection_res = 0x32; break;
311      case 0x2c: m_protection_res = 0x49; break;
312      case 0x2d: m_protection_res = 0xf9; break;
313      case 0x2e: m_protection_res = 0x0a; break;
314      case 0x30: m_protection_res = 0x26; break;
315      case 0x31: m_protection_res = 0x49; break;
316      case 0x32: m_protection_res = 0x49; break;
317      case 0x33: m_protection_res = 0x49; break;
318      case 0x34: m_protection_res = 0x32; break;
316319      // NUMBER10
317      case 0x60: state->m_protection_res = 0x30; break;
318      case 0x61: state->m_protection_res = 0x31; break;
319      case 0x62: state->m_protection_res = 0x3e; break;
320      case 0x64: state->m_protection_res = 0x3c; break;
321      case 0x65: state->m_protection_res = 0x31; break;
322      case 0x66: state->m_protection_res = 0x39; break;
323      case 0x67: state->m_protection_res = 0x33; break;
324      case 0x68: state->m_protection_res = 0x35; break;
325      case 0x6a: state->m_protection_res = 0x40; break;
326      case 0x6b: state->m_protection_res = 0x43; break;
320      case 0x60: m_protection_res = 0x30; break;
321      case 0x61: m_protection_res = 0x31; break;
322      case 0x62: m_protection_res = 0x3e; break;
323      case 0x64: m_protection_res = 0x3c; break;
324      case 0x65: m_protection_res = 0x31; break;
325      case 0x66: m_protection_res = 0x39; break;
326      case 0x67: m_protection_res = 0x33; break;
327      case 0x68: m_protection_res = 0x35; break;
328      case 0x6a: m_protection_res = 0x40; break;
329      case 0x6b: m_protection_res = 0x43; break;
327330      default:
328         state->m_protection_res = data;
331         m_protection_res = data;
329332   }
330333}
331334
r14845r14846
336339   return field.machine().input().code_pressed(KEYCODE_H);
337340}
338341
339static READ8_HANDLER( exp_rom_r )
342READ8_MEMBER(igspoker_state::exp_rom_r)
340343{
341   UINT8 *rom = space->machine().region("maincpu")->base();
344   UINT8 *rom = machine().region("maincpu")->base();
342345   return rom[offset+0x10000];
343346}
344347
r14845r14846
355358   AM_RANGE(0x4002, 0x4002) AM_READ_PORT("DSW3")         /* DSW3 */
356359   AM_RANGE(0x4003, 0x4003) AM_READ_PORT("DSW4")         /* DSW4 */
357360   AM_RANGE(0x4004, 0x4004) AM_READ_PORT("DSW5")         /* DSW5 */
358   AM_RANGE(0x5080, 0x5080) AM_WRITE_LEGACY(igs_nmi_and_coins_w)
361   AM_RANGE(0x5080, 0x5080) AM_WRITE(igs_nmi_and_coins_w)
359362   AM_RANGE(0x5081, 0x5081) AM_READ_PORT("SERVICE")         /* Services */
360363   AM_RANGE(0x5082, 0x5082) AM_READ_PORT("COINS")         /* Coing & Kbd */
361   AM_RANGE(0x5090, 0x5090) AM_WRITE_LEGACY(custom_io_w)
362   AM_RANGE(0x5091, 0x5091) AM_READ_LEGACY(custom_io_r) AM_WRITE_LEGACY(igs_lamps_w )         /* Keyboard */
364   AM_RANGE(0x5090, 0x5090) AM_WRITE(custom_io_w)
365   AM_RANGE(0x5091, 0x5091) AM_READ(custom_io_r) AM_WRITE(igs_lamps_w )         /* Keyboard */
363366   AM_RANGE(0x50a0, 0x50a0) AM_READ_PORT("BUTTONS2")         /* Not connected */
364367   AM_RANGE(0x50b0, 0x50b1) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w)
365   AM_RANGE(0x50c0, 0x50c0) AM_READ_LEGACY(igs_irqack_r) AM_WRITE_LEGACY(igs_irqack_w)
366   AM_RANGE(0x6800, 0x6fff) AM_RAM_WRITE_LEGACY(bg_tile_w )  AM_BASE(m_bg_tile_ram )
367   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
368   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
369   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(exp_rom_r )
368   AM_RANGE(0x50c0, 0x50c0) AM_READ(igs_irqack_r) AM_WRITE(igs_irqack_w)
369   AM_RANGE(0x6800, 0x6fff) AM_RAM_WRITE(bg_tile_w )  AM_BASE(m_bg_tile_ram )
370   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
371   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
372   AM_RANGE(0x0000, 0xffff) AM_READ(exp_rom_r )
370373ADDRESS_MAP_END
371374
372375
r14845r14846
11111114   AM_RANGE(0x4004, 0x4004) AM_READ_PORT("DSW5")         /* DSW5 */
11121115   AM_RANGE(0x4006, 0x4006) AM_READ_PORT("DSW6")
11131116   AM_RANGE(0x4007, 0x4007) AM_READ_PORT("DSW7")
1114   AM_RANGE(0x50f0, 0x50f0) AM_WRITE_LEGACY(igs_nmi_and_coins_w)
1117   AM_RANGE(0x50f0, 0x50f0) AM_WRITE(igs_nmi_and_coins_w)
11151118   AM_RANGE(0x5080, 0x5080) AM_READ_PORT("SERVICE")         /* Services */
1116   AM_RANGE(0x5090, 0x5090) AM_WRITE_LEGACY(custom_io_w)
1117   AM_RANGE(0x5091, 0x5091) AM_READ_LEGACY(custom_io_r) AM_WRITE_LEGACY(igs_lamps_w )         /* Keyboard */
1119   AM_RANGE(0x5090, 0x5090) AM_WRITE(custom_io_w)
1120   AM_RANGE(0x5091, 0x5091) AM_READ(custom_io_r) AM_WRITE(igs_lamps_w )         /* Keyboard */
11181121   AM_RANGE(0x50a0, 0x50a0) AM_READ_PORT("BUTTONS2")
11191122   /* Sound synthesys has been patched out, replaced by ADPCM samples */
11201123   AM_RANGE(0x50b0, 0x50b0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
1121   AM_RANGE(0x50c0, 0x50c0) AM_READ_LEGACY(igs_irqack_r) AM_WRITE_LEGACY(igs_irqack_w)
1122   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
1123   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
1124   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(exp_rom_r )
1124   AM_RANGE(0x50c0, 0x50c0) AM_READ(igs_irqack_r) AM_WRITE(igs_irqack_w)
1125   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
1126   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
1127   AM_RANGE(0x0000, 0xffff) AM_READ(exp_rom_r )
11251128ADDRESS_MAP_END
11261129
11271130static ADDRESS_MAP_START( cpokerpk_io_map, AS_IO, 8, igspoker_state )
r14845r14846
11321135   AM_RANGE(0x4002, 0x4002) AM_READ_PORT("DSW3")         /* DSW3 */
11331136   AM_RANGE(0x4003, 0x4003) AM_READ_PORT("DSW4")         /* DSW4 */
11341137   AM_RANGE(0x4004, 0x4004) AM_READ_PORT("DSW5")         /* DSW5 */
1135   AM_RANGE(0x50f0, 0x50f0) AM_WRITE_LEGACY(igs_nmi_and_coins_w)
1138   AM_RANGE(0x50f0, 0x50f0) AM_WRITE(igs_nmi_and_coins_w)
11361139   AM_RANGE(0x5081, 0x5081) AM_READ_PORT("SERVICE")         /* Services */
11371140   AM_RANGE(0x5082, 0x5082) AM_READ_PORT("COINS")         /* Coing & Kbd */
1138   AM_RANGE(0x5090, 0x5090) AM_WRITE_LEGACY(custom_io_w)
1139   AM_RANGE(0x5091, 0x5091) AM_READ_LEGACY(custom_io_r) AM_WRITE_LEGACY(igs_lamps_w )         /* Keyboard */
1141   AM_RANGE(0x5090, 0x5090) AM_WRITE(custom_io_w)
1142   AM_RANGE(0x5091, 0x5091) AM_READ(custom_io_r) AM_WRITE(igs_lamps_w )         /* Keyboard */
11401143   AM_RANGE(0x50a0, 0x50a0) AM_READ_PORT("BUTTONS2")
11411144   /* Sound synthesys has been patched out, replaced by ADPCM samples */
11421145   AM_RANGE(0x50b0, 0x50b0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
1143   AM_RANGE(0x50c0, 0x50c0) AM_READ_LEGACY(igs_irqack_r) AM_WRITE_LEGACY(igs_irqack_w)
1144   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
1145   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
1146   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(exp_rom_r )
1146   AM_RANGE(0x50c0, 0x50c0) AM_READ(igs_irqack_r) AM_WRITE(igs_irqack_w)
1147   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
1148   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
1149   AM_RANGE(0x0000, 0xffff) AM_READ(exp_rom_r )
11471150ADDRESS_MAP_END
11481151
11491152static INPUT_PORTS_START( number10 )
src/mame/drivers/koikoi.c
r14845r14846
6262   int m_inputval;
6363   int m_inputlen;
6464   int m_ioram[8];
65   DECLARE_WRITE8_MEMBER(vram_w);
66   DECLARE_READ8_MEMBER(io_r);
67   DECLARE_WRITE8_MEMBER(io_w);
6568};
6669
6770
r14845r14846
145148 *
146149 *************************************/
147150
148static WRITE8_HANDLER( vram_w )
151WRITE8_MEMBER(koikoi_state::vram_w)
149152{
150   koikoi_state *state = space->machine().driver_data<koikoi_state>();
151   state->m_videoram[offset] = data;
152   state->m_tmap->mark_tile_dirty(offset & 0x3ff);
153   m_videoram[offset] = data;
154   m_tmap->mark_tile_dirty(offset & 0x3ff);
153155}
154156
155157static READ8_DEVICE_HANDLER( input_r )
r14845r14846
195197   //xor'ed mux select, player 1 = 1,2,4,8, player 2 = 0x10, 0x20, 0x40, 0x80
196198}
197199
198static READ8_HANDLER( io_r )
200READ8_MEMBER(koikoi_state::io_r)
199201{
200   koikoi_state *state = space->machine().driver_data<koikoi_state>();
201202   if (!offset)
202      return input_port_read(space->machine(), "IN0") ^ state->m_ioram[4]; //coin
203      return input_port_read(machine(), "IN0") ^ m_ioram[4]; //coin
203204
204205   return 0;
205206}
206207
207static WRITE8_HANDLER( io_w )
208WRITE8_MEMBER(koikoi_state::io_w)
208209{
209   koikoi_state *state = space->machine().driver_data<koikoi_state>();
210210   if (offset == 7 && data == 0)
211      state->m_inputcnt = 0; //reset read cycle counter
211      m_inputcnt = 0; //reset read cycle counter
212212
213   state->m_ioram[offset] = data;
213   m_ioram[offset] = data;
214214}
215215
216216/*************************************
r14845r14846
222222static ADDRESS_MAP_START( koikoi_map, AS_PROGRAM, 8, koikoi_state )
223223   AM_RANGE(0x0000, 0x2fff) AM_ROM
224224   AM_RANGE(0x6000, 0x67ff) AM_RAM
225   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE_LEGACY(vram_w) AM_BASE(m_videoram)
225   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(vram_w) AM_BASE(m_videoram)
226226   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("DSW")
227   AM_RANGE(0x9000, 0x9007) AM_READWRITE_LEGACY(io_r, io_w)
227   AM_RANGE(0x9000, 0x9007) AM_READWRITE(io_r, io_w)
228228ADDRESS_MAP_END
229229
230230static ADDRESS_MAP_START( koikoi_io_map, AS_IO, 8, koikoi_state )
src/mame/drivers/mil4000.c
r14845r14846
107107   tilemap_t *m_sc3_tilemap;
108108   UINT16 m_vblank;
109109   UINT16 m_hblank;
110   DECLARE_READ16_MEMBER(hvretrace_r);
111   DECLARE_WRITE16_MEMBER(sc0_vram_w);
112   DECLARE_WRITE16_MEMBER(sc1_vram_w);
113   DECLARE_WRITE16_MEMBER(sc2_vram_w);
114   DECLARE_WRITE16_MEMBER(sc3_vram_w);
115   DECLARE_WRITE16_MEMBER(output_w);
110116};
111117
112118
r14845r14846
190196}
191197
192198/*TODO*/
193static READ16_HANDLER( hvretrace_r )
199READ16_MEMBER(mil4000_state::hvretrace_r)
194200{
195   mil4000_state *state = space->machine().driver_data<mil4000_state>();
196201   UINT16 res;
197202
198203   res = 0;
199204
200   state->m_vblank^=1;
201   state->m_hblank^=1;
205   m_vblank^=1;
206   m_hblank^=1;
202207
203208   /*V-Blank*/
204   if (state->m_vblank)
209   if (m_vblank)
205210      res|= 0x80;
206211
207212   /*H-Blank*/
208   if (state->m_hblank)
213   if (m_hblank)
209214      res|= 0x40;
210215
211216   return res;
212217}
213218
214219
215static WRITE16_HANDLER( sc0_vram_w )
220WRITE16_MEMBER(mil4000_state::sc0_vram_w)
216221{
217   mil4000_state *state = space->machine().driver_data<mil4000_state>();
218   state->m_sc0_vram[offset] = data;
219   state->m_sc0_tilemap->mark_tile_dirty(offset/2);
222   m_sc0_vram[offset] = data;
223   m_sc0_tilemap->mark_tile_dirty(offset/2);
220224}
221225
222static WRITE16_HANDLER( sc1_vram_w )
226WRITE16_MEMBER(mil4000_state::sc1_vram_w)
223227{
224   mil4000_state *state = space->machine().driver_data<mil4000_state>();
225   state->m_sc1_vram[offset] = data;
226   state->m_sc1_tilemap->mark_tile_dirty(offset/2);
228   m_sc1_vram[offset] = data;
229   m_sc1_tilemap->mark_tile_dirty(offset/2);
227230}
228231
229static WRITE16_HANDLER( sc2_vram_w )
232WRITE16_MEMBER(mil4000_state::sc2_vram_w)
230233{
231   mil4000_state *state = space->machine().driver_data<mil4000_state>();
232   state->m_sc2_vram[offset] = data;
233   state->m_sc2_tilemap->mark_tile_dirty(offset/2);
234   m_sc2_vram[offset] = data;
235   m_sc2_tilemap->mark_tile_dirty(offset/2);
234236}
235237
236static WRITE16_HANDLER( sc3_vram_w )
238WRITE16_MEMBER(mil4000_state::sc3_vram_w)
237239{
238   mil4000_state *state = space->machine().driver_data<mil4000_state>();
239   state->m_sc3_vram[offset] = data;
240   state->m_sc3_tilemap->mark_tile_dirty(offset/2);
240   m_sc3_vram[offset] = data;
241   m_sc3_tilemap->mark_tile_dirty(offset/2);
241242}
242243
243244/*end of video stuff*/
r14845r14846
252253    ---- ---- ---- --x- Hold 2
253254    ---- ---- ---- ---x Hold 1
254255*/
255static WRITE16_HANDLER( output_w )
256WRITE16_MEMBER(mil4000_state::output_w)
256257{
257258   int i;
258259
259260   for(i=0;i<3;i++)
260      coin_counter_w(space->machine(), i, data & 0x2000);
261      coin_counter_w(machine(), i, data & 0x2000);
261262
262263   output_set_lamp_value(0, (data) & 1);      /* HOLD1 */
263264   output_set_lamp_value(1, (data >> 1) & 1);   /* HOLD2 */
r14845r14846
272273
273274static ADDRESS_MAP_START( mil4000_map, AS_PROGRAM, 16, mil4000_state )
274275   AM_RANGE(0x000000, 0x03ffff) AM_ROM
275   AM_RANGE(0x500000, 0x503fff) AM_RAM_WRITE_LEGACY(sc0_vram_w) AM_BASE(m_sc0_vram)   // CY62256L-70, U77
276   AM_RANGE(0x504000, 0x507fff) AM_RAM_WRITE_LEGACY(sc1_vram_w) AM_BASE(m_sc1_vram)   // CY62256L-70, U77
277   AM_RANGE(0x508000, 0x50bfff) AM_RAM_WRITE_LEGACY(sc2_vram_w) AM_BASE(m_sc2_vram)   // CY62256L-70, U78
278   AM_RANGE(0x50c000, 0x50ffff) AM_RAM_WRITE_LEGACY(sc3_vram_w) AM_BASE(m_sc3_vram)   // CY62256L-70, U78
276   AM_RANGE(0x500000, 0x503fff) AM_RAM_WRITE(sc0_vram_w) AM_BASE(m_sc0_vram)   // CY62256L-70, U77
277   AM_RANGE(0x504000, 0x507fff) AM_RAM_WRITE(sc1_vram_w) AM_BASE(m_sc1_vram)   // CY62256L-70, U77
278   AM_RANGE(0x508000, 0x50bfff) AM_RAM_WRITE(sc2_vram_w) AM_BASE(m_sc2_vram)   // CY62256L-70, U78
279   AM_RANGE(0x50c000, 0x50ffff) AM_RAM_WRITE(sc3_vram_w) AM_BASE(m_sc3_vram)   // CY62256L-70, U78
279280
280281   AM_RANGE(0x708000, 0x708001) AM_READ_PORT("IN0")
281282   AM_RANGE(0x708002, 0x708003) AM_READ_PORT("IN1")
282   AM_RANGE(0x708004, 0x708005) AM_READ_LEGACY(hvretrace_r)
283   AM_RANGE(0x708004, 0x708005) AM_READ(hvretrace_r)
283284   AM_RANGE(0x708006, 0x708007) AM_READ_PORT("IN2")
284   AM_RANGE(0x708008, 0x708009) AM_WRITE_LEGACY(output_w)
285   AM_RANGE(0x708008, 0x708009) AM_WRITE(output_w)
285286   AM_RANGE(0x708010, 0x708011) AM_NOP //touch screen
286287   AM_RANGE(0x70801e, 0x70801f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
287288
src/mame/drivers/gticlub.c
r14845r14846
244244   UINT32 *m_work_ram;
245245   UINT32 *m_sharc_dataram_0;
246246   UINT32 *m_sharc_dataram_1;
247   DECLARE_WRITE32_MEMBER(paletteram32_w);
248   DECLARE_READ32_MEMBER(gticlub_k001604_tile_r);
249   DECLARE_WRITE32_MEMBER(gticlub_k001604_tile_w);
250   DECLARE_READ32_MEMBER(gticlub_k001604_char_r);
251   DECLARE_WRITE32_MEMBER(gticlub_k001604_char_w);
252   DECLARE_READ32_MEMBER(gticlub_k001604_reg_r);
253   DECLARE_WRITE32_MEMBER(gticlub_k001604_reg_w);
254   DECLARE_READ8_MEMBER(sysreg_r);
255   DECLARE_WRITE8_MEMBER(sysreg_w);
256   DECLARE_READ32_MEMBER(dsp_dataram0_r);
257   DECLARE_WRITE32_MEMBER(dsp_dataram0_w);
258   DECLARE_READ32_MEMBER(dsp_dataram1_r);
259   DECLARE_WRITE32_MEMBER(dsp_dataram1_w);
247260};
248261
249262
250static WRITE32_HANDLER( paletteram32_w )
263WRITE32_MEMBER(gticlub_state::paletteram32_w)
251264{
252   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
253   data = space->machine().generic.paletteram.u32[offset];
254   palette_set_color_rgb(space->machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
265   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
266   data = machine().generic.paletteram.u32[offset];
267   palette_set_color_rgb(machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
255268}
256269
257270static void voodoo_vblank_0(device_t *device, int param)
r14845r14846
264277   cputag_set_input_line(device->machine(), "maincpu", INPUT_LINE_IRQ1, param ? ASSERT_LINE : CLEAR_LINE);
265278}
266279
267static READ32_HANDLER( gticlub_k001604_tile_r )
280READ32_MEMBER(gticlub_state::gticlub_k001604_tile_r)
268281{
269   device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
282   device_t *k001604 = machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
270283   return k001604_tile_r(k001604, offset, mem_mask);
271284}
272285
273static WRITE32_HANDLER( gticlub_k001604_tile_w )
286WRITE32_MEMBER(gticlub_state::gticlub_k001604_tile_w)
274287{
275   device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
288   device_t *k001604 = machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
276289   k001604_tile_w(k001604, offset, data, mem_mask);
277290}
278291
279292
280static READ32_HANDLER( gticlub_k001604_char_r )
293READ32_MEMBER(gticlub_state::gticlub_k001604_char_r)
281294{
282   device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
295   device_t *k001604 = machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
283296   return k001604_char_r(k001604, offset, mem_mask);
284297}
285298
286static WRITE32_HANDLER( gticlub_k001604_char_w )
299WRITE32_MEMBER(gticlub_state::gticlub_k001604_char_w)
287300{
288   device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
301   device_t *k001604 = machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
289302   k001604_char_w(k001604, offset, data, mem_mask);
290303}
291304
292static READ32_HANDLER( gticlub_k001604_reg_r )
305READ32_MEMBER(gticlub_state::gticlub_k001604_reg_r)
293306{
294   device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
307   device_t *k001604 = machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
295308   return k001604_reg_r(k001604, offset, mem_mask);
296309}
297310
298static WRITE32_HANDLER( gticlub_k001604_reg_w )
311WRITE32_MEMBER(gticlub_state::gticlub_k001604_reg_w)
299312{
300   device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
313   device_t *k001604 = machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1");
301314   k001604_reg_w(k001604, offset, data, mem_mask);
302315}
303316
r14845r14846
318331   0            /* reset_delay */
319332};
320333
321static READ8_HANDLER( sysreg_r )
334READ8_MEMBER(gticlub_state::sysreg_r)
322335{
323336   static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" };
324   device_t *adc1038 = space->machine().device("adc1038");
325   eeprom_device *eeprom = space->machine().device<eeprom_device>("eeprom");
337   device_t *adc1038 = machine().device("adc1038");
338   eeprom_device *eeprom = machine().device<eeprom_device>("eeprom");
326339
327340   switch (offset)
328341   {
329342      case 0:
330343      case 1:
331344      case 3:
332         return input_port_read(space->machine(), portnames[offset]);
345         return input_port_read(machine(), portnames[offset]);
333346
334347      case 2:
335348         return adc1038_sars_read(adc1038) << 7;
r14845r14846
354367   return 0;
355368}
356369
357static WRITE8_HANDLER( sysreg_w )
370WRITE8_MEMBER(gticlub_state::sysreg_w)
358371{
359   device_t *adc1038 = space->machine().device("adc1038");
360   eeprom_device *eeprom = space->machine().device<eeprom_device>("eeprom");
372   device_t *adc1038 = machine().device("adc1038");
373   eeprom_device *eeprom = machine().device<eeprom_device>("eeprom");
361374
362375   switch (offset)
363376   {
r14845r14846
374387
375388      case 4:
376389         if (data & 0x80)   /* CG Board 1 IRQ Ack */
377            cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
390            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
378391
379392         if (data & 0x40)   /* CG Board 0 IRQ Ack */
380            cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
393            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
381394
382395         adc1038_di_write(adc1038, (data >> 0) & 1);
383396         adc1038_clk_write(adc1038, (data >> 1) & 1);
r14845r14846
402415
403416static ADDRESS_MAP_START( gticlub_map, AS_PROGRAM, 32, gticlub_state )
404417   AM_RANGE(0x00000000, 0x000fffff) AM_RAM AM_BASE(m_work_ram)      /* Work RAM */
405   AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE_LEGACY(gticlub_k001604_reg_r, gticlub_k001604_reg_w)
406   AM_RANGE(0x74010000, 0x7401ffff) AM_RAM_WRITE_LEGACY(paletteram32_w) AM_BASE_GENERIC(paletteram)
407   AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE_LEGACY(gticlub_k001604_tile_r, gticlub_k001604_tile_w)
408   AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE_LEGACY(gticlub_k001604_char_r, gticlub_k001604_char_w)
418   AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE(gticlub_k001604_reg_r, gticlub_k001604_reg_w)
419   AM_RANGE(0x74010000, 0x7401ffff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
420   AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE(gticlub_k001604_tile_r, gticlub_k001604_tile_w)
421   AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE(gticlub_k001604_char_r, gticlub_k001604_char_w)
409422   AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE_LEGACY(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc)
410423   AM_RANGE(0x78040000, 0x7804000f) AM_READWRITE_LEGACY(K001006_0_r, K001006_0_w)
411424   AM_RANGE(0x78080000, 0x7808000f) AM_READWRITE_LEGACY(K001006_1_r, K001006_1_w)
412425   AM_RANGE(0x780c0000, 0x780c0003) AM_READWRITE_LEGACY(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc)
413   AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8_LEGACY(sysreg_r, sysreg_w, 0xffffffff)
426   AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff)
414427   AM_RANGE(0x7e008000, 0x7e009fff) AM_DEVREADWRITE8_LEGACY("k056230", k056230_r, k056230_w, 0xffffffff)
415428   AM_RANGE(0x7e00a000, 0x7e00bfff) AM_DEVREADWRITE_LEGACY("k056230", lanc_ram_r, lanc_ram_w)
416429   AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
r14845r14846
434447
435448/*****************************************************************************/
436449
437static READ32_HANDLER( dsp_dataram0_r )
450READ32_MEMBER(gticlub_state::dsp_dataram0_r)
438451{
439   gticlub_state *state = space->machine().driver_data<gticlub_state>();
440   return state->m_sharc_dataram_0[offset] & 0xffff;
452   return m_sharc_dataram_0[offset] & 0xffff;
441453}
442454
443static WRITE32_HANDLER( dsp_dataram0_w )
455WRITE32_MEMBER(gticlub_state::dsp_dataram0_w)
444456{
445   gticlub_state *state = space->machine().driver_data<gticlub_state>();
446   state->m_sharc_dataram_0[offset] = data;
457   m_sharc_dataram_0[offset] = data;
447458}
448459
449static READ32_HANDLER( dsp_dataram1_r )
460READ32_MEMBER(gticlub_state::dsp_dataram1_r)
450461{
451   gticlub_state *state = space->machine().driver_data<gticlub_state>();
452   return state->m_sharc_dataram_1[offset] & 0xffff;
462   return m_sharc_dataram_1[offset] & 0xffff;
453463}
454464
455static WRITE32_HANDLER( dsp_dataram1_w )
465WRITE32_MEMBER(gticlub_state::dsp_dataram1_w)
456466{
457   gticlub_state *state = space->machine().driver_data<gticlub_state>();
458   state->m_sharc_dataram_1[offset] = data;
467   m_sharc_dataram_1[offset] = data;
459468}
460469
461470static ADDRESS_MAP_START( sharc_map, AS_DATA, 32, gticlub_state )
462471   AM_RANGE(0x400000, 0x41ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
463   AM_RANGE(0x500000, 0x5fffff) AM_READWRITE_LEGACY(dsp_dataram0_r, dsp_dataram0_w)
472   AM_RANGE(0x500000, 0x5fffff) AM_READWRITE(dsp_dataram0_r, dsp_dataram0_w)
464473   AM_RANGE(0x600000, 0x6fffff) AM_READWRITE_LEGACY(K001005_r, K001005_w)
465474   AM_RANGE(0x700000, 0x7000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
466475ADDRESS_MAP_END
467476
468477static ADDRESS_MAP_START( hangplt_sharc0_map, AS_DATA, 32, gticlub_state )
469478   AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
470   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE_LEGACY(dsp_dataram0_r, dsp_dataram0_w)
479   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram0_r, dsp_dataram0_w)
471480   AM_RANGE(0x1400000, 0x14fffff) AM_RAM
472481   AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo0", nwk_voodoo_0_r, voodoo_w)
473482   AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
r14845r14846
478487
479488static ADDRESS_MAP_START( hangplt_sharc1_map, AS_DATA, 32, gticlub_state )
480489   AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_1_shared_sharc_r, cgboard_1_shared_sharc_w)
481   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE_LEGACY(dsp_dataram1_r, dsp_dataram1_w)
490   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram1_r, dsp_dataram1_w)
482491   AM_RANGE(0x1400000, 0x14fffff) AM_RAM
483492   AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo1", nwk_voodoo_1_r, voodoo_w)
484493   AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_1_comm_sharc_r, cgboard_1_comm_sharc_w)
src/mame/drivers/mazerbla.c
r14845r14846
109109
110110   int m_planes_enabled[4];
111111#endif
112   DECLARE_WRITE8_MEMBER(cfb_backgnd_color_w);
113   DECLARE_WRITE8_MEMBER(cfb_vbank_w);
114   DECLARE_WRITE8_MEMBER(cfb_rom_bank_sel_w);
115   DECLARE_WRITE8_MEMBER(cfb_rom_bank_sel_w_gg);
116   DECLARE_READ8_MEMBER(cfb_port_02_r);
117   DECLARE_WRITE8_MEMBER(vcu_video_reg_w);
118   DECLARE_READ8_MEMBER(vcu_set_cmd_param_r);
119   DECLARE_READ8_MEMBER(vcu_set_gfx_addr_r);
120   DECLARE_READ8_MEMBER(vcu_set_clr_addr_r);
121   DECLARE_WRITE8_MEMBER(cfb_zpu_int_req_set_w);
122   DECLARE_READ8_MEMBER(cfb_zpu_int_req_clr);
123   DECLARE_READ8_MEMBER(ls670_0_r);
124   DECLARE_WRITE8_MEMBER(ls670_0_w);
125   DECLARE_READ8_MEMBER(ls670_1_r);
126   DECLARE_WRITE8_MEMBER(ls670_1_w);
127   DECLARE_WRITE8_MEMBER(zpu_bcd_decoder_w);
128   DECLARE_READ8_MEMBER(zpu_inputs_r);
129   DECLARE_WRITE8_MEMBER(zpu_led_w);
130   DECLARE_WRITE8_MEMBER(zpu_lamps_w);
131   DECLARE_WRITE8_MEMBER(zpu_coin_counter_w);
132   DECLARE_WRITE8_MEMBER(cfb_led_w);
133   DECLARE_WRITE8_MEMBER(vsb_ls273_audio_control_w);
134   DECLARE_WRITE8_MEMBER(main_sound_w);
135   DECLARE_WRITE8_MEMBER(sound_int_clear_w);
136   DECLARE_WRITE8_MEMBER(sound_nmi_clear_w);
112137};
113138
114139
r14845r14846
291316}
292317
293318
294static WRITE8_HANDLER( cfb_backgnd_color_w )
319WRITE8_MEMBER(mazerbla_state::cfb_backgnd_color_w)
295320{
296   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
297321
298   if (state->m_bknd_col != data)
322   if (m_bknd_col != data)
299323   {
300324      int r, g, b, bit0, bit1, bit2;
301325
302      state->m_bknd_col = data;
326      m_bknd_col = data;
303327
304328      /* red component */
305329      bit1 = BIT(data, 7);
306330      bit0 = BIT(data, 6);
307      r = combine_2_weights(state->m_weights_r, bit0, bit1);
331      r = combine_2_weights(m_weights_r, bit0, bit1);
308332
309333      /* green component */
310334      bit2 = BIT(data, 5);
311335      bit1 = BIT(data, 4);
312336      bit0 = BIT(data, 3);
313      g = combine_3_weights(state->m_weights_g, bit0, bit1, bit2);
337      g = combine_3_weights(m_weights_g, bit0, bit1, bit2);
314338
315339      /* blue component */
316340      bit2 = BIT(data, 2);
317341      bit1 = BIT(data, 1);
318342      bit0 = BIT(data, 0);
319      b = combine_3_weights(state->m_weights_b, bit0, bit1, bit2);
343      b = combine_3_weights(m_weights_b, bit0, bit1, bit2);
320344
321      palette_set_color(space->machine(), 255, MAKE_RGB(r, g, b));
345      palette_set_color(machine(), 255, MAKE_RGB(r, g, b));
322346      //logerror("background color (port 01) write=%02x\n",data);
323347   }
324348}
325349
326350
327static WRITE8_HANDLER( cfb_vbank_w )
351WRITE8_MEMBER(mazerbla_state::cfb_vbank_w)
328352{
329   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
330353
331354   /* only bit 6 connected */
332   state->m_vbank = BIT(data, 6);
355   m_vbank = BIT(data, 6);
333356}
334357
335358
336static WRITE8_HANDLER( cfb_rom_bank_sel_w )   /* mazer blazer */
359WRITE8_MEMBER(mazerbla_state::cfb_rom_bank_sel_w)/* mazer blazer */
337360{
338   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
339   state->m_gfx_rom_bank = data;
361   m_gfx_rom_bank = data;
340362
341   memory_set_bankptr(space->machine(),  "bank1", space->machine().region("sub2")->base() + (state->m_gfx_rom_bank * 0x2000) + 0x10000);
363   memory_set_bankptr(machine(),  "bank1", machine().region("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000);
342364}
343365
344static WRITE8_HANDLER( cfb_rom_bank_sel_w_gg )   /* great guns */
366WRITE8_MEMBER(mazerbla_state::cfb_rom_bank_sel_w_gg)/* great guns */
345367{
346   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
347   state->m_gfx_rom_bank = data >> 1;
368   m_gfx_rom_bank = data >> 1;
348369
349   memory_set_bankptr(space->machine(),  "bank1", space->machine().region("sub2")->base() + (state->m_gfx_rom_bank * 0x2000) + 0x10000);
370   memory_set_bankptr(machine(),  "bank1", machine().region("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000);
350371}
351372
352373
353374/* VCU status? */
354static READ8_HANDLER( cfb_port_02_r )
375READ8_MEMBER(mazerbla_state::cfb_port_02_r)
355376{
356   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
357   state->m_port02_status ^= 0xff;
358   return state->m_port02_status;
377   m_port02_status ^= 0xff;
378   return m_port02_status;
359379}
360380
361381
362static WRITE8_HANDLER( vcu_video_reg_w )
382WRITE8_MEMBER(mazerbla_state::vcu_video_reg_w)
363383{
364   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
365   if (state->m_vcu_video_reg[offset] != data)
384   if (m_vcu_video_reg[offset] != data)
366385   {
367      state->m_vcu_video_reg[offset] = data;
368      //popmessage("video_reg= %02x %02x %02x %02x", state->m_vcu_video_reg[0], state->m_vcu_video_reg[1], state->m_vcu_video_reg[2], state->m_vcu_video_reg[3]);
369      //logerror("video_reg= %02x %02x %02x %02x\n", state->m_vcu_video_reg[0], state->m_vcu_video_reg[1], state->m_vcu_video_reg[2], state->m_vcu_video_reg[3]);
386      m_vcu_video_reg[offset] = data;
387      //popmessage("video_reg= %02x %02x %02x %02x", m_vcu_video_reg[0], m_vcu_video_reg[1], m_vcu_video_reg[2], m_vcu_video_reg[3]);
388      //logerror("video_reg= %02x %02x %02x %02x\n", m_vcu_video_reg[0], m_vcu_video_reg[1], m_vcu_video_reg[2], m_vcu_video_reg[3]);
370389   }
371390}
372391
373static READ8_HANDLER( vcu_set_cmd_param_r )
392READ8_MEMBER(mazerbla_state::vcu_set_cmd_param_r)
374393{
375   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
376   state->m_vcu_gfx_param_addr = offset;
394   m_vcu_gfx_param_addr = offset;
377395
378396   /* offset  = 0 is not known */
379   state->m_xpos      = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 1] | (state->m_cfb_ram[state->m_vcu_gfx_param_addr + 2]<<8);
380   state->m_ypos      = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 3] | (state->m_cfb_ram[state->m_vcu_gfx_param_addr + 4]<<8);
381   state->m_color1    = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 5];
382   state->m_color2    = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 6];
383   state->m_mode      = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 7];
384   state->m_pix_xsize = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 8];
385   state->m_pix_ysize = state->m_cfb_ram[state->m_vcu_gfx_param_addr + 9];
397   m_xpos      = m_cfb_ram[m_vcu_gfx_param_addr + 1] | (m_cfb_ram[m_vcu_gfx_param_addr + 2]<<8);
398   m_ypos      = m_cfb_ram[m_vcu_gfx_param_addr + 3] | (m_cfb_ram[m_vcu_gfx_param_addr + 4]<<8);
399   m_color1    = m_cfb_ram[m_vcu_gfx_param_addr + 5];
400   m_color2    = m_cfb_ram[m_vcu_gfx_param_addr + 6];
401   m_mode      = m_cfb_ram[m_vcu_gfx_param_addr + 7];
402   m_pix_xsize = m_cfb_ram[m_vcu_gfx_param_addr + 8];
403   m_pix_ysize = m_cfb_ram[m_vcu_gfx_param_addr + 9];
386404
387   state->m_plane = state->m_mode & 3;
405   m_plane = m_mode & 3;
388406
389407   return 0;
390408}
391409
392410
393static READ8_HANDLER( vcu_set_gfx_addr_r )
411READ8_MEMBER(mazerbla_state::vcu_set_gfx_addr_r)
394412{
395   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
396   UINT8 * rom = space->machine().region("sub2")->base() + (state->m_gfx_rom_bank * 0x2000) + 0x10000;
413   UINT8 * rom = machine().region("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000;
397414   int offs;
398415   int x, y;
399416   int bits = 0;
400417   UINT8 color_base = 0;
401418
402   if (state->m_game_id == MAZERBLA)
419   if (m_game_id == MAZERBLA)
403420      color_base = 0x80;   /* 0x80 - good for Mazer Blazer: (only in game, CRT test mode is bad) */
404421
405   if (state->m_game_id == GREATGUN)
422   if (m_game_id == GREATGUN)
406423      color_base = 0x00;   /* 0x00 - good for Great Guns: (both in game and CRT test mode) */
407424/*
408425    if ((mode <= 0x07) || (mode >= 0x10))
409426    {
410427        logerror("paradr=");
411        logerror("%3x ", state->m_vcu_gfx_param_addr );
428        logerror("%3x ", m_vcu_gfx_param_addr );
412429
413        logerror("%02x ", state->m_cfb_ram[vcu_gfx_param_addr + 0] );
414        logerror("x=%04x ", state->m_xpos );                 //1,2
415        logerror("y=%04x ", state->m_ypos );                 //3,4
416        logerror("color1=%02x ", state->m_color1);             //5
417        logerror("color2=%02x ", state->m_color2);           //6
418        logerror("mode=%02x ", state->m_mode );              //7
419        logerror("xpix=%02x ", state->m_pix_xsize );         //8
420        logerror("ypix=%02x ", state->m_pix_ysize );         //9
430        logerror("%02x ", m_cfb_ram[vcu_gfx_param_addr + 0] );
431        logerror("x=%04x ", m_xpos );                 //1,2
432        logerror("y=%04x ", m_ypos );                 //3,4
433        logerror("color1=%02x ", m_color1);             //5
434        logerror("color2=%02x ", m_color2);           //6
435        logerror("mode=%02x ", m_mode );              //7
436        logerror("xpix=%02x ", m_pix_xsize );         //8
437        logerror("ypix=%02x ", m_pix_ysize );         //9
421438
422        logerror("addr=%4i bank=%1i\n", offset, state->m_gfx_rom_bank);
439        logerror("addr=%4i bank=%1i\n", offset, m_gfx_rom_bank);
423440    }
424441*/
425442
426   state->m_vcu_gfx_addr = offset;
443   m_vcu_gfx_addr = offset;
427444
428445   /* draw */
429   offs = state->m_vcu_gfx_addr;
446   offs = m_vcu_gfx_addr;
430447
431   switch(state->m_mode)
448   switch(m_mode)
432449   {
433450      /* 2 bits per pixel */
434451      case 0x0f:
435452      case 0x0e:
436453      case 0x0d:
437454      case 0x0c:
438//      if (state->m_dbg_gfx_e)
455//      if (m_dbg_gfx_e)
439456//      {
440//          if (state->m_vbank == state->m_dbg_vbank)
457//          if (m_vbank == m_dbg_vbank)
441458      {
442         for (y = 0; y <= state->m_pix_ysize; y++)
459         for (y = 0; y <= m_pix_ysize; y++)
443460         {
444            for (x = 0; x <= state->m_pix_xsize; x++)
461            for (x = 0; x <= m_pix_xsize; x++)
445462            {
446463               UINT8 pixeldata = rom[(offs + (bits >> 3)) % 0x2000];
447464               UINT8 data = (pixeldata >> (6 - (bits & 7))) & 3;
r14845r14846
450467               switch(data)
451468               {
452469                  case 0:
453                     col = color_base | ((state->m_color1 & 0x0f));      //background PEN
470                     col = color_base | ((m_color1 & 0x0f));      //background PEN
454471                     break;
455472                  case 1:
456                     col = color_base | ((state->m_color1 & 0xf0) >> 4);   //foreground PEN
473                     col = color_base | ((m_color1 & 0xf0) >> 4);   //foreground PEN
457474                     break;
458475                  case 2:
459                     col = color_base | ((state->m_color2 & 0x0f));   //background PEN2
476                     col = color_base | ((m_color2 & 0x0f));   //background PEN2
460477                     break;
461478                  case 3:
462                     col = color_base | ((state->m_color2 & 0xf0) >> 4);   //foreground PEN2
479                     col = color_base | ((m_color2 & 0xf0) >> 4);   //foreground PEN2
463480                     break;
464481               }
465482
466               if (((state->m_xpos + x) < 256) && ((state->m_ypos + y) < 256) )
467                  state->m_tmpbitmaps[state->m_plane].pix16(state->m_ypos + y, state->m_xpos + x) = col;
483               if (((m_xpos + x) < 256) && ((m_ypos + y) < 256) )
484                  m_tmpbitmaps[m_plane].pix16(m_ypos + y, m_xpos + x) = col;
468485
469486               bits += 2;
470487            }
r14845r14846
478495      case 0x0a:/* verified - 1bpp */
479496      case 0x09:/* verified - 1bpp: gun crosshair */
480497      case 0x08:/* */
481//      if (state->m_dbg_gfx_e)
498//      if (m_dbg_gfx_e)
482499//      {
483//          if (state->m_vbank == state->m_dbg_vbank)
500//          if (m_vbank == m_dbg_vbank)
484501      {
485502
486         for (y = 0; y <= state->m_pix_ysize; y++)
503         for (y = 0; y <= m_pix_ysize; y++)
487504         {
488            for (x = 0; x <= state->m_pix_xsize; x++)
505            for (x = 0; x <= m_pix_xsize; x++)
489506            {
490507               UINT8 pixeldata = rom[(offs + (bits >> 3)) % 0x2000];
491508               UINT8 data = (pixeldata >> (7 - (bits & 7))) & 1;
492509
493510               /* color = 4 MSB = front PEN, 4 LSB = background PEN */
494511
495               if (((state->m_xpos + x) < 256) && ((state->m_ypos + y) < 256))
496                  state->m_tmpbitmaps[state->m_plane].pix16(state->m_ypos + y, state->m_xpos + x) = data ? color_base | ((state->m_color1 & 0xf0) >> 4): color_base | ((state->m_color1 & 0x0f));
512               if (((m_xpos + x) < 256) && ((m_ypos + y) < 256))
513                  m_tmpbitmaps[m_plane].pix16(m_ypos + y, m_xpos + x) = data ? color_base | ((m_color1 & 0xf0) >> 4): color_base | ((m_color1 & 0x0f));
497514
498515               bits += 1;
499516            }
r14845r14846
506523      case 0x03:
507524      case 0x01:
508525      case 0x00:
509//      if (state->m_dbg_gfx_e)
526//      if (m_dbg_gfx_e)
510527//      {
511//          if (state->m_vbank == state->m_dbg_vbank)
528//          if (m_vbank == m_dbg_vbank)
512529      {
513         for (y = 0; y <= state->m_pix_ysize; y++)
530         for (y = 0; y <= m_pix_ysize; y++)
514531         {
515            for (x = 0; x <= state->m_pix_xsize; x++)
532            for (x = 0; x <= m_pix_xsize; x++)
516533            {
517534               UINT8 pixeldata = rom[(offs + (bits >> 3)) % 0x2000];
518535               UINT8 data = (pixeldata >> (4 - (bits & 7))) & 15;
r14845r14846
520537
521538               col = color_base | data;
522539
523               if (((state->m_xpos + x) < 256) && ((state->m_ypos + y) < 256))
524                  state->m_tmpbitmaps[state->m_plane].pix16(state->m_ypos + y, state->m_xpos + x) = col;
540               if (((m_xpos + x) < 256) && ((m_ypos + y) < 256))
541                  m_tmpbitmaps[m_plane].pix16(m_ypos + y, m_xpos + x) = col;
525542
526543               bits += 4;
527544            }
r14845r14846
530547//      }
531548      break;
532549   default:
533      popmessage("not supported VCU drawing mode=%2x", state->m_mode);
550      popmessage("not supported VCU drawing mode=%2x", m_mode);
534551      break;
535552   }
536553
537554   return 0;
538555}
539556
540static READ8_HANDLER( vcu_set_clr_addr_r )
557READ8_MEMBER(mazerbla_state::vcu_set_clr_addr_r)
541558{
542   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
543   UINT8 * rom = space->machine().region("sub2")->base() + (state->m_gfx_rom_bank * 0x2000) + 0x10000;
559   UINT8 * rom = machine().region("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000;
544560   int offs;
545561   int x, y;
546562   int bits = 0;
r14845r14846
552568    //if (0) //(mode != 0x07)
553569    {
554570        logerror("paladr=");
555        logerror("%3x ", state->m_vcu_gfx_param_addr );
571        logerror("%3x ", m_vcu_gfx_param_addr );
556572
557        logerror("%02x ", state->m_cfb_ram[state->m_vcu_gfx_param_addr + 0] );
558        logerror("x=%04x ", state->m_xpos );                 //1,2
559        logerror("y=%04x ", state->m_ypos );                 //3,4
560        logerror("color1=%02x ", state->m_color1);             //5
561        logerror("color2=%02x ", state->m_color2 );          //6
562        logerror("mode=%02x ", state->m_mode );              //7
563        logerror("xpix=%02x ", state->m_pix_xsize );         //8
564        logerror("ypix=%02x ", state->m_pix_ysize );         //9
573        logerror("%02x ", m_cfb_ram[m_vcu_gfx_param_addr + 0] );
574        logerror("x=%04x ", m_xpos );                 //1,2
575        logerror("y=%04x ", m_ypos );                 //3,4
576        logerror("color1=%02x ", m_color1);             //5
577        logerror("color2=%02x ", m_color2 );          //6
578        logerror("mode=%02x ", m_mode );              //7
579        logerror("xpix=%02x ", m_pix_xsize );         //8
580        logerror("ypix=%02x ", m_pix_ysize );         //9
565581
566        logerror("addr=%4i bank=%1i\n", offset, state->m_gfx_rom_bank);
582        logerror("addr=%4i bank=%1i\n", offset, m_gfx_rom_bank);
567583
568584        for (y = 0; y < 16; y++)
569585        {
570586            logerror("%04x: ", offset + y * 16);
571587            for (x = 0; x < 16; x++)
572588            {
573                logerror("%02x ", state->m_cfb_ram[offset + x + y * 16]);
589                logerror("%02x ", m_cfb_ram[offset + x + y * 16]);
574590            }
575591            logerror("\n");
576592        }
r14845r14846
581597/* copy palette / CLUT(???) */
582598
583599
584   switch (state->m_mode)
600   switch (m_mode)
585601   {
586602      case 0x13: /* draws sprites?? in mazer blazer and ... wrong sprite in place of targeting-cross and UFO laser */
587603      case 0x03:
588604      /* ... this may proove that there is really only one area and that
589605           the draw command/palette selector is done via the 'mode' only ... */
590      //if (state->m_dbg_clr_e)
606      //if (m_dbg_clr_e)
591607      {
592         offs = state->m_vcu_gfx_addr;
608         offs = m_vcu_gfx_addr;
593609
594         if (state->m_game_id == MAZERBLA)
610         if (m_game_id == MAZERBLA)
595611            color_base = 0x80;   /* 0x80 constant: matches Mazer Blazer movie */
596612
597         if (state->m_game_id == GREATGUN)
613         if (m_game_id == GREATGUN)
598614            color_base = 0x00;
599615
600         for (y = 0; y <= state->m_pix_ysize; y++)
616         for (y = 0; y <= m_pix_ysize; y++)
601617         {
602            for (x = 0; x <= state->m_pix_xsize; x++)
618            for (x = 0; x <= m_pix_xsize; x++)
603619            {
604620               UINT8 pixeldata = rom[(offs + (bits >> 3)) % 0x2000];
605621               UINT8 data = (pixeldata >> (6 - (bits & 7))) & 3;
r14845r14846
608624               switch(data)
609625               {
610626                  case 0:
611                     col = color_base | ((state->m_color1 & 0x0f));      //background PEN
627                     col = color_base | ((m_color1 & 0x0f));      //background PEN
612628                     break;
613629                  case 1:
614                     col = color_base | ((state->m_color1 & 0xf0) >> 4);   //foreground PEN
630                     col = color_base | ((m_color1 & 0xf0) >> 4);   //foreground PEN
615631                     break;
616632                  case 2:
617                     col = color_base | ((state->m_color2 & 0x0f));   //background PEN2
633                     col = color_base | ((m_color2 & 0x0f));   //background PEN2
618634                     break;
619635                  case 3:
620                     col = color_base | ((state->m_color2 & 0xf0) >> 4);   //foreground PEN2
636                     col = color_base | ((m_color2 & 0xf0) >> 4);   //foreground PEN2
621637                     break;
622638               }
623639
624               if (((state->m_xpos + x) < 256) && ((state->m_ypos + y) < 256))
625                  state->m_tmpbitmaps[state->m_plane].pix16(state->m_ypos + y, state->m_xpos + x) = col;
640               if (((m_xpos + x) < 256) && ((m_ypos + y) < 256))
641                  m_tmpbitmaps[m_plane].pix16(m_ypos + y, m_xpos + x) = col;
626642
627643                  bits += 2;
628644            }
r14845r14846
634650      case 0x07:
635651      offs = offset;
636652
637      switch(state->m_ypos)
653      switch(m_ypos)
638654      {
639655         case 6: //seems to encode palette write
640656         {
641657            int r, g, b, bit0, bit1, bit2;
642658
643659            //pix_xsize and pix_ysize seem to be related to palette length ? (divide by 2)
644            int lookup_offs = (state->m_ypos >> 1) * 256; //=3*256
660            int lookup_offs = (m_ypos >> 1) * 256; //=3*256
645661
646662            for (y = 0; y < 16; y++)
647663            {
648664               for (x = 0; x < 16; x++)
649665               {
650                  UINT8 colour = state->m_cfb_ram[offs + x + y * 16];
666                  UINT8 colour = m_cfb_ram[offs + x + y * 16];
651667
652668                  /* red component */
653669                  bit1 = (colour >> 7) & 0x01;
654670                  bit0 = (colour >> 6) & 0x01;
655                  r = combine_2_weights(state->m_weights_r, bit0, bit1);
671                  r = combine_2_weights(m_weights_r, bit0, bit1);
656672
657673                  /* green component */
658674                  bit2 = (colour >> 5) & 0x01;
659675                  bit1 = (colour >> 4) & 0x01;
660676                  bit0 = (colour >> 3) & 0x01;
661                  g = combine_3_weights(state->m_weights_g, bit0, bit1, bit2);
677                  g = combine_3_weights(m_weights_g, bit0, bit1, bit2);
662678
663679                  /* blue component */
664680                  bit2 = (colour >> 2) & 0x01;
665681                  bit1 = (colour >> 1) & 0x01;
666682                  bit0 = (colour >> 0) & 0x01;
667                  b = combine_3_weights(state->m_weights_b, bit0, bit1, bit2);
683                  b = combine_3_weights(m_weights_b, bit0, bit1, bit2);
668684
669685                  if ((x + y * 16) < 255)//keep color 255 free for use as background color
670                     palette_set_color(space->machine(), x + y * 16, MAKE_RGB(r, g, b));
686                     palette_set_color(machine(), x + y * 16, MAKE_RGB(r, g, b));
671687
672                  state->m_lookup_ram[lookup_offs + x + y * 16] = colour;
688                  m_lookup_ram[lookup_offs + x + y * 16] = colour;
673689               }
674690            }
675691         }
676692         break;
677693         case 4: //seems to encode lookup???? table write
678694         {
679            int lookup_offs = (state->m_ypos >> 1) * 256; //=2*256
695            int lookup_offs = (m_ypos >> 1) * 256; //=2*256
680696
681697            for (y = 0; y < 16; y++)
682698            {
683699               for (x = 0; x < 16; x++)
684700               {
685                  UINT8 dat = state->m_cfb_ram[offs + x + y * 16];
686                  state->m_lookup_ram[lookup_offs + x + y * 16] = dat;
701                  UINT8 dat = m_cfb_ram[offs + x + y * 16];
702                  m_lookup_ram[lookup_offs + x + y * 16] = dat;
687703               }
688704            }
689705         }
690706         break;
691707         case 2: //seems to encode lookup???? table write
692708         {
693            int lookup_offs = (state->m_ypos >> 1) * 256; //=1*256
709            int lookup_offs = (m_ypos >> 1) * 256; //=1*256
694710
695711            for (y = 0; y < 16; y++)
696712            {
697713               for (x = 0; x < 16; x++)
698714               {
699                  UINT8 dat = state->m_cfb_ram[offs + x + y * 16];
700                  state->m_lookup_ram[lookup_offs + x + y * 16] = dat;
715                  UINT8 dat = m_cfb_ram[offs + x + y * 16];
716                  m_lookup_ram[lookup_offs + x + y * 16] = dat;
701717               }
702718            }
703719         }
704720         break;
705721         case 0: //seems to encode lookup???? table write
706722         {
707            int lookup_offs = (state->m_ypos >> 1) * 256; //=0*256
723            int lookup_offs = (m_ypos >> 1) * 256; //=0*256
708724
709725            for (y = 0; y < 16; y++)
710726            {
711727               for (x = 0; x < 16; x++)
712728               {
713                  UINT8 dat = state->m_cfb_ram[offs + x + y * 16];
714                  state->m_lookup_ram[lookup_offs + x + y * 16] = dat;
729                  UINT8 dat = m_cfb_ram[offs + x + y * 16];
730                  m_lookup_ram[lookup_offs + x + y * 16] = dat;
715731               }
716732            }
717733         }
718734         break;
719735
720736         default:
721         popmessage("not supported lookup/color write mode=%2x", state->m_ypos);
737         popmessage("not supported lookup/color write mode=%2x", m_ypos);
722738         break;
723739      }
724740      break;
725741
726742   default:
727      popmessage("not supported VCU color mode=%2x", state->m_mode);
743      popmessage("not supported VCU color mode=%2x", m_mode);
728744      break;
729745   }
730746
r14845r14846
737753 *
738754 *************************************/
739755
740static WRITE8_HANDLER( cfb_zpu_int_req_set_w )
756WRITE8_MEMBER(mazerbla_state::cfb_zpu_int_req_set_w)
741757{
742   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
743758
744   state->m_zpu_int_vector &= ~2;   /* clear D1 on INTA (interrupt acknowledge) */
759   m_zpu_int_vector &= ~2;   /* clear D1 on INTA (interrupt acknowledge) */
745760
746   device_set_input_line(state->m_maincpu, 0, ASSERT_LINE);   /* main cpu interrupt (comes from CFB (generated at the start of INT routine on CFB) - vblank?) */
761   device_set_input_line(m_maincpu, 0, ASSERT_LINE);   /* main cpu interrupt (comes from CFB (generated at the start of INT routine on CFB) - vblank?) */
747762}
748763
749static READ8_HANDLER( cfb_zpu_int_req_clr )
764READ8_MEMBER(mazerbla_state::cfb_zpu_int_req_clr)
750765{
751   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
752766
753   state->m_zpu_int_vector |= 2;
767   m_zpu_int_vector |= 2;
754768
755769   /* clear the INT line when there are no more interrupt requests */
756   if (state->m_zpu_int_vector == 0xff)
757      device_set_input_line(state->m_maincpu, 0, CLEAR_LINE);
770   if (m_zpu_int_vector == 0xff)
771      device_set_input_line(m_maincpu, 0, CLEAR_LINE);
758772
759773   return 0;
760774}
761775
762static READ8_HANDLER( ls670_0_r )
776READ8_MEMBER(mazerbla_state::ls670_0_r)
763777{
764   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
765778
766779   /* set a timer to force synchronization after the read */
767   space->machine().scheduler().synchronize();
780   machine().scheduler().synchronize();
768781
769   return state->m_ls670_0[offset];
782   return m_ls670_0[offset];
770783}
771784
772785static TIMER_CALLBACK( deferred_ls670_0_w )
r14845r14846
778791   state->m_ls670_0[offset] = data;
779792}
780793
781static WRITE8_HANDLER( ls670_0_w )
794WRITE8_MEMBER(mazerbla_state::ls670_0_w)
782795{
783796   /* do this on a timer to let the CPUs synchronize */
784   space->machine().scheduler().synchronize(FUNC(deferred_ls670_0_w), (offset << 8) | data);
797   machine().scheduler().synchronize(FUNC(deferred_ls670_0_w), (offset << 8) | data);
785798}
786799
787static READ8_HANDLER( ls670_1_r )
800READ8_MEMBER(mazerbla_state::ls670_1_r)
788801{
789   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
790802
791803   /* set a timer to force synchronization after the read */
792   space->machine().scheduler().synchronize();
804   machine().scheduler().synchronize();
793805
794   return state->m_ls670_1[offset];
806   return m_ls670_1[offset];
795807}
796808
797809static TIMER_CALLBACK( deferred_ls670_1_w )
r14845r14846
803815   state->m_ls670_1[offset] = data;
804816}
805817
806static WRITE8_HANDLER( ls670_1_w )
818WRITE8_MEMBER(mazerbla_state::ls670_1_w)
807819{
808820   /* do this on a timer to let the CPUs synchronize */
809   space->machine().scheduler().synchronize(FUNC(deferred_ls670_1_w), (offset << 8) | data);
821   machine().scheduler().synchronize(FUNC(deferred_ls670_1_w), (offset << 8) | data);
810822}
811823
812824
r14845r14846
862874
863875*/
864876
865static WRITE8_HANDLER( zpu_bcd_decoder_w )
877WRITE8_MEMBER(mazerbla_state::zpu_bcd_decoder_w)
866878{
867   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
868879
869880   /* bcd decoder used a input select (a mux) for reads from port 0x62 */
870   state->m_bcd_7445 = data & 0xf;
881   m_bcd_7445 = data & 0xf;
871882}
872883
873static READ8_HANDLER( zpu_inputs_r )
884READ8_MEMBER(mazerbla_state::zpu_inputs_r)
874885{
875   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
876886   static const char *const strobenames[] = { "ZPU", "DSW0", "DSW1", "DSW2", "DSW3", "BUTTONS", "STICK0_X", "STICK0_Y",
877887                                              "STICK1_X", "STICK1_Y", "UNUSED", "UNUSED", "UNUSED", "UNUSED", "UNUSED", "UNUSED" };
878888
879889   UINT8 ret = 0;
880890
881   ret = input_port_read(space->machine(), strobenames[state->m_bcd_7445]);
891   ret = input_port_read(machine(), strobenames[m_bcd_7445]);
882892
883893   return ret;
884894}
885895
886static WRITE8_HANDLER( zpu_led_w )
896WRITE8_MEMBER(mazerbla_state::zpu_led_w)
887897{
888898   /* 0x6e - reset (offset = 0)*/
889899   /* 0x6f - set */
890   set_led_status(space->machine(), 0, offset & 1);
900   set_led_status(machine(), 0, offset & 1);
891901}
892902
893static WRITE8_HANDLER( zpu_lamps_w)
903WRITE8_MEMBER(mazerbla_state::zpu_lamps_w)
894904{
895905   /* bit 4 = /LAMP0 */
896906   /* bit 5 = /LAMP1 */
897907
898   /*set_led_status(space->machine(), 0, (data & 0x10) >> 4);*/
899   /*set_led_status(space->machine(), 1, (data & 0x20) >> 4);*/
908   /*set_led_status(machine(), 0, (data & 0x10) >> 4);*/
909   /*set_led_status(machine(), 1, (data & 0x20) >> 4);*/
900910}
901911
902static WRITE8_HANDLER( zpu_coin_counter_w )
912WRITE8_MEMBER(mazerbla_state::zpu_coin_counter_w)
903913{
904914   /* bit 6 = coin counter */
905   coin_counter_w(space->machine(), offset, BIT(data, 6));
915   coin_counter_w(machine(), offset, BIT(data, 6));
906916}
907917
908static WRITE8_HANDLER(cfb_led_w)
918WRITE8_MEMBER(mazerbla_state::cfb_led_w)
909919{
910920   /* bit 7 - led on */
911   set_led_status(space->machine(), 2, BIT(data, 7));
921   set_led_status(machine(), 2, BIT(data, 7));
912922}
913923
914924static WRITE8_DEVICE_HANDLER( gg_led_ctrl_w )
r14845r14846
924934 *
925935 *************************************/
926936
927static WRITE8_HANDLER( vsb_ls273_audio_control_w )
937WRITE8_MEMBER(mazerbla_state::vsb_ls273_audio_control_w)
928938{
929   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
930   state->m_vsb_ls273 = data;
939   m_vsb_ls273 = data;
931940
932941   /* bit 5 - led on */
933   set_led_status(space->machine(), 1, BIT(data, 5));
942   set_led_status(machine(), 1, BIT(data, 5));
934943}
935944
936945static READ8_DEVICE_HANDLER( soundcommand_r )
r14845r14846
948957   device_set_input_line(state->m_subcpu, INPUT_LINE_NMI, ASSERT_LINE);
949958}
950959
951static WRITE8_HANDLER( main_sound_w )
960WRITE8_MEMBER(mazerbla_state::main_sound_w)
952961{
953   space->machine().scheduler().synchronize(FUNC(delayed_sound_w), data & 0xff);
962   machine().scheduler().synchronize(FUNC(delayed_sound_w), data & 0xff);
954963}
955964
956static WRITE8_HANDLER( sound_int_clear_w )
965WRITE8_MEMBER(mazerbla_state::sound_int_clear_w)
957966{
958   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
959   device_set_input_line(state->m_subcpu, 0, CLEAR_LINE);
967   device_set_input_line(m_subcpu, 0, CLEAR_LINE);
960968}
961969
962static WRITE8_HANDLER( sound_nmi_clear_w )
970WRITE8_MEMBER(mazerbla_state::sound_nmi_clear_w)
963971{
964   mazerbla_state *state = space->machine().driver_data<mazerbla_state>();
965   device_set_input_line(state->m_subcpu, INPUT_LINE_NMI, CLEAR_LINE);
972   device_set_input_line(m_subcpu, INPUT_LINE_NMI, CLEAR_LINE);
966973}
967974
968975
r14845r14846
975982static ADDRESS_MAP_START( mazerbla_map, AS_PROGRAM, 8, mazerbla_state )
976983   AM_RANGE(0x0000, 0x7fff) AM_ROM
977984   AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("share1")
978   AM_RANGE(0xd800, 0xd800) AM_READ_LEGACY(cfb_zpu_int_req_clr)
985   AM_RANGE(0xd800, 0xd800) AM_READ(cfb_zpu_int_req_clr)
979986   AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE_SIZE(m_videoram, m_videoram_size)
980987   AM_RANGE(0xe800, 0xefff) AM_RAM
981988ADDRESS_MAP_END
982989
983990static ADDRESS_MAP_START( mazerbla_io_map, AS_IO, 8, mazerbla_state )
984991   ADDRESS_MAP_GLOBAL_MASK(0xff)
985   AM_RANGE(0x4c, 0x4f) AM_READWRITE_LEGACY(ls670_1_r, ls670_0_w)
986   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(zpu_bcd_decoder_w)
987   AM_RANGE(0x62, 0x62) AM_READ_LEGACY(zpu_inputs_r)
988   AM_RANGE(0x68, 0x68) AM_WRITE_LEGACY(zpu_coin_counter_w)
989   AM_RANGE(0x6a, 0x6a) AM_WRITE_LEGACY(zpu_lamps_w)
990   AM_RANGE(0x6e, 0x6f) AM_WRITE_LEGACY(zpu_led_w)
992   AM_RANGE(0x4c, 0x4f) AM_READWRITE(ls670_1_r, ls670_0_w)
993   AM_RANGE(0x60, 0x60) AM_WRITE(zpu_bcd_decoder_w)
994   AM_RANGE(0x62, 0x62) AM_READ(zpu_inputs_r)
995   AM_RANGE(0x68, 0x68) AM_WRITE(zpu_coin_counter_w)
996   AM_RANGE(0x6a, 0x6a) AM_WRITE(zpu_lamps_w)
997   AM_RANGE(0x6e, 0x6f) AM_WRITE(zpu_led_w)
991998ADDRESS_MAP_END
992999
9931000static ADDRESS_MAP_START( mazerbla_cpu2_map, AS_PROGRAM, 8, mazerbla_state )
r14845r14846
9981005
9991006static ADDRESS_MAP_START( mazerbla_cpu2_io_map, AS_IO, 8, mazerbla_state )
10001007   ADDRESS_MAP_GLOBAL_MASK(0xff)
1001   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(vsb_ls273_audio_control_w)
1002   AM_RANGE(0x80, 0x83) AM_READWRITE_LEGACY(ls670_0_r, ls670_1_w)
1008   AM_RANGE(0x00, 0x00) AM_WRITE(vsb_ls273_audio_control_w)
1009   AM_RANGE(0x80, 0x83) AM_READWRITE(ls670_0_r, ls670_1_w)
10031010ADDRESS_MAP_END
10041011
10051012static ADDRESS_MAP_START( mazerbla_cpu3_map, AS_PROGRAM, 8, mazerbla_state )
10061013   AM_RANGE(0x0000, 0x37ff) AM_ROM
10071014   AM_RANGE(0x3800, 0x3fff) AM_RAM AM_SHARE("share1")
10081015   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1")               /* GFX roms */
1009   AM_RANGE(0x4000, 0x4003) AM_WRITE_LEGACY(vcu_video_reg_w)
1016   AM_RANGE(0x4000, 0x4003) AM_WRITE(vcu_video_reg_w)
10101017   AM_RANGE(0x6000, 0x67ff) AM_RAM AM_BASE(m_cfb_ram)      /* Color Frame Buffer PCB, a.k.a. RAM for VCU commands and parameters */
1011   AM_RANGE(0xa000, 0xa7ff) AM_READ_LEGACY(vcu_set_cmd_param_r)   /* VCU command and parameters LOAD */
1012   AM_RANGE(0xc000, 0xdfff) AM_READ_LEGACY(vcu_set_gfx_addr_r)   /* gfx LOAD (blit) */
1013   AM_RANGE(0xe000, 0xffff) AM_READ_LEGACY(vcu_set_clr_addr_r)   /* palette? LOAD */
1018   AM_RANGE(0xa000, 0xa7ff) AM_READ(vcu_set_cmd_param_r)   /* VCU command and parameters LOAD */
1019   AM_RANGE(0xc000, 0xdfff) AM_READ(vcu_set_gfx_addr_r)   /* gfx LOAD (blit) */
1020   AM_RANGE(0xe000, 0xffff) AM_READ(vcu_set_clr_addr_r)   /* palette? LOAD */
10141021ADDRESS_MAP_END
10151022
10161023static ADDRESS_MAP_START( mazerbla_cpu3_io_map, AS_IO, 8, mazerbla_state )
10171024   ADDRESS_MAP_GLOBAL_MASK(0xff)
1018   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(cfb_backgnd_color_w)
1019   AM_RANGE(0x02, 0x02) AM_READWRITE_LEGACY(cfb_port_02_r, cfb_led_w)   /* Read = VCU status ? */
1020   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(cfb_zpu_int_req_set_w)
1021   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(cfb_rom_bank_sel_w)
1022   AM_RANGE(0x05, 0x05) AM_WRITE_LEGACY(cfb_vbank_w)   //visible/writable videopage select?
1025   AM_RANGE(0x01, 0x01) AM_WRITE(cfb_backgnd_color_w)
1026   AM_RANGE(0x02, 0x02) AM_READWRITE(cfb_port_02_r, cfb_led_w)   /* Read = VCU status ? */
1027   AM_RANGE(0x03, 0x03) AM_WRITE(cfb_zpu_int_req_set_w)
1028   AM_RANGE(0x04, 0x04) AM_WRITE(cfb_rom_bank_sel_w)
1029   AM_RANGE(0x05, 0x05) AM_WRITE(cfb_vbank_w)   //visible/writable videopage select?
10231030ADDRESS_MAP_END
10241031
10251032
r14845r14846
10311038
10321039static ADDRESS_MAP_START( greatgun_io_map, AS_IO, 8, mazerbla_state )
10331040   ADDRESS_MAP_GLOBAL_MASK(0xff)
1034   AM_RANGE(0x4c, 0x4c) AM_WRITE_LEGACY(main_sound_w)
1035   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(zpu_bcd_decoder_w)
1036   AM_RANGE(0x62, 0x62) AM_READ_LEGACY(zpu_inputs_r)
1041   AM_RANGE(0x4c, 0x4c) AM_WRITE(main_sound_w)
1042   AM_RANGE(0x60, 0x60) AM_WRITE(zpu_bcd_decoder_w)
1043   AM_RANGE(0x62, 0x62) AM_READ(zpu_inputs_r)
10371044   AM_RANGE(0x66, 0x66) AM_WRITENOP
10381045   AM_RANGE(0x68, 0x68) AM_WRITENOP
1039   AM_RANGE(0x6e, 0x6f) AM_WRITE_LEGACY(zpu_led_w)
1046   AM_RANGE(0x6e, 0x6f) AM_WRITE(zpu_led_w)
10401047ADDRESS_MAP_END
10411048
10421049/* Great Guns has a little different banking layout */
10431050static ADDRESS_MAP_START( greatgun_cpu3_io_map, AS_IO, 8, mazerbla_state )
10441051   ADDRESS_MAP_GLOBAL_MASK(0xff)
10451052   AM_RANGE(0x00, 0x00) AM_WRITENOP
1046   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(cfb_backgnd_color_w)
1047   AM_RANGE(0x02, 0x02) AM_READWRITE_LEGACY(cfb_port_02_r, cfb_led_w)   /* Read = VCU status ? */
1048   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(cfb_zpu_int_req_set_w)
1049   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(cfb_rom_bank_sel_w_gg)
1050   AM_RANGE(0x05, 0x05) AM_WRITE_LEGACY(cfb_vbank_w)   //visible/writable videopage select?
1053   AM_RANGE(0x01, 0x01) AM_WRITE(cfb_backgnd_color_w)
1054   AM_RANGE(0x02, 0x02) AM_READWRITE(cfb_port_02_r, cfb_led_w)   /* Read = VCU status ? */
1055   AM_RANGE(0x03, 0x03) AM_WRITE(cfb_zpu_int_req_set_w)
1056   AM_RANGE(0x04, 0x04) AM_WRITE(cfb_rom_bank_sel_w_gg)
1057   AM_RANGE(0x05, 0x05) AM_WRITE(cfb_vbank_w)   //visible/writable videopage select?
10511058ADDRESS_MAP_END
10521059
10531060static ADDRESS_MAP_START( greatgun_sound_map, AS_PROGRAM, 8, mazerbla_state )
r14845r14846
10561063   AM_RANGE(0x4000, 0x4000) AM_DEVREAD_LEGACY("ay1", ay8910_r)
10571064   AM_RANGE(0x4000, 0x4001) AM_DEVWRITE_LEGACY("ay1", ay8910_address_data_w)
10581065   AM_RANGE(0x6000, 0x6001) AM_DEVWRITE_LEGACY("ay2", ay8910_address_data_w)
1059   AM_RANGE(0x8000, 0x8000) AM_WRITE_LEGACY(sound_int_clear_w)
1060   AM_RANGE(0xa000, 0xa000) AM_WRITE_LEGACY(sound_nmi_clear_w)
1066   AM_RANGE(0x8000, 0x8000) AM_WRITE(sound_int_clear_w)
1067   AM_RANGE(0xa000, 0xa000) AM_WRITE(sound_nmi_clear_w)
10611068ADDRESS_MAP_END
10621069
10631070
src/mame/drivers/acefruit.c
r14845r14846
2525   UINT8 *m_colorram;
2626   UINT8 *m_videoram;
2727   emu_timer *m_refresh_timer;
28   DECLARE_WRITE8_MEMBER(acefruit_colorram_w);
29   DECLARE_WRITE8_MEMBER(acefruit_coin_w);
30   DECLARE_WRITE8_MEMBER(acefruit_sound_w);
31   DECLARE_WRITE8_MEMBER(acefruit_lamp_w);
32   DECLARE_WRITE8_MEMBER(acefruit_solenoid_w);
2833};
2934
3035
r14845r14846
215220   }
216221}
217222
218static WRITE8_HANDLER( acefruit_colorram_w )
223WRITE8_MEMBER(acefruit_state::acefruit_colorram_w)
219224{
220   acefruit_state *state = space->machine().driver_data<acefruit_state>();
221   state->m_colorram[ offset ] = data & 0xf;
225   m_colorram[ offset ] = data & 0xf;
222226}
223227
224static WRITE8_HANDLER( acefruit_coin_w )
228WRITE8_MEMBER(acefruit_state::acefruit_coin_w)
225229{
226230   /* TODO: ? */
227231}
228232
229static WRITE8_HANDLER( acefruit_sound_w )
233WRITE8_MEMBER(acefruit_state::acefruit_sound_w)
230234{
231235   /* TODO: ? */
232236}
233237
234static WRITE8_HANDLER( acefruit_lamp_w )
238WRITE8_MEMBER(acefruit_state::acefruit_lamp_w)
235239{
236240   int i;
237241
r14845r14846
241245   }
242246}
243247
244static WRITE8_HANDLER( acefruit_solenoid_w )
248WRITE8_MEMBER(acefruit_state::acefruit_solenoid_w)
245249{
246250   int i;
247251
r14845r14846
278282   AM_RANGE(0x0000, 0x1fff) AM_ROM
279283   AM_RANGE(0x2000, 0x20ff) AM_RAM AM_SHARE("nvram")
280284   AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(m_videoram)
281   AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE_LEGACY(acefruit_colorram_w) AM_BASE(m_colorram)
285   AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(acefruit_colorram_w) AM_BASE(m_colorram)
282286   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN0")
283287   AM_RANGE(0x8001, 0x8001) AM_READ_PORT("IN1")
284288   AM_RANGE(0x8002, 0x8002) AM_READ_PORT("IN2")
r14845r14846
288292   AM_RANGE(0x8006, 0x8006) AM_READ_PORT("IN6")
289293   AM_RANGE(0x8007, 0x8007) AM_READ_PORT("IN7")
290294   AM_RANGE(0x6000, 0x6005) AM_RAM AM_BASE(m_spriteram)
291   AM_RANGE(0xa000, 0xa001) AM_WRITE_LEGACY(acefruit_lamp_w)
292   AM_RANGE(0xa002, 0xa003) AM_WRITE_LEGACY(acefruit_coin_w)
293   AM_RANGE(0xa004, 0xa004) AM_WRITE_LEGACY(acefruit_solenoid_w)
294   AM_RANGE(0xa005, 0xa006) AM_WRITE_LEGACY(acefruit_sound_w)
295   AM_RANGE(0xa000, 0xa001) AM_WRITE(acefruit_lamp_w)
296   AM_RANGE(0xa002, 0xa003) AM_WRITE(acefruit_coin_w)
297   AM_RANGE(0xa004, 0xa004) AM_WRITE(acefruit_solenoid_w)
298   AM_RANGE(0xa005, 0xa006) AM_WRITE(acefruit_sound_w)
295299   AM_RANGE(0xc000, 0xc000) AM_WRITE_LEGACY(watchdog_reset_w)
296300   AM_RANGE(0xe000, 0xffff) AM_ROM
297301ADDRESS_MAP_END
src/mame/drivers/skylncr.c
r14845r14846
6767   UINT8 m_nmi_enable;
6868   int m_color;
6969   int m_color2;
70   DECLARE_WRITE8_MEMBER(skylncr_videoram_w);
71   DECLARE_WRITE8_MEMBER(skylncr_colorram_w);
72   DECLARE_WRITE8_MEMBER(reeltiles_1_w);
73   DECLARE_WRITE8_MEMBER(reeltiles_2_w);
74   DECLARE_WRITE8_MEMBER(reeltiles_3_w);
75   DECLARE_WRITE8_MEMBER(reeltiles_4_w);
76   DECLARE_WRITE8_MEMBER(reeltileshigh_1_w);
77   DECLARE_WRITE8_MEMBER(reeltileshigh_2_w);
78   DECLARE_WRITE8_MEMBER(reeltileshigh_3_w);
79   DECLARE_WRITE8_MEMBER(reeltileshigh_4_w);
80   DECLARE_WRITE8_MEMBER(skylncr_paletteram_w);
81   DECLARE_WRITE8_MEMBER(skylncr_paletteram2_w);
82   DECLARE_WRITE8_MEMBER(reelscroll1_w);
83   DECLARE_WRITE8_MEMBER(reelscroll2_w);
84   DECLARE_WRITE8_MEMBER(reelscroll3_w);
85   DECLARE_WRITE8_MEMBER(reelscroll4_w);
86   DECLARE_WRITE8_MEMBER(skylncr_coin_w);
87   DECLARE_READ8_MEMBER(ret_ff);
88   DECLARE_READ8_MEMBER(ret_00);
89   DECLARE_WRITE8_MEMBER(skylncr_nmi_enable_w);
7090};
7191
7292
r14845r14846
7494*           Video Hardware            *
7595**************************************/
7696
77static WRITE8_HANDLER( skylncr_videoram_w )
97WRITE8_MEMBER(skylncr_state::skylncr_videoram_w)
7898{
79   skylncr_state *state = space->machine().driver_data<skylncr_state>();
80   state->m_videoram[offset] = data;
81   state->m_tmap->mark_tile_dirty(offset);
99   m_videoram[offset] = data;
100   m_tmap->mark_tile_dirty(offset);
82101}
83102
84static WRITE8_HANDLER( skylncr_colorram_w )
103WRITE8_MEMBER(skylncr_state::skylncr_colorram_w)
85104{
86   skylncr_state *state = space->machine().driver_data<skylncr_state>();
87   state->m_colorram[offset] = data;
88   state->m_tmap->mark_tile_dirty(offset);
105   m_colorram[offset] = data;
106   m_tmap->mark_tile_dirty(offset);
89107}
90108
91109
r14845r14846
178196   return 0;
179197}
180198
181static WRITE8_HANDLER( reeltiles_1_w )
199WRITE8_MEMBER(skylncr_state::reeltiles_1_w)
182200{
183   skylncr_state *state = space->machine().driver_data<skylncr_state>();
184   state->m_reeltiles_1_ram[offset] = data;
185   state->m_reel_1_tilemap->mark_tile_dirty(offset);
201   m_reeltiles_1_ram[offset] = data;
202   m_reel_1_tilemap->mark_tile_dirty(offset);
186203}
187204
188static WRITE8_HANDLER( reeltiles_2_w )
205WRITE8_MEMBER(skylncr_state::reeltiles_2_w)
189206{
190   skylncr_state *state = space->machine().driver_data<skylncr_state>();
191   state->m_reeltiles_2_ram[offset] = data;
192   state->m_reel_2_tilemap->mark_tile_dirty(offset);
207   m_reeltiles_2_ram[offset] = data;
208   m_reel_2_tilemap->mark_tile_dirty(offset);
193209}
194210
195static WRITE8_HANDLER( reeltiles_3_w )
211WRITE8_MEMBER(skylncr_state::reeltiles_3_w)
196212{
197   skylncr_state *state = space->machine().driver_data<skylncr_state>();
198   state->m_reeltiles_3_ram[offset] = data;
199   state->m_reel_3_tilemap->mark_tile_dirty(offset);
213   m_reeltiles_3_ram[offset] = data;
214   m_reel_3_tilemap->mark_tile_dirty(offset);
200215}
201216
202static WRITE8_HANDLER( reeltiles_4_w )
217WRITE8_MEMBER(skylncr_state::reeltiles_4_w)
203218{
204   skylncr_state *state = space->machine().driver_data<skylncr_state>();
205   state->m_reeltiles_4_ram[offset] = data;
206   state->m_reel_4_tilemap->mark_tile_dirty(offset);
219   m_reeltiles_4_ram[offset] = data;
220   m_reel_4_tilemap->mark_tile_dirty(offset);
207221}
208222
209static WRITE8_HANDLER( reeltileshigh_1_w )
223WRITE8_MEMBER(skylncr_state::reeltileshigh_1_w)
210224{
211   skylncr_state *state = space->machine().driver_data<skylncr_state>();
212   state->m_reeltileshigh_1_ram[offset] = data;
213   state->m_reel_1_tilemap->mark_tile_dirty(offset);
225   m_reeltileshigh_1_ram[offset] = data;
226   m_reel_1_tilemap->mark_tile_dirty(offset);
214227}
215228
216static WRITE8_HANDLER( reeltileshigh_2_w )
229WRITE8_MEMBER(skylncr_state::reeltileshigh_2_w)
217230{
218   skylncr_state *state = space->machine().driver_data<skylncr_state>();
219   state->m_reeltileshigh_2_ram[offset] = data;
220   state->m_reel_2_tilemap->mark_tile_dirty(offset);
231   m_reeltileshigh_2_ram[offset] = data;
232   m_reel_2_tilemap->mark_tile_dirty(offset);
221233}
222234
223static WRITE8_HANDLER( reeltileshigh_3_w )
235WRITE8_MEMBER(skylncr_state::reeltileshigh_3_w)
224236{
225   skylncr_state *state = space->machine().driver_data<skylncr_state>();
226   state->m_reeltileshigh_3_ram[offset] = data;
227   state->m_reel_3_tilemap->mark_tile_dirty(offset);
237   m_reeltileshigh_3_ram[offset] = data;
238   m_reel_3_tilemap->mark_tile_dirty(offset);
228239}
229240
230static WRITE8_HANDLER( reeltileshigh_4_w )
241WRITE8_MEMBER(skylncr_state::reeltileshigh_4_w)
231242{
232   skylncr_state *state = space->machine().driver_data<skylncr_state>();
233   state->m_reeltileshigh_4_ram[offset] = data;
234   state->m_reel_4_tilemap->mark_tile_dirty(offset);
243   m_reeltileshigh_4_ram[offset] = data;
244   m_reel_4_tilemap->mark_tile_dirty(offset);
235245}
236246
237247
238static WRITE8_HANDLER( skylncr_paletteram_w )
248WRITE8_MEMBER(skylncr_state::skylncr_paletteram_w)
239249{
240   skylncr_state *state = space->machine().driver_data<skylncr_state>();
241250
242251   if (offset == 0)
243252   {
244      state->m_color = data;
253      m_color = data;
245254   }
246255   else
247256   {
248257      int r,g,b;
249      space->machine().generic.paletteram.u8[state->m_color] = data;
258      machine().generic.paletteram.u8[m_color] = data;
250259
251      r = space->machine().generic.paletteram.u8[(state->m_color/3 * 3) + 0];
252      g = space->machine().generic.paletteram.u8[(state->m_color/3 * 3) + 1];
253      b = space->machine().generic.paletteram.u8[(state->m_color/3 * 3) + 2];
260      r = machine().generic.paletteram.u8[(m_color/3 * 3) + 0];
261      g = machine().generic.paletteram.u8[(m_color/3 * 3) + 1];
262      b = machine().generic.paletteram.u8[(m_color/3 * 3) + 2];
254263      r = (r << 2) | (r >> 4);
255264      g = (g << 2) | (g >> 4);
256265      b = (b << 2) | (b >> 4);
257266
258      palette_set_color(space->machine(), state->m_color / 3, MAKE_RGB(r, g, b));
259      state->m_color = (state->m_color + 1) % (0x100 * 3);
267      palette_set_color(machine(), m_color / 3, MAKE_RGB(r, g, b));
268      m_color = (m_color + 1) % (0x100 * 3);
260269   }
261270}
262271
263static WRITE8_HANDLER( skylncr_paletteram2_w )
272WRITE8_MEMBER(skylncr_state::skylncr_paletteram2_w)
264273{
265   skylncr_state *state = space->machine().driver_data<skylncr_state>();
266274
267275   if (offset == 0)
268276   {
269      state->m_color2 = data;
277      m_color2 = data;
270278   }
271279   else
272280   {
273281      int r,g,b;
274      space->machine().generic.paletteram2.u8[state->m_color2] = data;
282      machine().generic.paletteram2.u8[m_color2] = data;
275283
276      r = space->machine().generic.paletteram2.u8[(state->m_color2/3 * 3) + 0];
277      g = space->machine().generic.paletteram2.u8[(state->m_color2/3 * 3) + 1];
278      b = space->machine().generic.paletteram2.u8[(state->m_color2/3 * 3) + 2];
284      r = machine().generic.paletteram2.u8[(m_color2/3 * 3) + 0];
285      g = machine().generic.paletteram2.u8[(m_color2/3 * 3) + 1];
286      b = machine().generic.paletteram2.u8[(m_color2/3 * 3) + 2];
279287      r = (r << 2) | (r >> 4);
280288      g = (g << 2) | (g >> 4);
281289      b = (b << 2) | (b >> 4);
282290
283      palette_set_color(space->machine(), 0x100 + state->m_color2 / 3, MAKE_RGB(r, g, b));
284      state->m_color2 = (state->m_color2 + 1) % (0x100 * 3);
291      palette_set_color(machine(), 0x100 + m_color2 / 3, MAKE_RGB(r, g, b));
292      m_color2 = (m_color2 + 1) % (0x100 * 3);
285293   }
286294}
287295
288static WRITE8_HANDLER( reelscroll1_w )
296WRITE8_MEMBER(skylncr_state::reelscroll1_w)
289297{
290   skylncr_state *state = space->machine().driver_data<skylncr_state>();
291   state->m_reelscroll1[offset] = data;
298   m_reelscroll1[offset] = data;
292299}
293300
294static WRITE8_HANDLER( reelscroll2_w )
301WRITE8_MEMBER(skylncr_state::reelscroll2_w)
295302{
296   skylncr_state *state = space->machine().driver_data<skylncr_state>();
297   state->m_reelscroll2[offset] = data;
303   m_reelscroll2[offset] = data;
298304}
299305
300static WRITE8_HANDLER( reelscroll3_w )
306WRITE8_MEMBER(skylncr_state::reelscroll3_w)
301307{
302   skylncr_state *state = space->machine().driver_data<skylncr_state>();
303   state->m_reelscroll3[offset] = data;
308   m_reelscroll3[offset] = data;
304309}
305310
306static WRITE8_HANDLER( reelscroll4_w )
311WRITE8_MEMBER(skylncr_state::reelscroll4_w)
307312{
308   skylncr_state *state = space->machine().driver_data<skylncr_state>();
309   state->m_reelscroll4[offset] = data;
313   m_reelscroll4[offset] = data;
310314}
311315
312316
r14845r14846
314318*         Other Handlers            *
315319************************************/
316320
317static WRITE8_HANDLER( skylncr_coin_w )
321WRITE8_MEMBER(skylncr_state::skylncr_coin_w)
318322{
319   coin_counter_w( space->machine(), 0, data & 0x04 );
323   coin_counter_w( machine(), 0, data & 0x04 );
320324}
321325
322static READ8_HANDLER( ret_ff )
326READ8_MEMBER(skylncr_state::ret_ff)
323327{
324328   return 0xff;
325329}
326330
327331#ifdef UNUSED_FUNCTION
328static READ8_HANDLER( ret_00 )
332READ8_MEMBER(skylncr_state::ret_00)
329333{
330334   return 0x00;
331335}
332336#endif
333337
334static WRITE8_HANDLER( skylncr_nmi_enable_w )
338WRITE8_MEMBER(skylncr_state::skylncr_nmi_enable_w)
335339{
336   skylncr_state *state = space->machine().driver_data<skylncr_state>();
337   state->m_nmi_enable = data & 0x10;
340   m_nmi_enable = data & 0x10;
338341}
339342
340343
r14845r14846
346349   AM_RANGE(0x0000, 0x7fff) AM_ROM
347350   AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("nvram")
348351
349   AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE_LEGACY(skylncr_videoram_w ) AM_BASE(m_videoram )
350   AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE_LEGACY(skylncr_colorram_w ) AM_BASE(m_colorram )
352   AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(skylncr_videoram_w ) AM_BASE(m_videoram )
353   AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(skylncr_colorram_w ) AM_BASE(m_colorram )
351354
352   AM_RANGE(0x9800, 0x99ff) AM_RAM_WRITE_LEGACY(reeltiles_1_w ) AM_BASE(m_reeltiles_1_ram )
353   AM_RANGE(0x9a00, 0x9bff) AM_RAM_WRITE_LEGACY(reeltiles_2_w ) AM_BASE(m_reeltiles_2_ram )
354   AM_RANGE(0x9c00, 0x9dff) AM_RAM_WRITE_LEGACY(reeltiles_3_w ) AM_BASE(m_reeltiles_3_ram )
355   AM_RANGE(0x9e00, 0x9fff) AM_RAM_WRITE_LEGACY(reeltiles_4_w ) AM_BASE(m_reeltiles_4_ram )
356   AM_RANGE(0xa000, 0xa1ff) AM_RAM_WRITE_LEGACY(reeltileshigh_1_w ) AM_BASE(m_reeltileshigh_1_ram )
357   AM_RANGE(0xa200, 0xa3ff) AM_RAM_WRITE_LEGACY(reeltileshigh_2_w ) AM_BASE(m_reeltileshigh_2_ram )
358   AM_RANGE(0xa400, 0xa5ff) AM_RAM_WRITE_LEGACY(reeltileshigh_3_w ) AM_BASE(m_reeltileshigh_3_ram )
359   AM_RANGE(0xa600, 0xa7ff) AM_RAM_WRITE_LEGACY(reeltileshigh_4_w ) AM_BASE(m_reeltileshigh_4_ram )
355   AM_RANGE(0x9800, 0x99ff) AM_RAM_WRITE(reeltiles_1_w ) AM_BASE(m_reeltiles_1_ram )
356   AM_RANGE(0x9a00, 0x9bff) AM_RAM_WRITE(reeltiles_2_w ) AM_BASE(m_reeltiles_2_ram )
357   AM_RANGE(0x9c00, 0x9dff) AM_RAM_WRITE(reeltiles_3_w ) AM_BASE(m_reeltiles_3_ram )
358   AM_RANGE(0x9e00, 0x9fff) AM_RAM_WRITE(reeltiles_4_w ) AM_BASE(m_reeltiles_4_ram )
359   AM_RANGE(0xa000, 0xa1ff) AM_RAM_WRITE(reeltileshigh_1_w ) AM_BASE(m_reeltileshigh_1_ram )
360   AM_RANGE(0xa200, 0xa3ff) AM_RAM_WRITE(reeltileshigh_2_w ) AM_BASE(m_reeltileshigh_2_ram )
361   AM_RANGE(0xa400, 0xa5ff) AM_RAM_WRITE(reeltileshigh_3_w ) AM_BASE(m_reeltileshigh_3_ram )
362   AM_RANGE(0xa600, 0xa7ff) AM_RAM_WRITE(reeltileshigh_4_w ) AM_BASE(m_reeltileshigh_4_ram )
360363
361   AM_RANGE(0xaa55, 0xaa55) AM_READ_LEGACY(ret_ff )
364   AM_RANGE(0xaa55, 0xaa55) AM_READ(ret_ff )
362365
363   AM_RANGE(0xb000, 0xb03f) AM_RAM_WRITE_LEGACY(reelscroll1_w) AM_BASE(m_reelscroll1)
364   AM_RANGE(0xb040, 0xb07f) AM_RAM_WRITE_LEGACY(reelscroll1_w)
365   AM_RANGE(0xb080, 0xb0bf) AM_RAM_WRITE_LEGACY(reelscroll1_w)
366   AM_RANGE(0xb0c0, 0xb0ff) AM_RAM_WRITE_LEGACY(reelscroll1_w)
367   AM_RANGE(0xb100, 0xb13f) AM_RAM_WRITE_LEGACY(reelscroll1_w)
368   AM_RANGE(0xb140, 0xb17f) AM_RAM_WRITE_LEGACY(reelscroll1_w)
369   AM_RANGE(0xb180, 0xb1bf) AM_RAM_WRITE_LEGACY(reelscroll1_w)
370   AM_RANGE(0xb1c0, 0xb1ff) AM_RAM_WRITE_LEGACY(reelscroll1_w)
366   AM_RANGE(0xb000, 0xb03f) AM_RAM_WRITE(reelscroll1_w) AM_BASE(m_reelscroll1)
367   AM_RANGE(0xb040, 0xb07f) AM_RAM_WRITE(reelscroll1_w)
368   AM_RANGE(0xb080, 0xb0bf) AM_RAM_WRITE(reelscroll1_w)
369   AM_RANGE(0xb0c0, 0xb0ff) AM_RAM_WRITE(reelscroll1_w)
370   AM_RANGE(0xb100, 0xb13f) AM_RAM_WRITE(reelscroll1_w)
371   AM_RANGE(0xb140, 0xb17f) AM_RAM_WRITE(reelscroll1_w)
372   AM_RANGE(0xb180, 0xb1bf) AM_RAM_WRITE(reelscroll1_w)
373   AM_RANGE(0xb1c0, 0xb1ff) AM_RAM_WRITE(reelscroll1_w)
371374
372   AM_RANGE(0xb200, 0xb23f) AM_RAM_WRITE_LEGACY(reelscroll2_w) AM_BASE(m_reelscroll2)
373   AM_RANGE(0xb240, 0xb27f) AM_RAM_WRITE_LEGACY(reelscroll2_w)
374   AM_RANGE(0xb280, 0xb2bf) AM_RAM_WRITE_LEGACY(reelscroll2_w)
375   AM_RANGE(0xb2c0, 0xb2ff) AM_RAM_WRITE_LEGACY(reelscroll2_w)
376   AM_RANGE(0xb300, 0xb33f) AM_RAM_WRITE_LEGACY(reelscroll2_w)
377   AM_RANGE(0xb340, 0xb37f) AM_RAM_WRITE_LEGACY(reelscroll2_w)
378   AM_RANGE(0xb380, 0xb3bf) AM_RAM_WRITE_LEGACY(reelscroll2_w)
379   AM_RANGE(0xb3c0, 0xb3ff) AM_RAM_WRITE_LEGACY(reelscroll2_w)
375   AM_RANGE(0xb200, 0xb23f) AM_RAM_WRITE(reelscroll2_w) AM_BASE(m_reelscroll2)
376   AM_RANGE(0xb240, 0xb27f) AM_RAM_WRITE(reelscroll2_w)
377   AM_RANGE(0xb280, 0xb2bf) AM_RAM_WRITE(reelscroll2_w)
378   AM_RANGE(0xb2c0, 0xb2ff) AM_RAM_WRITE(reelscroll2_w)
379   AM_RANGE(0xb300, 0xb33f) AM_RAM_WRITE(reelscroll2_w)
380   AM_RANGE(0xb340, 0xb37f) AM_RAM_WRITE(reelscroll2_w)
381   AM_RANGE(0xb380, 0xb3bf) AM_RAM_WRITE(reelscroll2_w)
382   AM_RANGE(0xb3c0, 0xb3ff) AM_RAM_WRITE(reelscroll2_w)
380383
381   AM_RANGE(0xb400, 0xb43f) AM_RAM_WRITE_LEGACY(reelscroll3_w) AM_BASE(m_reelscroll3)
382   AM_RANGE(0xb440, 0xb47f) AM_RAM_WRITE_LEGACY(reelscroll3_w)
383   AM_RANGE(0xb480, 0xb4bf) AM_RAM_WRITE_LEGACY(reelscroll3_w)
384   AM_RANGE(0xb4c0, 0xb4ff) AM_RAM_WRITE_LEGACY(reelscroll3_w)
385   AM_RANGE(0xb500, 0xb53f) AM_RAM_WRITE_LEGACY(reelscroll3_w)
386   AM_RANGE(0xb540, 0xb57f) AM_RAM_WRITE_LEGACY(reelscroll3_w)
387   AM_RANGE(0xb580, 0xb5bf) AM_RAM_WRITE_LEGACY(reelscroll3_w)
388   AM_RANGE(0xb5c0, 0xb5ff) AM_RAM_WRITE_LEGACY(reelscroll3_w)
384   AM_RANGE(0xb400, 0xb43f) AM_RAM_WRITE(reelscroll3_w) AM_BASE(m_reelscroll3)
385   AM_RANGE(0xb440, 0xb47f) AM_RAM_WRITE(reelscroll3_w)
386   AM_RANGE(0xb480, 0xb4bf) AM_RAM_WRITE(reelscroll3_w)
387   AM_RANGE(0xb4c0, 0xb4ff) AM_RAM_WRITE(reelscroll3_w)
388   AM_RANGE(0xb500, 0xb53f) AM_RAM_WRITE(reelscroll3_w)
389   AM_RANGE(0xb540, 0xb57f) AM_RAM_WRITE(reelscroll3_w)
390   AM_RANGE(0xb580, 0xb5bf) AM_RAM_WRITE(reelscroll3_w)
391   AM_RANGE(0xb5c0, 0xb5ff) AM_RAM_WRITE(reelscroll3_w)
389392
390   AM_RANGE(0xb600, 0xb63f) AM_RAM_WRITE_LEGACY(reelscroll4_w) AM_BASE(m_reelscroll4)
391   AM_RANGE(0xb640, 0xb67f) AM_RAM_WRITE_LEGACY(reelscroll4_w)
392   AM_RANGE(0xb680, 0xb6bf) AM_RAM_WRITE_LEGACY(reelscroll4_w)
393   AM_RANGE(0xb6c0, 0xb6ff) AM_RAM_WRITE_LEGACY(reelscroll4_w)
394   AM_RANGE(0xb700, 0xb73f) AM_RAM_WRITE_LEGACY(reelscroll4_w)
395   AM_RANGE(0xb740, 0xb77f) AM_RAM_WRITE_LEGACY(reelscroll4_w)
396   AM_RANGE(0xb780, 0xb7bf) AM_RAM_WRITE_LEGACY(reelscroll4_w)
397   AM_RANGE(0xb7c0, 0xb7ff) AM_RAM_WRITE_LEGACY(reelscroll4_w)
393   AM_RANGE(0xb600, 0xb63f) AM_RAM_WRITE(reelscroll4_w) AM_BASE(m_reelscroll4)
394   AM_RANGE(0xb640, 0xb67f) AM_RAM_WRITE(reelscroll4_w)
395   AM_RANGE(0xb680, 0xb6bf) AM_RAM_WRITE(reelscroll4_w)
396   AM_RANGE(0xb6c0, 0xb6ff) AM_RAM_WRITE(reelscroll4_w)
397   AM_RANGE(0xb700, 0xb73f) AM_RAM_WRITE(reelscroll4_w)
398   AM_RANGE(0xb740, 0xb77f) AM_RAM_WRITE(reelscroll4_w)
399   AM_RANGE(0xb780, 0xb7bf) AM_RAM_WRITE(reelscroll4_w)
400   AM_RANGE(0xb7c0, 0xb7ff) AM_RAM_WRITE(reelscroll4_w)
398401
399402   AM_RANGE(0xc000, 0xffff) AM_ROM
400403ADDRESS_MAP_END
r14845r14846
406409   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)   /* Input Ports */
407410   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)   /* Input Ports */
408411
409   AM_RANGE(0x20, 0x20) AM_WRITE_LEGACY(skylncr_coin_w )
412   AM_RANGE(0x20, 0x20) AM_WRITE(skylncr_coin_w )
410413
411414   AM_RANGE(0x30, 0x31) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w )
412415   AM_RANGE(0x31, 0x31) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
413416
414   AM_RANGE(0x40, 0x41) AM_WRITE_LEGACY(skylncr_paletteram_w )
415   AM_RANGE(0x50, 0x51) AM_WRITE_LEGACY(skylncr_paletteram2_w )
417   AM_RANGE(0x40, 0x41) AM_WRITE(skylncr_paletteram_w )
418   AM_RANGE(0x50, 0x51) AM_WRITE(skylncr_paletteram2_w )
416419
417   AM_RANGE(0x70, 0x70) AM_WRITE_LEGACY(skylncr_nmi_enable_w )
420   AM_RANGE(0x70, 0x70) AM_WRITE(skylncr_nmi_enable_w )
418421ADDRESS_MAP_END
419422
420423
src/mame/drivers/nyny.c
r14845r14846
111111   pia6821_device *m_pia1;
112112   pia6821_device *m_pia2;
113113   pen_t m_pens[NUM_PENS];
114   DECLARE_WRITE8_MEMBER(audio_1_command_w);
115   DECLARE_WRITE8_MEMBER(audio_1_answer_w);
116   DECLARE_WRITE8_MEMBER(audio_2_command_w);
117   DECLARE_READ8_MEMBER(nyny_pia_1_2_r);
118   DECLARE_WRITE8_MEMBER(nyny_pia_1_2_w);
114119};
115120
116121
r14845r14846
121126 *************************************/
122127
123128static WRITE_LINE_DEVICE_HANDLER( flipscreen_w );
124static WRITE8_HANDLER( audio_2_command_w );
125129
126130
131
127132/*************************************
128133 *
129134 *  Interrupt generation
r14845r14846
214219   state->m_star_enable = data & 0x10;
215220
216221   /* bits 5-7 go to the music board connector */
217   audio_2_command_w(state->m_maincpu->memory().space(AS_PROGRAM), 0, data & 0xe0);
222   state->audio_2_command_w(*state->m_maincpu->memory().space(AS_PROGRAM), 0, data & 0xe0);
218223}
219224
220225
r14845r14846
434439 *
435440 *************************************/
436441
437static WRITE8_HANDLER( audio_1_command_w )
442WRITE8_MEMBER(nyny_state::audio_1_command_w)
438443{
439   nyny_state *state = space->machine().driver_data<nyny_state>();
440444
441445   soundlatch_w(space, 0, data);
442   device_set_input_line(state->m_audiocpu, M6800_IRQ_LINE, HOLD_LINE);
446   device_set_input_line(m_audiocpu, M6800_IRQ_LINE, HOLD_LINE);
443447}
444448
445449
446static WRITE8_HANDLER( audio_1_answer_w )
450WRITE8_MEMBER(nyny_state::audio_1_answer_w)
447451{
448   nyny_state *state = space->machine().driver_data<nyny_state>();
449452
450453   soundlatch3_w(space, 0, data);
451   device_set_input_line(state->m_maincpu, M6809_IRQ_LINE, HOLD_LINE);
454   device_set_input_line(m_maincpu, M6809_IRQ_LINE, HOLD_LINE);
452455}
453456
454457
r14845r14846
489492 *
490493 *************************************/
491494
492static WRITE8_HANDLER( audio_2_command_w )
495WRITE8_MEMBER(nyny_state::audio_2_command_w)
493496{
494   nyny_state *state = space->machine().driver_data<nyny_state>();
495497
496498   soundlatch2_w(space, 0, (data & 0x60) >> 5);
497   device_set_input_line(state->m_audiocpu2, M6800_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
499   device_set_input_line(m_audiocpu2, M6800_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
498500}
499501
500502
r14845r14846
505507 *
506508 *************************************/
507509
508static READ8_HANDLER( nyny_pia_1_2_r )
510READ8_MEMBER(nyny_state::nyny_pia_1_2_r)
509511{
510   nyny_state *state = space->machine().driver_data<nyny_state>();
511512   UINT8 ret = 0;
512513
513514   /* the address bits are directly connected to the chip selects */
514   if (BIT(offset, 2))  ret = state->m_pia1->read(*memory_nonspecific_space(space->machine()), offset & 0x03);
515   if (BIT(offset, 3))  ret = state->m_pia2->read_alt(*memory_nonspecific_space(space->machine()), offset & 0x03);
515   if (BIT(offset, 2))  ret = m_pia1->read(space, offset & 0x03);
516   if (BIT(offset, 3))  ret = m_pia2->read_alt(space, offset & 0x03);
516517
517518   return ret;
518519}
519520
520521
521static WRITE8_HANDLER( nyny_pia_1_2_w )
522WRITE8_MEMBER(nyny_state::nyny_pia_1_2_w)
522523{
523   nyny_state *state = space->machine().driver_data<nyny_state>();
524524
525525   /* the address bits are directly connected to the chip selects */
526   if (BIT(offset, 2))  state->m_pia1->write(*memory_nonspecific_space(space->machine()), offset & 0x03, data);
527   if (BIT(offset, 3))  state->m_pia2->write_alt(*memory_nonspecific_space(space->machine()), offset & 0x03, data);
526   if (BIT(offset, 2))  m_pia1->write(space, offset & 0x03, data);
527   if (BIT(offset, 3))  m_pia2->write_alt(space, offset & 0x03, data);
528528}
529529
530530
r14845r14846
537537   AM_RANGE(0xa000, 0xa0ff) AM_RAM AM_SHARE("nvram") /* SRAM (coin counter, shown when holding F2) */
538538   AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x00fe) AM_DEVWRITE("crtc", mc6845_device, address_w)
539539   AM_RANGE(0xa101, 0xa101) AM_MIRROR(0x00fe) AM_DEVWRITE("crtc", mc6845_device, register_w)
540   AM_RANGE(0xa200, 0xa20f) AM_MIRROR(0x00f0) AM_READWRITE_LEGACY(nyny_pia_1_2_r, nyny_pia_1_2_w)
541   AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x00ff) AM_READWRITE_LEGACY(soundlatch3_r, audio_1_command_w)
540   AM_RANGE(0xa200, 0xa20f) AM_MIRROR(0x00f0) AM_READWRITE(nyny_pia_1_2_r, nyny_pia_1_2_w)
541   AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x00ff) AM_READ_LEGACY(soundlatch3_r) AM_WRITE(audio_1_command_w)
542542   AM_RANGE(0xa400, 0xa7ff) AM_NOP
543543   AM_RANGE(0xa800, 0xbfff) AM_ROM
544544   AM_RANGE(0xc000, 0xdfff) AM_RAM
r14845r14846
550550   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
551551   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
552552   AM_RANGE(0x0080, 0x0fff) AM_NOP
553   AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READWRITE_LEGACY(soundlatch_r, audio_1_answer_w)
553   AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READ_LEGACY(soundlatch_r) AM_WRITE(audio_1_answer_w)
554554   AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0fff) AM_READ_PORT("SW3")
555555   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0ffc) AM_DEVREAD_LEGACY("ay1", ay8910_r)
556556   AM_RANGE(0x3000, 0x3001) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ay1", ay8910_data_address_w)
src/mame/drivers/limenko.c
r14845r14846
5252   bitmap_ind8 m_sprites_bitmap_pri;
5353   int m_prev_sprites_count;
5454   UINT8 m_spotty_sound_cmd;
55   DECLARE_WRITE32_MEMBER(limenko_coincounter_w);
56   DECLARE_WRITE32_MEMBER(limenko_paletteram_w);
57   DECLARE_WRITE32_MEMBER(bg_videoram_w);
58   DECLARE_WRITE32_MEMBER(md_videoram_w);
59   DECLARE_WRITE32_MEMBER(fg_videoram_w);
60   DECLARE_WRITE32_MEMBER(spotty_soundlatch_w);
61   DECLARE_WRITE32_MEMBER(spriteram_buffer_w);
62   DECLARE_WRITE8_MEMBER(spotty_sound_cmd_w);
63   DECLARE_READ8_MEMBER(spotty_sound_cmd_r);
64   DECLARE_READ8_MEMBER(spotty_sound_r);
65   DECLARE_READ32_MEMBER(dynabomb_speedup_r);
66   DECLARE_READ32_MEMBER(legendoh_speedup_r);
67   DECLARE_READ32_MEMBER(sb2003_speedup_r);
68   DECLARE_READ32_MEMBER(spotty_speedup_r);
5569};
5670
5771
r14845r14846
6175  MISC FUNCTIONS
6276*****************************************************************************************************/
6377
64static WRITE32_HANDLER( limenko_coincounter_w )
78WRITE32_MEMBER(limenko_state::limenko_coincounter_w)
6579{
66   coin_counter_w(space->machine(),0,data & 0x10000);
80   coin_counter_w(machine(),0,data & 0x10000);
6781}
6882
69static WRITE32_HANDLER( limenko_paletteram_w )
83WRITE32_MEMBER(limenko_state::limenko_paletteram_w)
7084{
7185   UINT16 paldata;
72   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
86   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
7387
7488   if(ACCESSING_BITS_0_15)
7589   {
76      paldata = space->machine().generic.paletteram.u32[offset] & 0x7fff;
77      palette_set_color_rgb(space->machine(), offset * 2 + 1, pal5bit(paldata >> 0), pal5bit(paldata >> 5), pal5bit(paldata >> 10));
90      paldata = machine().generic.paletteram.u32[offset] & 0x7fff;
91      palette_set_color_rgb(machine(), offset * 2 + 1, pal5bit(paldata >> 0), pal5bit(paldata >> 5), pal5bit(paldata >> 10));
7892   }
7993
8094   if(ACCESSING_BITS_16_31)
8195   {
82      paldata = (space->machine().generic.paletteram.u32[offset] >> 16) & 0x7fff;
83      palette_set_color_rgb(space->machine(), offset * 2 + 0, pal5bit(paldata >> 0), pal5bit(paldata >> 5), pal5bit(paldata >> 10));
96      paldata = (machine().generic.paletteram.u32[offset] >> 16) & 0x7fff;
97      palette_set_color_rgb(machine(), offset * 2 + 0, pal5bit(paldata >> 0), pal5bit(paldata >> 5), pal5bit(paldata >> 10));
8498   }
8599}
86100
87static WRITE32_HANDLER( bg_videoram_w )
101WRITE32_MEMBER(limenko_state::bg_videoram_w)
88102{
89   limenko_state *state = space->machine().driver_data<limenko_state>();
90   COMBINE_DATA(&state->m_bg_videoram[offset]);
91   state->m_bg_tilemap->mark_tile_dirty(offset);
103   COMBINE_DATA(&m_bg_videoram[offset]);
104   m_bg_tilemap->mark_tile_dirty(offset);
92105}
93106
94static WRITE32_HANDLER( md_videoram_w )
107WRITE32_MEMBER(limenko_state::md_videoram_w)
95108{
96   limenko_state *state = space->machine().driver_data<limenko_state>();
97   COMBINE_DATA(&state->m_md_videoram[offset]);
98   state->m_md_tilemap->mark_tile_dirty(offset);
109   COMBINE_DATA(&m_md_videoram[offset]);
110   m_md_tilemap->mark_tile_dirty(offset);
99111}
100112
101static WRITE32_HANDLER( fg_videoram_w )
113WRITE32_MEMBER(limenko_state::fg_videoram_w)
102114{
103   limenko_state *state = space->machine().driver_data<limenko_state>();
104   COMBINE_DATA(&state->m_fg_videoram[offset]);
105   state->m_fg_tilemap->mark_tile_dirty(offset);
115   COMBINE_DATA(&m_fg_videoram[offset]);
116   m_fg_tilemap->mark_tile_dirty(offset);
106117}
107118
108static WRITE32_HANDLER( spotty_soundlatch_w )
119WRITE32_MEMBER(limenko_state::spotty_soundlatch_w)
109120{
110121   soundlatch_w(space, 0, (data >> 16) & 0xff);
111122}
r14845r14846
116127   return state->m_spriteram_bit;
117128}
118129
119static WRITE32_HANDLER( spriteram_buffer_w )
130WRITE32_MEMBER(limenko_state::spriteram_buffer_w)
120131{
121   limenko_state *state = space->machine().driver_data<limenko_state>();
122132   rectangle clip(0, 383, 0, 239);
123133
124   state->m_sprites_bitmap_pri.fill(0, clip);
125   state->m_sprites_bitmap.fill(0, clip);
134   m_sprites_bitmap_pri.fill(0, clip);
135   m_sprites_bitmap.fill(0, clip);
126136
127137   // toggle spriterams location in the memory map
128   state->m_spriteram_bit ^= 1;
138   m_spriteram_bit ^= 1;
129139
130   if(state->m_spriteram_bit)
140   if(m_spriteram_bit)
131141   {
132142      // draw the sprites to the frame buffer
133      draw_sprites(space->machine(),state->m_spriteram2,clip,state->m_prev_sprites_count);
143      draw_sprites(machine(),m_spriteram2,clip,m_prev_sprites_count);
134144   }
135145   else
136146   {
137147      // draw the sprites to the frame buffer
138      draw_sprites(space->machine(),state->m_spriteram,clip,state->m_prev_sprites_count);
148      draw_sprites(machine(),m_spriteram,clip,m_prev_sprites_count);
139149   }
140150
141151   // buffer the next number of sprites to draw
142   state->m_prev_sprites_count = (state->m_videoreg[0] & 0x1ff0000) >> 16;
152   m_prev_sprites_count = (m_videoreg[0] & 0x1ff0000) >> 16;
143153}
144154
145155/*****************************************************************************************************
r14845r14846
149159static ADDRESS_MAP_START( limenko_map, AS_PROGRAM, 32, limenko_state )
150160   AM_RANGE(0x00000000, 0x001fffff) AM_RAM   AM_BASE(m_mainram)
151161   AM_RANGE(0x40000000, 0x403fffff) AM_ROM AM_REGION("user2",0)
152   AM_RANGE(0x80000000, 0x80007fff) AM_RAM_WRITE_LEGACY(fg_videoram_w) AM_BASE(m_fg_videoram)
153   AM_RANGE(0x80008000, 0x8000ffff) AM_RAM_WRITE_LEGACY(md_videoram_w) AM_BASE(m_md_videoram)
154   AM_RANGE(0x80010000, 0x80017fff) AM_RAM_WRITE_LEGACY(bg_videoram_w) AM_BASE(m_bg_videoram)
162   AM_RANGE(0x80000000, 0x80007fff) AM_RAM_WRITE(fg_videoram_w) AM_BASE(m_fg_videoram)
163   AM_RANGE(0x80008000, 0x8000ffff) AM_RAM_WRITE(md_videoram_w) AM_BASE(m_md_videoram)
164   AM_RANGE(0x80010000, 0x80017fff) AM_RAM_WRITE(bg_videoram_w) AM_BASE(m_bg_videoram)
155165   AM_RANGE(0x80018000, 0x80018fff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
156166   AM_RANGE(0x80019000, 0x80019fff) AM_RAM AM_BASE(m_spriteram2)
157   AM_RANGE(0x8001c000, 0x8001dfff) AM_RAM_WRITE_LEGACY(limenko_paletteram_w) AM_BASE_GENERIC(paletteram)
167   AM_RANGE(0x8001c000, 0x8001dfff) AM_RAM_WRITE(limenko_paletteram_w) AM_BASE_GENERIC(paletteram)
158168   AM_RANGE(0x8001e000, 0x8001ebff) AM_RAM // ? not used
159169   AM_RANGE(0x8001ffec, 0x8001ffff) AM_RAM AM_BASE(m_videoreg)
160   AM_RANGE(0x8003e000, 0x8003e003) AM_WRITE_LEGACY(spriteram_buffer_w)
170   AM_RANGE(0x8003e000, 0x8003e003) AM_WRITE(spriteram_buffer_w)
161171   AM_RANGE(0xffe00000, 0xffffffff) AM_ROM AM_REGION("user1",0)
162172ADDRESS_MAP_END
163173
r14845r14846
165175   AM_RANGE(0x0000, 0x0003) AM_READ_PORT("IN0")
166176   AM_RANGE(0x0800, 0x0803) AM_READ_PORT("IN1")
167177   AM_RANGE(0x1000, 0x1003) AM_READ_PORT("IN2")
168   AM_RANGE(0x4000, 0x4003) AM_WRITE_LEGACY(limenko_coincounter_w)
178   AM_RANGE(0x4000, 0x4003) AM_WRITE(limenko_coincounter_w)
169179   AM_RANGE(0x4800, 0x4803) AM_WRITE_PORT("EEPROMOUT")
170180   AM_RANGE(0x5000, 0x5003) AM_WRITENOP // sound latch
171181ADDRESS_MAP_END
r14845r14846
176186static ADDRESS_MAP_START( spotty_map, AS_PROGRAM, 32, limenko_state )
177187   AM_RANGE(0x00000000, 0x001fffff) AM_RAM   AM_BASE(m_mainram)
178188   AM_RANGE(0x40002000, 0x400024d3) AM_RAM //?
179   AM_RANGE(0x80000000, 0x80007fff) AM_RAM_WRITE_LEGACY(fg_videoram_w) AM_BASE(m_fg_videoram)
180   AM_RANGE(0x80008000, 0x8000ffff) AM_RAM_WRITE_LEGACY(md_videoram_w) AM_BASE(m_md_videoram)
181   AM_RANGE(0x80010000, 0x80017fff) AM_RAM_WRITE_LEGACY(bg_videoram_w) AM_BASE(m_bg_videoram)
189   AM_RANGE(0x80000000, 0x80007fff) AM_RAM_WRITE(fg_videoram_w) AM_BASE(m_fg_videoram)
190   AM_RANGE(0x80008000, 0x8000ffff) AM_RAM_WRITE(md_videoram_w) AM_BASE(m_md_videoram)
191   AM_RANGE(0x80010000, 0x80017fff) AM_RAM_WRITE(bg_videoram_w) AM_BASE(m_bg_videoram)
182192   AM_RANGE(0x80018000, 0x80018fff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
183193   AM_RANGE(0x80019000, 0x80019fff) AM_RAM AM_BASE(m_spriteram2)
184   AM_RANGE(0x8001c000, 0x8001dfff) AM_RAM_WRITE_LEGACY(limenko_paletteram_w) AM_BASE_GENERIC(paletteram)
194   AM_RANGE(0x8001c000, 0x8001dfff) AM_RAM_WRITE(limenko_paletteram_w) AM_BASE_GENERIC(paletteram)
185195   AM_RANGE(0x8001e000, 0x8001ebff) AM_RAM // ? not used
186196   AM_RANGE(0x8001ffec, 0x8001ffff) AM_RAM AM_BASE(m_videoreg)
187   AM_RANGE(0x8003e000, 0x8003e003) AM_WRITE_LEGACY(spriteram_buffer_w)
197   AM_RANGE(0x8003e000, 0x8003e003) AM_WRITE(spriteram_buffer_w)
188198   AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("user1",0)
189199ADDRESS_MAP_END
190200
r14845r14846
194204   AM_RANGE(0x0800, 0x0803) AM_WRITENOP // hopper related
195205   AM_RANGE(0x1000, 0x1003) AM_READ_PORT("IN2")
196206   AM_RANGE(0x4800, 0x4803) AM_WRITE_PORT("EEPROMOUT")
197   AM_RANGE(0x5000, 0x5003) AM_WRITE_LEGACY(spotty_soundlatch_w)
207   AM_RANGE(0x5000, 0x5003) AM_WRITE(spotty_soundlatch_w)
198208ADDRESS_MAP_END
199209
200static WRITE8_HANDLER( spotty_sound_cmd_w )
210WRITE8_MEMBER(limenko_state::spotty_sound_cmd_w)
201211{
202   limenko_state *state = space->machine().driver_data<limenko_state>();
203   state->m_spotty_sound_cmd = data;
212   m_spotty_sound_cmd = data;
204213}
205214
206static READ8_HANDLER( spotty_sound_cmd_r )
215READ8_MEMBER(limenko_state::spotty_sound_cmd_r)
207216{
208217   return 0; //??? some status bit? if set it executes a jump in the code
209218}
210219
211static READ8_HANDLER( spotty_sound_r )
220READ8_MEMBER(limenko_state::spotty_sound_r)
212221{
213   limenko_state *state = space->machine().driver_data<limenko_state>();
214   // check state->m_spotty_sound_cmd bits...
222   // check m_spotty_sound_cmd bits...
215223
216   if(state->m_spotty_sound_cmd == 0xf7)
224   if(m_spotty_sound_cmd == 0xf7)
217225      return soundlatch_r(space,0);
218226   else
219      return space->machine().device<okim6295_device>("oki")->read(*space,0);
227      return machine().device<okim6295_device>("oki")->read(*&space,0);
220228}
221229
222230static ADDRESS_MAP_START( spotty_sound_io_map, AS_IO, 8, limenko_state )
223   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_LEGACY(spotty_sound_r) AM_DEVWRITE("oki", okim6295_device, write) //? sound latch and ?
224   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE_LEGACY(spotty_sound_cmd_r, spotty_sound_cmd_w) //not sure about anything...
231   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ(spotty_sound_r) AM_DEVWRITE("oki", okim6295_device, write) //? sound latch and ?
232   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(spotty_sound_cmd_r, spotty_sound_cmd_w) //not sure about anything...
225233ADDRESS_MAP_END
226234
227235/*****************************************************************************************************
r14845r14846
985993
986994
987995
988static READ32_HANDLER( dynabomb_speedup_r )
996READ32_MEMBER(limenko_state::dynabomb_speedup_r)
989997{
990   limenko_state *state = space->machine().driver_data<limenko_state>();
991   if(space->machine().firstcpu->pc() == 0xc25b8)
998   if(machine().firstcpu->pc() == 0xc25b8)
992999   {
993      space->machine().firstcpu->eat_cycles(50);
1000      machine().firstcpu->eat_cycles(50);
9941001   }
9951002
996   return state->m_mainram[0xe2784/4];
1003   return m_mainram[0xe2784/4];
9971004}
9981005
999static READ32_HANDLER( legendoh_speedup_r )
1006READ32_MEMBER(limenko_state::legendoh_speedup_r)
10001007{
1001   limenko_state *state = space->machine().driver_data<limenko_state>();
1002   if(space->machine().firstcpu->pc() == 0x23e32)
1008   if(machine().firstcpu->pc() == 0x23e32)
10031009   {
1004      space->machine().firstcpu->eat_cycles(50);
1010      machine().firstcpu->eat_cycles(50);
10051011   }
10061012
1007   return state->m_mainram[0x32ab0/4];
1013   return m_mainram[0x32ab0/4];
10081014}
10091015
1010static READ32_HANDLER( sb2003_speedup_r )
1016READ32_MEMBER(limenko_state::sb2003_speedup_r)
10111017{
1012   limenko_state *state = space->machine().driver_data<limenko_state>();
1013   if(space->machine().firstcpu->pc() == 0x26da4)
1018   if(machine().firstcpu->pc() == 0x26da4)
10141019   {
1015      space->machine().firstcpu->eat_cycles(50);
1020      machine().firstcpu->eat_cycles(50);
10161021   }
10171022
1018   return state->m_mainram[0x135800/4];
1023   return m_mainram[0x135800/4];
10191024}
10201025
1021static READ32_HANDLER( spotty_speedup_r )
1026READ32_MEMBER(limenko_state::spotty_speedup_r)
10221027{
1023   limenko_state *state = space->machine().driver_data<limenko_state>();
1024   if(space->machine().firstcpu->pc() == 0x8560)
1028   if(machine().firstcpu->pc() == 0x8560)
10251029   {
1026      space->machine().firstcpu->eat_cycles(50);
1030      machine().firstcpu->eat_cycles(50);
10271031   }
10281032
1029   return state->m_mainram[0x6626c/4];
1033   return m_mainram[0x6626c/4];
10301034}
10311035
10321036static DRIVER_INIT( dynabomb )
10331037{
10341038   limenko_state *state = machine.driver_data<limenko_state>();
1035   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xe2784, 0xe2787, FUNC(dynabomb_speedup_r) );
1039   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xe2784, 0xe2787, read32_delegate(FUNC(limenko_state::dynabomb_speedup_r), state));
10361040
10371041   state->m_spriteram_bit = 1;
10381042}
r14845r14846
10401044static DRIVER_INIT( legendoh )
10411045{
10421046   limenko_state *state = machine.driver_data<limenko_state>();
1043   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x32ab0, 0x32ab3, FUNC(legendoh_speedup_r) );
1047   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x32ab0, 0x32ab3, read32_delegate(FUNC(limenko_state::legendoh_speedup_r), state));
10441048
10451049   state->m_spriteram_bit = 1;
10461050}
r14845r14846
10481052static DRIVER_INIT( sb2003 )
10491053{
10501054   limenko_state *state = machine.driver_data<limenko_state>();
1051   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x135800, 0x135803, FUNC(sb2003_speedup_r) );
1055   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x135800, 0x135803, read32_delegate(FUNC(limenko_state::sb2003_speedup_r), state));
10521056
10531057   state->m_spriteram_bit = 1;
10541058}
r14845r14846
10691073      dst[x+2] = (src[x+1]&0x0f) >> 0;
10701074   }
10711075
1072   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x6626c, 0x6626f, FUNC(spotty_speedup_r) );
1076   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x6626c, 0x6626f, read32_delegate(FUNC(limenko_state::spotty_speedup_r), state));
10731077
10741078   state->m_spriteram_bit = 1;
10751079}
src/mame/drivers/bfm_sc4.c
r14845r14846
6565   UINT16* m_mainram;
6666   // devices
6767   required_device<cpu_device> m_maincpu;
68   DECLARE_READ16_MEMBER(sc4_mem_r);
69   DECLARE_WRITE16_MEMBER(sc4_mem_w);
6870};
6971
7072class sc4_adder4_state : public sc4_state
r14845r14846
7981   required_device<cpu_device> m_adder4cpu;
8082};
8183
82static READ16_HANDLER( sc4_mem_r )
84READ16_MEMBER(sc4_state::sc4_mem_r)
8385{
84   sc4_state *state = space->machine().driver_data<sc4_state>();
85   int pc = cpu_get_pc(&space->device());
86   int cs = m68307_get_cs(state->m_maincpu, offset * 2);
86   int pc = cpu_get_pc(&space.device());
87   int cs = m68307_get_cs(m_maincpu, offset * 2);
8788   int base = 0, end = 0;
88//   if (!(space->debugger_access())) printf("cs is %d\n", cs);
89//   if (!(debugger_access())) printf("cs is %d\n", cs);
8990
9091   switch ( cs )
9192   {
9293      case 1:
9394         if (offset<0x100000/2)
94            return state->m_cpuregion[offset];
95            return m_cpuregion[offset];
9596         else
9697            logerror("%08x maincpu read access offset %08x mem_mask %04x cs %d\n", pc, offset*2, mem_mask, cs);
9798         break;
r14845r14846
103104         if ((offset>=base) && (offset<end))
104105         {
105106            offset-=base;
106            return(state->m_mainram[offset]);
107            return(m_mainram[offset]);
107108         }
108109         else
109110         {
r14845r14846
129130   return 0x0000;
130131}
131132
132static WRITE16_HANDLER( sc4_mem_w )
133WRITE16_MEMBER(sc4_state::sc4_mem_w)
133134{
134   sc4_state *state = space->machine().driver_data<sc4_state>();
135   int pc = cpu_get_pc(&space->device());
136   int cs = m68307_get_cs(state->m_maincpu, offset * 2);
135   int pc = cpu_get_pc(&space.device());
136   int cs = m68307_get_cs(m_maincpu, offset * 2);
137137   int base = 0, end = 0;
138138
139139   switch ( cs )
r14845r14846
153153         if ((offset>=base) && (offset<end))
154154         {
155155            offset-=base;
156            COMBINE_DATA(&state->m_mainram[offset]);
156            COMBINE_DATA(&m_mainram[offset]);
157157         }
158158         else
159159         {
r14845r14846
174174   }
175175}
176176
177static ADDRESS_MAP_START( sc4_map, AS_PROGRAM, 16, sc4_adder4_state )
178   AM_RANGE(0x000000000, 0xffffffff) AM_READWRITE_LEGACY(sc4_mem_r, sc4_mem_w)
177static ADDRESS_MAP_START( sc4_map, AS_PROGRAM, 16, sc4_state )
178   AM_RANGE(0x000000000, 0xffffffff) AM_READWRITE(sc4_mem_r, sc4_mem_w)
179179ADDRESS_MAP_END
180180
181181static ADDRESS_MAP_START( sc4_adder4_map, AS_PROGRAM, 32, sc4_adder4_state )
src/mame/drivers/paranoia.c
r14845r14846
3636#include "emu.h"
3737#include "cpu/z80/z80.h"
3838#include "cpu/i8085/i8085.h"
39#include "machine/i8155.h"
3940#include "machine/pcecommn.h"
4041#include "video/vdc.h"
4142#include "cpu/h6280/h6280.h"
r14845r14846
4849   paranoia_state(const machine_config &mconfig, device_type type, const char *tag)
4950      : driver_device(mconfig, type, tag) { }
5051
52   DECLARE_WRITE8_MEMBER(paranoia_8085_d000_w);
53   DECLARE_READ8_MEMBER(paranoia_z80_io_01_r);
54   DECLARE_READ8_MEMBER(paranoia_z80_io_02_r);
55   DECLARE_WRITE8_MEMBER(paranoia_z80_io_17_w);
56   DECLARE_WRITE8_MEMBER(paranoia_z80_io_37_w);
5157};
5258
5359
r14845r14846
7884   AM_RANGE( 0x00, 0x03) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w )
7985ADDRESS_MAP_END
8086
81static WRITE8_HANDLER( paranoia_8085_d000_w )
87WRITE8_MEMBER(paranoia_state::paranoia_8085_d000_w)
8288{
8389   //logerror( "D000 (8085) write %02x\n", data );
8490}
8591
86static WRITE8_HANDLER( paranoia_8085_8155_w )
87{
88   switch( offset )
89   {
90   case 0: logerror( "8155 Command register write %x, timer command = %x, interrupt enable = %x, ports = %x\n", data, (data >> 6) & 3, (data >> 4) & 3, data & 0xf ); break;
91   case 1: logerror( "8155 I/O Port A write %x\n", data ); break;
92   case 2: logerror( "8155 I/O Port B write %x\n", data ); break;
93   case 3: logerror( "8155 I/O Port C (or control) write %x\n", data ); break;
94   case 4: logerror( "8155 Timer low 8 bits write %x\n", data ); break;
95   case 5: logerror( "8155 Timer high 6 bits write %x, timer mode %x\n", data & 0x3f, (data >> 6) & 3); break;
96   }
97}
98
9992static ADDRESS_MAP_START(paranoia_8085_map, AS_PROGRAM, 8, paranoia_state )
10093   AM_RANGE( 0x0000, 0x7fff) AM_ROM
101   AM_RANGE( 0x8000, 0x80ff) AM_RAM
102   AM_RANGE( 0x8100, 0x8105) AM_WRITE_LEGACY(paranoia_8085_8155_w )
103   AM_RANGE( 0xd000, 0xd000) AM_WRITE_LEGACY(paranoia_8085_d000_w )
94   AM_RANGE( 0x8000, 0x80ff) AM_DEVREADWRITE("i8155", i8155_device, memory_r, memory_w)
95   AM_RANGE( 0x8100, 0x8107) AM_DEVREADWRITE("i8155", i8155_device, io_r, io_w)
96   AM_RANGE( 0xd000, 0xd000) AM_WRITE(paranoia_8085_d000_w )
10497   AM_RANGE( 0xe000, 0xe1ff) AM_RAM
10598ADDRESS_MAP_END
10699
r14845r14846
113106   AM_RANGE( 0x7000, 0x73ff) AM_RAM
114107ADDRESS_MAP_END
115108
116static READ8_HANDLER(paranoia_z80_io_01_r)
109READ8_MEMBER(paranoia_state::paranoia_z80_io_01_r)
117110{
118111   return 0;
119112}
120113
121static READ8_HANDLER(paranoia_z80_io_02_r)
114READ8_MEMBER(paranoia_state::paranoia_z80_io_02_r)
122115{
123116   return 0;
124117}
125118
126static WRITE8_HANDLER(paranoia_z80_io_17_w)
119WRITE8_MEMBER(paranoia_state::paranoia_z80_io_17_w)
127120{
128121}
129122
130static WRITE8_HANDLER(paranoia_z80_io_37_w)
123WRITE8_MEMBER(paranoia_state::paranoia_z80_io_37_w)
131124{
132125}
133126
134127static ADDRESS_MAP_START(paranoia_z80_io_map, AS_IO, 8, paranoia_state )
135128   ADDRESS_MAP_GLOBAL_MASK(0xff)
136   AM_RANGE( 0x01, 0x01 ) AM_READ_LEGACY(paranoia_z80_io_01_r )
137   AM_RANGE( 0x02, 0x02 ) AM_READ_LEGACY(paranoia_z80_io_02_r )
138   AM_RANGE( 0x17, 0x17 ) AM_WRITE_LEGACY(paranoia_z80_io_17_w )
139   AM_RANGE( 0x37, 0x37 ) AM_WRITE_LEGACY(paranoia_z80_io_37_w )
129   AM_RANGE( 0x01, 0x01 ) AM_READ(paranoia_z80_io_01_r )
130   AM_RANGE( 0x02, 0x02 ) AM_READ(paranoia_z80_io_02_r )
131   AM_RANGE( 0x17, 0x17 ) AM_WRITE(paranoia_z80_io_17_w )
132   AM_RANGE( 0x37, 0x37 ) AM_WRITE(paranoia_z80_io_37_w )
140133ADDRESS_MAP_END
141134
135static WRITE8_DEVICE_HANDLER(paranoia_i8155_a_w)
136{
137   //logerror("i8155 Port A: %02X\n", data);
138}
139
140static WRITE8_DEVICE_HANDLER(paranoia_i8155_b_w)
141{
142   //logerror("i8155 Port B: %02X\n", data);
143}
144
145static WRITE8_DEVICE_HANDLER(paranoia_i8155_c_w)
146{
147   //logerror("i8155 Port C: %02X\n", data);
148}
149
150static WRITE_LINE_DEVICE_HANDLER(paranoia_i8155_timer_out)
151{
152   //cputag_set_input_line(device->machine(), "sub", I8085_RST55_LINE, state ? CLEAR_LINE : ASSERT_LINE );
153   //logerror("Timer out %d\n", state);
154}
155
156static I8155_INTERFACE(i8155_intf)
157{
158   // all ports set to output
159   DEVCB_NULL,
160   DEVCB_HANDLER(paranoia_i8155_a_w),
161   DEVCB_NULL,
162   DEVCB_HANDLER(paranoia_i8155_b_w),
163   DEVCB_NULL,
164   DEVCB_HANDLER(paranoia_i8155_c_w),
165   DEVCB_LINE(paranoia_i8155_timer_out)
166};
167
142168static const c6280_interface c6280_config =
143169{
144170   "maincpu"
r14845r14846
161187   MCFG_CPU_PROGRAM_MAP(paranoia_z80_map)
162188   MCFG_CPU_IO_MAP(paranoia_z80_io_map)
163189
190   MCFG_I8155_ADD("i8155", 1000000 /*?*/, i8155_intf)
191
164192    /* video hardware */
165193
166194   MCFG_SCREEN_ADD("screen", RASTER)
src/mame/drivers/galgame.c
r14845r14846
3737   int m_point_work_list_index;
3838   int m_point_display_list_index;
3939   int m_interrupt;
40   DECLARE_READ16_MEMBER(ke_r);
41   DECLARE_WRITE16_MEMBER(ke_w);
42   DECLARE_READ16_MEMBER(x_r);
43   DECLARE_WRITE16_MEMBER(x_w);
44   DECLARE_READ16_MEMBER(y_r);
45   DECLARE_WRITE16_MEMBER(y_w);
46   DECLARE_WRITE16_MEMBER(clk_w);
4047};
4148
4249/*************************************
r14845r14846
4552 *
4653 *************************************/
4754
48static READ16_HANDLER(ke_r)
55READ16_MEMBER(galaxygame_state::ke_r)
4956{
50   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
5157
5258   UINT16 ret;
5359
r14845r14846
5763         ret = 0;
5864         break;
5965      case 1: // AC
60         ret = state->m_ac;
66         ret = m_ac;
6167         break;
6268      case 2: // MQ
63         ret = state->m_mq;
69         ret = m_mq;
6470         break;
6571      case 7: // ASH
6672         ret = 0;
r14845r14846
7379   return ret;
7480}
7581
76static WRITE16_HANDLER(ke_w)
82WRITE16_MEMBER(galaxygame_state::ke_w)
7783{
78   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
7984
8085   switch( offset )
8186   {
r14845r14846
8388         {
8489            if ( data != 0 )
8590            {
86               INT32 dividend = (INT32)((UINT32)((UINT16)state->m_ac << 16) | (UINT16)(state->m_mq));
87               state->m_mq = dividend / (INT16)data;
88               state->m_ac = dividend % (INT16)data;
91               INT32 dividend = (INT32)((UINT32)((UINT16)m_ac << 16) | (UINT16)(m_mq));
92               m_mq = dividend / (INT16)data;
93               m_ac = dividend % (INT16)data;
8994            }
9095            else
9196            {
92               state->m_mq = 0;
93               state->m_ac = 0;
97               m_mq = 0;
98               m_ac = 0;
9499            }
95100         }
96101         break;
97102      case 1: // AC
98         state->m_ac = (INT16)data;
103         m_ac = (INT16)data;
99104         break;
100105      case 2: // MQ
101         state->m_mq = (INT16)data;
102         if (state->m_mq < 0)
106         m_mq = (INT16)data;
107         if (m_mq < 0)
103108         {
104            state->m_ac = -1;
109            m_ac = -1;
105110         }
106111         else
107112         {
108            state->m_ac = 0;
113            m_ac = 0;
109114         }
110115         break;
111116      case 3: // X
112117         {
113            INT32 mulres = (INT32)state->m_mq*(INT32)(INT16)data;
114            state->m_ac = mulres >> 16;
115            state->m_mq = mulres & 0xffff;
118            INT32 mulres = (INT32)m_mq*(INT32)(INT16)data;
119            m_ac = mulres >> 16;
120            m_mq = mulres & 0xffff;
116121         }
117122         break;
118123      case 6: // LSH
119124         {
120125            data &= 63;
121            INT32 val = (INT32)((UINT32)((UINT16)state->m_ac << 16) | (UINT16)(state->m_mq));
126            INT32 val = (INT32)((UINT32)((UINT16)m_ac << 16) | (UINT16)(m_mq));
122127            if ( data < 32 )
123128            {
124129               val = val << data;
r14845r14846
127132            {
128133               val = val >> (64 - data);
129134            }
130            state->m_mq = val & 0xffff;
131            state->m_ac = (val >> 16) & 0xffff;
135            m_mq = val & 0xffff;
136            m_ac = (val >> 16) & 0xffff;
132137         }
133138         break;
134139      case 7: // ASH
135140         {
136141            data &= 63;
137            INT32 val = (INT32)((UINT32)((UINT16)state->m_ac << 16) | (UINT16)(state->m_mq));
142            INT32 val = (INT32)((UINT32)((UINT16)m_ac << 16) | (UINT16)(m_mq));
138143            if ( data < 32 )
139144            {
140145               val = val << data;
r14845r14846
143148            {
144149               val = val >> (64 - data);
145150            }
146            state->m_mq = val & 0xffff;
147            state->m_ac = (val >> 16) & 0xffff;
151            m_mq = val & 0xffff;
152            m_ac = (val >> 16) & 0xffff;
148153         }
149154         break;
150155      default:
r14845r14846
171176   return 0;
172177}
173178
174static READ16_HANDLER(x_r)
179READ16_MEMBER(galaxygame_state::x_r)
175180{
176   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
177   return state->m_x;
181   return m_x;
178182}
179183
180static WRITE16_HANDLER(x_w)
184WRITE16_MEMBER(galaxygame_state::x_w)
181185{
182   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
183   state->m_x = data;
186   m_x = data;
184187}
185188
186static READ16_HANDLER(y_r)
189READ16_MEMBER(galaxygame_state::y_r)
187190{
188   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
189   return state->m_y;
191   return m_y;
190192}
191193
192static WRITE16_HANDLER(y_w)
194WRITE16_MEMBER(galaxygame_state::y_w)
193195{
194   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
195   state->m_y = data;
196   m_y = data;
196197   if ( data == 0x0101 )
197198   {
198199      // send points list to display device
199200      // seems to happen on first 0x0101 write after interrupt
200      if ( state->m_interrupt )
201      if ( m_interrupt )
201202      {
202         for ( int i = 0; i < state->m_point_work_list_index ; i++ )
203         for ( int i = 0; i < m_point_work_list_index ; i++ )
203204         {
204            state->m_point_display_list[i].x = state->m_point_work_list[i].x;
205            state->m_point_display_list[i].y = state->m_point_work_list[i].y;
205            m_point_display_list[i].x = m_point_work_list[i].x;
206            m_point_display_list[i].y = m_point_work_list[i].y;
206207         }
207         state->m_point_display_list_index = state->m_point_work_list_index;
208         state->m_point_work_list_index = 0;
209         state->m_interrupt = 0;
208         m_point_display_list_index = m_point_work_list_index;
209         m_point_work_list_index = 0;
210         m_interrupt = 0;
210211      }
211212   }
212213   else
213214   {
214      if ( state->m_point_work_list_index >= MAX_POINTS )
215      if ( m_point_work_list_index >= MAX_POINTS )
215216      {
216217         logerror("Work list overflow\n");
217218      }
218219      else
219220      {
220         state->m_point_work_list[state->m_point_work_list_index].x = state->m_x;
221         state->m_point_work_list[state->m_point_work_list_index].y = state->m_y;
222         state->m_point_work_list_index++;
221         m_point_work_list[m_point_work_list_index].x = m_x;
222         m_point_work_list[m_point_work_list_index].y = m_y;
223         m_point_work_list_index++;
223224      }
224225   }
225226}
r14845r14846
269270 *
270271 *************************************/
271272
272static WRITE16_HANDLER(clk_w)
273WRITE16_MEMBER(galaxygame_state::clk_w)
273274{
274   galaxygame_state *state = space->machine().driver_data<galaxygame_state>();
275   state->m_clk = data;
275   m_clk = data;
276276}
277277
278278static ADDRESS_MAP_START( galaxygame_map, AS_PROGRAM, 16, galaxygame_state )
279279   AM_RANGE(0x0000, 0x1fff) AM_RAM
280   AM_RANGE(0xfec0, 0xfecf) AM_READWRITE_LEGACY(ke_r, ke_w)
281   AM_RANGE(0xff52, 0xff53) AM_READWRITE_LEGACY(y_r, y_w) // 177522 Y
280   AM_RANGE(0xfec0, 0xfecf) AM_READWRITE(ke_r, ke_w)
281   AM_RANGE(0xff52, 0xff53) AM_READWRITE(y_r, y_w) // 177522 Y
282282   AM_RANGE(0xff54, 0xff55) AM_READ_PORT("COINAC") // 177524 COINAC
283   AM_RANGE(0xff5a, 0xff5b) AM_READWRITE_LEGACY(x_r, x_w)   // 177532 X
283   AM_RANGE(0xff5a, 0xff5b) AM_READWRITE(x_r, x_w)   // 177532 X
284284   AM_RANGE(0xff5c, 0xff5d) AM_READ_PORT("SR")      // 177534 SR
285   AM_RANGE(0xff66, 0xff67) AM_WRITE_LEGACY(clk_w)      // 177546 KW11 line frequency clock
285   AM_RANGE(0xff66, 0xff67) AM_WRITE(clk_w)      // 177546 KW11 line frequency clock
286286ADDRESS_MAP_END
287287
288288
src/mame/drivers/poo.c
r14845r14846
5656   UINT8 *m_scrolly;
5757   UINT8 *m_sprites;
5858   UINT8 m_vram_colbank;
59   DECLARE_READ8_MEMBER(unk_inp_r);
60   DECLARE_READ8_MEMBER(unk_inp2_r);
61   DECLARE_READ8_MEMBER(unk_inp3_r);
62   DECLARE_WRITE8_MEMBER(unk_w);
63   DECLARE_WRITE8_MEMBER(sound_cmd_w);
64   DECLARE_WRITE8_MEMBER(poo_vregs_w);
65   DECLARE_READ8_MEMBER(timer_r);
5966};
6067
6168
r14845r14846
106113   return 0;
107114}
108115
109static READ8_HANDLER( unk_inp_r )
116READ8_MEMBER(poo_state::unk_inp_r)
110117{
111   return 0x00;//space->machine().rand();
118   return 0x00;//machine().rand();
112119}
113120
114121#if 0
115122
116static READ8_HANDLER( unk_inp2_r )
123READ8_MEMBER(poo_state::unk_inp2_r)
117124{
118125   return 0xff;
119126}
120127
121static READ8_HANDLER( unk_inp3_r )
128READ8_MEMBER(poo_state::unk_inp3_r)
122129{
123   return space->machine().rand();
130   return machine().rand();
124131}
125132#endif
126133
127134
128135#if 0
129static WRITE8_HANDLER( unk_w )
136WRITE8_MEMBER(poo_state::unk_w)
130137{
131138   printf("%02x %02x\n",data,offset);
132139}
133140#endif
134141
135142/* soundlatch write */
136static WRITE8_HANDLER( sound_cmd_w )
143WRITE8_MEMBER(poo_state::sound_cmd_w)
137144{
138145   soundlatch_w(space, 0, (data & 0xff));
139   cputag_set_input_line(space->machine(), "subcpu", 0, HOLD_LINE);
146   cputag_set_input_line(machine(), "subcpu", 0, HOLD_LINE);
140147}
141148
142static WRITE8_HANDLER( poo_vregs_w )
149WRITE8_MEMBER(poo_state::poo_vregs_w)
143150{
144   poo_state *state = space->machine().driver_data<poo_state>();
145151   // bit 2 used, unknown purpose
146   state->m_vram_colbank = data & 0x18;
152   m_vram_colbank = data & 0x18;
147153}
148154
149155static ADDRESS_MAP_START( unclepoo_main_map, AS_PROGRAM, 8, poo_state )
150156   AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP
151157   AM_RANGE(0x8000, 0x8fff) AM_RAM
152158   AM_RANGE(0x9000, 0x97ff) AM_RAM
153   AM_RANGE(0x9800, 0x9801) AM_READ_LEGACY(unk_inp_r) //AM_WRITE_LEGACY(unk_w )
159   AM_RANGE(0x9800, 0x9801) AM_READ(unk_inp_r) //AM_WRITE(unk_w )
154160
155161   AM_RANGE(0xb000, 0xb07f) AM_RAM AM_BASE(m_sprites)
156162   AM_RANGE(0xb080, 0xb0ff) AM_RAM AM_BASE(m_scrolly)
157163
158   AM_RANGE(0xb400, 0xb400) AM_WRITE_LEGACY(sound_cmd_w)
164   AM_RANGE(0xb400, 0xb400) AM_WRITE(sound_cmd_w)
159165
160166   AM_RANGE(0xb500, 0xb500) AM_READ_PORT("DSW1")
161167   AM_RANGE(0xb501, 0xb501) AM_READ_PORT("DSW2")
r14845r14846
163169   AM_RANGE(0xb503, 0xb503) AM_READ_PORT("P2")
164170   AM_RANGE(0xb504, 0xb504) AM_READ_PORT("SYSTEM")
165171
166   AM_RANGE(0xb700, 0xb700) AM_WRITE_LEGACY(poo_vregs_w)
172   AM_RANGE(0xb700, 0xb700) AM_WRITE(poo_vregs_w)
167173
168174   AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE(m_vram)
169175
r14845r14846
306312   }
307313}
308314
309 static READ8_HANDLER( timer_r )
315READ8_MEMBER(poo_state::timer_r)
310316{
311   return downcast<cpu_device *>(&space->device())->total_cycles() / 16;
317   return downcast<cpu_device *>(&space.device())->total_cycles() / 16;
312318}
313319
314320
r14845r14846
317323   AY8910_LEGACY_OUTPUT,
318324   AY8910_DEFAULT_LOADS,
319325   DEVCB_MEMORY_HANDLER("subcpu", PROGRAM, soundlatch_r),
320   DEVCB_MEMORY_HANDLER("subcpu", PROGRAM, timer_r),
326   DEVCB_DRIVER_MEMBER(poo_state, timer_r),
321327   DEVCB_NULL,
322328   DEVCB_NULL
323329};
src/mame/drivers/drtomy.c
r14845r14846
2929
3030   /* misc */
3131   int       m_oki_bank;
32   DECLARE_WRITE16_MEMBER(drtomy_vram_fg_w);
33   DECLARE_WRITE16_MEMBER(drtomy_vram_bg_w);
3234};
3335
3436
r14845r14846
133135   return 0;
134136}
135137
136static WRITE16_HANDLER( drtomy_vram_fg_w )
138WRITE16_MEMBER(drtomy_state::drtomy_vram_fg_w)
137139{
138   drtomy_state *state = space->machine().driver_data<drtomy_state>();
139   COMBINE_DATA(&state->m_videoram_fg[offset]);
140   state->m_tilemap_fg->mark_tile_dirty(offset);
140   COMBINE_DATA(&m_videoram_fg[offset]);
141   m_tilemap_fg->mark_tile_dirty(offset);
141142}
142143
143static WRITE16_HANDLER( drtomy_vram_bg_w )
144WRITE16_MEMBER(drtomy_state::drtomy_vram_bg_w)
144145{
145   drtomy_state *state = space->machine().driver_data<drtomy_state>();
146   COMBINE_DATA(&state->m_videoram_bg[offset]);
147   state->m_tilemap_bg->mark_tile_dirty(offset);
146   COMBINE_DATA(&m_videoram_bg[offset]);
147   m_tilemap_bg->mark_tile_dirty(offset);
148148}
149149
150150static WRITE16_DEVICE_HANDLER( drtomy_okibank_w )
r14845r14846
162162
163163static ADDRESS_MAP_START( drtomy_map, AS_PROGRAM, 16, drtomy_state )
164164   AM_RANGE(0x000000, 0x03ffff) AM_ROM   /* ROM */
165   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(drtomy_vram_fg_w) AM_BASE(m_videoram_fg)   /* Video RAM FG */
166   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(drtomy_vram_bg_w) AM_BASE(m_videoram_bg) /* Video RAM BG */
165   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(drtomy_vram_fg_w) AM_BASE(m_videoram_fg)   /* Video RAM FG */
166   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(drtomy_vram_bg_w) AM_BASE(m_videoram_bg) /* Video RAM BG */
167167   AM_RANGE(0x200000, 0x2007ff) AM_RAM_WRITE_LEGACY(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) /* Palette */
168168   AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE(m_spriteram) /* Sprite RAM */
169169   AM_RANGE(0x700000, 0x700001) AM_READ_PORT("DSW1")
src/mame/drivers/calorie.c
r14845r14846
9898   tilemap_t  *m_bg_tilemap;
9999   tilemap_t  *m_fg_tilemap;
100100   UINT8    m_bg_bank;
101   DECLARE_WRITE8_MEMBER(fg_ram_w);
102   DECLARE_WRITE8_MEMBER(bg_bank_w);
103   DECLARE_WRITE8_MEMBER(calorie_flipscreen_w);
104   DECLARE_READ8_MEMBER(calorie_soundlatch_r);
105   DECLARE_WRITE8_MEMBER(bogus_w);
101106};
102107
103108
r14845r14846
198203 *
199204 *************************************/
200205
201static WRITE8_HANDLER( fg_ram_w )
206WRITE8_MEMBER(calorie_state::fg_ram_w)
202207{
203   calorie_state *state = space->machine().driver_data<calorie_state>();
204   state->m_fg_ram[offset] = data;
205   state->m_fg_tilemap->mark_tile_dirty(offset & 0x3ff);
208   m_fg_ram[offset] = data;
209   m_fg_tilemap->mark_tile_dirty(offset & 0x3ff);
206210}
207211
208static WRITE8_HANDLER( bg_bank_w )
212WRITE8_MEMBER(calorie_state::bg_bank_w)
209213{
210   calorie_state *state = space->machine().driver_data<calorie_state>();
211   if((state->m_bg_bank & ~0x10) != (data & ~0x10))
212      state->m_bg_tilemap->mark_all_dirty();
214   if((m_bg_bank & ~0x10) != (data & ~0x10))
215      m_bg_tilemap->mark_all_dirty();
213216
214   state->m_bg_bank = data;
217   m_bg_bank = data;
215218}
216219
217static WRITE8_HANDLER( calorie_flipscreen_w )
220WRITE8_MEMBER(calorie_state::calorie_flipscreen_w)
218221{
219   flip_screen_set(space->machine(), data & 1);
222   flip_screen_set(machine(), data & 1);
220223}
221224
222static READ8_HANDLER( calorie_soundlatch_r )
225READ8_MEMBER(calorie_state::calorie_soundlatch_r)
223226{
224227   UINT8 latch = soundlatch_r(space, 0);
225228   soundlatch_clear_w(space, 0, 0);
226229   return latch;
227230}
228231
229static WRITE8_HANDLER( bogus_w )
232WRITE8_MEMBER(calorie_state::bogus_w)
230233{
231234   popmessage("written to 3rd sound chip: data = %02X port = %02X", data, offset);
232235}
r14845r14846
241244   AM_RANGE(0x0000, 0x7fff) AM_ROM
242245   AM_RANGE(0x8000, 0xbfff) AM_ROM
243246   AM_RANGE(0xc000, 0xcfff) AM_RAM
244   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(fg_ram_w) AM_BASE(m_fg_ram)
247   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(fg_ram_w) AM_BASE(m_fg_ram)
245248   AM_RANGE(0xd800, 0xdbff) AM_RAM AM_BASE(m_sprites)
246249   AM_RANGE(0xdc00, 0xdcff) AM_RAM_WRITE_LEGACY(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram)
247   AM_RANGE(0xde00, 0xde00) AM_WRITE_LEGACY(bg_bank_w)
250   AM_RANGE(0xde00, 0xde00) AM_WRITE(bg_bank_w)
248251   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("P1")
249252   AM_RANGE(0xf001, 0xf001) AM_READ_PORT("P2")
250253   AM_RANGE(0xf002, 0xf002) AM_READ_PORT("SYSTEM")
251   AM_RANGE(0xf004, 0xf004) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(calorie_flipscreen_w)
254   AM_RANGE(0xf004, 0xf004) AM_READ_PORT("DSW1") AM_WRITE(calorie_flipscreen_w)
252255   AM_RANGE(0xf005, 0xf005) AM_READ_PORT("DSW2")
253256   AM_RANGE(0xf800, 0xf800) AM_WRITE_LEGACY(soundlatch_w)
254257ADDRESS_MAP_END
r14845r14846
257260static ADDRESS_MAP_START( calorie_sound_map, AS_PROGRAM, 8, calorie_state )
258261   AM_RANGE(0x0000, 0x3fff) AM_ROM
259262   AM_RANGE(0x8000, 0x87ff) AM_RAM
260   AM_RANGE(0xc000, 0xc000) AM_READ_LEGACY(calorie_soundlatch_r)
263   AM_RANGE(0xc000, 0xc000) AM_READ(calorie_soundlatch_r)
261264ADDRESS_MAP_END
262265
263266static ADDRESS_MAP_START( calorie_sound_io_map, AS_IO, 8, calorie_state )
r14845r14846
267270   AM_RANGE(0x10, 0x11) AM_DEVWRITE_LEGACY("ay2", ay8910_address_data_w)
268271   AM_RANGE(0x11, 0x11) AM_DEVREAD_LEGACY("ay2", ay8910_r)
269272   // 3rd ?
270   AM_RANGE(0x00, 0xff) AM_WRITE_LEGACY(bogus_w)
273   AM_RANGE(0x00, 0xff) AM_WRITE(bogus_w)
271274ADDRESS_MAP_END
272275
273276
src/mame/drivers/sfkick.c
r14845r14846
7070   int m_bank[8];
7171   int m_input_mux;
7272   required_device<v9938_device> m_v9938;
73   DECLARE_WRITE8_MEMBER(page0_w);
74   DECLARE_WRITE8_MEMBER(page1_w);
75   DECLARE_WRITE8_MEMBER(page2_w);
76   DECLARE_WRITE8_MEMBER(page3_w);
7377};
7478
7579
r14845r14846
241245   sfkick_remap_banks(machine);
242246}
243247
244static WRITE8_HANDLER(page0_w)
248WRITE8_MEMBER(sfkick_state::page0_w)
245249{
246   sfkick_state *state = space->machine().driver_data<sfkick_state>();
247   if((state->m_bank_cfg&3)==2)
250   if((m_bank_cfg&3)==2)
248251   {
249252      if(offset<0x2000)
250253      {
251         sfkick_bank_set(space->machine(),0,data);
254         sfkick_bank_set(machine(),0,data);
252255      }
253256      else
254257      {
255         sfkick_bank_set(space->machine(),1,data);
258         sfkick_bank_set(machine(),1,data);
256259      }
257260   }
258261}
259262
260static WRITE8_HANDLER(page1_w)
263WRITE8_MEMBER(sfkick_state::page1_w)
261264{
262   sfkick_state *state = space->machine().driver_data<sfkick_state>();
263   if(((state->m_bank_cfg>>2)&3)==2)
265   if(((m_bank_cfg>>2)&3)==2)
264266   {
265267      if(offset<0x2000)
266268      {
267         sfkick_bank_set(space->machine(),2,data);
269         sfkick_bank_set(machine(),2,data);
268270      }
269271      else
270272      {
271         sfkick_bank_set(space->machine(),3,data);
273         sfkick_bank_set(machine(),3,data);
272274      }
273275   }
274276}
275277
276static WRITE8_HANDLER(page2_w)
278WRITE8_MEMBER(sfkick_state::page2_w)
277279{
278   sfkick_state *state = space->machine().driver_data<sfkick_state>();
279   if(((state->m_bank_cfg>>4)&3)==2)
280   if(((m_bank_cfg>>4)&3)==2)
280281   {
281282      if(offset<0x2000)
282283      {
283         sfkick_bank_set(space->machine(),4,data);
284         sfkick_bank_set(machine(),4,data);
284285      }
285286      else
286287      {
287         sfkick_bank_set(space->machine(),5,data);
288         sfkick_bank_set(machine(),5,data);
288289      }
289290   }
290291}
291292
292static WRITE8_HANDLER(page3_w)
293WRITE8_MEMBER(sfkick_state::page3_w)
293294{
294   sfkick_state *state = space->machine().driver_data<sfkick_state>();
295   if(((state->m_bank_cfg>>6)&3)==2)
295   if(((m_bank_cfg>>6)&3)==2)
296296   {
297297      if(offset<0x2000)
298298      {
299         sfkick_bank_set(space->machine(),6,data);
299         sfkick_bank_set(machine(),6,data);
300300      }
301301      else
302302      {
303         sfkick_bank_set(space->machine(),7,data);
303         sfkick_bank_set(machine(),7,data);
304304      }
305305   }
306306   else
307307   {
308      if(((state->m_bank_cfg>>6)&3)==3)
308      if(((m_bank_cfg>>6)&3)==3)
309309      {
310         state->m_main_mem[offset]=data;
310         m_main_mem[offset]=data;
311311      }
312312   }
313313}
r14845r14846
323323   AM_RANGE( 0xa000, 0xbfff) AM_ROMBANK("bank6")
324324   AM_RANGE( 0xc000, 0xdfff) AM_ROMBANK("bank7")
325325   AM_RANGE( 0xe000, 0xffff) AM_ROMBANK("bank8")
326   AM_RANGE( 0x0000, 0x3fff) AM_WRITE_LEGACY(page0_w )
327   AM_RANGE( 0x4000, 0x7fff) AM_WRITE_LEGACY(page1_w )
328   AM_RANGE( 0x8000, 0xbfff) AM_WRITE_LEGACY(page2_w )
329   AM_RANGE( 0xc000, 0xffff) AM_WRITE_LEGACY(page3_w )
326   AM_RANGE( 0x0000, 0x3fff) AM_WRITE(page0_w )
327   AM_RANGE( 0x4000, 0x7fff) AM_WRITE(page1_w )
328   AM_RANGE( 0x8000, 0xbfff) AM_WRITE(page2_w )
329   AM_RANGE( 0xc000, 0xffff) AM_WRITE(page3_w )
330330ADDRESS_MAP_END
331331
332332static ADDRESS_MAP_START( sfkick_io_map, AS_IO, 8, sfkick_state )
src/mame/drivers/dgpix.c
r14845r14846
6565   int m_old_vbuf;
6666   UINT32 m_flash_cmd;
6767   INT32 m_first_offset;
68   DECLARE_READ32_MEMBER(flash_r);
69   DECLARE_WRITE32_MEMBER(flash_w);
70   DECLARE_WRITE32_MEMBER(vram_w);
71   DECLARE_READ32_MEMBER(vram_r);
72   DECLARE_WRITE32_MEMBER(vbuffer_w);
73   DECLARE_WRITE32_MEMBER(coin_w);
74   DECLARE_READ32_MEMBER(vblank_r);
6875};
6976
7077
71static READ32_HANDLER( flash_r )
78READ32_MEMBER(dgpix_state::flash_r)
7279{
73   dgpix_state *state = space->machine().driver_data<dgpix_state>();
74   UINT32 *ROM = (UINT32 *)space->machine().region("user1")->base();
80   UINT32 *ROM = (UINT32 *)machine().region("user1")->base();
7581
76   if(offset >= (0x2000000 - state->m_flash_roms * 0x400000) / 4)
82   if(offset >= (0x2000000 - m_flash_roms * 0x400000) / 4)
7783   {
78      if(state->m_flash_cmd == 0x90900000)
84      if(m_flash_cmd == 0x90900000)
7985      {
8086         //read maker ID and chip ID
8187         return 0x00890014;
8288      }
83      else if(state->m_flash_cmd == 0x00700000)
89      else if(m_flash_cmd == 0x00700000)
8490      {
8591         //read status
8692         return 0x80<<16;
8793      }
88      else if(state->m_flash_cmd == 0x70700000)
94      else if(m_flash_cmd == 0x70700000)
8995      {
9096         //read status and ?
9197         return 0x82<<16;
9298      }
93      else if(state->m_flash_cmd == 0xe8e80000)
99      else if(m_flash_cmd == 0xe8e80000)
94100      {
95101         //read status ?
96102         return 0x80<<16;
r14845r14846
100106   return ROM[offset];
101107}
102108
103static WRITE32_HANDLER( flash_w )
109WRITE32_MEMBER(dgpix_state::flash_w)
104110{
105   dgpix_state *state = space->machine().driver_data<dgpix_state>();
106   if(state->m_flash_cmd == 0x20200000)
111   if(m_flash_cmd == 0x20200000)
107112   {
108113      // erase game settings
109114      if(data == 0xd0d00000)
110115      {
111116         // point to game settings
112         UINT8 *rom = (UINT8 *)space->machine().region("user1")->base() + offset*4;
117         UINT8 *rom = (UINT8 *)machine().region("user1")->base() + offset*4;
113118
114119         // erase one block
115120         memset(rom, 0xff, 0x10000);
116121
117         state->m_flash_cmd = 0;
122         m_flash_cmd = 0;
118123      }
119124   }
120   else if(state->m_flash_cmd == 0x0f0f0000)
125   else if(m_flash_cmd == 0x0f0f0000)
121126   {
122      if(data == 0xd0d00000 && offset == state->m_first_offset)
127      if(data == 0xd0d00000 && offset == m_first_offset)
123128      {
124129         // finished
125         state->m_flash_cmd = 0;
126         state->m_first_offset = -1;
130         m_flash_cmd = 0;
131         m_first_offset = -1;
127132      }
128133      else
129134      {
130         UINT16 *rom = (UINT16 *)space->machine().region("user1")->base();
135         UINT16 *rom = (UINT16 *)machine().region("user1")->base();
131136
132137         // write game settings
133138
r14845r14846
139144   }
140145   else
141146   {
142      state->m_flash_cmd = data;
147      m_flash_cmd = data;
143148
144      if(state->m_flash_cmd == 0x0f0f0000 && state->m_first_offset == -1)
149      if(m_flash_cmd == 0x0f0f0000 && m_first_offset == -1)
145150      {
146         state->m_first_offset = offset;
151         m_first_offset = offset;
147152      }
148153   }
149154}
150155
151static WRITE32_HANDLER( vram_w )
156WRITE32_MEMBER(dgpix_state::vram_w)
152157{
153   dgpix_state *state = space->machine().driver_data<dgpix_state>();
154   UINT32 *dest = &state->m_vram[offset+(0x40000/4)*state->m_vbuffer];
158   UINT32 *dest = &m_vram[offset+(0x40000/4)*m_vbuffer];
155159
156160   if (mem_mask == 0xffffffff)
157161   {
r14845r14846
166170      COMBINE_DATA(dest);
167171}
168172
169static READ32_HANDLER( vram_r )
173READ32_MEMBER(dgpix_state::vram_r)
170174{
171   dgpix_state *state = space->machine().driver_data<dgpix_state>();
172   return state->m_vram[offset+(0x40000/4)*state->m_vbuffer];
175   return m_vram[offset+(0x40000/4)*m_vbuffer];
173176}
174177
175static WRITE32_HANDLER( vbuffer_w )
178WRITE32_MEMBER(dgpix_state::vbuffer_w)
176179{
177   dgpix_state *state = space->machine().driver_data<dgpix_state>();
178   if(state->m_old_vbuf == 3 && (data & 3) == 2)
180   if(m_old_vbuf == 3 && (data & 3) == 2)
179181   {
180      state->m_vbuffer ^= 1;
182      m_vbuffer ^= 1;
181183   }
182184
183   state->m_old_vbuf = data & 3;
185   m_old_vbuf = data & 3;
184186}
185187
186static WRITE32_HANDLER( coin_w )
188WRITE32_MEMBER(dgpix_state::coin_w)
187189{
188   coin_counter_w(space->machine(), 0, data & 1);
189   coin_counter_w(space->machine(), 1, data & 2);
190   coin_counter_w(machine(), 0, data & 1);
191   coin_counter_w(machine(), 1, data & 2);
190192}
191193
192static READ32_HANDLER( vblank_r )
194READ32_MEMBER(dgpix_state::vblank_r)
193195{
194196   /* burn a bunch of cycles because this is polled frequently during busy loops */
195   device_eat_cycles(&space->device(), 100);
196   return input_port_read(space->machine(), "VBLANK");
197   device_eat_cycles(&space.device(), 100);
198   return input_port_read(machine(), "VBLANK");
197199}
198200
199201static ADDRESS_MAP_START( cpu_map, AS_PROGRAM, 32, dgpix_state )
200202   AM_RANGE(0x00000000, 0x007fffff) AM_RAM
201   AM_RANGE(0x40000000, 0x4003ffff) AM_READWRITE_LEGACY(vram_r, vram_w)
202   AM_RANGE(0xe0000000, 0xe1ffffff) AM_READWRITE_LEGACY(flash_r, flash_w)
203   AM_RANGE(0xe2000000, 0xe3ffffff) AM_READWRITE_LEGACY(flash_r, flash_w)
203   AM_RANGE(0x40000000, 0x4003ffff) AM_READWRITE(vram_r, vram_w)
204   AM_RANGE(0xe0000000, 0xe1ffffff) AM_READWRITE(flash_r, flash_w)
205   AM_RANGE(0xe2000000, 0xe3ffffff) AM_READWRITE(flash_r, flash_w)
204206   AM_RANGE(0xffc00000, 0xffffffff) AM_ROM AM_REGION("user1", 0x1c00000)
205207ADDRESS_MAP_END
206208
207209static ADDRESS_MAP_START( io_map, AS_IO, 32, dgpix_state )
208210   AM_RANGE(0x0200, 0x0203) AM_READNOP // used to sync with the protecion PIC? tested bits 0 and 1
209   AM_RANGE(0x0400, 0x0403) AM_READWRITE_LEGACY(vblank_r, vbuffer_w)
211   AM_RANGE(0x0400, 0x0403) AM_READWRITE(vblank_r, vbuffer_w)
210212   AM_RANGE(0x0a10, 0x0a13) AM_READ_PORT("INPUTS")
211   AM_RANGE(0x0200, 0x0203) AM_WRITE_LEGACY(coin_w)
213   AM_RANGE(0x0200, 0x0203) AM_WRITE(coin_w)
212214   AM_RANGE(0x0c00, 0x0c03) AM_WRITENOP // writes only: 1, 0, 1 at startup
213215   AM_RANGE(0x0c80, 0x0c83) AM_WRITENOP // sound commands / latches
214216   AM_RANGE(0x0c80, 0x0c83) AM_READNOP //read at startup -> cmp 0xFE
src/mame/drivers/sangho.c
r14845r14846
5454   UINT8 m_pzlestar_mem_bank;
5555   UINT8 m_pzlestar_rom_bank;
5656   required_device<v9938_device> m_v9938;
57   DECLARE_WRITE8_MEMBER(pzlestar_bank_w);
58   DECLARE_WRITE8_MEMBER(pzlestar_mem_bank_w);
59   DECLARE_READ8_MEMBER(pzlestar_mem_bank_r);
60   DECLARE_WRITE8_MEMBER(sexyboom_bank_w);
5761};
5862
5963
r14845r14846
152156
153157}
154158
155static WRITE8_HANDLER(pzlestar_bank_w)
159WRITE8_MEMBER(sangho_state::pzlestar_bank_w)
156160{
157   sangho_state *state = space->machine().driver_data<sangho_state>();
158161   logerror("rom bank %02x\n", data);
159   state->m_pzlestar_rom_bank = data;
160   pzlestar_map_banks(space->machine());
162   m_pzlestar_rom_bank = data;
163   pzlestar_map_banks(machine());
161164}
162165
163static WRITE8_HANDLER(pzlestar_mem_bank_w)
166WRITE8_MEMBER(sangho_state::pzlestar_mem_bank_w)
164167{
165   sangho_state *state = space->machine().driver_data<sangho_state>();
166168   logerror("mem bank %02x\n", data);
167   state->m_pzlestar_mem_bank = data;
168   pzlestar_map_banks(space->machine());
169   m_pzlestar_mem_bank = data;
170   pzlestar_map_banks(machine());
169171}
170172
171static READ8_HANDLER(pzlestar_mem_bank_r)
173READ8_MEMBER(sangho_state::pzlestar_mem_bank_r)
172174{
173   sangho_state *state = space->machine().driver_data<sangho_state>();
174   return state->m_pzlestar_mem_bank;
175   return m_pzlestar_mem_bank;
175176}
176177
177178static void sexyboom_map_bank(running_machine &machine, int bank)
r14845r14846
217218   }
218219}
219220
220static WRITE8_HANDLER(sexyboom_bank_w)
221WRITE8_MEMBER(sangho_state::sexyboom_bank_w)
221222{
222   sangho_state *state = space->machine().driver_data<sangho_state>();
223   state->m_sexyboom_bank[offset] = data;
224   sexyboom_map_bank(space->machine(), offset>>1);
223   m_sexyboom_bank[offset] = data;
224   sexyboom_map_bank(machine(), offset>>1);
225225}
226226
227227static ADDRESS_MAP_START( sangho_map, AS_PROGRAM, 8, sangho_state )
r14845r14846
236236static ADDRESS_MAP_START( pzlestar_io_map, AS_IO, 8, sangho_state )
237237   ADDRESS_MAP_GLOBAL_MASK(0xff)
238238   AM_RANGE( 0x7c, 0x7d) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
239   AM_RANGE( 0x91, 0x91) AM_WRITE_LEGACY(pzlestar_bank_w )
239   AM_RANGE( 0x91, 0x91) AM_WRITE(pzlestar_bank_w )
240240   AM_RANGE( 0x98, 0x9b) AM_DEVREADWRITE("v9938", v9938_device, read, write )
241241   AM_RANGE( 0xa0, 0xa0) AM_READ_PORT("P1")
242242   AM_RANGE( 0xa1, 0xa1) AM_READ_PORT("P2")
243   AM_RANGE( 0xa8, 0xa8) AM_READWRITE_LEGACY(pzlestar_mem_bank_r, pzlestar_mem_bank_w )
243   AM_RANGE( 0xa8, 0xa8) AM_READWRITE(pzlestar_mem_bank_r, pzlestar_mem_bank_w )
244244   AM_RANGE( 0xf7, 0xf7) AM_READ_PORT("DSW")
245245ADDRESS_MAP_END
246246
r14845r14846
253253   AM_RANGE( 0xa1, 0xa1) AM_READ_PORT("P2")
254254   AM_RANGE( 0xf0, 0xf3) AM_DEVREADWRITE("v9938", v9938_device, read, write )
255255   AM_RANGE( 0xf7, 0xf7) AM_READ_PORT("DSW")
256   AM_RANGE( 0xf8, 0xff) AM_WRITE_LEGACY(sexyboom_bank_w )
256   AM_RANGE( 0xf8, 0xff) AM_WRITE(sexyboom_bank_w )
257257ADDRESS_MAP_END
258258
259259
src/mame/drivers/bmcbowl.c
r14845r14846
120120   size_t m_stats_ram_size;
121121   int m_clr_offset;
122122   int m_bmc_input;
123   DECLARE_READ16_MEMBER(bmc_random_read);
124   DECLARE_READ16_MEMBER(bmc_protection_r);
125   DECLARE_WRITE16_MEMBER(bmc_RAMDAC_offset_w);
126   DECLARE_WRITE16_MEMBER(bmc_RAMDAC_color_w);
127   DECLARE_WRITE16_MEMBER(scroll_w);
123128};
124129
125130
r14845r14846
181186   return 0;
182187}
183188
184static READ16_HANDLER( bmc_random_read )
189READ16_MEMBER(bmcbowl_state::bmc_random_read)
185190{
186   return space->machine().rand();
191   return machine().rand();
187192}
188193
189static READ16_HANDLER( bmc_protection_r )
194READ16_MEMBER(bmcbowl_state::bmc_protection_r)
190195{
191   switch(cpu_get_previouspc(&space->device()))
196   switch(cpu_get_previouspc(&space.device()))
192197   {
193198      case 0xca68:
194         switch(cpu_get_reg(&space->device(), M68K_D2))
199         switch(cpu_get_reg(&space.device(), M68K_D2))
195200         {
196201            case 0:        return 0x37<<8;
197202            case 0x1013: return 0;
r14845r14846
199204         }
200205         break;
201206   }
202   logerror("Protection read @ %X\n",cpu_get_previouspc(&space->device()));
203   return space->machine().rand();
207   logerror("Protection read @ %X\n",cpu_get_previouspc(&space.device()));
208   return machine().rand();
204209}
205210
206static WRITE16_HANDLER( bmc_RAMDAC_offset_w )
211WRITE16_MEMBER(bmcbowl_state::bmc_RAMDAC_offset_w)
207212{
208   bmcbowl_state *state = space->machine().driver_data<bmcbowl_state>();
209   state->m_clr_offset=data*3;
213   m_clr_offset=data*3;
210214}
211215
212static WRITE16_HANDLER( bmc_RAMDAC_color_w )
216WRITE16_MEMBER(bmcbowl_state::bmc_RAMDAC_color_w)
213217{
214   bmcbowl_state *state = space->machine().driver_data<bmcbowl_state>();
215   state->m_bmc_colorram[state->m_clr_offset]=data;
216   palette_set_color_rgb(space->machine(),state->m_clr_offset/3,pal6bit(state->m_bmc_colorram[(state->m_clr_offset/3)*3]),pal6bit(state->m_bmc_colorram[(state->m_clr_offset/3)*3+1]),pal6bit(state->m_bmc_colorram[(state->m_clr_offset/3)*3+2]));
217   state->m_clr_offset=(state->m_clr_offset+1)%768;
218   m_bmc_colorram[m_clr_offset]=data;
219   palette_set_color_rgb(machine(),m_clr_offset/3,pal6bit(m_bmc_colorram[(m_clr_offset/3)*3]),pal6bit(m_bmc_colorram[(m_clr_offset/3)*3+1]),pal6bit(m_bmc_colorram[(m_clr_offset/3)*3+2]));
220   m_clr_offset=(m_clr_offset+1)%768;
218221}
219222
220static WRITE16_HANDLER( scroll_w )
223WRITE16_MEMBER(bmcbowl_state::scroll_w)
221224{
222225   //TODO - scroll
223226}
r14845r14846
326329static ADDRESS_MAP_START( bmcbowl_mem, AS_PROGRAM, 16, bmcbowl_state )
327330   AM_RANGE(0x000000, 0x01ffff) AM_ROM
328331
329   AM_RANGE(0x090000, 0x090001) AM_WRITE_LEGACY(bmc_RAMDAC_offset_w)
330   AM_RANGE(0x090002, 0x090003) AM_WRITE_LEGACY(bmc_RAMDAC_color_w)
332   AM_RANGE(0x090000, 0x090001) AM_WRITE(bmc_RAMDAC_offset_w)
333   AM_RANGE(0x090002, 0x090003) AM_WRITE(bmc_RAMDAC_color_w)
331334   AM_RANGE(0x090004, 0x090005) AM_WRITENOP//RAMDAC
332335
333336   AM_RANGE(0x090800, 0x090803) AM_WRITENOP
334337   AM_RANGE(0x091000, 0x091001) AM_WRITENOP
335   AM_RANGE(0x091800, 0x091801) AM_WRITE_LEGACY(scroll_w)
338   AM_RANGE(0x091800, 0x091801) AM_WRITE(scroll_w)
336339
337340   AM_RANGE(0x092000, 0x09201f) AM_DEVREADWRITE8("via6522_0", via6522_device, read, write, 0x00ff)
338341
r14845r14846
354357   AM_RANGE(0x30c040, 0x30c041) AM_WRITENOP
355358   AM_RANGE(0x30c080, 0x30c081) AM_WRITENOP
356359   AM_RANGE(0x30c0c0, 0x30c0c1) AM_WRITENOP
357   AM_RANGE(0x30c100, 0x30c101) AM_READ_LEGACY(bmc_protection_r)
360   AM_RANGE(0x30c100, 0x30c101) AM_READ(bmc_protection_r)
358361   AM_RANGE(0x30c140, 0x30c141) AM_WRITENOP
359   AM_RANGE(0x30ca00, 0x30ca01) AM_READ_LEGACY(bmc_random_read) AM_WRITENOP
362   AM_RANGE(0x30ca00, 0x30ca01) AM_READ(bmc_random_read) AM_WRITENOP
360363ADDRESS_MAP_END
361364
362365
src/mame/drivers/pachifev.c
r14845r14846
103103   UINT8 m_adpcm_idle;
104104   UINT8 m_trigger;
105105   UINT8 m_adpcm_data;
106   DECLARE_WRITE8_MEMBER(controls_w);
107   DECLARE_READ8_MEMBER(controls_r);
106108};
107109
108static WRITE8_HANDLER(controls_w)
110WRITE8_MEMBER(pachifev_state::controls_w)
109111{
110112    if(!data)
111113    {
112        pachifev_state *state = space->machine().driver_data<pachifev_state>();
113114
115
114116        /*end of input read*/
115        state->m_power=0;
116        state->m_max_power=state->m_input_power;
117        if(--state->m_cnt <= 0) /* why to do it N times? no idea.. someone should fix it */
117        m_power=0;
118        m_max_power=m_input_power;
119        if(--m_cnt <= 0) /* why to do it N times? no idea.. someone should fix it */
118120        {
119            state->m_cnt=0;
120            state->m_input_power=0;
121            m_cnt=0;
122            m_input_power=0;
121123        }
122124    }
123125}
124126
125static READ8_HANDLER(controls_r)
127READ8_MEMBER(pachifev_state::controls_r)
126128{
127    pachifev_state *state = space->machine().driver_data<pachifev_state>();
128    int output_bit=(state->m_power < state->m_max_power)?0:1;
129    ++state->m_power;
129    int output_bit=(m_power < m_max_power)?0:1;
130    ++m_power;
130131    return output_bit;
131132}
132133
r14845r14846
144145    AM_RANGE(0xff12, 0xff12) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write)
145146    AM_RANGE(0xff20, 0xff20) AM_DEVWRITE_LEGACY("sn76_1", sn76496_w)
146147    AM_RANGE(0xff30, 0xff30) AM_DEVWRITE_LEGACY("sn76_2", sn76496_w)
147    AM_RANGE(0xff40, 0xff40) AM_WRITE_LEGACY(controls_w)
148    AM_RANGE(0xff40, 0xff40) AM_WRITE(controls_w)
148149    AM_RANGE(0xff50, 0xff50) AM_WRITENOP /* unknown */
149150    AM_RANGE(0xfffa, 0xfffb) AM_NOP /* decrementer */
150151    AM_RANGE(0xfffc, 0xffff) AM_NOP /* nmi */
151152ADDRESS_MAP_END
152153
153154static ADDRESS_MAP_START( pachifev_cru, AS_IO, 8, pachifev_state )
154    AM_RANGE(0x000, 0x000) AM_READ_LEGACY(controls_r)
155    AM_RANGE(0x000, 0x000) AM_READ(controls_r)
155156ADDRESS_MAP_END
156157
157158
src/mame/drivers/magic10.c
r14845r14846
100100   int m_layer2_offset[2];
101101   UINT16 *m_vregs;
102102   UINT16 m_magic102_ret;
103   DECLARE_WRITE16_MEMBER(layer0_videoram_w);
104   DECLARE_WRITE16_MEMBER(layer1_videoram_w);
105   DECLARE_WRITE16_MEMBER(layer2_videoram_w);
106   DECLARE_WRITE16_MEMBER(paletteram_w);
107   DECLARE_READ16_MEMBER(magic102_r);
108   DECLARE_READ16_MEMBER(hotslot_copro_r);
109   DECLARE_WRITE16_MEMBER(hotslot_copro_w);
110   DECLARE_WRITE16_MEMBER(magic10_out_w);
103111};
104112
105113
r14845r14846
107115*      Video Hardware      *
108116***************************/
109117
110static WRITE16_HANDLER( layer0_videoram_w )
118WRITE16_MEMBER(magic10_state::layer0_videoram_w)
111119{
112   magic10_state *state = space->machine().driver_data<magic10_state>();
113   COMBINE_DATA(&state->m_layer0_videoram[offset]);
114   state->m_layer0_tilemap->mark_tile_dirty(offset >> 1);
120   COMBINE_DATA(&m_layer0_videoram[offset]);
121   m_layer0_tilemap->mark_tile_dirty(offset >> 1);
115122}
116123
117static WRITE16_HANDLER( layer1_videoram_w )
124WRITE16_MEMBER(magic10_state::layer1_videoram_w)
118125{
119   magic10_state *state = space->machine().driver_data<magic10_state>();
120   COMBINE_DATA(&state->m_layer1_videoram[offset]);
121   state->m_layer1_tilemap->mark_tile_dirty(offset >> 1);
126   COMBINE_DATA(&m_layer1_videoram[offset]);
127   m_layer1_tilemap->mark_tile_dirty(offset >> 1);
122128}
123129
124static WRITE16_HANDLER( layer2_videoram_w )
130WRITE16_MEMBER(magic10_state::layer2_videoram_w)
125131{
126   magic10_state *state = space->machine().driver_data<magic10_state>();
127   COMBINE_DATA(&state->m_layer2_videoram[offset]);
128   state->m_layer2_tilemap->mark_tile_dirty(offset >> 1);
132   COMBINE_DATA(&m_layer2_videoram[offset]);
133   m_layer2_tilemap->mark_tile_dirty(offset >> 1);
129134}
130135
131static WRITE16_HANDLER( paletteram_w )
136WRITE16_MEMBER(magic10_state::paletteram_w)
132137{
133   data = COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
134   palette_set_color_rgb( space->machine(), offset, pal4bit(data >> 4), pal4bit(data >> 0), pal4bit(data >> 8));
138   data = COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
139   palette_set_color_rgb( machine(), offset, pal4bit(data >> 4), pal4bit(data >> 0), pal4bit(data >> 8));
135140}
136141
137142
r14845r14846
209214*       R/W Handlers       *
210215***************************/
211216
212static READ16_HANDLER( magic102_r )
217READ16_MEMBER(magic10_state::magic102_r)
213218{
214   magic10_state *state = space->machine().driver_data<magic10_state>();
215   state->m_magic102_ret ^= 0x20;
216   return state->m_magic102_ret;
219   m_magic102_ret ^= 0x20;
220   return m_magic102_ret;
217221}
218222
219static READ16_HANDLER( hotslot_copro_r )
223READ16_MEMBER(magic10_state::hotslot_copro_r)
220224{
221225   return 0x80;
222226}
223227
224static WRITE16_HANDLER( hotslot_copro_w )
228WRITE16_MEMBER(magic10_state::hotslot_copro_w)
225229{
226230   logerror("Writing to copro: %d \n", data);
227231}
228232
229static WRITE16_HANDLER( magic10_out_w )
233WRITE16_MEMBER(magic10_state::magic10_out_w)
230234{
231235/*
232236  ----------------------------------------------
r14845r14846
275279   output_set_lamp_value(7, (data >> 6) & 1);      /* Lamp 7 - PLAY (BET/TAKE/CANCEL) */
276280   output_set_lamp_value(8, (data >> 8) & 1);      /* Lamp 8 - PAYOUT/SUPERGAME */
277281
278   coin_counter_w(space->machine(), 0, data & 0x400);
282   coin_counter_w(machine(), 0, data & 0x400);
279283}
280284
281285/***************************
r14845r14846
284288
285289static ADDRESS_MAP_START( magic10_map, AS_PROGRAM, 16, magic10_state )
286290   AM_RANGE(0x000000, 0x03ffff) AM_ROM
287   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(layer1_videoram_w) AM_BASE(m_layer1_videoram)
288   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(layer0_videoram_w) AM_BASE(m_layer0_videoram)
289   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE_LEGACY(layer2_videoram_w) AM_BASE(m_layer2_videoram)
291   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(layer1_videoram_w) AM_BASE(m_layer1_videoram)
292   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(layer0_videoram_w) AM_BASE(m_layer0_videoram)
293   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(layer2_videoram_w) AM_BASE(m_layer2_videoram)
290294   AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_SHARE("nvram")
291   AM_RANGE(0x300000, 0x3001ff) AM_RAM_WRITE_LEGACY(paletteram_w) AM_BASE_GENERIC(paletteram)
295   AM_RANGE(0x300000, 0x3001ff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
292296   AM_RANGE(0x400000, 0x400001) AM_READ_PORT("INPUTS")
293297   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("DSW")
294   AM_RANGE(0x400008, 0x400009) AM_WRITE_LEGACY(magic10_out_w)
298   AM_RANGE(0x400008, 0x400009) AM_WRITE(magic10_out_w)
295299   AM_RANGE(0x40000a, 0x40000b) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
296300   AM_RANGE(0x40000e, 0x40000f) AM_WRITENOP
297301   AM_RANGE(0x400080, 0x400087) AM_RAM AM_BASE(m_vregs)
r14845r14846
300304
301305static ADDRESS_MAP_START( magic10a_map, AS_PROGRAM, 16, magic10_state )
302306   AM_RANGE(0x000000, 0x03ffff) AM_ROM
303   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(layer1_videoram_w) AM_BASE(m_layer1_videoram)
304   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(layer0_videoram_w) AM_BASE(m_layer0_videoram)
305   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE_LEGACY(layer2_videoram_w) AM_BASE(m_layer2_videoram)
307   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(layer1_videoram_w) AM_BASE(m_layer1_videoram)
308   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(layer0_videoram_w) AM_BASE(m_layer0_videoram)
309   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(layer2_videoram_w) AM_BASE(m_layer2_videoram)
306310   AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_SHARE("nvram")
307   AM_RANGE(0x300000, 0x3001ff) AM_RAM_WRITE_LEGACY(paletteram_w) AM_BASE_GENERIC(paletteram)
311   AM_RANGE(0x300000, 0x3001ff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
308312   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("INPUTS")
309313   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW")
310   AM_RANGE(0x500008, 0x500009) AM_WRITE_LEGACY(magic10_out_w)
314   AM_RANGE(0x500008, 0x500009) AM_WRITE(magic10_out_w)
311315   AM_RANGE(0x50000a, 0x50000b) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
312316   AM_RANGE(0x50000e, 0x50000f) AM_WRITENOP
313317   AM_RANGE(0x500080, 0x500087) AM_RAM AM_BASE(m_vregs)   // video registers?
r14845r14846
316320
317321static ADDRESS_MAP_START( magic102_map, AS_PROGRAM, 16, magic10_state )
318322   AM_RANGE(0x000000, 0x03ffff) AM_ROM
319   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(layer1_videoram_w) AM_BASE(m_layer1_videoram)
320   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(layer0_videoram_w) AM_BASE(m_layer0_videoram)
321   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE_LEGACY(layer2_videoram_w) AM_BASE(m_layer2_videoram)
323   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(layer1_videoram_w) AM_BASE(m_layer1_videoram)
324   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(layer0_videoram_w) AM_BASE(m_layer0_videoram)
325   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(layer2_videoram_w) AM_BASE(m_layer2_videoram)
322326   AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_SHARE("nvram")
323   AM_RANGE(0x400000, 0x4001ff) AM_RAM_WRITE_LEGACY(paletteram_w) AM_BASE_GENERIC(paletteram)
324   AM_RANGE(0x500000, 0x500001) AM_READ_LEGACY(magic102_r)
327   AM_RANGE(0x400000, 0x4001ff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
328   AM_RANGE(0x500000, 0x500001) AM_READ(magic102_r)
325329   AM_RANGE(0x500004, 0x500005) AM_READNOP // gives credits
326330   AM_RANGE(0x500006, 0x500007) AM_READNOP // gives credits
327331   AM_RANGE(0x50001a, 0x50001b) AM_READ_PORT("IN0")
r14845r14846
335339
336340static ADDRESS_MAP_START( hotslot_map, AS_PROGRAM, 16, magic10_state )
337341   AM_RANGE(0x000000, 0x03ffff) AM_ROM
338   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(layer1_videoram_w) AM_BASE(m_layer1_videoram)
339   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(layer0_videoram_w) AM_BASE(m_layer0_videoram)
340   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE_LEGACY(layer2_videoram_w) AM_BASE(m_layer2_videoram)
342   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(layer1_videoram_w) AM_BASE(m_layer1_videoram)
343   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(layer0_videoram_w) AM_BASE(m_layer0_videoram)
344   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(layer2_videoram_w) AM_BASE(m_layer2_videoram)
341345   AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_SHARE("nvram")
342   AM_RANGE(0x400000, 0x4001ff) AM_RAM_WRITE_LEGACY(paletteram_w) AM_BASE_GENERIC(paletteram)
343   AM_RANGE(0x500004, 0x500005) AM_READWRITE_LEGACY(hotslot_copro_r, hotslot_copro_w)   // copro comm
346   AM_RANGE(0x400000, 0x4001ff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
347   AM_RANGE(0x500004, 0x500005) AM_READWRITE(hotslot_copro_r, hotslot_copro_w)   // copro comm
344348   AM_RANGE(0x500006, 0x500011) AM_RAM
345349   AM_RANGE(0x500012, 0x500013) AM_READ_PORT("IN0")
346350   AM_RANGE(0x500014, 0x500015) AM_READ_PORT("IN1")
r14845r14846
354358
355359static ADDRESS_MAP_START( sgsafari_map, AS_PROGRAM, 16, magic10_state )
356360   AM_RANGE(0x000000, 0x03ffff) AM_ROM
357   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE_LEGACY(layer1_videoram_w) AM_BASE(m_layer1_videoram)
358   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE_LEGACY(layer0_videoram_w) AM_BASE(m_layer0_videoram)
359   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE_LEGACY(layer2_videoram_w) AM_BASE(m_layer2_videoram)
361   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(layer1_videoram_w) AM_BASE(m_layer1_videoram)
362   AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(layer0_videoram_w) AM_BASE(m_layer0_videoram)
363   AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(layer2_videoram_w) AM_BASE(m_layer2_videoram)
360364   AM_RANGE(0x200000, 0x203fff) AM_RAM AM_SHARE("nvram")
361   AM_RANGE(0x300000, 0x3001ff) AM_RAM_WRITE_LEGACY(paletteram_w) AM_BASE_GENERIC(paletteram)
365   AM_RANGE(0x300000, 0x3001ff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
362366   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW1")
363   AM_RANGE(0x500008, 0x500009) AM_WRITE_LEGACY(magic10_out_w)
367   AM_RANGE(0x500008, 0x500009) AM_WRITE(magic10_out_w)
364368   AM_RANGE(0x50000a, 0x50000b) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
365369   AM_RANGE(0x50000e, 0x50000f) AM_READ_PORT("IN0")
366370   AM_RANGE(0x500080, 0x500087) AM_RAM AM_BASE(m_vregs)   // video registers?
src/mame/drivers/kongambl.c
r14845r14846
2525   kongambl_state(const machine_config &mconfig, device_type type, const char *tag)
2626      : driver_device(mconfig, type, tag) { }
2727
28   DECLARE_READ32_MEMBER(eeprom_r);
29   DECLARE_WRITE32_MEMBER(eeprom_w);
2830};
2931
3032
r14845r14846
5355   return 0;
5456}
5557
56static READ32_HANDLER( eeprom_r )
58READ32_MEMBER(kongambl_state::eeprom_r)
5759{
5860   if (ACCESSING_BITS_0_7)
5961   {
60      UINT32 rv = input_port_read(space->machine(), "SYSTEM") & ~0x1;
62      UINT32 rv = input_port_read(machine(), "SYSTEM") & ~0x1;
6163
6264      return rv;   // bit 0 freezes the game if 1
6365   }
r14845r14846
6567   return 0;
6668}
6769
68static WRITE32_HANDLER( eeprom_w )
70WRITE32_MEMBER(kongambl_state::eeprom_w)
6971{
7072   if (ACCESSING_BITS_8_15)
7173   {
72      input_port_write(space->machine(), "EEPROMOUT", (data>>8)&0xf, 0xff);
74      input_port_write(machine(), "EEPROMOUT", (data>>8)&0xf, 0xff);
7375   }
7476}
7577
r14845r14846
8789
8890   AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE_LEGACY("k056832", k056832_long_w)
8991
90   AM_RANGE(0x700000, 0x700003) AM_READ_LEGACY(eeprom_r )
91   AM_RANGE(0x780000, 0x780003) AM_WRITE_LEGACY(eeprom_w )
92   AM_RANGE(0x700000, 0x700003) AM_READ(eeprom_r )
93   AM_RANGE(0x780000, 0x780003) AM_WRITE(eeprom_w )
9294ADDRESS_MAP_END
9395
9496
src/mame/drivers/mogura.c
r14845r14846
2222   device_t *m_maincpu;
2323   device_t *m_dac1;
2424   device_t *m_dac2;
25   DECLARE_WRITE8_MEMBER(mogura_tileram_w);
26   DECLARE_WRITE8_MEMBER(mogura_dac_w);
27   DECLARE_WRITE8_MEMBER(mogura_gfxram_w);
2528};
2629
2730
r14845r14846
97100   return 0;
98101}
99102
100static WRITE8_HANDLER( mogura_tileram_w )
103WRITE8_MEMBER(mogura_state::mogura_tileram_w)
101104{
102   mogura_state *state = space->machine().driver_data<mogura_state>();
103   state->m_tileram[offset] = data;
104   state->m_tilemap->mark_tile_dirty(offset & 0x7ff);
105   m_tileram[offset] = data;
106   m_tilemap->mark_tile_dirty(offset & 0x7ff);
105107}
106108
107static WRITE8_HANDLER(mogura_dac_w)
109WRITE8_MEMBER(mogura_state::mogura_dac_w)
108110{
109   mogura_state *state = space->machine().driver_data<mogura_state>();
110   dac_data_w(state->m_dac1, data & 0xf0);   /* left */
111   dac_data_w(state->m_dac2, (data & 0x0f) << 4);   /* right */
111   dac_data_w(m_dac1, data & 0xf0);   /* left */
112   dac_data_w(m_dac2, (data & 0x0f) << 4);   /* right */
112113}
113114
114115
115static WRITE8_HANDLER ( mogura_gfxram_w )
116WRITE8_MEMBER(mogura_state::mogura_gfxram_w)
116117{
117   mogura_state *state = space->machine().driver_data<mogura_state>();
118   state->m_gfxram[offset] = data ;
118   m_gfxram[offset] = data ;
119119
120   gfx_element_mark_dirty(space->machine().gfx[0], offset / 16);
120   gfx_element_mark_dirty(machine().gfx[0], offset / 16);
121121}
122122
123123
124124static ADDRESS_MAP_START( mogura_map, AS_PROGRAM, 8, mogura_state )
125125   AM_RANGE(0x0000, 0x7fff) AM_ROM
126126   AM_RANGE(0xc000, 0xdfff) AM_RAM // main ram
127   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE_LEGACY(mogura_gfxram_w) AM_BASE(m_gfxram) // ram based characters
128   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE_LEGACY(mogura_tileram_w) AM_BASE(m_tileram) // tilemap
127   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(mogura_gfxram_w) AM_BASE(m_gfxram) // ram based characters
128   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(mogura_tileram_w) AM_BASE(m_tileram) // tilemap
129129ADDRESS_MAP_END
130130
131131static ADDRESS_MAP_START( mogura_io_map, AS_IO, 8, mogura_state )
r14845r14846
137137   AM_RANGE(0x0e, 0x0e) AM_READ_PORT("P3")
138138   AM_RANGE(0x0f, 0x0f) AM_READ_PORT("P4")
139139   AM_RANGE(0x10, 0x10) AM_READ_PORT("SERVICE")
140   AM_RANGE(0x14, 0x14) AM_WRITE_LEGACY(mogura_dac_w)   /* 4 bit DAC x 2. MSB = left, LSB = right */
140   AM_RANGE(0x14, 0x14) AM_WRITE(mogura_dac_w)   /* 4 bit DAC x 2. MSB = left, LSB = right */
141141ADDRESS_MAP_END
142142
143143static INPUT_PORTS_START( mogura )
src/mame/drivers/ddealer.c
r14845r14846
138138   /* misc */
139139   UINT8    m_input_pressed;
140140   UINT16   m_coin_input;
141   DECLARE_WRITE16_MEMBER(ddealer_flipscreen_w);
142   DECLARE_WRITE16_MEMBER(back_vram_w);
143   DECLARE_WRITE16_MEMBER(ddealer_vregs_w);
144   DECLARE_WRITE16_MEMBER(ddealer_mcu_shared_w);
145   DECLARE_READ16_MEMBER(ddealer_mcu_r);
141146};
142147
143148
144149
145static WRITE16_HANDLER( ddealer_flipscreen_w )
150WRITE16_MEMBER(ddealer_state::ddealer_flipscreen_w)
146151{
147   ddealer_state *state = space->machine().driver_data<ddealer_state>();
148   state->m_flipscreen = data & 0x01;
152   m_flipscreen = data & 0x01;
149153}
150154
151155static TILE_GET_INFO( get_back_tile_info )
r14845r14846
358362
359363
360364
361static WRITE16_HANDLER( back_vram_w )
365WRITE16_MEMBER(ddealer_state::back_vram_w)
362366{
363   ddealer_state *state = space->machine().driver_data<ddealer_state>();
364   COMBINE_DATA(&state->m_back_vram[offset]);
365   state->m_back_tilemap->mark_tile_dirty(offset);
367   COMBINE_DATA(&m_back_vram[offset]);
368   m_back_tilemap->mark_tile_dirty(offset);
366369}
367370
368371
369static WRITE16_HANDLER( ddealer_vregs_w )
372WRITE16_MEMBER(ddealer_state::ddealer_vregs_w)
370373{
371   ddealer_state *state = space->machine().driver_data<ddealer_state>();
372   COMBINE_DATA(&state->m_vregs[offset]);
374   COMBINE_DATA(&m_vregs[offset]);
373375}
374376
375377/******************************************************************************************************
r14845r14846
379381******************************************************************************************************/
380382
381383#define PROT_JSR(_offs_,_protvalue_,_pc_) \
382   if(state->m_mcu_shared_ram[(_offs_)/2] == _protvalue_) \
384   if(m_mcu_shared_ram[(_offs_)/2] == _protvalue_) \
383385   { \
384      state->m_mcu_shared_ram[(_offs_)/2] = 0xffff;  /*(MCU job done)*/ \
385      state->m_mcu_shared_ram[(_offs_+2-0x10)/2] = 0x4ef9;/*JMP*/\
386      state->m_mcu_shared_ram[(_offs_+4-0x10)/2] = 0x0000;/*HI-DWORD*/\
387      state->m_mcu_shared_ram[(_offs_+6-0x10)/2] = _pc_;  /*LO-DWORD*/\
386      m_mcu_shared_ram[(_offs_)/2] = 0xffff;  /*(MCU job done)*/ \
387      m_mcu_shared_ram[(_offs_+2-0x10)/2] = 0x4ef9;/*JMP*/\
388      m_mcu_shared_ram[(_offs_+4-0x10)/2] = 0x0000;/*HI-DWORD*/\
389      m_mcu_shared_ram[(_offs_+6-0x10)/2] = _pc_;  /*LO-DWORD*/\
388390   } \
389391
390392#define PROT_INPUT(_offs_,_protvalue_,_protinput_,_input_) \
391   if(state->m_mcu_shared_ram[_offs_] == _protvalue_) \
393   if(m_mcu_shared_ram[_offs_] == _protvalue_) \
392394   {\
393      state->m_mcu_shared_ram[_protinput_] = ((_input_ & 0xffff0000)>>16);\
394      state->m_mcu_shared_ram[_protinput_+1] = (_input_ & 0x0000ffff);\
395      m_mcu_shared_ram[_protinput_] = ((_input_ & 0xffff0000)>>16);\
396      m_mcu_shared_ram[_protinput_+1] = (_input_ & 0x0000ffff);\
395397   }
396398
397static WRITE16_HANDLER( ddealer_mcu_shared_w )
399WRITE16_MEMBER(ddealer_state::ddealer_mcu_shared_w)
398400{
399   ddealer_state *state = space->machine().driver_data<ddealer_state>();
400   COMBINE_DATA(&state->m_mcu_shared_ram[offset]);
401   COMBINE_DATA(&m_mcu_shared_ram[offset]);
401402
402403   switch(offset)
403404   {
r14845r14846
429430      case 0x4fe/2: PROT_JSR(0x4fe,0x8018,0x9818); break;
430431      /*Start-up vector,I think that only the first ram address can be written by the main CPU,or it is a whole sequence.*/
431432      case 0x000/2:
432         if (state->m_mcu_shared_ram[0x000 / 2] == 0x60fe)
433         if (m_mcu_shared_ram[0x000 / 2] == 0x60fe)
433434         {
434            state->m_mcu_shared_ram[0x000 / 2] = 0x0000;//coin counter
435            state->m_mcu_shared_ram[0x002 / 2] = 0x0000;//coin counter "decimal point"
436            state->m_mcu_shared_ram[0x004 / 2] = 0x4ef9;
435            m_mcu_shared_ram[0x000 / 2] = 0x0000;//coin counter
436            m_mcu_shared_ram[0x002 / 2] = 0x0000;//coin counter "decimal point"
437            m_mcu_shared_ram[0x004 / 2] = 0x4ef9;
437438         }
438439         break;
439440      case 0x002/2:
440441      case 0x004/2:
441         if (state->m_mcu_shared_ram[0x002 / 2] == 0x0000 && state->m_mcu_shared_ram[0x004 / 2] == 0x0214)
442            state->m_mcu_shared_ram[0x004 / 2] = 0x4ef9;
442         if (m_mcu_shared_ram[0x002 / 2] == 0x0000 && m_mcu_shared_ram[0x004 / 2] == 0x0214)
443            m_mcu_shared_ram[0x004 / 2] = 0x4ef9;
443444         break;
444445      case 0x008/2:
445         if (state->m_mcu_shared_ram[0x008 / 2] == 0x000f)
446            state->m_mcu_shared_ram[0x008 / 2] = 0x0604;
446         if (m_mcu_shared_ram[0x008 / 2] == 0x000f)
447            m_mcu_shared_ram[0x008 / 2] = 0x0604;
447448         break;
448449      case 0x00c/2:
449         if (state->m_mcu_shared_ram[0x00c / 2] == 0x000f)
450            state->m_mcu_shared_ram[0x00c / 2] = 0x0000;
450         if (m_mcu_shared_ram[0x00c / 2] == 0x000f)
451            m_mcu_shared_ram[0x00c / 2] = 0x0000;
451452         break;
452453   }
453454}
r14845r14846
460461   AM_RANGE(0x08000a, 0x08000b) AM_READ_PORT("UNK")
461462   AM_RANGE(0x084000, 0x084003) AM_DEVWRITE8_LEGACY("ymsnd", ym2203_w, 0x00ff) // ym ?
462463   AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE_LEGACY(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram) // palette ram
463   AM_RANGE(0x08c000, 0x08cfff) AM_RAM_WRITE_LEGACY(ddealer_vregs_w) AM_BASE(m_vregs) // palette ram
464   AM_RANGE(0x08c000, 0x08cfff) AM_RAM_WRITE(ddealer_vregs_w) AM_BASE(m_vregs) // palette ram
464465
465466   /* this might actually be 1 tilemap with some funky rowscroll / columnscroll enabled, I'm not sure */
466467   AM_RANGE(0x090000, 0x090fff) AM_RAM AM_BASE(m_left_fg_vram_top)
r14845r14846
468469   AM_RANGE(0x092000, 0x092fff) AM_RAM AM_BASE(m_left_fg_vram_bottom)
469470   AM_RANGE(0x093000, 0x093fff) AM_RAM AM_BASE(m_right_fg_vram_bottom)
470471   //AM_RANGE(0x094000, 0x094001) AM_NOP // always 0?
471   AM_RANGE(0x098000, 0x098001) AM_WRITE_LEGACY(ddealer_flipscreen_w)
472   AM_RANGE(0x09c000, 0x09cfff) AM_RAM_WRITE_LEGACY(back_vram_w) AM_BASE(m_back_vram) // bg tilemap
472   AM_RANGE(0x098000, 0x098001) AM_WRITE(ddealer_flipscreen_w)
473   AM_RANGE(0x09c000, 0x09cfff) AM_RAM_WRITE(back_vram_w) AM_BASE(m_back_vram) // bg tilemap
473474   AM_RANGE(0x0f0000, 0x0fdfff) AM_RAM AM_BASE(m_work_ram)
474   AM_RANGE(0x0fe000, 0x0fefff) AM_RAM_WRITE_LEGACY(ddealer_mcu_shared_w) AM_BASE(m_mcu_shared_ram)
475   AM_RANGE(0x0fe000, 0x0fefff) AM_RAM_WRITE(ddealer_mcu_shared_w) AM_BASE(m_mcu_shared_ram)
475476   AM_RANGE(0x0ff000, 0x0fffff) AM_RAM
476477ADDRESS_MAP_END
477478
r14845r14846
647648
648649
649650
650static READ16_HANDLER( ddealer_mcu_r )
651READ16_MEMBER(ddealer_state::ddealer_mcu_r)
651652{
652   ddealer_state *state = space->machine().driver_data<ddealer_state>();
653653   static const int resp[] =
654654   {
655655      0x93, 0xc7, 0x00, 0x8000,
r14845r14846
661661
662662   int res;
663663
664   res = resp[state->m_respcount++];
665   if (resp[state->m_respcount] < 0)
666       state->m_respcount = 0;
664   res = resp[m_respcount++];
665   if (resp[m_respcount] < 0)
666       m_respcount = 0;
667667
668668   return res;
669669}
670670
671671static DRIVER_INIT( ddealer )
672672{
673   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xfe01c, 0xfe01d, FUNC(ddealer_mcu_r) );
673   ddealer_state *state = machine.driver_data<ddealer_state>();
674   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xfe01c, 0xfe01d, read16_delegate(FUNC(ddealer_state::ddealer_mcu_r), state));
674675}
675676
676677ROM_START( ddealer )
src/mame/drivers/berzerk.c
r14845r14846
3737   int m_p1_direction;
3838   int m_p2_counter_74ls161;
3939   int m_p2_direction;
40   DECLARE_READ8_MEMBER(led_on_r);
41   DECLARE_WRITE8_MEMBER(led_on_w);
42   DECLARE_READ8_MEMBER(led_off_r);
43   DECLARE_WRITE8_MEMBER(led_off_w);
44   DECLARE_WRITE8_MEMBER(irq_enable_w);
45   DECLARE_WRITE8_MEMBER(nmi_enable_w);
46   DECLARE_WRITE8_MEMBER(nmi_disable_w);
47   DECLARE_READ8_MEMBER(nmi_enable_r);
48   DECLARE_READ8_MEMBER(nmi_disable_r);
49   DECLARE_WRITE8_MEMBER(magicram_w);
50   DECLARE_WRITE8_MEMBER(magicram_control_w);
51   DECLARE_READ8_MEMBER(intercept_v256_r);
52   DECLARE_WRITE8_MEMBER(berzerk_audio_w);
53   DECLARE_READ8_MEMBER(berzerk_audio_r);
54   DECLARE_READ8_MEMBER(moonwarp_p1_r);
55   DECLARE_READ8_MEMBER(moonwarp_p2_r);
4056};
4157
4258
r14845r14846
7086 *
7187 *************************************/
7288
73static READ8_HANDLER( led_on_r )
89READ8_MEMBER(berzerk_state::led_on_r)
7490{
75   set_led_status(space->machine(), 0, 1);
91   set_led_status(machine(), 0, 1);
7692
7793   return 0;
7894}
7995
8096
81static WRITE8_HANDLER( led_on_w )
97WRITE8_MEMBER(berzerk_state::led_on_w)
8298{
83   set_led_status(space->machine(), 0, 1);
99   set_led_status(machine(), 0, 1);
84100}
85101
86102
87static READ8_HANDLER( led_off_r )
103READ8_MEMBER(berzerk_state::led_off_r)
88104{
89   set_led_status(space->machine(), 0, 0);
105   set_led_status(machine(), 0, 0);
90106
91107   return 0;
92108}
93109
94110
95static WRITE8_HANDLER( led_off_w )
111WRITE8_MEMBER(berzerk_state::led_off_w)
96112{
97   set_led_status(space->machine(), 0, 0);
113   set_led_status(machine(), 0, 0);
98114}
99115
100116
r14845r14846
153169 *
154170 *************************************/
155171
156static WRITE8_HANDLER( irq_enable_w )
172WRITE8_MEMBER(berzerk_state::irq_enable_w)
157173{
158   berzerk_state *state = space->machine().driver_data<berzerk_state>();
159   state->m_irq_enabled = data & 0x01;
174   m_irq_enabled = data & 0x01;
160175}
161176
162177
r14845r14846
212227 *
213228 *************************************/
214229
215static WRITE8_HANDLER( nmi_enable_w )
230WRITE8_MEMBER(berzerk_state::nmi_enable_w)
216231{
217   berzerk_state *state = space->machine().driver_data<berzerk_state>();
218   state->m_nmi_enabled = 1;
232   m_nmi_enabled = 1;
219233}
220234
221235
222static WRITE8_HANDLER( nmi_disable_w )
236WRITE8_MEMBER(berzerk_state::nmi_disable_w)
223237{
224   berzerk_state *state = space->machine().driver_data<berzerk_state>();
225   state->m_nmi_enabled = 0;
238   m_nmi_enabled = 0;
226239}
227240
228241
229static READ8_HANDLER( nmi_enable_r )
242READ8_MEMBER(berzerk_state::nmi_enable_r)
230243{
231   berzerk_state *state = space->machine().driver_data<berzerk_state>();
232   state->m_nmi_enabled = 1;
244   m_nmi_enabled = 1;
233245
234246   return 0;
235247}
236248
237249
238static READ8_HANDLER( nmi_disable_r )
250READ8_MEMBER(berzerk_state::nmi_disable_r)
239251{
240   berzerk_state *state = space->machine().driver_data<berzerk_state>();
241   state->m_nmi_enabled = 0;
252   m_nmi_enabled = 0;
242253
243254   return 0;
244255}
r14845r14846
347358}
348359
349360
350static WRITE8_HANDLER( magicram_w )
361WRITE8_MEMBER(berzerk_state::magicram_w)
351362{
352   berzerk_state *state = space->machine().driver_data<berzerk_state>();
353363   UINT8 alu_output;
354364
355   UINT8 current_video_data = state->m_videoram[offset];
365   UINT8 current_video_data = m_videoram[offset];
356366
357367   /* shift data towards LSB.  MSB bits are filled by data from last_shift_data.
358368       The shifter consists of 5 74153 devices @ 7A, 8A, 9A, 10A and 11A,
359369       followed by 4 more 153's at 11B, 10B, 9B and 8B, which optionally
360370       reverse the order of the resulting bits */
361   UINT8 shift_flop_output = (((UINT16)state->m_last_shift_data << 8) | data) >> (state->m_magicram_control & 0x07);
371   UINT8 shift_flop_output = (((UINT16)m_last_shift_data << 8) | data) >> (m_magicram_control & 0x07);
362372
363   if (state->m_magicram_control & 0x08)
373   if (m_magicram_control & 0x08)
364374      shift_flop_output = BITSWAP8(shift_flop_output, 0, 1, 2, 3, 4, 5, 6, 7);
365375
366376   /* collision detection - AND gate output goes to the K pin of the flip-flop,
367377       while J is LO, therefore, it only resets, never sets */
368378   if (shift_flop_output & current_video_data)
369      state->m_intercept = 0;
379      m_intercept = 0;
370380
371381   /* perform ALU step */
372382   TTL74181_write(LS181_12C, TTL74181_INPUT_A0, 4, shift_flop_output & 0x0f);
373383   TTL74181_write(LS181_10C, TTL74181_INPUT_A0, 4, shift_flop_output >> 4);
374384   TTL74181_write(LS181_12C, TTL74181_INPUT_B0, 4, current_video_data & 0x0f);
375385   TTL74181_write(LS181_10C, TTL74181_INPUT_B0, 4, current_video_data >> 4);
376   TTL74181_write(LS181_12C, TTL74181_INPUT_S0, 4, state->m_magicram_control >> 4);
377   TTL74181_write(LS181_10C, TTL74181_INPUT_S0, 4, state->m_magicram_control >> 4);
386   TTL74181_write(LS181_12C, TTL74181_INPUT_S0, 4, m_magicram_control >> 4);
387   TTL74181_write(LS181_10C, TTL74181_INPUT_S0, 4, m_magicram_control >> 4);
378388
379389   alu_output = (TTL74181_read(LS181_10C, TTL74181_OUTPUT_F0, 4) << 4) |
380390             (TTL74181_read(LS181_12C, TTL74181_OUTPUT_F0, 4) << 0);
381391
382   state->m_videoram[offset] = alu_output ^ 0xff;
392   m_videoram[offset] = alu_output ^ 0xff;
383393
384394   /* save data for next time */
385   state->m_last_shift_data = data & 0x7f;
395   m_last_shift_data = data & 0x7f;
386396}
387397
388398
389static WRITE8_HANDLER( magicram_control_w )
399WRITE8_MEMBER(berzerk_state::magicram_control_w)
390400{
391   berzerk_state *state = space->machine().driver_data<berzerk_state>();
392401   /* save the control byte, clear the shift data latch,
393402       and set the intercept flip-flop */
394   state->m_magicram_control = data;
395   state->m_last_shift_data = 0;
396   state->m_intercept = 1;
403   m_magicram_control = data;
404   m_last_shift_data = 0;
405   m_intercept = 1;
397406}
398407
399408
400static READ8_HANDLER( intercept_v256_r )
409READ8_MEMBER(berzerk_state::intercept_v256_r)
401410{
402   berzerk_state *state = space->machine().driver_data<berzerk_state>();
403411   UINT8 counter;
404412   UINT8 v256;
405413
406   vpos_to_vsync_chain_counter(space->machine().primary_screen->vpos(), &counter, &v256);
414   vpos_to_vsync_chain_counter(machine().primary_screen->vpos(), &counter, &v256);
407415
408   return (!state->m_intercept << 7) | v256;
416   return (!m_intercept << 7) | v256;
409417}
410418
411419
r14845r14846
492500 *
493501 *************************************/
494502
495static WRITE8_HANDLER( berzerk_audio_w )
503WRITE8_MEMBER(berzerk_state::berzerk_audio_w)
496504{
497505   device_t *device;
498506   int clock_divisor;
r14845r14846
501509   {
502510   /* offset 4 writes to the S14001A */
503511   case 4:
504      device = space->machine().device("speech");
512      device = machine().device("speech");
505513      switch (data >> 6)
506514      {
507515      /* write data to the S14001 */
r14845r14846
519527         break;
520528
521529      case 1:
522         device = space->machine().device("speech");
530         device = machine().device("speech");
523531         /* volume */
524532         s14001a_set_volume(device, ((data & 0x38) >> 3) + 1);
525533
r14845r14846
537545
538546   /* offset 6 writes to the sfxcontrol latch */
539547   case 6:
540      exidy_sfxctrl_w(space->machine().device("exidy"), data >> 6, data);
548      exidy_sfxctrl_w(machine().device("exidy"), data >> 6, data);
541549      break;
542550
543551   /* everything else writes to the 6840 */
544552   default:
545      exidy_sh6840_w(space->machine().device("exidy"), offset, data);
553      exidy_sh6840_w(machine().device("exidy"), offset, data);
546554      break;
547555
548556   }
549557}
550558
551559
552static READ8_HANDLER( berzerk_audio_r )
560READ8_MEMBER(berzerk_state::berzerk_audio_r)
553561{
554   device_t *device = space->machine().device("speech");
562   device_t *device = machine().device("speech");
555563   switch (offset)
556564   {
557565   /* offset 4 reads from the S14001A */
r14845r14846
563571      return 0;
564572   /* everything else reads from the 6840 */
565573   default:
566      return exidy_sh6840_r(space->machine().device("exidy"), offset);
574      return exidy_sh6840_r(machine().device("exidy"), offset);
567575   }
568576}
569577
r14845r14846
572580static SOUND_RESET(berzerk)
573581{
574582   address_space *space = machine.device("maincpu")->memory().space(AS_IO);
583   berzerk_state *state = machine.driver_data<berzerk_state>();
575584   /* clears the flip-flop controlling the volume and freq on the speech chip */
576   berzerk_audio_w(space, 4, 0x40);
585   state->berzerk_audio_w(*space, 4, 0x40);
577586}
578587
579588
r14845r14846
589598   AM_RANGE(0x0800, 0x0bff) AM_MIRROR(0x0400) AM_RAM AM_SHARE("nvram")
590599   AM_RANGE(0x1000, 0x3fff) AM_ROM
591600   AM_RANGE(0x4000, 0x5fff) AM_RAM AM_BASE(m_videoram) AM_SIZE(m_videoram_size) AM_SHARE("share1")
592   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE_LEGACY(magicram_w) AM_SHARE("share1")
601   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE(magicram_w) AM_SHARE("share1")
593602   AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x3800) AM_RAM AM_BASE(m_colorram)
594603   AM_RANGE(0xc000, 0xffff) AM_NOP
595604ADDRESS_MAP_END
r14845r14846
598607static ADDRESS_MAP_START( frenzy_map, AS_PROGRAM, 8, berzerk_state )
599608   AM_RANGE(0x0000, 0x3fff) AM_ROM
600609   AM_RANGE(0x4000, 0x5fff) AM_RAM AM_BASE(m_videoram) AM_SIZE(m_videoram_size) AM_SHARE("share1")
601   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE_LEGACY(magicram_w) AM_SHARE("share1")
610   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE(magicram_w) AM_SHARE("share1")
602611   AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x3800) AM_RAM AM_BASE(m_colorram)
603612   AM_RANGE(0xc000, 0xcfff) AM_ROM
604613   AM_RANGE(0xf800, 0xfbff) AM_MIRROR(0x0400) AM_RAM AM_SHARE("nvram")
r14845r14846
615624static ADDRESS_MAP_START( berzerk_io_map, AS_IO, 8, berzerk_state )
616625   ADDRESS_MAP_GLOBAL_MASK(0xff)
617626   AM_RANGE(0x00, 0x3f) AM_NOP
618   AM_RANGE(0x40, 0x47) AM_READWRITE_LEGACY(berzerk_audio_r, berzerk_audio_w)
627   AM_RANGE(0x40, 0x47) AM_READWRITE(berzerk_audio_r, berzerk_audio_w)
619628   AM_RANGE(0x48, 0x48) AM_READ_PORT("P1") AM_WRITENOP
620629   AM_RANGE(0x49, 0x49) AM_READ_PORT("SYSTEM") AM_WRITENOP
621630   AM_RANGE(0x4a, 0x4a) AM_READ_PORT("P2") AM_WRITENOP
622   AM_RANGE(0x4b, 0x4b) AM_READNOP AM_WRITE_LEGACY(magicram_control_w)
623   AM_RANGE(0x4c, 0x4c) AM_READWRITE_LEGACY(nmi_enable_r, nmi_enable_w)
624   AM_RANGE(0x4d, 0x4d) AM_READWRITE_LEGACY(nmi_disable_r, nmi_disable_w)
625   AM_RANGE(0x4e, 0x4e) AM_READ_LEGACY(intercept_v256_r) AM_WRITENOP // note reading from here should clear pending frame interrupts, see zfb-1.tiff 74ls74 at 3D pin 13 /CLR
626   AM_RANGE(0x4f, 0x4f) AM_READNOP AM_WRITE_LEGACY(irq_enable_w)
631   AM_RANGE(0x4b, 0x4b) AM_READNOP AM_WRITE(magicram_control_w)
632   AM_RANGE(0x4c, 0x4c) AM_READWRITE(nmi_enable_r, nmi_enable_w)
633   AM_RANGE(0x4d, 0x4d) AM_READWRITE(nmi_disable_r, nmi_disable_w)
634   AM_RANGE(0x4e, 0x4e) AM_READ(intercept_v256_r) AM_WRITENOP // note reading from here should clear pending frame interrupts, see zfb-1.tiff 74ls74 at 3D pin 13 /CLR
635   AM_RANGE(0x4f, 0x4f) AM_READNOP AM_WRITE(irq_enable_w)
627636   AM_RANGE(0x50, 0x57) AM_NOP /* second sound board, initialized but not used */
628637   AM_RANGE(0x58, 0x5f) AM_NOP
629638   AM_RANGE(0x60, 0x60) AM_MIRROR(0x18) AM_READ_PORT("F3") AM_WRITENOP
r14845r14846
632641   AM_RANGE(0x63, 0x63) AM_MIRROR(0x18) AM_READ_PORT("F5") AM_WRITENOP
633642   AM_RANGE(0x64, 0x64) AM_MIRROR(0x18) AM_READ_PORT("F4") AM_WRITENOP
634643   AM_RANGE(0x65, 0x65) AM_MIRROR(0x18) AM_READ_PORT("SW2") AM_WRITENOP
635   AM_RANGE(0x66, 0x66) AM_MIRROR(0x18) AM_READWRITE_LEGACY(led_off_r, led_off_w)
636   AM_RANGE(0x67, 0x67) AM_MIRROR(0x18) AM_READWRITE_LEGACY(led_on_r, led_on_w)
644   AM_RANGE(0x66, 0x66) AM_MIRROR(0x18) AM_READWRITE(led_off_r, led_off_w)
645   AM_RANGE(0x67, 0x67) AM_MIRROR(0x18) AM_READWRITE(led_on_r, led_on_w)
637646   AM_RANGE(0x80, 0xff) AM_NOP
638647ADDRESS_MAP_END
639648
r14845r14846
885894   PORT_DIPSETTING(    0xff, "255" )
886895INPUT_PORTS_END
887896
888static READ8_HANDLER( moonwarp_p1_r )
897READ8_MEMBER(berzerk_state::moonwarp_p1_r)
889898{
890   berzerk_state *state = space->machine().driver_data<berzerk_state>();
891899   // This seems to be the same type of dial as the later 'moon war 2' set uses
892900   // see http://www.cityofberwyn.com/schematics/stern/MoonWar_opto.tiff for schematic
893901   // I.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature
894902   // one difference is it lacks the strobe input (does it?), which if not active causes
895903   // the dial input to go open bus. This is used in moon war 2 to switch between player 1
896904   // and player 2 dials, which share a single port. moonwarp uses separate ports for the dials.
897   signed char dialread = input_port_read(space->machine(),"P1_DIAL");
905   signed char dialread = input_port_read(machine(),"P1_DIAL");
898906   UINT8 ret;
899   UINT8 buttons = (input_port_read(space->machine(),"P1")&0xe0);
900   if (dialread < 0) state->m_p1_direction = 0;
901   else if (dialread > 0) state->m_p1_direction = 0x10;
902   state->m_p1_counter_74ls161 += abs(dialread);
903   state->m_p1_counter_74ls161 &= 0xf;
904   ret = state->m_p1_counter_74ls161 | state->m_p1_direction | buttons;
905   //fprintf(stderr, "dialread1: %02x, p1_counter_74ls161: %02x, spinner ret is %02x\n", dialread, state->m_p1_counter_74ls161, ret);
907   UINT8 buttons = (input_port_read(machine(),"P1")&0xe0);
908   if (dialread < 0) m_p1_direction = 0;
909   else if (dialread > 0) m_p1_direction = 0x10;
910   m_p1_counter_74ls161 += abs(dialread);
911   m_p1_counter_74ls161 &= 0xf;
912   ret = m_p1_counter_74ls161 | m_p1_direction | buttons;
913   //fprintf(stderr, "dialread1: %02x, p1_counter_74ls161: %02x, spinner ret is %02x\n", dialread, m_p1_counter_74ls161, ret);
906914   return ret;
907915}
908916
909static READ8_HANDLER( moonwarp_p2_r )
917READ8_MEMBER(berzerk_state::moonwarp_p2_r)
910918{
911   berzerk_state *state = space->machine().driver_data<berzerk_state>();
912919   // same as above, but for player 2 in cocktail mode
913   signed char dialread = input_port_read(space->machine(),"P2_DIAL");
920   signed char dialread = input_port_read(machine(),"P2_DIAL");
914921   UINT8 ret;
915   UINT8 buttons = (input_port_read(space->machine(),"P2")&0xe0);
916   if (dialread < 0) state->m_p2_direction = 0;
917   else if (dialread > 0) state->m_p2_direction = 0x10;
918   state->m_p2_counter_74ls161 += abs(dialread);
919   state->m_p2_counter_74ls161 &= 0xf;
920   ret = state->m_p2_counter_74ls161 | state->m_p2_direction | buttons;
921   //fprintf(stderr, "dialread2: %02x, p2_counter_74ls161: %02x, spinner ret is %02x\n", dialread, state->m_p2_counter_74ls161, ret);
922   UINT8 buttons = (input_port_read(machine(),"P2")&0xe0);
923   if (dialread < 0) m_p2_direction = 0;
924   else if (dialread > 0) m_p2_direction = 0x10;
925   m_p2_counter_74ls161 += abs(dialread);
926   m_p2_counter_74ls161 &= 0xf;
927   ret = m_p2_counter_74ls161 | m_p2_direction | buttons;
928   //fprintf(stderr, "dialread2: %02x, p2_counter_74ls161: %02x, spinner ret is %02x\n", dialread, m_p2_counter_74ls161, ret);
922929   return ret;
923930}
924931
r14845r14846
12281235static DRIVER_INIT( moonwarp )
12291236{
12301237   address_space *io = machine.device("maincpu")->memory().space(AS_IO);
1231   io->install_legacy_read_handler (0x48, 0x48, FUNC(moonwarp_p1_r));
1232   io->install_legacy_read_handler (0x4a, 0x4a, FUNC(moonwarp_p2_r));
1238   berzerk_state *state = machine.driver_data<berzerk_state>();
1239   io->install_read_handler (0x48, 0x48, read8_delegate(FUNC(berzerk_state::moonwarp_p1_r), state));
1240   io->install_read_handler (0x4a, 0x4a, read8_delegate(FUNC(berzerk_state::moonwarp_p2_r), state));
12331241}
12341242
12351243/*************************************
src/mame/drivers/vpoker.c
r14845r14846
120120
121121   UINT8 *m_videoram;
122122   UINT8 m_blit_ram[8];
123   DECLARE_READ8_MEMBER(blitter_r);
124   DECLARE_WRITE8_MEMBER(blitter_w);
123125};
124126
125127
r14845r14846
153155   return 0;
154156}
155157
156static READ8_HANDLER( blitter_r )
158READ8_MEMBER(vpoker_state::blitter_r)
157159{
158160   if(offset == 6)
159      return input_port_read(space->machine(), "IN0");
161      return input_port_read(machine(), "IN0");
160162
161163   return 0;
162164}
163165
164static WRITE8_HANDLER( blitter_w )
166WRITE8_MEMBER(vpoker_state::blitter_w)
165167{
166   vpoker_state *state = space->machine().driver_data<vpoker_state>();
167   UINT8 *videoram = state->m_videoram;
168   UINT8 *videoram = m_videoram;
168169
169   state->m_blit_ram[offset] = data;
170   m_blit_ram[offset] = data;
170171
171172   if(offset == 2)
172173   {
173174      int blit_offs;
174175
175      blit_offs = (state->m_blit_ram[1] & 0x01)<<8|(state->m_blit_ram[2] & 0xff);
176      blit_offs = (m_blit_ram[1] & 0x01)<<8|(m_blit_ram[2] & 0xff);
176177
177      videoram[blit_offs] = state->m_blit_ram[0];
178//      printf("%02x %02x %02x %02x %02x %02x %02x %02x\n",state->m_blit_ram[0],state->m_blit_ram[1],state->m_blit_ram[2],state->m_blit_ram[3],state->m_blit_ram[4],state->m_blit_ram[5],state->m_blit_ram[6],state->m_blit_ram[7]);
178      videoram[blit_offs] = m_blit_ram[0];
179//      printf("%02x %02x %02x %02x %02x %02x %02x %02x\n",m_blit_ram[0],m_blit_ram[1],m_blit_ram[2],m_blit_ram[3],m_blit_ram[4],m_blit_ram[5],m_blit_ram[6],m_blit_ram[7]);
179180   }
180181}
181182
r14845r14846
183184   ADDRESS_MAP_GLOBAL_MASK(0x3fff)
184185   AM_RANGE(0x0000, 0x01ff) AM_RAM      /* vpoker has 0x100, 5acespkr has 0x200 */
185186   AM_RANGE(0x0400, 0x0407) AM_DEVREADWRITE("6840ptm", ptm6840_device, read, write)
186   AM_RANGE(0x0800, 0x0807) AM_READ_LEGACY(blitter_r) AM_WRITE_LEGACY(blitter_w)
187   AM_RANGE(0x0800, 0x0807) AM_READ(blitter_r) AM_WRITE(blitter_w)
187188   AM_RANGE(0x2000, 0x3fff) AM_ROM
188189ADDRESS_MAP_END
189190
src/mame/drivers/igs009.c
r14845r14846
4747   int m_hopper;
4848   UINT8 m_out[3];
4949   UINT8 m_igs_magic[2];
50   DECLARE_WRITE8_MEMBER(gp98_reel1_ram_w);
51   DECLARE_WRITE8_MEMBER(gp98_reel2_ram_w);
52   DECLARE_WRITE8_MEMBER(gp98_reel3_ram_w);
53   DECLARE_WRITE8_MEMBER(gp98_reel4_ram_w);
54   DECLARE_WRITE8_MEMBER(bg_scroll_w);
55   DECLARE_WRITE8_MEMBER(fg_tile_w);
56   DECLARE_WRITE8_MEMBER(fg_color_w);
57   DECLARE_WRITE8_MEMBER(jingbell_nmi_and_coins_w);
58   DECLARE_WRITE8_MEMBER(jingbell_video_and_leds_w);
59   DECLARE_WRITE8_MEMBER(jingbell_leds_w);
60   DECLARE_WRITE8_MEMBER(jingbell_magic_w);
61   DECLARE_READ8_MEMBER(jingbell_magic_r);
62   void show_out();
5063};
5164
5265
r14845r14846
5669
5770
5871
59static WRITE8_HANDLER( gp98_reel1_ram_w )
72WRITE8_MEMBER(igs009_state::gp98_reel1_ram_w)
6073{
61   igs009_state *state = space->machine().driver_data<igs009_state>();
62   state->m_gp98_reel1_ram[offset] = data;
63   state->m_gp98_reel1_tilemap->mark_tile_dirty(offset);
74   m_gp98_reel1_ram[offset] = data;
75   m_gp98_reel1_tilemap->mark_tile_dirty(offset);
6476}
6577
6678static TILE_GET_INFO( get_jingbell_reel1_tile_info )
r14845r14846
89101}
90102
91103
92static WRITE8_HANDLER( gp98_reel2_ram_w )
104WRITE8_MEMBER(igs009_state::gp98_reel2_ram_w)
93105{
94   igs009_state *state = space->machine().driver_data<igs009_state>();
95   state->m_gp98_reel2_ram[offset] = data;
96   state->m_gp98_reel2_tilemap->mark_tile_dirty(offset);
106   m_gp98_reel2_ram[offset] = data;
107   m_gp98_reel2_tilemap->mark_tile_dirty(offset);
97108}
98109
99110static TILE_GET_INFO( get_jingbell_reel2_tile_info )
r14845r14846
122133
123134
124135
125static WRITE8_HANDLER( gp98_reel3_ram_w )
136WRITE8_MEMBER(igs009_state::gp98_reel3_ram_w)
126137{
127   igs009_state *state = space->machine().driver_data<igs009_state>();
128   state->m_gp98_reel3_ram[offset] = data;
129   state->m_gp98_reel3_tilemap->mark_tile_dirty(offset);
138   m_gp98_reel3_ram[offset] = data;
139   m_gp98_reel3_tilemap->mark_tile_dirty(offset);
130140}
131141
132142static TILE_GET_INFO( get_jingbell_reel3_tile_info )
r14845r14846
155165
156166
157167
158static WRITE8_HANDLER( gp98_reel4_ram_w )
168WRITE8_MEMBER(igs009_state::gp98_reel4_ram_w)
159169{
160   igs009_state *state = space->machine().driver_data<igs009_state>();
161   state->m_gp98_reel4_ram[offset] = data;
162   state->m_gp98_reel4_tilemap->mark_tile_dirty(offset);
170   m_gp98_reel4_ram[offset] = data;
171   m_gp98_reel4_tilemap->mark_tile_dirty(offset);
163172}
164173
165174static TILE_GET_INFO( get_jingbell_reel4_tile_info )
r14845r14846
192201
193202
194203
195static WRITE8_HANDLER( bg_scroll_w )
204WRITE8_MEMBER(igs009_state::bg_scroll_w)
196205{
197   igs009_state *state = space->machine().driver_data<igs009_state>();
198   state->m_bg_scroll[offset] = data;
206   m_bg_scroll[offset] = data;
199207//  bg_tilemap->set_scrolly(offset,data);
200208}
201209
r14845r14846
207215   SET_TILE_INFO(1, code, (4*(code >> 14)+3), 0);
208216}
209217
210static WRITE8_HANDLER( fg_tile_w )
218WRITE8_MEMBER(igs009_state::fg_tile_w)
211219{
212   igs009_state *state = space->machine().driver_data<igs009_state>();
213   state->m_fg_tile_ram[offset] = data;
214   state->m_fg_tilemap->mark_tile_dirty(offset);
220   m_fg_tile_ram[offset] = data;
221   m_fg_tilemap->mark_tile_dirty(offset);
215222}
216223
217static WRITE8_HANDLER( fg_color_w )
224WRITE8_MEMBER(igs009_state::fg_color_w)
218225{
219   igs009_state *state = space->machine().driver_data<igs009_state>();
220   state->m_fg_color_ram[offset] = data;
221   state->m_fg_tilemap->mark_tile_dirty(offset);
226   m_fg_color_ram[offset] = data;
227   m_fg_tilemap->mark_tile_dirty(offset);
222228}
223229
224230static VIDEO_START(jingbell)
r14845r14846
344350}
345351
346352
347static void show_out(igs009_state *state)
353void igs009_state::show_out()
348354{
349355#ifdef MAME_DEBUG
350   popmessage("%02x %02x %02x", state->m_out[0], state->m_out[1], state->m_out[2]);
356   popmessage("%02x %02x %02x", m_out[0], m_out[1], m_out[2]);
351357#endif
352358}
353359
354static WRITE8_HANDLER( jingbell_nmi_and_coins_w )
360WRITE8_MEMBER(igs009_state::jingbell_nmi_and_coins_w)
355361{
356   igs009_state *state = space->machine().driver_data<igs009_state>();
357   if ((state->m_nmi_enable ^ data) & (~0xdd))
362   if ((m_nmi_enable ^ data) & (~0xdd))
358363   {
359      logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space->device()),data);
364      logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space.device()),data);
360365//      popmessage("%02x",data);
361366   }
362367
363   coin_counter_w(space->machine(), 0,      data & 0x01);   // coin_a
364   coin_counter_w(space->machine(), 1,      data & 0x04);   // coin_c
365   coin_counter_w(space->machine(), 2,      data & 0x08);   // key in
366   coin_counter_w(space->machine(), 3,      data & 0x10);   // coin state->m_out mech
368   coin_counter_w(machine(), 0,      data & 0x01);   // coin_a
369   coin_counter_w(machine(), 1,      data & 0x04);   // coin_c
370   coin_counter_w(machine(), 2,      data & 0x08);   // key in
371   coin_counter_w(machine(), 3,      data & 0x10);   // coin m_out mech
367372
368   set_led_status(space->machine(), 6,      data & 0x40);   // led for coin state->m_out / state->m_hopper active
373   set_led_status(machine(), 6,      data & 0x40);   // led for coin m_out / m_hopper active
369374
370   state->m_nmi_enable = data;   //  data & 0x80     // nmi enable?
375   m_nmi_enable = data;   //  data & 0x80     // nmi enable?
371376
372   state->m_out[0] = data;
373   show_out(state);
377   m_out[0] = data;
378   show_out();
374379}
375380
376static WRITE8_HANDLER( jingbell_video_and_leds_w )
381WRITE8_MEMBER(igs009_state::jingbell_video_and_leds_w)
377382{
378   igs009_state *state = space->machine().driver_data<igs009_state>();
379   set_led_status(space->machine(), 4,     data & 0x01);   // start?
380   set_led_status(space->machine(), 5,     data & 0x04);   // l_bet?
383   set_led_status(machine(), 4,     data & 0x01);   // start?
384   set_led_status(machine(), 5,     data & 0x04);   // l_bet?
381385
382   state->m_video_enable   =     data & 0x40;
383   state->m_hopper         =   (~data)& 0x80;
386   m_video_enable   =     data & 0x40;
387   m_hopper         =   (~data)& 0x80;
384388
385   state->m_out[1] = data;
386   show_out(state);
389   m_out[1] = data;
390   show_out();
387391}
388392
389static WRITE8_HANDLER( jingbell_leds_w )
393WRITE8_MEMBER(igs009_state::jingbell_leds_w)
390394{
391   igs009_state *state = space->machine().driver_data<igs009_state>();
392   set_led_status(space->machine(), 0, data & 0x01);   // stop_1
393   set_led_status(space->machine(), 1, data & 0x02);   // stop_2
394   set_led_status(space->machine(), 2, data & 0x04);   // stop_3
395   set_led_status(space->machine(), 3, data & 0x08);   // stop
395   set_led_status(machine(), 0, data & 0x01);   // stop_1
396   set_led_status(machine(), 1, data & 0x02);   // stop_2
397   set_led_status(machine(), 2, data & 0x04);   // stop_3
398   set_led_status(machine(), 3, data & 0x08);   // stop
396399   // data & 0x10?
397400
398   state->m_out[2] = data;
399   show_out(state);
401   m_out[2] = data;
402   show_out();
400403}
401404
402405
403static WRITE8_HANDLER( jingbell_magic_w )
406WRITE8_MEMBER(igs009_state::jingbell_magic_w)
404407{
405   igs009_state *state = space->machine().driver_data<igs009_state>();
406   state->m_igs_magic[offset] = data;
408   m_igs_magic[offset] = data;
407409
408410   if (offset == 0)
409411      return;
410412
411   switch(state->m_igs_magic[0])
413   switch(m_igs_magic[0])
412414   {
413415      case 0x01:
414416         break;
415417
416418      default:
417//          popmessage("magic %x <- %04x",state->m_igs_magic[0],data);
418         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0], data);
419//          popmessage("magic %x <- %04x",m_igs_magic[0],data);
420         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0], data);
419421   }
420422}
421423
422static READ8_HANDLER( jingbell_magic_r )
424READ8_MEMBER(igs009_state::jingbell_magic_r)
423425{
424   igs009_state *state = space->machine().driver_data<igs009_state>();
425   switch(state->m_igs_magic[0])
426   switch(m_igs_magic[0])
426427   {
427428      case 0x00:
428         if ( !(state->m_igs_magic[1] & 0x01) )   return input_port_read(space->machine(), "DSW1");
429         if ( !(state->m_igs_magic[1] & 0x02) )   return input_port_read(space->machine(), "DSW2");
430         if ( !(state->m_igs_magic[1] & 0x04) )   return input_port_read(space->machine(), "DSW3");
431         if ( !(state->m_igs_magic[1] & 0x08) )   return input_port_read(space->machine(), "DSW4");
432         if ( !(state->m_igs_magic[1] & 0x10) )   return input_port_read(space->machine(), "DSW5");
433         logerror("%06x: warning, reading dsw with igs_magic[1] = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[1]);
429         if ( !(m_igs_magic[1] & 0x01) )   return input_port_read(machine(), "DSW1");
430         if ( !(m_igs_magic[1] & 0x02) )   return input_port_read(machine(), "DSW2");
431         if ( !(m_igs_magic[1] & 0x04) )   return input_port_read(machine(), "DSW3");
432         if ( !(m_igs_magic[1] & 0x08) )   return input_port_read(machine(), "DSW4");
433         if ( !(m_igs_magic[1] & 0x10) )   return input_port_read(machine(), "DSW5");
434         logerror("%06x: warning, reading dsw with igs_magic[1] = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[1]);
434435         break;
435436
436437      default:
437         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0]);
438         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0]);
438439   }
439440
440441   return 0;
r14845r14846
451452static ADDRESS_MAP_START( jingbell_portmap, AS_IO, 8, igs009_state )
452453   AM_RANGE( 0x0000, 0x003f ) AM_RAM // Z180 internal regs
453454
454   AM_RANGE( 0x1000, 0x11ff ) AM_RAM_WRITE_LEGACY(bg_scroll_w ) AM_BASE(m_bg_scroll )
455   AM_RANGE( 0x1000, 0x11ff ) AM_RAM_WRITE(bg_scroll_w ) AM_BASE(m_bg_scroll )
455456
456457   AM_RANGE( 0x2000, 0x23ff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split1_w ) AM_BASE_GENERIC( paletteram )
457458   AM_RANGE( 0x2400, 0x27ff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split2_w ) AM_BASE_GENERIC( paletteram2 )
458459
459   AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE_LEGACY(gp98_reel1_ram_w )  AM_BASE(m_gp98_reel1_ram )
460   AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE_LEGACY(gp98_reel2_ram_w )  AM_BASE(m_gp98_reel2_ram )
461   AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE_LEGACY(gp98_reel3_ram_w )  AM_BASE(m_gp98_reel3_ram )
462   AM_RANGE( 0x3c00, 0x3fff ) AM_RAM_WRITE_LEGACY(gp98_reel4_ram_w )  AM_BASE(m_gp98_reel4_ram )
460   AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(gp98_reel1_ram_w )  AM_BASE(m_gp98_reel1_ram )
461   AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE(gp98_reel2_ram_w )  AM_BASE(m_gp98_reel2_ram )
462   AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE(gp98_reel3_ram_w )  AM_BASE(m_gp98_reel3_ram )
463   AM_RANGE( 0x3c00, 0x3fff ) AM_RAM_WRITE(gp98_reel4_ram_w )  AM_BASE(m_gp98_reel4_ram )
463464
464465   AM_RANGE( 0x4000, 0x407f ) AM_RAM AM_BASE(m_bg_scroll2 )
465466
466   AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
467   AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
467468
468   AM_RANGE( 0x6480, 0x6480 ) AM_WRITE_LEGACY(jingbell_nmi_and_coins_w )
469   AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(jingbell_nmi_and_coins_w )
469470
470471   AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
471472   AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
472473   AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
473   AM_RANGE( 0x6491, 0x6491 ) AM_WRITE_LEGACY(jingbell_video_and_leds_w )
474   AM_RANGE( 0x6492, 0x6492 ) AM_WRITE_LEGACY(jingbell_leds_w )
474   AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(jingbell_video_and_leds_w )
475   AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(jingbell_leds_w )
475476   AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
476477
477478   AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
478479
479480   AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
480481
481   AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE_LEGACY(jingbell_magic_r, jingbell_magic_w )   // DSW1-5
482   AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(jingbell_magic_r, jingbell_magic_w )   // DSW1-5
482483
483   AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
484   AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
484485
485486   AM_RANGE( 0x8000, 0xffff ) AM_ROM AM_REGION("data", 0)
486487ADDRESS_MAP_END
src/mame/drivers/blitz68k.c
r14845r14846
5656   UINT16 *m_blit_vregs;
5757   UINT16 *m_blit_transpen;
5858   UINT16 *m_leds[3];
59   DECLARE_WRITE16_MEMBER(blit_copy_w);
60   DECLARE_READ8_MEMBER(blit_status_r);
61   DECLARE_WRITE8_MEMBER(blit_x_w);
62   DECLARE_WRITE8_MEMBER(blit_y_w);
63   DECLARE_WRITE8_MEMBER(blit_xy_w);
64   DECLARE_WRITE8_MEMBER(blit_w_w);
65   DECLARE_WRITE8_MEMBER(blit_h_w);
66   DECLARE_WRITE8_MEMBER(blit_wh_w);
67   DECLARE_WRITE8_MEMBER(blit_addr0_w);
68   DECLARE_WRITE8_MEMBER(blit_addr1_w);
69   DECLARE_WRITE8_MEMBER(blit_addr01_w);
70   DECLARE_WRITE8_MEMBER(blit_addr2_w);
71   DECLARE_WRITE8_MEMBER(blit_pens_w);
72   DECLARE_WRITE8_MEMBER(blit_pen0_w);
73   DECLARE_WRITE8_MEMBER(blit_pen1_w);
74   DECLARE_WRITE8_MEMBER(blit_pen2_w);
75   DECLARE_WRITE8_MEMBER(blit_pen3_w);
76   DECLARE_WRITE8_MEMBER(blit_flag0_w);
77   DECLARE_WRITE8_MEMBER(blit_flag1_w);
78   DECLARE_WRITE8_MEMBER(blit_flipx_w);
79   DECLARE_WRITE8_MEMBER(blit_flipy_w);
80   DECLARE_WRITE8_MEMBER(blit_solid_w);
81   DECLARE_WRITE8_MEMBER(blit_trans_w);
82   DECLARE_WRITE8_MEMBER(blit_flag6_w);
83   DECLARE_WRITE8_MEMBER(blit_flag7_w);
84   DECLARE_WRITE8_MEMBER(blit_flags_w);
85   DECLARE_WRITE8_MEMBER(blit_draw_w);
86   DECLARE_WRITE8_MEMBER(blit_hwyxa_draw_w);
87   DECLARE_READ16_MEMBER(blitter_status_r);
88   DECLARE_WRITE16_MEMBER(lamps_w);
89   DECLARE_READ16_MEMBER(test_r);
90   DECLARE_WRITE16_MEMBER(irq_callback_w);
91   DECLARE_WRITE16_MEMBER(sound_write_w);
92   DECLARE_READ8_MEMBER(bankrob_mcu1_r);
93   DECLARE_READ8_MEMBER(bankrob_mcu2_r);
94   DECLARE_READ8_MEMBER(bankrob_mcu_status_read_r);
95   DECLARE_READ8_MEMBER(bankrob_mcu_status_write_r);
96   DECLARE_WRITE8_MEMBER(bankrob_mcu1_w);
97   DECLARE_WRITE8_MEMBER(bankrob_mcu2_w);
98   DECLARE_READ8_MEMBER(bankroba_mcu1_r);
99   DECLARE_READ8_MEMBER(bankroba_mcu2_r);
100   DECLARE_READ8_MEMBER(bankroba_mcu1_status_write_r);
101   DECLARE_READ8_MEMBER(bankroba_mcu2_status_write_r);
102   DECLARE_WRITE8_MEMBER(bankroba_mcu1_w);
103   DECLARE_WRITE8_MEMBER(bankroba_mcu2_w);
104   DECLARE_WRITE16_MEMBER(cjffruit_leds1_w);
105   DECLARE_WRITE16_MEMBER(cjffruit_leds2_w);
106   DECLARE_WRITE16_MEMBER(cjffruit_leds3_w);
107   DECLARE_READ8_MEMBER(crtc_r);
108   DECLARE_WRITE8_MEMBER(crtc_w);
109   DECLARE_READ16_MEMBER(cjffruit_mcu_r);
110   DECLARE_WRITE16_MEMBER(cjffruit_mcu_w);
111   DECLARE_READ16_MEMBER(deucesw2_mcu_r);
112   DECLARE_WRITE16_MEMBER(deucesw2_mcu_w);
113   DECLARE_WRITE16_MEMBER(deucesw2_leds1_w);
114   DECLARE_WRITE16_MEMBER(deucesw2_leds2_w);
115   DECLARE_WRITE16_MEMBER(deucesw2_leds3_w);
116   DECLARE_READ8_MEMBER(dualgame_mcu1_r);
117   DECLARE_READ8_MEMBER(dualgame_mcu2_r);
118   DECLARE_READ8_MEMBER(dualgame_mcu_status_read_r);
119   DECLARE_READ8_MEMBER(dualgame_mcu_status_write_r);
120   DECLARE_WRITE8_MEMBER(dualgame_mcu1_w);
121   DECLARE_WRITE8_MEMBER(dualgame_mcu2_w);
122   DECLARE_READ16_MEMBER(hermit_mcu_r);
123   DECLARE_WRITE16_MEMBER(hermit_mcu_w);
124   DECLARE_WRITE16_MEMBER(hermit_leds1_w);
125   DECLARE_WRITE16_MEMBER(hermit_leds2_w);
126   DECLARE_READ16_MEMBER(hermit_track_r);
127   DECLARE_READ8_MEMBER(maxidbl_mcu1_r);
128   DECLARE_READ8_MEMBER(maxidbl_mcu2_r);
129   DECLARE_READ8_MEMBER(maxidbl_mcu_status_read_r);
130   DECLARE_READ8_MEMBER(maxidbl_mcu_status_write_r);
131   DECLARE_WRITE8_MEMBER(maxidbl_mcu1_w);
132   DECLARE_WRITE8_MEMBER(maxidbl_mcu2_w);
133   void show_leds123();
134   void show_leds12();
59135};
60136
61137/*************************************************************************************************************
r14845r14846
151227*************************************************************************************************************/
152228
153229
154static WRITE16_HANDLER( blit_copy_w )
230WRITE16_MEMBER(blitz68k_state::blit_copy_w)
155231{
156   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
157   UINT8 *blit_rom = space->machine().region("blitter")->base();
232   UINT8 *blit_rom = machine().region("blitter")->base();
158233   UINT32 blit_dst_xpos;
159234   UINT32 blit_dst_ypos;
160235   int x,y,x_size,y_size;
161236   UINT32 src;
162237
163   logerror("blit copy %04x %04x %04x %04x %04x\n", state->m_blit_romaddr[0], state->m_blit_attr1_ram[0], state->m_blit_dst_ram_loword[0], state->m_blit_attr2_ram[0], state->m_blit_dst_ram_hiword[0] );
164   logerror("blit vregs %04x %04x %04x %04x\n",state->m_blit_vregs[0/2],state->m_blit_vregs[2/2],state->m_blit_vregs[4/2],state->m_blit_vregs[6/2]);
165   logerror("blit transpen %04x %04x %04x %04x %04x %04x %04x %04x\n",state->m_blit_transpen[0/2],state->m_blit_transpen[2/2],state->m_blit_transpen[4/2],state->m_blit_transpen[6/2],
166                                                                  state->m_blit_transpen[8/2],state->m_blit_transpen[10/2],state->m_blit_transpen[12/2],state->m_blit_transpen[14/2]);
238   logerror("blit copy %04x %04x %04x %04x %04x\n", m_blit_romaddr[0], m_blit_attr1_ram[0], m_blit_dst_ram_loword[0], m_blit_attr2_ram[0], m_blit_dst_ram_hiword[0] );
239   logerror("blit vregs %04x %04x %04x %04x\n",m_blit_vregs[0/2],m_blit_vregs[2/2],m_blit_vregs[4/2],m_blit_vregs[6/2]);
240   logerror("blit transpen %04x %04x %04x %04x %04x %04x %04x %04x\n",m_blit_transpen[0/2],m_blit_transpen[2/2],m_blit_transpen[4/2],m_blit_transpen[6/2],
241                                                                  m_blit_transpen[8/2],m_blit_transpen[10/2],m_blit_transpen[12/2],m_blit_transpen[14/2]);
167242
168   blit_dst_xpos = (state->m_blit_dst_ram_loword[0] & 0x00ff)*2;
169   blit_dst_ypos = ((state->m_blit_dst_ram_loword[0] & 0xff00)>>8);
243   blit_dst_xpos = (m_blit_dst_ram_loword[0] & 0x00ff)*2;
244   blit_dst_ypos = ((m_blit_dst_ram_loword[0] & 0xff00)>>8);
170245
171   y_size = (0x100-((state->m_blit_attr2_ram[0] & 0xff00)>>8));
172   x_size = (state->m_blit_attr2_ram[0] & 0x00ff)*2;
246   y_size = (0x100-((m_blit_attr2_ram[0] & 0xff00)>>8));
247   x_size = (m_blit_attr2_ram[0] & 0x00ff)*2;
173248
174249   /* rounding around for 0 size */
175250   if(x_size == 0) { x_size = 0x200; }
r14845r14846
177252   /* TODO: used by steaser "Game Over" msg on attract mode*/
178253//  if(y_size == 1) { y_size = 32; }
179254
180   src = state->m_blit_romaddr[0] | (state->m_blit_attr1_ram[0] & 0x1f00)<<8;
181//  src|= (state->m_blit_transpen[0xc/2] & 0x0100)<<12;
255   src = m_blit_romaddr[0] | (m_blit_attr1_ram[0] & 0x1f00)<<8;
256//  src|= (m_blit_transpen[0xc/2] & 0x0100)<<12;
182257
183258   for(y=0;y<y_size;y++)
184259   {
r14845r14846
186261      {
187262         int drawx = (blit_dst_xpos+x)&0x1ff;
188263         int drawy = (blit_dst_ypos+y)&0x0ff;
189         if(state->m_blit_transpen[0x8/2] & 0x100)
190            state->m_blit_buffer[drawy*512+drawx] = ((state->m_blit_vregs[0] & 0xf00)>>8);
264         if(m_blit_transpen[0x8/2] & 0x100)
265            m_blit_buffer[drawy*512+drawx] = ((m_blit_vregs[0] & 0xf00)>>8);
191266         else
192267         {
193268            UINT8 pen_helper;
194269
195270            pen_helper = blit_rom[src] & 0xff;
196            if(state->m_blit_transpen[0xa/2] & 0x100) //pen is opaque register
271            if(m_blit_transpen[0xa/2] & 0x100) //pen is opaque register
197272            {
198273               if(pen_helper)
199                  state->m_blit_buffer[drawy*512+drawx] = ((pen_helper & 0xff) <= 3) ? ((state->m_blit_vregs[pen_helper] & 0xf00)>>8) : blit_rom[src];
274                  m_blit_buffer[drawy*512+drawx] = ((pen_helper & 0xff) <= 3) ? ((m_blit_vregs[pen_helper] & 0xf00)>>8) : blit_rom[src];
200275            }
201276            else
202               state->m_blit_buffer[drawy*512+drawx] = ((pen_helper & 0xff) <= 3) ? ((state->m_blit_vregs[pen_helper] & 0xf00)>>8) : blit_rom[src];
277               m_blit_buffer[drawy*512+drawx] = ((pen_helper & 0xff) <= 3) ? ((m_blit_vregs[pen_helper] & 0xf00)>>8) : blit_rom[src];
203278         }
204279
205280         src++;
r14845r14846
214289
215290*************************************************************************************************************/
216291
217static READ8_HANDLER( blit_status_r )
292READ8_MEMBER(blitz68k_state::blit_status_r)
218293{
219294   return 0;   // bit 0 = blitter busy
220295}
221296
222static WRITE8_HANDLER( blit_x_w )
297WRITE8_MEMBER(blitz68k_state::blit_x_w)
223298{
224299   blit.x = data;
225300}
226static WRITE8_HANDLER( blit_y_w )
301WRITE8_MEMBER(blitz68k_state::blit_y_w)
227302{
228303   blit.y = data;
229304}
230static WRITE8_HANDLER( blit_xy_w )
305WRITE8_MEMBER(blitz68k_state::blit_xy_w)
231306{
232307   if (offset)
233308      blit_x_w(space, offset, data);
r14845r14846
236311}
237312
238313
239static WRITE8_HANDLER( blit_w_w )
314WRITE8_MEMBER(blitz68k_state::blit_w_w)
240315{
241316   blit.w = data;
242317}
243static WRITE8_HANDLER( blit_h_w )
318WRITE8_MEMBER(blitz68k_state::blit_h_w)
244319{
245320   blit.h = data;
246321}
247static WRITE8_HANDLER( blit_wh_w )
322WRITE8_MEMBER(blitz68k_state::blit_wh_w)
248323{
249324   if (offset)
250325      blit_w_w(space, offset, data-1);
r14845r14846
253328}
254329
255330
256static WRITE8_HANDLER( blit_addr0_w )
331WRITE8_MEMBER(blitz68k_state::blit_addr0_w)
257332{
258333   blit.addr[0] = data;
259334}
260static WRITE8_HANDLER( blit_addr1_w )
335WRITE8_MEMBER(blitz68k_state::blit_addr1_w)
261336{
262337   blit.addr[1] = data;
263338}
264static WRITE8_HANDLER( blit_addr01_w )
339WRITE8_MEMBER(blitz68k_state::blit_addr01_w)
265340{
266341   if (offset)
267342      blit_addr0_w(space, offset, data);
268343   else
269344      blit_addr1_w(space, offset, data);
270345}
271static WRITE8_HANDLER( blit_addr2_w )
346WRITE8_MEMBER(blitz68k_state::blit_addr2_w)
272347{
273348   blit.addr[2] = data;
274349}
275350
276351
277static WRITE8_HANDLER( blit_pens_w )
352WRITE8_MEMBER(blitz68k_state::blit_pens_w)
278353{
279354   blit.pen[offset] = data;
280355}
281static WRITE8_HANDLER( blit_pen0_w )
356WRITE8_MEMBER(blitz68k_state::blit_pen0_w)
282357{
283358   blit.pen[0] = data;
284359}
285static WRITE8_HANDLER( blit_pen1_w )
360WRITE8_MEMBER(blitz68k_state::blit_pen1_w)
286361{
287362   blit.pen[1] = data;
288363}
289static WRITE8_HANDLER( blit_pen2_w )
364WRITE8_MEMBER(blitz68k_state::blit_pen2_w)
290365{
291366   blit.pen[2] = data;
292367}
293static WRITE8_HANDLER( blit_pen3_w )
368WRITE8_MEMBER(blitz68k_state::blit_pen3_w)
294369{
295370   blit.pen[3] = data;
296371}
297372
298373
299static WRITE8_HANDLER( blit_flag0_w )
374WRITE8_MEMBER(blitz68k_state::blit_flag0_w)
300375{
301376   blit.flag[0] = data;
302377}
303static WRITE8_HANDLER( blit_flag1_w )
378WRITE8_MEMBER(blitz68k_state::blit_flag1_w)
304379{
305380   blit.flag[1] = data;
306381}
307static WRITE8_HANDLER( blit_flipx_w )
382WRITE8_MEMBER(blitz68k_state::blit_flipx_w)
308383{
309384   blit.flipx = data;
310385}
311static WRITE8_HANDLER( blit_flipy_w )
386WRITE8_MEMBER(blitz68k_state::blit_flipy_w)
312387{
313388   blit.flipy = data;
314389}
315static WRITE8_HANDLER( blit_solid_w )
390WRITE8_MEMBER(blitz68k_state::blit_solid_w)
316391{
317392   blit.solid = data;
318393}
319static WRITE8_HANDLER( blit_trans_w )
394WRITE8_MEMBER(blitz68k_state::blit_trans_w)
320395{
321396   blit.trans = data;
322397}
323static WRITE8_HANDLER( blit_flag6_w )
398WRITE8_MEMBER(blitz68k_state::blit_flag6_w)
324399{
325400   blit.flag[6] = data;
326401}
327static WRITE8_HANDLER( blit_flag7_w )
402WRITE8_MEMBER(blitz68k_state::blit_flag7_w)
328403{
329404   blit.flag[7] = data;
330405}
331406
332static WRITE8_HANDLER( blit_flags_w )
407WRITE8_MEMBER(blitz68k_state::blit_flags_w)
333408{
334409   switch(offset)
335410   {
r14845r14846
340415   }
341416}
342417
343static WRITE8_HANDLER( blit_draw_w )
418WRITE8_MEMBER(blitz68k_state::blit_draw_w)
344419{
345   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
346   UINT8 *blit_rom  = space->machine().region("blitter")->base();
347   int blit_romsize = space->machine().region("blitter")->bytes();
420   UINT8 *blit_rom  = machine().region("blitter")->base();
421   int blit_romsize = machine().region("blitter")->bytes();
348422   UINT32 blit_dst_xpos;
349423   UINT32 blit_dst_ypos;
350424   int x, y, x_size, y_size;
351425   UINT32 src;
352426
353   logerror("%s: blit x=%02x y=%02x w=%02x h=%02x addr=%02x%02x%02x pens=%02x %02x %02x %02x flag=%02x %02x %02x %02x - %02x %02x %02x %02x\n", space->machine().describe_context(),
427   logerror("%s: blit x=%02x y=%02x w=%02x h=%02x addr=%02x%02x%02x pens=%02x %02x %02x %02x flag=%02x %02x %02x %02x - %02x %02x %02x %02x\n", machine().describe_context(),
354428            blit.x,  blit.y, blit.w, blit.h,
355429            blit.addr[2], blit.addr[1], blit.addr[0],
356430            blit.pen[0], blit.pen[1], blit.pen[2], blit.pen[3],
r14845r14846
397471            if (pen <= 3)
398472               pen = blit.pen[pen] & 0xf;
399473
400            state->m_blit_buffer[drawy * 512 + drawx] = pen;
474            m_blit_buffer[drawy * 512 + drawx] = pen;
401475         }
402476      }
403477   }
r14845r14846
409483   blit.y = blit_dst_ypos;
410484}
411485
412static WRITE8_HANDLER( blit_hwyxa_draw_w )
486WRITE8_MEMBER(blitz68k_state::blit_hwyxa_draw_w)
413487{
414488   switch (offset)
415489   {
r14845r14846
428502    Outputs
429503*************************************************************************************************************/
430504
431static void show_leds123(blitz68k_state *state)
505void blitz68k_state::show_leds123()
432506{
433507#ifdef MAME_DEBUG
434   popmessage("led %02x %02x %02x", state->m_leds[0][0]>>8, state->m_leds[1][0]>>8, state->m_leds[2][0]>>8);
508   popmessage("led %02x %02x %02x", m_leds[0][0]>>8, m_leds[1][0]>>8, m_leds[2][0]>>8);
435509#endif
436510}
437static void show_leds12(blitz68k_state *state)
511void blitz68k_state::show_leds12()
438512{
439513#ifdef MAME_DEBUG
440   popmessage("led %02x %02x", state->m_leds[0][0]>>8, state->m_leds[1][0]>>8);
514   popmessage("led %02x %02x", m_leds[0][0]>>8, m_leds[1][0]>>8);
441515#endif
442516}
443517
r14845r14846
448522*************************************************************************************************************/
449523
450524/*bit 0 is the blitter busy flag*/
451static READ16_HANDLER( blitter_status_r )
525READ16_MEMBER(blitz68k_state::blitter_status_r)
452526{
453527   return 0;
454528}
455529
456530/*TODO*/
457static WRITE16_HANDLER( lamps_w )
531WRITE16_MEMBER(blitz68k_state::lamps_w)
458532{
459533//  popmessage("%02x",data);
460534}
461535
462static READ16_HANDLER( test_r )
536READ16_MEMBER(blitz68k_state::test_r)
463537{
464   return 0xffff;//space->machine().rand();
538   return 0xffff;//machine().rand();
465539}
466540
467541#if 0
468static WRITE16_HANDLER( irq_callback_w )
542WRITE16_MEMBER(blitz68k_state::irq_callback_w)
469543{
470544//  popmessage("%02x",data);
471   cputag_set_input_line(space->machine(), "maincpu", 3, HOLD_LINE );
545   cputag_set_input_line(machine(), "maincpu", 3, HOLD_LINE );
472546}
473547
474static WRITE16_HANDLER( sound_write_w )
548WRITE16_MEMBER(blitz68k_state::sound_write_w)
475549{
476550   popmessage("%02x",data);
477551   dac_data_w(0, data & 0x0f);      /* Sound DAC? */
r14845r14846
483557   AM_RANGE(0x100000, 0x1fffff) AM_ROM AM_REGION("blitter", 0)
484558   AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("nvram")
485559
486//  AM_RANGE(0x800000, 0x800001) AM_READ_LEGACY(test_r)
487//  AM_RANGE(0x880000, 0x880001) AM_READ_LEGACY(test_r)
560//  AM_RANGE(0x800000, 0x800001) AM_READ(test_r)
561//  AM_RANGE(0x880000, 0x880001) AM_READ(test_r)
488562
489563   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("ramdac",ramdac_device, index_w, 0xff00 )
490564   AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("ramdac",ramdac_device, pal_w, 0xff00 )
r14845r14846
495569   AM_RANGE(0x9a0000, 0x9a0001) AM_RAM AM_BASE(m_blit_attr1_ram)
496570   AM_RANGE(0x9a8000, 0x9a8001) AM_RAM AM_BASE(m_blit_dst_ram_loword)
497571   AM_RANGE(0x9b0000, 0x9b0001) AM_RAM AM_BASE(m_blit_attr2_ram)
498   AM_RANGE(0x9b8000, 0x9b8001) AM_RAM_WRITE_LEGACY(blit_copy_w ) AM_BASE(m_blit_dst_ram_hiword)
499   AM_RANGE(0x9e0000, 0x9e0001) AM_READ_LEGACY(blitter_status_r)
572   AM_RANGE(0x9b8000, 0x9b8001) AM_RAM_WRITE(blit_copy_w ) AM_BASE(m_blit_dst_ram_hiword)
573   AM_RANGE(0x9e0000, 0x9e0001) AM_READ(blitter_status_r)
500574
501   AM_RANGE(0xc00000, 0xc00001) AM_WRITE_LEGACY(lamps_w)
575   AM_RANGE(0xc00000, 0xc00001) AM_WRITE(lamps_w)
502576   AM_RANGE(0xc00180, 0xc00181) AM_READ_PORT("IN2")
503//  AM_RANGE(0xc00200, 0xc00201) AM_WRITE_LEGACY(sound_write_w)
577//  AM_RANGE(0xc00200, 0xc00201) AM_WRITE(sound_write_w)
504578   AM_RANGE(0xc00380, 0xc00381) AM_READ_PORT("IN3")
505//  AM_RANGE(0xc00300, 0xc00301) AM_WRITE_LEGACY(irq_callback_w)
579//  AM_RANGE(0xc00300, 0xc00301) AM_WRITE(irq_callback_w)
506580ADDRESS_MAP_END
507581
508582static ADDRESS_MAP_START( steaser_map, AS_PROGRAM, 16, blitz68k_state )
r14845r14846
510584   AM_RANGE(0x100000, 0x1fffff) AM_ROM AM_REGION("blitter", 0)
511585   AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("nvram")
512586
513   AM_RANGE(0x800000, 0x800001) AM_READ_LEGACY(test_r)
514//  AM_RANGE(0x840000, 0x840001) AM_WRITE_LEGACY(sound_write_w)
515   AM_RANGE(0x880000, 0x880001) AM_READ_LEGACY(test_r)
516//  AM_RANGE(0x8c0000, 0x8c0001) AM_WRITE_LEGACY(sound_write_w)
587   AM_RANGE(0x800000, 0x800001) AM_READ(test_r)
588//  AM_RANGE(0x840000, 0x840001) AM_WRITE(sound_write_w)
589   AM_RANGE(0x880000, 0x880001) AM_READ(test_r)
590//  AM_RANGE(0x8c0000, 0x8c0001) AM_WRITE(sound_write_w)
517591
518592   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("ramdac",ramdac_device, index_w, 0xff00 )
519593   AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("ramdac",ramdac_device, pal_w, 0xff00 )
r14845r14846
525599   AM_RANGE(0x9a0000, 0x9a0001) AM_RAM AM_BASE(m_blit_attr1_ram)
526600   AM_RANGE(0x9a8000, 0x9a8001) AM_RAM AM_BASE(m_blit_dst_ram_loword)
527601   AM_RANGE(0x9b0000, 0x9b0001) AM_RAM AM_BASE(m_blit_attr2_ram)
528   AM_RANGE(0x9b8000, 0x9b8001) AM_RAM_WRITE_LEGACY(blit_copy_w ) AM_BASE(m_blit_dst_ram_hiword)
602   AM_RANGE(0x9b8000, 0x9b8001) AM_RAM_WRITE(blit_copy_w ) AM_BASE(m_blit_dst_ram_hiword)
529603   AM_RANGE(0x9c0002, 0x9c0003) AM_READNOP //pen control?
530604   AM_RANGE(0x9d0000, 0x9d0001) AM_READNOP //?
531   AM_RANGE(0x9e0000, 0x9e0001) AM_READ_LEGACY(blitter_status_r)
605   AM_RANGE(0x9e0000, 0x9e0001) AM_READ(blitter_status_r)
532606   AM_RANGE(0x9f0000, 0x9f0001) AM_WRITENOP //???
533607
534//  AM_RANGE(0xc00000, 0xc00001) AM_WRITE_LEGACY(lamps_w)
535   AM_RANGE(0xbd0000, 0xbd0001) AM_READ_LEGACY(test_r)
536//  AM_RANGE(0xc00200, 0xc00201) AM_WRITE_LEGACY(sound_write_w)
608//  AM_RANGE(0xc00000, 0xc00001) AM_WRITE(lamps_w)
609   AM_RANGE(0xbd0000, 0xbd0001) AM_READ(test_r)
610//  AM_RANGE(0xc00200, 0xc00201) AM_WRITE(sound_write_w)
537611//  AM_RANGE(0xc00380, 0xc00381) AM_READ_PORT("IN3")
538//  AM_RANGE(0xc00300, 0xc00301) AM_WRITE_LEGACY(irq_callback_w)
612//  AM_RANGE(0xc00300, 0xc00301) AM_WRITE(irq_callback_w)
539613ADDRESS_MAP_END
540614
541615/*************************************************************************************************************
r14845r14846
543617*************************************************************************************************************/
544618
545619// MCU simulation (to be done)
546static READ8_HANDLER( bankrob_mcu1_r )
620READ8_MEMBER(blitz68k_state::bankrob_mcu1_r)
547621{
548   UINT8 ret = 0;   // space->machine().rand() gives "interesting" results
549   logerror("%s: mcu1 reads %02x\n", space->machine().describe_context(), ret);
622   UINT8 ret = 0;   // machine().rand() gives "interesting" results
623   logerror("%s: mcu1 reads %02x\n", machine().describe_context(), ret);
550624   return ret;
551625}
552static READ8_HANDLER( bankrob_mcu2_r )
626READ8_MEMBER(blitz68k_state::bankrob_mcu2_r)
553627{
554   UINT8 ret = 0;   // space->machine().rand() gives "interesting" results
555   logerror("%s: mcu2 reads %02x\n", space->machine().describe_context(), ret);
628   UINT8 ret = 0;   // machine().rand() gives "interesting" results
629   logerror("%s: mcu2 reads %02x\n", machine().describe_context(), ret);
556630   return ret;
557631}
558632
559static READ8_HANDLER( bankrob_mcu_status_read_r )
633READ8_MEMBER(blitz68k_state::bankrob_mcu_status_read_r)
560634{
561635   return 0x03;   // bit 0 = MCU1, bit 1 = MCU2. Active high.
562636}
563637
564static READ8_HANDLER( bankrob_mcu_status_write_r )
638READ8_MEMBER(blitz68k_state::bankrob_mcu_status_write_r)
565639{
566640   return 0x03;   // bit 0 = MCU1, bit 1 = MCU2. Active high.
567641}
568642
569static WRITE8_HANDLER( bankrob_mcu1_w )
643WRITE8_MEMBER(blitz68k_state::bankrob_mcu1_w)
570644{
571   logerror("%s: mcu1 written with %02x\n", space->machine().describe_context(), data);
645   logerror("%s: mcu1 written with %02x\n", machine().describe_context(), data);
572646}
573static WRITE8_HANDLER( bankrob_mcu2_w )
647WRITE8_MEMBER(blitz68k_state::bankrob_mcu2_w)
574648{
575   logerror("%s: mcu2 written with %02x\n", space->machine().describe_context(), data);
649   logerror("%s: mcu2 written with %02x\n", machine().describe_context(), data);
576650}
577651
578652static ADDRESS_MAP_START( bankrob_map, AS_PROGRAM, 16, blitz68k_state )
r14845r14846
582656   AM_RANGE(0x220000, 0x220001) AM_DEVREAD8("ramdac",ramdac_device, index_r, 0xff00 )
583657   AM_RANGE(0x220002, 0x220003) AM_DEVREAD8("ramdac",ramdac_device, pal_r, 0xff00 )
584658
585   AM_RANGE(0x240000, 0x240001) AM_WRITE8_LEGACY(blit_addr0_w, 0xff00)
586   AM_RANGE(0x240002, 0x240003) AM_WRITE8_LEGACY(blit_addr1_w, 0xff00)
587   AM_RANGE(0x240004, 0x240005) AM_WRITE8_LEGACY(blit_addr2_w, 0xff00)
659   AM_RANGE(0x240000, 0x240001) AM_WRITE8(blit_addr0_w, 0xff00)
660   AM_RANGE(0x240002, 0x240003) AM_WRITE8(blit_addr1_w, 0xff00)
661   AM_RANGE(0x240004, 0x240005) AM_WRITE8(blit_addr2_w, 0xff00)
588662
589   AM_RANGE(0x240006, 0x240007) AM_WRITE8_LEGACY(blit_x_w, 0xff00)
590   AM_RANGE(0x240008, 0x240009) AM_WRITE8_LEGACY(blit_y_w, 0xff00)
663   AM_RANGE(0x240006, 0x240007) AM_WRITE8(blit_x_w, 0xff00)
664   AM_RANGE(0x240008, 0x240009) AM_WRITE8(blit_y_w, 0xff00)
591665
592   AM_RANGE(0x24000a, 0x24000b) AM_WRITE8_LEGACY(blit_w_w, 0xff00)
593   AM_RANGE(0x24000c, 0x24000d) AM_WRITE8_LEGACY(blit_h_w, 0xff00)
666   AM_RANGE(0x24000a, 0x24000b) AM_WRITE8(blit_w_w, 0xff00)
667   AM_RANGE(0x24000c, 0x24000d) AM_WRITE8(blit_h_w, 0xff00)
594668
595   AM_RANGE(0x24000e, 0x24000f) AM_WRITE8_LEGACY(blit_draw_w, 0xff00)
669   AM_RANGE(0x24000e, 0x24000f) AM_WRITE8(blit_draw_w, 0xff00)
596670
597   AM_RANGE(0x260000, 0x260001) AM_WRITE8_LEGACY(blit_pen0_w, 0xff00)
598   AM_RANGE(0x260002, 0x260003) AM_WRITE8_LEGACY(blit_pen1_w, 0xff00)
599   AM_RANGE(0x260004, 0x260005) AM_WRITE8_LEGACY(blit_pen2_w, 0xff00)
600   AM_RANGE(0x260006, 0x260007) AM_WRITE8_LEGACY(blit_pen3_w, 0xff00)
671   AM_RANGE(0x260000, 0x260001) AM_WRITE8(blit_pen0_w, 0xff00)
672   AM_RANGE(0x260002, 0x260003) AM_WRITE8(blit_pen1_w, 0xff00)
673   AM_RANGE(0x260004, 0x260005) AM_WRITE8(blit_pen2_w, 0xff00)
674   AM_RANGE(0x260006, 0x260007) AM_WRITE8(blit_pen3_w, 0xff00)
601675
602   AM_RANGE(0x280000, 0x280001) AM_READ_LEGACY(blitter_status_r)
676   AM_RANGE(0x280000, 0x280001) AM_READ(blitter_status_r)
603677
604678   AM_RANGE(0x2c0000, 0x2c0001) AM_WRITENOP   // 1->0
605679
606   AM_RANGE(0x2e0000, 0x2e0001) AM_WRITE8_LEGACY(blit_flag0_w, 0xff00)
607   AM_RANGE(0x2e0002, 0x2e0003) AM_WRITE8_LEGACY(blit_flag1_w, 0xff00)
608   AM_RANGE(0x2e0004, 0x2e0005) AM_WRITE8_LEGACY(blit_flipx_w, 0xff00)
609   AM_RANGE(0x2e0006, 0x2e0007) AM_WRITE8_LEGACY(blit_flipy_w, 0xff00)
610   AM_RANGE(0x2e0008, 0x2e0009) AM_WRITE8_LEGACY(blit_solid_w, 0xff00)
611   AM_RANGE(0x2e000a, 0x2e000b) AM_WRITE8_LEGACY(blit_trans_w, 0xff00)
612   AM_RANGE(0x2e000c, 0x2e000d) AM_WRITE8_LEGACY(blit_flag6_w, 0xff00)
613   AM_RANGE(0x2e000e, 0x2e000f) AM_WRITE8_LEGACY(blit_flag7_w, 0xff00)
680   AM_RANGE(0x2e0000, 0x2e0001) AM_WRITE8(blit_flag0_w, 0xff00)
681   AM_RANGE(0x2e0002, 0x2e0003) AM_WRITE8(blit_flag1_w, 0xff00)
682   AM_RANGE(0x2e0004, 0x2e0005) AM_WRITE8(blit_flipx_w, 0xff00)
683   AM_RANGE(0x2e0006, 0x2e0007) AM_WRITE8(blit_flipy_w, 0xff00)
684   AM_RANGE(0x2e0008, 0x2e0009) AM_WRITE8(blit_solid_w, 0xff00)
685   AM_RANGE(0x2e000a, 0x2e000b) AM_WRITE8(blit_trans_w, 0xff00)
686   AM_RANGE(0x2e000c, 0x2e000d) AM_WRITE8(blit_flag6_w, 0xff00)
687   AM_RANGE(0x2e000e, 0x2e000f) AM_WRITE8(blit_flag7_w, 0xff00)
614688
615689   AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("ramdac",ramdac_device, index_w, 0xff00 )
616690   AM_RANGE(0x300002, 0x300003) AM_DEVWRITE8("ramdac",ramdac_device, pal_w, 0xff00 )
617691   AM_RANGE(0x300004, 0x300005) AM_DEVWRITE8("ramdac",ramdac_device, mask_w, 0xff00 )
618692
619   AM_RANGE(0x400000, 0x400001) AM_READ8_LEGACY(bankrob_mcu_status_write_r, 0x00ff)
620   AM_RANGE(0x400002, 0x400003) AM_READ8_LEGACY(bankrob_mcu_status_read_r,  0x00ff)
693   AM_RANGE(0x400000, 0x400001) AM_READ8(bankrob_mcu_status_write_r, 0x00ff)
694   AM_RANGE(0x400002, 0x400003) AM_READ8(bankrob_mcu_status_read_r,  0x00ff)
621695
622   AM_RANGE(0x400004, 0x400005) AM_READWRITE8_LEGACY(bankrob_mcu1_r, bankrob_mcu1_w, 0x00ff)
623   AM_RANGE(0x400006, 0x400007) AM_READWRITE8_LEGACY(bankrob_mcu2_r, bankrob_mcu2_w, 0xff00)
696   AM_RANGE(0x400004, 0x400005) AM_READWRITE8(bankrob_mcu1_r, bankrob_mcu1_w, 0x00ff)
697   AM_RANGE(0x400006, 0x400007) AM_READWRITE8(bankrob_mcu2_r, bankrob_mcu2_w, 0xff00)
624698
625699   AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("crtc", mc6845_device, status_r,   address_w,  0xff00)   // triggered by MCU?
626700   AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
r14845r14846
629703// bankroba:
630704
631705// MCU simulation (to be done)
632static READ8_HANDLER( bankroba_mcu1_r )
706READ8_MEMBER(blitz68k_state::bankroba_mcu1_r)
633707{
634   UINT8 ret = space->machine().rand();   // space->machine().rand() gives "interesting" results
635   logerror("%s: mcu1 reads %02x\n", space->machine().describe_context(), ret);
708   UINT8 ret = machine().rand();   // machine().rand() gives "interesting" results
709   logerror("%s: mcu1 reads %02x\n", machine().describe_context(), ret);
636710   return ret;
637711}
638static READ8_HANDLER( bankroba_mcu2_r )
712READ8_MEMBER(blitz68k_state::bankroba_mcu2_r)
639713{
640   UINT8 ret = space->machine().rand();   // space->machine().rand() gives "interesting" results
641   logerror("%s: mcu2 reads %02x\n", space->machine().describe_context(), ret);
714   UINT8 ret = machine().rand();   // machine().rand() gives "interesting" results
715   logerror("%s: mcu2 reads %02x\n", machine().describe_context(), ret);
642716   return ret;
643717}
644718
645static READ8_HANDLER( bankroba_mcu1_status_write_r )
719READ8_MEMBER(blitz68k_state::bankroba_mcu1_status_write_r)
646720{
647721   return 0x00;   // bit 0 = MCU1. Active low.
648722}
649static READ8_HANDLER( bankroba_mcu2_status_write_r )
723READ8_MEMBER(blitz68k_state::bankroba_mcu2_status_write_r)
650724{
651725   return 0x01;   // bit 0 = MCU2. Active high.
652726}
653727
654static WRITE8_HANDLER( bankroba_mcu1_w )
728WRITE8_MEMBER(blitz68k_state::bankroba_mcu1_w)
655729{
656   logerror("%s: mcu1 written with %02x\n", space->machine().describe_context(), data);
730   logerror("%s: mcu1 written with %02x\n", machine().describe_context(), data);
657731}
658static WRITE8_HANDLER( bankroba_mcu2_w )
732WRITE8_MEMBER(blitz68k_state::bankroba_mcu2_w)
659733{
660   logerror("%s: mcu2 written with %02x\n", space->machine().describe_context(), data);
734   logerror("%s: mcu2 written with %02x\n", machine().describe_context(), data);
661735}
662736
663737static ADDRESS_MAP_START( bankroba_map, AS_PROGRAM, 16, blitz68k_state )
664738   AM_RANGE(0x000000, 0x03ffff) AM_ROM
665739   AM_RANGE(0x200000, 0x20ffff) AM_RAM
666740
667   AM_RANGE(0x800000, 0x800001) AM_WRITE8_LEGACY(bankroba_mcu1_r, 0x00ff)   // lev 4
668   AM_RANGE(0x840000, 0x840001) AM_WRITE8_LEGACY(bankroba_mcu1_w, 0x00ff)
741   AM_RANGE(0x800000, 0x800001) AM_READ8(bankroba_mcu1_r, 0x00ff)   // lev 4
742   AM_RANGE(0x840000, 0x840001) AM_WRITE8(bankroba_mcu1_w, 0x00ff)
669743
670   AM_RANGE(0x880000, 0x880001) AM_WRITE8_LEGACY(bankroba_mcu2_r, 0x00ff)   // lev 3
671   AM_RANGE(0x8c0000, 0x8c0001) AM_WRITE8_LEGACY(bankroba_mcu2_w, 0x00ff)
744   AM_RANGE(0x880000, 0x880001) AM_READ8(bankroba_mcu2_r, 0x00ff)   // lev 3
745   AM_RANGE(0x8c0000, 0x8c0001) AM_WRITE8(bankroba_mcu2_w, 0x00ff)
672746
673747   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("ramdac",ramdac_device, index_w, 0xff00 )
674748   AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("ramdac",ramdac_device, pal_w, 0xff00 )
r14845r14846
676750
677751//  AM_RANGE(0x940000, 0x940001) AM_WRITE   // lev 6
678752
679   AM_RANGE(0x980000, 0x980001) AM_WRITE8_LEGACY(blit_flag0_w, 0xff00)
680   AM_RANGE(0x980002, 0x980003) AM_WRITE8_LEGACY(blit_flag1_w, 0xff00)
681   AM_RANGE(0x980004, 0x980005) AM_WRITE8_LEGACY(blit_flipx_w, 0xff00)
682   AM_RANGE(0x980006, 0x980007) AM_WRITE8_LEGACY(blit_flipy_w, 0xff00)
683   AM_RANGE(0x980008, 0x980009) AM_WRITE8_LEGACY(blit_solid_w, 0xff00)
684   AM_RANGE(0x98000a, 0x98000b) AM_WRITE8_LEGACY(blit_trans_w, 0xff00)
685   AM_RANGE(0x98000c, 0x98000d) AM_WRITE8_LEGACY(blit_flag6_w, 0xff00)
686   AM_RANGE(0x98000e, 0x98000f) AM_WRITE8_LEGACY(blit_flag7_w, 0xff00)
753   AM_RANGE(0x980000, 0x980001) AM_WRITE8(blit_flag0_w, 0xff00)
754   AM_RANGE(0x980002, 0x980003) AM_WRITE8(blit_flag1_w, 0xff00)
755   AM_RANGE(0x980004, 0x980005) AM_WRITE8(blit_flipx_w, 0xff00)
756   AM_RANGE(0x980006, 0x980007) AM_WRITE8(blit_flipy_w, 0xff00)
757   AM_RANGE(0x980008, 0x980009) AM_WRITE8(blit_solid_w, 0xff00)
758   AM_RANGE(0x98000a, 0x98000b) AM_WRITE8(blit_trans_w, 0xff00)
759   AM_RANGE(0x98000c, 0x98000d) AM_WRITE8(blit_flag6_w, 0xff00)
760   AM_RANGE(0x98000e, 0x98000f) AM_WRITE8(blit_flag7_w, 0xff00)
687761
688   AM_RANGE(0x990000, 0x990001) AM_WRITE8_LEGACY(blit_pen0_w, 0xff00)
689   AM_RANGE(0x990002, 0x990003) AM_WRITE8_LEGACY(blit_pen1_w, 0xff00)
690   AM_RANGE(0x990004, 0x990005) AM_WRITE8_LEGACY(blit_pen2_w, 0xff00)
691   AM_RANGE(0x990006, 0x990007) AM_WRITE8_LEGACY(blit_pen3_w, 0xff00)
762   AM_RANGE(0x990000, 0x990001) AM_WRITE8(blit_pen0_w, 0xff00)
763   AM_RANGE(0x990002, 0x990003) AM_WRITE8(blit_pen1_w, 0xff00)
764   AM_RANGE(0x990004, 0x990005) AM_WRITE8(blit_pen2_w, 0xff00)
765   AM_RANGE(0x990006, 0x990007) AM_WRITE8(blit_pen3_w, 0xff00)
692766
693   AM_RANGE(0x998000, 0x998001) AM_WRITE8_LEGACY(blit_addr01_w, 0xffff)
694   AM_RANGE(0x9a0000, 0x9a0001) AM_WRITE8_LEGACY(blit_addr2_w,  0xff00)
767   AM_RANGE(0x998000, 0x998001) AM_WRITE8(blit_addr01_w, 0xffff)
768   AM_RANGE(0x9a0000, 0x9a0001) AM_WRITE8(blit_addr2_w,  0xff00)
695769
696   AM_RANGE(0x9a8000, 0x9a8001) AM_WRITE8_LEGACY(blit_xy_w, 0xffff)
770   AM_RANGE(0x9a8000, 0x9a8001) AM_WRITE8(blit_xy_w, 0xffff)
697771
698   AM_RANGE(0x9b0000, 0x9b0001) AM_WRITE8_LEGACY(blit_wh_w, 0xffff)
772   AM_RANGE(0x9b0000, 0x9b0001) AM_WRITE8(blit_wh_w, 0xffff)
699773
700   AM_RANGE(0x9b8000, 0x9b8001) AM_WRITE8_LEGACY(blit_draw_w, 0x00ff)
774   AM_RANGE(0x9b8000, 0x9b8001) AM_WRITE8(blit_draw_w, 0x00ff)
701775
702776   AM_RANGE(0x9c0000, 0x9c0001) AM_DEVREAD8("ramdac",ramdac_device, index_r, 0xff00 )
703777   AM_RANGE(0x9c0002, 0x9c0003) AM_DEVREAD8("ramdac",ramdac_device, pal_r, 0xff00 )
704778
705   AM_RANGE(0x9d0000, 0x9d0001) AM_READ8_LEGACY(bankroba_mcu1_status_write_r, 0xff00)
779   AM_RANGE(0x9d0000, 0x9d0001) AM_READ8(bankroba_mcu1_status_write_r, 0xff00)
706780
707   AM_RANGE(0x9e0000, 0x9e0001) AM_READ_LEGACY(blitter_status_r)
781   AM_RANGE(0x9e0000, 0x9e0001) AM_READ(blitter_status_r)
708782
709783   AM_RANGE(0x9f0000, 0x9f0001) AM_WRITENOP // 1
710784
711   AM_RANGE(0xbd0000, 0xbd0001) AM_READ8_LEGACY(bankroba_mcu2_status_write_r, 0xff00)
785   AM_RANGE(0xbd0000, 0xbd0001) AM_READ8(bankroba_mcu2_status_write_r, 0xff00)
712786
713787   // CRTC connected to MCU?
714788ADDRESS_MAP_END
r14845r14846
717791    Funny Fruit
718792*************************************************************************************************************/
719793
720static WRITE16_HANDLER( cjffruit_leds1_w )
794WRITE16_MEMBER(blitz68k_state::cjffruit_leds1_w)
721795{
722   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
723   data = COMBINE_DATA(state->m_leds[0]);
796   data = COMBINE_DATA(m_leds[0]);
724797   if (ACCESSING_BITS_8_15)
725798   {
726      coin_counter_w(space->machine(), 0, data & 0x0100);   // coin in
727      set_led_status(space->machine(), 0, data & 0x0200);   // win???
799      coin_counter_w(machine(), 0, data & 0x0100);   // coin in
800      set_led_status(machine(), 0, data & 0x0200);   // win???
728801//                                     1  data & 0x0400     // win???
729      set_led_status(space->machine(), 2, data & 0x0800);   // small
730      set_led_status(space->machine(), 3, data & 0x1000);   // big
731      set_led_status(space->machine(), 4, data & 0x2000);   // take
732      set_led_status(space->machine(), 5, data & 0x4000);   // double up
733      set_led_status(space->machine(), 6, data & 0x8000);   // cancel
734      show_leds123(state);
802      set_led_status(machine(), 2, data & 0x0800);   // small
803      set_led_status(machine(), 3, data & 0x1000);   // big
804      set_led_status(machine(), 4, data & 0x2000);   // take
805      set_led_status(machine(), 5, data & 0x4000);   // double up
806      set_led_status(machine(), 6, data & 0x8000);   // cancel
807      show_leds123();
735808   }
736809}
737810
738static WRITE16_HANDLER( cjffruit_leds2_w )
811WRITE16_MEMBER(blitz68k_state::cjffruit_leds2_w)
739812{
740   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
741   data = COMBINE_DATA(state->m_leds[1]);
813   data = COMBINE_DATA(m_leds[1]);
742814   if (ACCESSING_BITS_8_15)
743815   {
744      set_led_status(space->machine(),  7, data & 0x0100);   // start
745      set_led_status(space->machine(),  8, data & 0x0200);   // bet
746      set_led_status(space->machine(),  9, data & 0x0400);   // hold 5
747      set_led_status(space->machine(), 10, data & 0x0800);   // hold 4
748      set_led_status(space->machine(), 11, data & 0x1000);   // hold 3
749      set_led_status(space->machine(), 12, data & 0x2000);   // hold 2
750      set_led_status(space->machine(), 13, data & 0x4000);   // collect
751      set_led_status(space->machine(), 14, data & 0x8000);   // call attendant
752      show_leds123(state);
816      set_led_status(machine(),  7, data & 0x0100);   // start
817      set_led_status(machine(),  8, data & 0x0200);   // bet
818      set_led_status(machine(),  9, data & 0x0400);   // hold 5
819      set_led_status(machine(), 10, data & 0x0800);   // hold 4
820      set_led_status(machine(), 11, data & 0x1000);   // hold 3
821      set_led_status(machine(), 12, data & 0x2000);   // hold 2
822      set_led_status(machine(), 13, data & 0x4000);   // collect
823      set_led_status(machine(), 14, data & 0x8000);   // call attendant
824      show_leds123();
753825   }
754826}
755827
756static WRITE16_HANDLER( cjffruit_leds3_w )
828WRITE16_MEMBER(blitz68k_state::cjffruit_leds3_w)
757829{
758   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
759   data = COMBINE_DATA(state->m_leds[2]);
830   data = COMBINE_DATA(m_leds[2]);
760831   if (ACCESSING_BITS_8_15)
761832   {
762      set_led_status(space->machine(), 15, data & 0x0100);   // hopper coins?
763      set_led_status(space->machine(), 16, data & 0x0400);   // coin out?
764      show_leds123(state);
833      set_led_status(machine(), 15, data & 0x0100);   // hopper coins?
834      set_led_status(machine(), 16, data & 0x0400);   // coin out?
835      show_leds123();
765836   }
766837}
767838
768839// CRTC
769static READ8_HANDLER( crtc_r )
840READ8_MEMBER(blitz68k_state::crtc_r)
770841{
771   mc6845_device *mc6845 = space->machine().device<mc6845_device>("crtc");
842   mc6845_device *mc6845 = machine().device<mc6845_device>("crtc");
772843   if (offset)
773      return mc6845->register_r(*space, 0);
844      return mc6845->register_r(*&space, 0);
774845   else
775      return mc6845->status_r(*space, 0);
846      return mc6845->status_r(*&space, 0);
776847}
777848
778static WRITE8_HANDLER( crtc_w )
849WRITE8_MEMBER(blitz68k_state::crtc_w)
779850{
780   mc6845_device *mc6845 = space->machine().device<mc6845_device>("crtc");
851   mc6845_device *mc6845 = machine().device<mc6845_device>("crtc");
781852   if (offset)
782      mc6845->register_w(*space, 0, data);
853      mc6845->register_w(*&space, 0, data);
783854   else
784      mc6845->address_w(*space, 0, data);
855      mc6845->address_w(*&space, 0, data);
785856}
786857
787858static WRITE16_DEVICE_HANDLER( crtc_lpen_w )
r14845r14846
793864}
794865
795866// MCU simulation (to be done)
796static READ16_HANDLER( cjffruit_mcu_r )
867READ16_MEMBER(blitz68k_state::cjffruit_mcu_r)
797868{
798   UINT8 ret = 0x00;   // space->machine().rand() gives "interesting" results
799   logerror("%s: mcu reads %02x\n", space->machine().describe_context(), ret);
869   UINT8 ret = 0x00;   // machine().rand() gives "interesting" results
870   logerror("%s: mcu reads %02x\n", machine().describe_context(), ret);
800871   return ret << 8;
801872}
802873
803static WRITE16_HANDLER( cjffruit_mcu_w )
874WRITE16_MEMBER(blitz68k_state::cjffruit_mcu_w)
804875{
805   logerror("%s: mcu written with %02x\n", space->machine().describe_context(),data >> 8);
876   logerror("%s: mcu written with %02x\n", machine().describe_context(),data >> 8);
806877}
807878
808879static ADDRESS_MAP_START( cjffruit_map, AS_PROGRAM, 16, blitz68k_state )
r14845r14846
810881   AM_RANGE(0x400000, 0x41ffff) AM_RAM AM_SHARE("nvram")
811882   AM_RANGE(0x480000, 0x4807ff) AM_RAM
812883
813   AM_RANGE(0x820000, 0x820007) AM_WRITE8_LEGACY(blit_hwyxa_draw_w, 0xffff)
884   AM_RANGE(0x820000, 0x820007) AM_WRITE8(blit_hwyxa_draw_w, 0xffff)
814885
815   AM_RANGE(0x850000, 0x850001) AM_READ_LEGACY(cjffruit_mcu_r )
886   AM_RANGE(0x850000, 0x850001) AM_READ(cjffruit_mcu_r )
816887
817888   AM_RANGE(0x870000, 0x870001) AM_READ_PORT("IN0")
818889   AM_RANGE(0x872000, 0x872001) AM_READ_PORT("IN1")
r14845r14846
825896   AM_RANGE(0x880000, 0x880001) AM_DEVREAD8("ramdac",ramdac_device, index_r, 0xff00 )
826897   AM_RANGE(0x880000, 0x880001) AM_DEVREAD8("ramdac",ramdac_device, pal_r, 0x00ff )
827898
828   AM_RANGE(0x8a0000, 0x8a0007) AM_WRITE8_LEGACY(blit_hwyxa_draw_w, 0xffff)
899   AM_RANGE(0x8a0000, 0x8a0007) AM_WRITE8(blit_hwyxa_draw_w, 0xffff)
829900
830   AM_RANGE(0x8b0000, 0x8b0003) AM_WRITE8_LEGACY(blit_pens_w, 0xffff)
901   AM_RANGE(0x8b0000, 0x8b0003) AM_WRITE8(blit_pens_w, 0xffff)
831902
832   AM_RANGE(0x8e0000, 0x8e0001) AM_WRITE_LEGACY(cjffruit_mcu_w )
903   AM_RANGE(0x8e0000, 0x8e0001) AM_WRITE(cjffruit_mcu_w )
833904
834   AM_RANGE(0x8f8000, 0x8f8001) AM_WRITE_LEGACY(cjffruit_leds1_w) AM_BASE(m_leds[0])
835   AM_RANGE(0x8fa000, 0x8fa001) AM_WRITE_LEGACY(cjffruit_leds2_w) AM_BASE(m_leds[1])
836   AM_RANGE(0x8fc000, 0x8fc001) AM_WRITE_LEGACY(cjffruit_leds3_w) AM_BASE(m_leds[2])
905   AM_RANGE(0x8f8000, 0x8f8001) AM_WRITE(cjffruit_leds1_w) AM_BASE(m_leds[0])
906   AM_RANGE(0x8fa000, 0x8fa001) AM_WRITE(cjffruit_leds2_w) AM_BASE(m_leds[1])
907   AM_RANGE(0x8fc000, 0x8fc001) AM_WRITE(cjffruit_leds3_w) AM_BASE(m_leds[2])
837908
838   AM_RANGE(0x8fe000, 0x8fe003) AM_WRITE8_LEGACY(blit_flags_w, 0xffff)   // flipx,y,solid,trans
909   AM_RANGE(0x8fe000, 0x8fe003) AM_WRITE8(blit_flags_w, 0xffff)   // flipx,y,solid,trans
839910   AM_RANGE(0x8fe004, 0x8fe005) AM_WRITEONLY
840911   AM_RANGE(0x8fe006, 0x8fe007) AM_DEVWRITE_LEGACY("crtc", crtc_lpen_w)   // 0x8fe006: 0->1, 0x8fe007: 1->0
841912
842   AM_RANGE(0xc40000, 0xc40001) AM_READWRITE8_LEGACY(crtc_r, crtc_w, 0xffff)
913   AM_RANGE(0xc40000, 0xc40001) AM_READWRITE8(crtc_r, crtc_w, 0xffff)
843914ADDRESS_MAP_END
844915
845916/*************************************************************************************************************
r14845r14846
847918*************************************************************************************************************/
848919
849920// MCU simulation (to be done)
850static READ16_HANDLER( deucesw2_mcu_r )
921READ16_MEMBER(blitz68k_state::deucesw2_mcu_r)
851922{
852   UINT8 ret = 0x00;   // space->machine().rand() gives "interesting" results
853   logerror("%s: mcu reads %02x\n", space->machine().describe_context(), ret);
923   UINT8 ret = 0x00;   // machine().rand() gives "interesting" results
924   logerror("%s: mcu reads %02x\n", machine().describe_context(), ret);
854925   return ret << 8;
855926}
856927
857static WRITE16_HANDLER( deucesw2_mcu_w )
928WRITE16_MEMBER(blitz68k_state::deucesw2_mcu_w)
858929{
859   logerror("%s: mcu written with %02x\n", space->machine().describe_context(),data >> 8);
930   logerror("%s: mcu written with %02x\n", machine().describe_context(),data >> 8);
860931}
861932
862static WRITE16_HANDLER( deucesw2_leds1_w )
933WRITE16_MEMBER(blitz68k_state::deucesw2_leds1_w)
863934{
864   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
865   data = COMBINE_DATA(state->m_leds[0]);
935   data = COMBINE_DATA(m_leds[0]);
866936   if (ACCESSING_BITS_8_15)
867937   {
868      coin_counter_w(space->machine(), 0, data & 0x0100);   // coin in
869      set_led_status(space->machine(), 0, data & 0x0200);   // win???
938      coin_counter_w(machine(), 0, data & 0x0100);   // coin in
939      set_led_status(machine(), 0, data & 0x0200);   // win???
870940//                                     1  data & 0x0400     // win???
871      set_led_status(space->machine(), 2, data & 0x0800);   // small
872      set_led_status(space->machine(), 3, data & 0x1000);   // big
873      set_led_status(space->machine(), 4, data & 0x2000);   // take
874      set_led_status(space->machine(), 5, data & 0x4000);   // double up
875      set_led_status(space->machine(), 6, data & 0x8000);   // cancel
876      show_leds123(state);
941      set_led_status(machine(), 2, data & 0x0800);   // small
942      set_led_status(machine(), 3, data & 0x1000);   // big
943      set_led_status(machine(), 4, data & 0x2000);   // take
944      set_led_status(machine(), 5, data & 0x4000);   // double up
945      set_led_status(machine(), 6, data & 0x8000);   // cancel
946      show_leds123();
877947   }
878948}
879949
880static WRITE16_HANDLER( deucesw2_leds2_w )
950WRITE16_MEMBER(blitz68k_state::deucesw2_leds2_w)
881951{
882   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
883   data = COMBINE_DATA(state->m_leds[1]);
952   data = COMBINE_DATA(m_leds[1]);
884953   if (ACCESSING_BITS_8_15)
885954   {
886      set_led_status(space->machine(),  7, data & 0x0100);   // start
887      set_led_status(space->machine(),  8, data & 0x0200);   // bet
888      set_led_status(space->machine(),  9, data & 0x0400);   // hold 5
889      set_led_status(space->machine(), 10, data & 0x0800);   // hold 4
890      set_led_status(space->machine(), 11, data & 0x1000);   // hold 3
891      set_led_status(space->machine(), 12, data & 0x2000);   // hold 2
892      set_led_status(space->machine(), 13, data & 0x4000);   // hold 1
893      set_led_status(space->machine(), 14, data & 0x8000);   // call attendant
894      show_leds123(state);
955      set_led_status(machine(),  7, data & 0x0100);   // start
956      set_led_status(machine(),  8, data & 0x0200);   // bet
957      set_led_status(machine(),  9, data & 0x0400);   // hold 5
958      set_led_status(machine(), 10, data & 0x0800);   // hold 4
959      set_led_status(machine(), 11, data & 0x1000);   // hold 3
960      set_led_status(machine(), 12, data & 0x2000);   // hold 2
961      set_led_status(machine(), 13, data & 0x4000);   // hold 1
962      set_led_status(machine(), 14, data & 0x8000);   // call attendant
963      show_leds123();
895964   }
896965}
897966
898static WRITE16_HANDLER( deucesw2_leds3_w )
967WRITE16_MEMBER(blitz68k_state::deucesw2_leds3_w)
899968{
900   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
901   data = COMBINE_DATA(state->m_leds[2]);
969   data = COMBINE_DATA(m_leds[2]);
902970   if (ACCESSING_BITS_8_15)
903971   {
904      set_led_status(space->machine(), 15, data & 0x0100);   // hopper coins?
905      set_led_status(space->machine(), 16, data & 0x0400);   // coin out?
906      show_leds123(state);
972      set_led_status(machine(), 15, data & 0x0100);   // hopper coins?
973      set_led_status(machine(), 16, data & 0x0400);   // coin out?
974      show_leds123();
907975   }
908976}
909977
r14845r14846
911979   AM_RANGE(0x000000, 0x03ffff) AM_ROM
912980   AM_RANGE(0x400000, 0x41ffff) AM_RAM
913981
914   AM_RANGE(0x800000, 0x800007) AM_WRITE8_LEGACY(blit_hwyxa_draw_w, 0xffff)
982   AM_RANGE(0x800000, 0x800007) AM_WRITE8(blit_hwyxa_draw_w, 0xffff)
915983
916984   AM_RANGE(0x812000, 0x812001) AM_DEVREAD8("ramdac",ramdac_device, index_r, 0xff00 )
917985   AM_RANGE(0x812000, 0x812001) AM_DEVREAD8("ramdac",ramdac_device, pal_r, 0x00ff )
918986
919   AM_RANGE(0x830000, 0x830001) AM_READ_LEGACY(deucesw2_mcu_r )
987   AM_RANGE(0x830000, 0x830001) AM_READ(deucesw2_mcu_r )
920988
921989   AM_RANGE(0x840000, 0x840001) AM_READ_PORT("IN0")
922990   AM_RANGE(0x850000, 0x850001) AM_READ_PORT("IN1")
923991   AM_RANGE(0x860000, 0x860001) AM_READ_PORT("IN2")
924992   AM_RANGE(0x870000, 0x870001) AM_READ_PORT("DSW")
925993
926   AM_RANGE(0x880000, 0x880007) AM_WRITE8_LEGACY(blit_hwyxa_draw_w, 0xffff)
994   AM_RANGE(0x880000, 0x880007) AM_WRITE8(blit_hwyxa_draw_w, 0xffff)
927995
928996   AM_RANGE(0x890000, 0x890001) AM_DEVWRITE8("ramdac",ramdac_device, index_w, 0xff00 )
929997   AM_RANGE(0x890000, 0x890001) AM_DEVWRITE8("ramdac",ramdac_device, pal_w, 0x00ff )
930998   AM_RANGE(0x890002, 0x890003) AM_DEVWRITE8("ramdac",ramdac_device, mask_w, 0xff00 )
931999
932   AM_RANGE(0x894000, 0x894003) AM_WRITE8_LEGACY(blit_pens_w, 0xffff)
1000   AM_RANGE(0x894000, 0x894003) AM_WRITE8(blit_pens_w, 0xffff)
9331001
934   AM_RANGE(0x896000, 0x896001) AM_WRITE_LEGACY(deucesw2_mcu_w )
1002   AM_RANGE(0x896000, 0x896001) AM_WRITE(deucesw2_mcu_w )
9351003
936   AM_RANGE(0x898000, 0x898001) AM_WRITE_LEGACY(deucesw2_leds1_w) AM_BASE(m_leds[0])
937   AM_RANGE(0x89a000, 0x89a001) AM_WRITE_LEGACY(deucesw2_leds2_w) AM_BASE(m_leds[1])
938   AM_RANGE(0x89c000, 0x89c001) AM_WRITE_LEGACY(deucesw2_leds3_w) AM_BASE(m_leds[2])
1004   AM_RANGE(0x898000, 0x898001) AM_WRITE(deucesw2_leds1_w) AM_BASE(m_leds[0])
1005   AM_RANGE(0x89a000, 0x89a001) AM_WRITE(deucesw2_leds2_w) AM_BASE(m_leds[1])
1006   AM_RANGE(0x89c000, 0x89c001) AM_WRITE(deucesw2_leds3_w) AM_BASE(m_leds[2])
9391007
940   AM_RANGE(0x89e000, 0x89e003) AM_WRITE8_LEGACY(blit_flags_w, 0xffff)   // flipx,y,solid,trans
1008   AM_RANGE(0x89e000, 0x89e003) AM_WRITE8(blit_flags_w, 0xffff)   // flipx,y,solid,trans
9411009   AM_RANGE(0x89e004, 0x89e005) AM_WRITEONLY
9421010   AM_RANGE(0x89e006, 0x89e007) AM_DEVWRITE_LEGACY("crtc", crtc_lpen_w)   // 0x89e006: 0->1, 0x89e007: 1->0
9431011
944   AM_RANGE(0xc00000, 0xc00001) AM_READWRITE8_LEGACY(crtc_r, crtc_w, 0xffff)
1012   AM_RANGE(0xc00000, 0xc00001) AM_READWRITE8(crtc_r, crtc_w, 0xffff)
9451013ADDRESS_MAP_END
9461014
9471015/*************************************************************************************************************
r14845r14846
9491017*************************************************************************************************************/
9501018
9511019// MCU simulation (to be done)
952static READ8_HANDLER( dualgame_mcu1_r )
1020READ8_MEMBER(blitz68k_state::dualgame_mcu1_r)
9531021{
954   UINT8 ret = 0;   // space->machine().rand() gives "interesting" results
955   logerror("%s: mcu1 reads %02x\n", space->machine().describe_context(), ret);
1022   UINT8 ret = 0;   // machine().rand() gives "interesting" results
1023   logerror("%s: mcu1 reads %02x\n", machine().describe_context(), ret);
9561024   return ret;
9571025}
958static READ8_HANDLER( dualgame_mcu2_r )
1026READ8_MEMBER(blitz68k_state::dualgame_mcu2_r)
9591027{
960   UINT8 ret = 0;   // space->machine().rand() gives "interesting" results
961   logerror("%s: mcu2 reads %02x\n", space->machine().describe_context(), ret);
1028   UINT8 ret = 0;   // machine().rand() gives "interesting" results
1029   logerror("%s: mcu2 reads %02x\n", machine().describe_context(), ret);
9621030   return ret;
9631031}
9641032
965static READ8_HANDLER( dualgame_mcu_status_read_r )
1033READ8_MEMBER(blitz68k_state::dualgame_mcu_status_read_r)
9661034{
9671035   return 0x03;   // bit 0 = MCU1, bit 1 = MCU2. Active high.
9681036}
9691037
970static READ8_HANDLER( dualgame_mcu_status_write_r )
1038READ8_MEMBER(blitz68k_state::dualgame_mcu_status_write_r)
9711039{
9721040   return 0x03;   // bit 0 = MCU1, bit 1 = MCU2. Active high.
9731041}
9741042
975static WRITE8_HANDLER( dualgame_mcu1_w )
1043WRITE8_MEMBER(blitz68k_state::dualgame_mcu1_w)
9761044{
977   logerror("%s: mcu1 written with %02x\n", space->machine().describe_context(), data);
1045   logerror("%s: mcu1 written with %02x\n", machine().describe_context(), data);
9781046}
979static WRITE8_HANDLER( dualgame_mcu2_w )
1047WRITE8_MEMBER(blitz68k_state::dualgame_mcu2_w)
9801048{
981   logerror("%s: mcu2 written with %02x\n", space->machine().describe_context(), data);
1049   logerror("%s: mcu2 written with %02x\n", machine().describe_context(), data);
9821050}
9831051
9841052static ADDRESS_MAP_START( dualgame_map, AS_PROGRAM, 16, blitz68k_state )
r14845r14846
9881056   AM_RANGE(0x220002, 0x220003) AM_DEVREAD8("ramdac",ramdac_device, index_r, 0xff00 )
9891057   AM_RANGE(0x220002, 0x220003) AM_DEVREAD8("ramdac",ramdac_device, pal_r, 0x00ff )
9901058
991   AM_RANGE(0x240000, 0x240001) AM_WRITE8_LEGACY(blit_addr0_w, 0xff00)
992   AM_RANGE(0x240002, 0x240003) AM_WRITE8_LEGACY(blit_addr1_w, 0xff00)
993   AM_RANGE(0x240004, 0x240005) AM_WRITE8_LEGACY(blit_addr2_w, 0xff00)
1059   AM_RANGE(0x240000, 0x240001) AM_WRITE8(blit_addr0_w, 0xff00)
1060   AM_RANGE(0x240002, 0x240003) AM_WRITE8(blit_addr1_w, 0xff00)
1061   AM_RANGE(0x240004, 0x240005) AM_WRITE8(blit_addr2_w, 0xff00)
9941062
995   AM_RANGE(0x240006, 0x240007) AM_WRITE8_LEGACY(blit_x_w, 0xff00)
996   AM_RANGE(0x240008, 0x240009) AM_WRITE8_LEGACY(blit_y_w, 0xff00)
1063   AM_RANGE(0x240006, 0x240007) AM_WRITE8(blit_x_w, 0xff00)
1064   AM_RANGE(0x240008, 0x240009) AM_WRITE8(blit_y_w, 0xff00)
9971065
998   AM_RANGE(0x24000a, 0x24000b) AM_WRITE8_LEGACY(blit_w_w, 0xff00)
999   AM_RANGE(0x24000c, 0x24000d) AM_WRITE8_LEGACY(blit_h_w, 0xff00)
1066   AM_RANGE(0x24000a, 0x24000b) AM_WRITE8(blit_w_w, 0xff00)
1067   AM_RANGE(0x24000c, 0x24000d) AM_WRITE8(blit_h_w, 0xff00)
10001068
1001   AM_RANGE(0x24000e, 0x24000f) AM_WRITE8_LEGACY(blit_draw_w, 0xff00)
1069   AM_RANGE(0x24000e, 0x24000f) AM_WRITE8(blit_draw_w, 0xff00)
10021070
1003   AM_RANGE(0x260000, 0x260001) AM_WRITE8_LEGACY(blit_pen0_w, 0xff00)
1004   AM_RANGE(0x260002, 0x260003) AM_WRITE8_LEGACY(blit_pen1_w, 0xff00)
1005   AM_RANGE(0x260004, 0x260005) AM_WRITE8_LEGACY(blit_pen2_w, 0xff00)
1006   AM_RANGE(0x260006, 0x260007) AM_WRITE8_LEGACY(blit_pen3_w, 0xff00)
1071   AM_RANGE(0x260000, 0x260001) AM_WRITE8(blit_pen0_w, 0xff00)
1072   AM_RANGE(0x260002, 0x260003) AM_WRITE8(blit_pen1_w, 0xff00)
1073   AM_RANGE(0x260004, 0x260005) AM_WRITE8(blit_pen2_w, 0xff00)
1074   AM_RANGE(0x260006, 0x260007) AM_WRITE8(blit_pen3_w, 0xff00)
10071075
1008   AM_RANGE(0x280000, 0x280001) AM_READ8_LEGACY(blit_status_r, 0xff00)
1076   AM_RANGE(0x280000, 0x280001) AM_READ8(blit_status_r, 0xff00)
10091077
10101078   AM_RANGE(0x2a0000, 0x2a0001) AM_DEVWRITE_LEGACY("crtc", crtc_lpen_w)
10111079   AM_RANGE(0x2a0000, 0x2a0001) AM_READNOP
10121080
10131081   AM_RANGE(0x2c0000, 0x2c0001) AM_WRITENOP   // 1->0 (MCU related?)
10141082
1015   AM_RANGE(0x2e0000, 0x2e0001) AM_WRITE8_LEGACY(blit_flag0_w, 0xff00)
1016   AM_RANGE(0x2e0002, 0x2e0003) AM_WRITE8_LEGACY(blit_flag1_w, 0xff00)
1017   AM_RANGE(0x2e0004, 0x2e0005) AM_WRITE8_LEGACY(blit_flipx_w, 0xff00)   // flipx
1018   AM_RANGE(0x2e0006, 0x2e0007) AM_WRITE8_LEGACY(blit_flipy_w, 0xff00)   // flipy
1019   AM_RANGE(0x2e0008, 0x2e0009) AM_WRITE8_LEGACY(blit_solid_w, 0xff00)   // solid
1020   AM_RANGE(0x2e000a, 0x2e000b) AM_WRITE8_LEGACY(blit_trans_w, 0xff00)   // transparency
1021   AM_RANGE(0x2e000c, 0x2e000d) AM_WRITE8_LEGACY(blit_flag6_w, 0xff00)
1022   AM_RANGE(0x2e000e, 0x2e000f) AM_WRITE8_LEGACY(blit_flag7_w, 0xff00)
1083   AM_RANGE(0x2e0000, 0x2e0001) AM_WRITE8(blit_flag0_w, 0xff00)
1084   AM_RANGE(0x2e0002, 0x2e0003) AM_WRITE8(blit_flag1_w, 0xff00)
1085   AM_RANGE(0x2e0004, 0x2e0005) AM_WRITE8(blit_flipx_w, 0xff00)   // flipx
1086   AM_RANGE(0x2e0006, 0x2e0007) AM_WRITE8(blit_flipy_w, 0xff00)   // flipy
1087   AM_RANGE(0x2e0008, 0x2e0009) AM_WRITE8(blit_solid_w, 0xff00)   // solid
1088   AM_RANGE(0x2e000a, 0x2e000b) AM_WRITE8(blit_trans_w, 0xff00)   // transparency
1089   AM_RANGE(0x2e000c, 0x2e000d) AM_WRITE8(blit_flag6_w, 0xff00)
1090   AM_RANGE(0x2e000e, 0x2e000f) AM_WRITE8(blit_flag7_w, 0xff00)
10231091
10241092   AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("ramdac",ramdac_device, index_w, 0xff00 )
10251093   AM_RANGE(0x300002, 0x300003) AM_DEVWRITE8("ramdac",ramdac_device, pal_w, 0xff00 )
10261094   AM_RANGE(0x300004, 0x300005) AM_DEVWRITE8("ramdac",ramdac_device, mask_w, 0xff00 )
10271095
1028   AM_RANGE(0x400000, 0x400001) AM_READ8_LEGACY(dualgame_mcu_status_write_r, 0x00ff)
1029   AM_RANGE(0x400002, 0x400003) AM_READ8_LEGACY(dualgame_mcu_status_read_r,  0x00ff)
1096   AM_RANGE(0x400000, 0x400001) AM_READ8(dualgame_mcu_status_write_r, 0x00ff)
1097   AM_RANGE(0x400002, 0x400003) AM_READ8(dualgame_mcu_status_read_r,  0x00ff)
10301098
1031   AM_RANGE(0x400004, 0x400005) AM_READWRITE8_LEGACY(dualgame_mcu1_r, dualgame_mcu1_w, 0x00ff)
1032   AM_RANGE(0x400006, 0x400007) AM_READWRITE8_LEGACY(dualgame_mcu2_r, dualgame_mcu2_w, 0xff00)
1099   AM_RANGE(0x400004, 0x400005) AM_READWRITE8(dualgame_mcu1_r, dualgame_mcu1_w, 0x00ff)
1100   AM_RANGE(0x400006, 0x400007) AM_READWRITE8(dualgame_mcu2_r, dualgame_mcu2_w, 0xff00)
10331101
10341102   AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("crtc", mc6845_device, status_r,   address_w,  0xff00)
10351103   AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
r14845r14846
10401108*************************************************************************************************************/
10411109
10421110// MCU simulation (to be done)
1043static READ16_HANDLER( hermit_mcu_r )
1111READ16_MEMBER(blitz68k_state::hermit_mcu_r)
10441112{
1045   UINT8 ret = 0x00;   // space->machine().rand() gives "interesting" results
1046   logerror("%s: mcu reads %02x\n", space->machine().describe_context(), ret);
1113   UINT8 ret = 0x00;   // machine().rand() gives "interesting" results
1114   logerror("%s: mcu reads %02x\n", machine().describe_context(), ret);
10471115   return ret << 8;
10481116}
10491117
1050static WRITE16_HANDLER( hermit_mcu_w )
1118WRITE16_MEMBER(blitz68k_state::hermit_mcu_w)
10511119{
1052   logerror("%s: mcu written with %02x\n", space->machine().describe_context(),data >> 8);
1120   logerror("%s: mcu written with %02x\n", machine().describe_context(),data >> 8);
10531121}
10541122
1055static WRITE16_HANDLER( hermit_leds1_w )
1123WRITE16_MEMBER(blitz68k_state::hermit_leds1_w)
10561124{
1057   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
1058   data = COMBINE_DATA(state->m_leds[0]);
1125   data = COMBINE_DATA(m_leds[0]);
10591126   if (ACCESSING_BITS_8_15)
10601127   {
1061      coin_counter_w(space->machine(), 0, data & 0x0100);   // coin in
1062      show_leds12(state);
1128      coin_counter_w(machine(), 0, data & 0x0100);   // coin in
1129      show_leds12();
10631130   }
10641131}
10651132
1066static WRITE16_HANDLER( hermit_leds2_w )
1133WRITE16_MEMBER(blitz68k_state::hermit_leds2_w)
10671134{
1068   blitz68k_state *state = space->machine().driver_data<blitz68k_state>();
1069   data = COMBINE_DATA(state->m_leds[1]);
1135   data = COMBINE_DATA(m_leds[1]);
10701136   if (ACCESSING_BITS_8_15)
10711137   {
1072      set_led_status(space->machine(),  7, data & 0x0100);   // button
1073      show_leds12(state);
1138      set_led_status(machine(),  7, data & 0x0100);   // button
1139      show_leds12();
10741140   }
10751141}
10761142
1077static READ16_HANDLER( hermit_track_r )
1143READ16_MEMBER(blitz68k_state::hermit_track_r)
10781144{
10791145#ifdef MAME_DEBUG
1080//  popmessage("track %02x %02x", input_port_read(space->machine(), "TRACK_X"), input_port_read(space->machine(), "TRACK_Y"));
1146//  popmessage("track %02x %02x", input_port_read(machine(), "TRACK_X"), input_port_read(machine(), "TRACK_Y"));
10811147#endif
10821148
10831149   return
1084      ((0xf - ((input_port_read(space->machine(), "TRACK_Y") + 0x7) & 0xf)) << 12) |
1085      ((0xf - ((input_port_read(space->machine(), "TRACK_X") + 0x7) & 0xf)) << 8)  ;
1150      ((0xf - ((input_port_read(machine(), "TRACK_Y") + 0x7) & 0xf)) << 12) |
1151      ((0xf - ((input_port_read(machine(), "TRACK_X") + 0x7) & 0xf)) << 8)  ;
10861152}
10871153
10881154static ADDRESS_MAP_START( hermit_map, AS_PROGRAM, 16, blitz68k_state )
r14845r14846
11001166   AM_RANGE(0x840000, 0x840001) AM_DEVREAD8("ramdac",ramdac_device, pal_r, 0x00ff )
11011167
11021168
1103   AM_RANGE(0x8c0000, 0x8c0003) AM_WRITE8_LEGACY(blit_pens_w, 0xffff )
1169   AM_RANGE(0x8c0000, 0x8c0003) AM_WRITE8(blit_pens_w, 0xffff )
11041170
1105   AM_RANGE(0x940000, 0x940001) AM_READ_LEGACY(hermit_mcu_r )
1106   AM_RANGE(0x980000, 0x980001) AM_WRITE_LEGACY(hermit_mcu_w )
1171   AM_RANGE(0x940000, 0x940001) AM_READ(hermit_mcu_r )
1172   AM_RANGE(0x980000, 0x980001) AM_WRITE(hermit_mcu_w )
11071173
11081174   AM_RANGE(0x9c0000, 0x9c0001) AM_READ_PORT("IN0")
1109   AM_RANGE(0x9c8000, 0x9c8001) AM_READ_LEGACY(hermit_track_r )
1175   AM_RANGE(0x9c8000, 0x9c8001) AM_READ(hermit_track_r )
11101176   AM_RANGE(0x9d0000, 0x9d0001) AM_READ_PORT("IN2")
11111177   AM_RANGE(0x9d8000, 0x9d8001) AM_READ_PORT("DSW")
11121178
1113   AM_RANGE(0x9e0000, 0x9e0001) AM_WRITE_LEGACY(hermit_leds1_w) AM_BASE(m_leds[0])
1114   AM_RANGE(0x9e8000, 0x9e8001) AM_WRITE_LEGACY(hermit_leds2_w) AM_BASE(m_leds[1])
1179   AM_RANGE(0x9e0000, 0x9e0001) AM_WRITE(hermit_leds1_w) AM_BASE(m_leds[0])
1180   AM_RANGE(0x9e8000, 0x9e8001) AM_WRITE(hermit_leds2_w) AM_BASE(m_leds[1])
11151181
1116   AM_RANGE(0x9f0000, 0x9f0003) AM_WRITE8_LEGACY(blit_flags_w, 0xffff)   // flipx,y,solid,trans
1182   AM_RANGE(0x9f0000, 0x9f0003) AM_WRITE8(blit_flags_w, 0xffff)   // flipx,y,solid,trans
11171183   AM_RANGE(0x9f0004, 0x9f0005) AM_WRITEONLY
11181184   AM_RANGE(0x9f0006, 0x9f0007) AM_DEVWRITE_LEGACY("crtc", crtc_lpen_w)   // 0x9f0006: 0->1, 0x9f0007: 1->0
11191185
1120   AM_RANGE(0xb00000, 0xb00001) AM_READWRITE8_LEGACY(crtc_r, crtc_w, 0xffff)   // triggered by MCU?
1186   AM_RANGE(0xb00000, 0xb00001) AM_READWRITE8(crtc_r, crtc_w, 0xffff)   // triggered by MCU?
11211187
1122   AM_RANGE(0xc80000, 0xc80007) AM_WRITE8_LEGACY(blit_hwyxa_draw_w, 0xffff)
1188   AM_RANGE(0xc80000, 0xc80007) AM_WRITE8(blit_hwyxa_draw_w, 0xffff)
11231189ADDRESS_MAP_END
11241190
11251191/*************************************************************************************************************
r14845r14846
11271193*************************************************************************************************************/
11281194
11291195// MCU simulation (to be done)
1130static READ8_HANDLER( maxidbl_mcu1_r )
1196READ8_MEMBER(blitz68k_state::maxidbl_mcu1_r)
11311197{
1132   UINT8 ret = 0;   // space->machine().rand() gives "interesting" results
1133   logerror("%s: mcu1 reads %02x\n", space->machine().describe_context(), ret);
1198   UINT8 ret = 0;   // machine().rand() gives "interesting" results
1199   logerror("%s: mcu1 reads %02x\n", machine().describe_context(), ret);
11341200   return ret;
11351201}
1136static READ8_HANDLER( maxidbl_mcu2_r )
1202READ8_MEMBER(blitz68k_state::maxidbl_mcu2_r)
11371203{
1138   UINT8 ret = 0;   // space->machine().rand() gives "interesting" results
1139   logerror("%s: mcu2 reads %02x\n", space->machine().describe_context(), ret);
1204   UINT8 ret = 0;   // machine().rand() gives "interesting" results
1205   logerror("%s: mcu2 reads %02x\n", machine().describe_context(), ret);
11401206   return ret;
11411207}
11421208
1143static READ8_HANDLER( maxidbl_mcu_status_read_r )
1209READ8_MEMBER(blitz68k_state::maxidbl_mcu_status_read_r)
11441210{
11451211   return 0x03;   // bit 0 = MCU1, bit 1 = MCU2. Active high.
11461212}
11471213
1148static READ8_HANDLER( maxidbl_mcu_status_write_r )
1214READ8_MEMBER(blitz68k_state::maxidbl_mcu_status_write_r)
11491215{
11501216   return 0x03;   // bit 0 = MCU1, bit 1 = MCU2. Active high.
11511217}
11521218
1153static WRITE8_HANDLER( maxidbl_mcu1_w )
1219WRITE8_MEMBER(blitz68k_state::maxidbl_mcu1_w)
11541220{
1155   logerror("%s: mcu1 written with %02x\n", space->machine().describe_context(), data);
1221   logerror("%s: mcu1 written with %02x\n", machine().describe_context(), data);
11561222}
1157static WRITE8_HANDLER( maxidbl_mcu2_w )
1223WRITE8_MEMBER(blitz68k_state::maxidbl_mcu2_w)
11581224{
1159   logerror("%s: mcu2 written with %02x\n", space->machine().describe_context(), data);
1225   logerror("%s: mcu2 written with %02x\n", machine().describe_context(), data);
11601226}
11611227
11621228static ADDRESS_MAP_START( maxidbl_map, AS_PROGRAM, 16, blitz68k_state )
r14845r14846
11681234   AM_RANGE(0x30000c, 0x30000d) AM_WRITENOP   // 0->1 (IRQ3 ack.?)
11691235   AM_RANGE(0x30000e, 0x30000f) AM_WRITENOP   // 1->0 (MCU related?)
11701236
1171   AM_RANGE(0x500000, 0x500001) AM_READ8_LEGACY(maxidbl_mcu_status_write_r, 0x00ff)
1172   AM_RANGE(0x500002, 0x500003) AM_READ8_LEGACY(maxidbl_mcu_status_read_r,  0x00ff)
1237   AM_RANGE(0x500000, 0x500001) AM_READ8(maxidbl_mcu_status_write_r, 0x00ff)
1238   AM_RANGE(0x500002, 0x500003) AM_READ8(maxidbl_mcu_status_read_r,  0x00ff)
11731239
1174   AM_RANGE(0x500004, 0x500005) AM_READWRITE8_LEGACY(maxidbl_mcu1_r, maxidbl_mcu1_w, 0x00ff)
1175   AM_RANGE(0x500006, 0x500007) AM_READWRITE8_LEGACY(maxidbl_mcu2_r, maxidbl_mcu2_w, 0xff00)
1240   AM_RANGE(0x500004, 0x500005) AM_READWRITE8(maxidbl_mcu1_r, maxidbl_mcu1_w, 0x00ff)
1241   AM_RANGE(0x500006, 0x500007) AM_READWRITE8(maxidbl_mcu2_r, maxidbl_mcu2_w, 0xff00)
11761242
11771243   AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("crtc", mc6845_device, status_r,   address_w,  0xff00)   // triggered by MCU?
11781244   AM_RANGE(0x600002, 0x600003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
src/mame/drivers/tapatune.c
r14845r14846
5555   UINT8   m_68k_to_z80_data;
5656
5757   UINT16   m_bsmt_data;
58   DECLARE_WRITE16_MEMBER(palette_w);
59   DECLARE_READ16_MEMBER(read_from_z80);
60   DECLARE_WRITE16_MEMBER(write_to_z80);
61   DECLARE_READ16_MEMBER(irq_ack_r);
62   DECLARE_READ8_MEMBER(sound_irq_clear);
63   DECLARE_WRITE8_MEMBER(controls_mux);
64   DECLARE_READ8_MEMBER(controls_r);
65   DECLARE_WRITE8_MEMBER(write_index_to_68k);
66   DECLARE_WRITE8_MEMBER(write_data_to_68k);
67   DECLARE_READ8_MEMBER(read_index_from_68k);
68   DECLARE_READ8_MEMBER(read_data_from_68k);
69   DECLARE_READ8_MEMBER(bsmt_status_r);
70   DECLARE_WRITE8_MEMBER(bsmt_data_lo_w);
71   DECLARE_WRITE8_MEMBER(bsmt_data_hi_w);
72   DECLARE_WRITE8_MEMBER(bsmt_reg_w);
5873};
5974
60static WRITE16_HANDLER(palette_w)
75WRITE16_MEMBER(tapatune_state::palette_w)
6176{
62   tapatune_state *state = space->machine().driver_data<tapatune_state>();
6377
6478   //logerror("Palette write: offset = %02x, data = %04x, mask = %04x\n", offset, data, mem_mask );
6579   switch(offset)
6680   {
6781      case 0: // address register
68         state->m_palette_write_address = ((data >> 8) & 0xff) * 3;
82         m_palette_write_address = ((data >> 8) & 0xff) * 3;
6983         break;
7084      case 1: // palette data
71         state->m_paletteram[state->m_palette_write_address++] = (data >> 8) & 0xff;
85         m_paletteram[m_palette_write_address++] = (data >> 8) & 0xff;
7286         break;
7387      case 2: // unknown?
7488         break;
7589   }
7690}
7791
78static READ16_HANDLER(read_from_z80)
92READ16_MEMBER(tapatune_state::read_from_z80)
7993{
80   tapatune_state *state = space->machine().driver_data<tapatune_state>();
8194
82   //logerror("Reading data from Z80: index = %02x, data = %02x\n", state->m_z80_to_68k_index, state->m_z80_to_68k_data );
95   //logerror("Reading data from Z80: index = %02x, data = %02x\n", m_z80_to_68k_index, m_z80_to_68k_data );
8396
8497   switch( offset )
8598   {
8699      case 0:
87         return ((UINT16)state->m_z80_to_68k_data << 8) | (state->m_z80_to_68k_index);
100         return ((UINT16)m_z80_to_68k_data << 8) | (m_z80_to_68k_index);
88101      default:
89102         return 0;
90103   }
91104}
92105
93static WRITE16_HANDLER(write_to_z80)
106WRITE16_MEMBER(tapatune_state::write_to_z80)
94107{
95   tapatune_state *state = space->machine().driver_data<tapatune_state>();
96108
97109   switch( offset )
98110   {
99111      case 0:
100112         //if ( (data >> 8) & 0xff )
101113         //  logerror("Command to Z80: %04x\n", data);
102         state->m_68k_to_z80_index = data & 0xff;
103         state->m_68k_to_z80_data = (data >> 8) & 0xff;
104         cputag_set_input_line(space->machine(), "maincpu", 3, CLEAR_LINE);
114         m_68k_to_z80_index = data & 0xff;
115         m_68k_to_z80_data = (data >> 8) & 0xff;
116         cputag_set_input_line(machine(), "maincpu", 3, CLEAR_LINE);
105117         break;
106118      case 1:
107119         break;
108120   }
109121}
110122
111static READ16_HANDLER(irq_ack_r)
123READ16_MEMBER(tapatune_state::irq_ack_r)
112124{
113   cputag_set_input_line(space->machine(), "maincpu", 2, CLEAR_LINE);
125   cputag_set_input_line(machine(), "maincpu", 2, CLEAR_LINE);
114126   return 0;
115127}
116128
r14845r14846
121133   AM_RANGE(0x328000, 0x32ffff) AM_RAM
122134   AM_RANGE(0x330000, 0x337fff) AM_RAM // ram used as system video buffer
123135   AM_RANGE(0x338000, 0x33ffff) AM_RAM
124   AM_RANGE(0x400000, 0x400003) AM_READWRITE_LEGACY(read_from_z80, write_to_z80)
125   AM_RANGE(0x400010, 0x400011) AM_READ_LEGACY(irq_ack_r)
126   AM_RANGE(0x600000, 0x600005) AM_WRITE_LEGACY(palette_w)
136   AM_RANGE(0x400000, 0x400003) AM_READWRITE(read_from_z80, write_to_z80)
137   AM_RANGE(0x400010, 0x400011) AM_READ(irq_ack_r)
138   AM_RANGE(0x600000, 0x600005) AM_WRITE(palette_w)
127139   AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8("crtc", mc6845_device, address_w, 0xff00)
128140   AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
129141ADDRESS_MAP_END
130142
131static READ8_HANDLER(sound_irq_clear)
143READ8_MEMBER(tapatune_state::sound_irq_clear)
132144{
133   cputag_set_input_line(space->machine(), "soundcpu", 0, CLEAR_LINE);
145   cputag_set_input_line(machine(), "soundcpu", 0, CLEAR_LINE);
134146   return 0;
135147}
136148
137static WRITE8_HANDLER(controls_mux)
149WRITE8_MEMBER(tapatune_state::controls_mux)
138150{
139   tapatune_state *state = space->machine().driver_data<tapatune_state>();
140151   //logerror("Controls mux written with %02x\n", data);
141   state->m_controls_mux = data;
152   m_controls_mux = data;
142153}
143154
144static READ8_HANDLER(controls_r)
155READ8_MEMBER(tapatune_state::controls_r)
145156{
146   tapatune_state *state = space->machine().driver_data<tapatune_state>();
147   switch( state->m_controls_mux )
157   switch( m_controls_mux )
148158   {
149      case 0x07: return input_port_read(space->machine(), "DSW1");
150      case 0x08: return input_port_read(space->machine(), "DSW2");
151      case 0x09: return input_port_read(space->machine(), "IN0");
159      case 0x07: return input_port_read(machine(), "DSW1");
160      case 0x08: return input_port_read(machine(), "DSW2");
161      case 0x09: return input_port_read(machine(), "IN0");
152162      default: return 0xff;
153163   }
154164}
155165
156static WRITE8_HANDLER(write_index_to_68k)
166WRITE8_MEMBER(tapatune_state::write_index_to_68k)
157167{
158   tapatune_state *state = space->machine().driver_data<tapatune_state>();
159   state->m_z80_to_68k_index = data;
168   m_z80_to_68k_index = data;
160169}
161170
162static WRITE8_HANDLER(write_data_to_68k)
171WRITE8_MEMBER(tapatune_state::write_data_to_68k)
163172{
164   tapatune_state *state = space->machine().driver_data<tapatune_state>();
165   state->m_z80_to_68k_data = data;
166   //logerror("Writing data from Z80: index = %02x, data = %02x\n", state->m_z80_to_68k_index, state->m_z80_to_68k_data );
167   cputag_set_input_line(space->machine(), "maincpu", 3, ASSERT_LINE);
173   m_z80_to_68k_data = data;
174   //logerror("Writing data from Z80: index = %02x, data = %02x\n", m_z80_to_68k_index, m_z80_to_68k_data );
175   cputag_set_input_line(machine(), "maincpu", 3, ASSERT_LINE);
168176}
169177
170static READ8_HANDLER(read_index_from_68k)
178READ8_MEMBER(tapatune_state::read_index_from_68k)
171179{
172   tapatune_state *state = space->machine().driver_data<tapatune_state>();
173   return state->m_68k_to_z80_index;
180   return m_68k_to_z80_index;
174181}
175182
176static READ8_HANDLER(read_data_from_68k)
183READ8_MEMBER(tapatune_state::read_data_from_68k)
177184{
178   tapatune_state *state = space->machine().driver_data<tapatune_state>();
179   //if ( state->m_68k_to_z80_data != 0 )
180   //  logerror("Load command from 68K: %02x %02x\n", state->m_68k_to_z80_index, state->m_68k_to_z80_data);
181   return state->m_68k_to_z80_data;
185   //if ( m_68k_to_z80_data != 0 )
186   //  logerror("Load command from 68K: %02x %02x\n", m_68k_to_z80_index, m_68k_to_z80_data);
187   return m_68k_to_z80_data;
182188}
183189
184static READ8_HANDLER(bsmt_status_r)
190READ8_MEMBER(tapatune_state::bsmt_status_r)
185191{
186   bsmt2000_device *bsmt = space->machine().device<bsmt2000_device>("bsmt");
192   bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt");
187193   return (bsmt->read_status() << 7) ^ 0x80;
188194}
189195
190static WRITE8_HANDLER(bsmt_data_lo_w)
196WRITE8_MEMBER(tapatune_state::bsmt_data_lo_w)
191197{
192   tapatune_state *state = space->machine().driver_data<tapatune_state>();
193   state->m_bsmt_data = (state->m_bsmt_data & 0xff00) | data;
198   m_bsmt_data = (m_bsmt_data & 0xff00) | data;
194199}
195200
196static WRITE8_HANDLER(bsmt_data_hi_w)
201WRITE8_MEMBER(tapatune_state::bsmt_data_hi_w)
197202{
198   tapatune_state *state = space->machine().driver_data<tapatune_state>();
199   state->m_bsmt_data = (state->m_bsmt_data & 0x00ff) | (data << 8);
203   m_bsmt_data = (m_bsmt_data & 0x00ff) | (data << 8);
200204}
201205
202static WRITE8_HANDLER(bsmt_reg_w)
206WRITE8_MEMBER(tapatune_state::bsmt_reg_w)
203207{
204   bsmt2000_device *bsmt = space->machine().device<bsmt2000_device>("bsmt");
205   tapatune_state *state = space->machine().driver_data<tapatune_state>();
208   bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt");
206209
207   //logerror("Writing BSMT reg: %02X data: %04X\n", data, state->m_bsmt_data);
210
211   //logerror("Writing BSMT reg: %02X data: %04X\n", data, m_bsmt_data);
208212   bsmt->write_reg(data);
209   bsmt->write_data(state->m_bsmt_data);
213   bsmt->write_data(m_bsmt_data);
210214}
211215
212216static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tapatune_state )
r14845r14846
217221
218222static ADDRESS_MAP_START ( sound_io_map, AS_IO, 8, tapatune_state )
219223   ADDRESS_MAP_GLOBAL_MASK(0xff)
220   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(bsmt_data_lo_w)
221   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(bsmt_data_hi_w)
222   AM_RANGE(0x10, 0x10) AM_WRITE_LEGACY(bsmt_reg_w)
223   AM_RANGE(0x18, 0x18) AM_WRITE_LEGACY(controls_mux)
224   AM_RANGE(0x20, 0x20) AM_READ_LEGACY(sound_irq_clear)
225   AM_RANGE(0x28, 0x28) AM_READ_LEGACY(bsmt_status_r)
226   AM_RANGE(0x30, 0x30) AM_READ_LEGACY(controls_r)
224   AM_RANGE(0x00, 0x00) AM_WRITE(bsmt_data_lo_w)
225   AM_RANGE(0x08, 0x08) AM_WRITE(bsmt_data_hi_w)
226   AM_RANGE(0x10, 0x10) AM_WRITE(bsmt_reg_w)
227   AM_RANGE(0x18, 0x18) AM_WRITE(controls_mux)
228   AM_RANGE(0x20, 0x20) AM_READ(sound_irq_clear)
229   AM_RANGE(0x28, 0x28) AM_READ(bsmt_status_r)
230   AM_RANGE(0x30, 0x30) AM_READ(controls_r)
227231   AM_RANGE(0x38, 0x38) AM_READ_PORT("COINS")
228   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(write_index_to_68k)
229   AM_RANGE(0x61, 0x61) AM_WRITE_LEGACY(write_data_to_68k)
232   AM_RANGE(0x60, 0x60) AM_WRITE(write_index_to_68k)
233   AM_RANGE(0x61, 0x61) AM_WRITE(write_data_to_68k)
230234   AM_RANGE(0x63, 0x63) AM_WRITENOP // leds? lamps?
231   AM_RANGE(0x68, 0x68) AM_READ_LEGACY(read_index_from_68k)
232   AM_RANGE(0x69, 0x69) AM_READ_LEGACY(read_data_from_68k)
235   AM_RANGE(0x68, 0x68) AM_READ(read_index_from_68k)
236   AM_RANGE(0x69, 0x69) AM_READ(read_data_from_68k)
233237   AM_RANGE(0x6b, 0x6b) AM_READ_PORT("BUTTONS")
234238ADDRESS_MAP_END
235239
src/mame/drivers/dacholer.c
r14845r14846
6969   /* devices */
7070   required_device<cpu_device> m_maincpu;
7171   required_device<cpu_device> m_audiocpu;
72   DECLARE_WRITE8_MEMBER(bg_scroll_x_w);
73   DECLARE_WRITE8_MEMBER(bg_scroll_y_w);
74   DECLARE_WRITE8_MEMBER(background_w);
75   DECLARE_WRITE8_MEMBER(foreground_w);
76   DECLARE_WRITE8_MEMBER(bg_bank_w);
77   DECLARE_WRITE8_MEMBER(coins_w);
78   DECLARE_WRITE8_MEMBER(snd_w);
79   DECLARE_WRITE8_MEMBER(main_irq_ack_w);
80   DECLARE_WRITE8_MEMBER(adpcm_w);
81   DECLARE_WRITE8_MEMBER(snd_ack_w);
82   DECLARE_WRITE8_MEMBER(snd_irq_w);
83   DECLARE_WRITE8_MEMBER(music_irq_w);
7284};
7385
7486static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
92104   state->m_fg_tilemap->set_transparent_pen(0);
93105}
94106
95static WRITE8_HANDLER( bg_scroll_x_w )
107WRITE8_MEMBER(dacholer_state::bg_scroll_x_w)
96108{
97   dacholer_state *state = space->machine().driver_data<dacholer_state>();
98   state->m_scroll_x = data;
109   m_scroll_x = data;
99110}
100111
101static WRITE8_HANDLER( bg_scroll_y_w )
112WRITE8_MEMBER(dacholer_state::bg_scroll_y_w)
102113{
103   dacholer_state *state = space->machine().driver_data<dacholer_state>();
104   state->m_scroll_y = data;
114   m_scroll_y = data;
105115}
106116
107117static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect )
r14845r14846
157167   return 0;
158168}
159169
160static WRITE8_HANDLER( background_w )
170WRITE8_MEMBER(dacholer_state::background_w)
161171{
162   dacholer_state *state = space->machine().driver_data<dacholer_state>();
163   state->m_bgvideoram[offset] = data;
164   state->m_bg_tilemap->mark_tile_dirty(offset);
172   m_bgvideoram[offset] = data;
173   m_bg_tilemap->mark_tile_dirty(offset);
165174}
166175
167static WRITE8_HANDLER( foreground_w )
176WRITE8_MEMBER(dacholer_state::foreground_w)
168177{
169   dacholer_state *state = space->machine().driver_data<dacholer_state>();
170   state->m_fgvideoram[offset] = data;
171   state->m_fg_tilemap->mark_tile_dirty(offset);
178   m_fgvideoram[offset] = data;
179   m_fg_tilemap->mark_tile_dirty(offset);
172180}
173181
174static WRITE8_HANDLER( bg_bank_w )
182WRITE8_MEMBER(dacholer_state::bg_bank_w)
175183{
176   dacholer_state *state = space->machine().driver_data<dacholer_state>();
177   if ((data & 3) != state->m_bg_bank)
184   if ((data & 3) != m_bg_bank)
178185   {
179      state->m_bg_bank = data & 3;
180      state->m_bg_tilemap->mark_all_dirty();
186      m_bg_bank = data & 3;
187      m_bg_tilemap->mark_all_dirty();
181188   }
182189
183   flip_screen_set(space->machine(), data & 0xc); // probably one bit for flipx and one for flipy
190   flip_screen_set(machine(), data & 0xc); // probably one bit for flipx and one for flipy
184191
185192}
186193
187static WRITE8_HANDLER( coins_w )
194WRITE8_MEMBER(dacholer_state::coins_w)
188195{
189   coin_counter_w(space->machine(), 0, data & 1);
190   coin_counter_w(space->machine(), 1, data & 2);
196   coin_counter_w(machine(), 0, data & 1);
197   coin_counter_w(machine(), 1, data & 2);
191198
192   set_led_status(space->machine(), 0, data & 4);
193   set_led_status(space->machine(), 1, data & 8);
199   set_led_status(machine(), 0, data & 4);
200   set_led_status(machine(), 1, data & 8);
194201}
195202
196static WRITE8_HANDLER(snd_w)
203WRITE8_MEMBER(dacholer_state::snd_w)
197204{
198   dacholer_state *state = space->machine().driver_data<dacholer_state>();
199205   soundlatch_w(space, offset, data);
200   device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
206   device_set_input_line(m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
201207}
202208
203static WRITE8_HANDLER( main_irq_ack_w )
209WRITE8_MEMBER(dacholer_state::main_irq_ack_w)
204210{
205   dacholer_state *state = space->machine().driver_data<dacholer_state>();
206   device_set_input_line(state->m_maincpu, 0, CLEAR_LINE);
211   device_set_input_line(m_maincpu, 0, CLEAR_LINE);
207212}
208213
209214
210215static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, dacholer_state )
211216   AM_RANGE(0x0000, 0x7fff) AM_ROM
212217   AM_RANGE(0x8800, 0x97ff) AM_RAM
213   AM_RANGE(0xc000, 0xc3ff) AM_MIRROR(0x400) AM_RAM_WRITE_LEGACY(background_w) AM_BASE(m_bgvideoram)
214   AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE_LEGACY(foreground_w) AM_BASE(m_fgvideoram)
218   AM_RANGE(0xc000, 0xc3ff) AM_MIRROR(0x400) AM_RAM_WRITE(background_w) AM_BASE(m_bgvideoram)
219   AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(foreground_w) AM_BASE(m_fgvideoram)
215220   AM_RANGE(0xe000, 0xe0ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
216221ADDRESS_MAP_END
217222
r14845r14846
229234   AM_RANGE(0x03, 0x03) AM_READ_PORT("DSWA")
230235   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSWB")
231236   AM_RANGE(0x05, 0x05) AM_READNOP // watchdog in itaten
232   AM_RANGE(0x20, 0x20) AM_WRITE_LEGACY(coins_w)
233   AM_RANGE(0x21, 0x21) AM_WRITE_LEGACY(bg_bank_w)
234   AM_RANGE(0x22, 0x22) AM_WRITE_LEGACY(bg_scroll_x_w)
235   AM_RANGE(0x23, 0x23) AM_WRITE_LEGACY(bg_scroll_y_w)
236   AM_RANGE(0x24, 0x24) AM_WRITE_LEGACY(main_irq_ack_w)
237   AM_RANGE(0x27, 0x27) AM_WRITE_LEGACY(snd_w)
237   AM_RANGE(0x20, 0x20) AM_WRITE(coins_w)
238   AM_RANGE(0x21, 0x21) AM_WRITE(bg_bank_w)
239   AM_RANGE(0x22, 0x22) AM_WRITE(bg_scroll_x_w)
240   AM_RANGE(0x23, 0x23) AM_WRITE(bg_scroll_y_w)
241   AM_RANGE(0x24, 0x24) AM_WRITE(main_irq_ack_w)
242   AM_RANGE(0x27, 0x27) AM_WRITE(snd_w)
238243ADDRESS_MAP_END
239244
240245
r14845r14846
250255ADDRESS_MAP_END
251256
252257
253static WRITE8_HANDLER( adpcm_w )
258WRITE8_MEMBER(dacholer_state::adpcm_w)
254259{
255   dacholer_state *state = space->machine().driver_data<dacholer_state>();
256   state->m_msm_data = data;
257   state->m_msm_toggle = 0;
260   m_msm_data = data;
261   m_msm_toggle = 0;
258262}
259263
260static WRITE8_HANDLER( snd_ack_w )
264WRITE8_MEMBER(dacholer_state::snd_ack_w)
261265{
262   dacholer_state *state = space->machine().driver_data<dacholer_state>();
263   state->m_snd_ack = data;
266   m_snd_ack = data;
264267}
265268
266269static CUSTOM_INPUT( snd_ack_r )
r14845r14846
269272   return state->m_snd_ack;      //guess ...
270273}
271274
272static WRITE8_HANDLER( snd_irq_w )
275WRITE8_MEMBER(dacholer_state::snd_irq_w)
273276{
274   dacholer_state *state = space->machine().driver_data<dacholer_state>();
275   state->m_snd_interrupt_enable = data;
277   m_snd_interrupt_enable = data;
276278}
277279
278static WRITE8_HANDLER( music_irq_w )
280WRITE8_MEMBER(dacholer_state::music_irq_w)
279281{
280   dacholer_state *state = space->machine().driver_data<dacholer_state>();
281   state->m_music_interrupt_enable = data;
282   m_music_interrupt_enable = data;
282283}
283284
284285static ADDRESS_MAP_START( snd_io_map, AS_IO, 8, dacholer_state )
285286   ADDRESS_MAP_GLOBAL_MASK(0xff)
286287   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(soundlatch_r, soundlatch_clear_w )
287   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(music_irq_w)
288   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(snd_irq_w)
289   AM_RANGE(0x0c, 0x0c) AM_WRITE_LEGACY(snd_ack_w)
290   AM_RANGE(0x80, 0x80) AM_WRITE_LEGACY(adpcm_w)
288   AM_RANGE(0x04, 0x04) AM_WRITE(music_irq_w)
289   AM_RANGE(0x08, 0x08) AM_WRITE(snd_irq_w)
290   AM_RANGE(0x0c, 0x0c) AM_WRITE(snd_ack_w)
291   AM_RANGE(0x80, 0x80) AM_WRITE(adpcm_w)
291292   AM_RANGE(0x86, 0x87) AM_DEVWRITE_LEGACY("ay1", ay8910_data_address_w)
292293   AM_RANGE(0x8a, 0x8b) AM_DEVWRITE_LEGACY("ay2", ay8910_data_address_w)
293294   AM_RANGE(0x8e, 0x8f) AM_DEVWRITE_LEGACY("ay3", ay8910_data_address_w)
src/mame/drivers/wallc.c
r14845r14846
6161
6262   UINT8 *m_videoram;
6363   tilemap_t *m_bg_tilemap;
64   DECLARE_WRITE8_MEMBER(wallc_videoram_w);
65   DECLARE_WRITE8_MEMBER(wallc_coin_counter_w);
6466};
6567
6668
r14845r14846
126128   }
127129}
128130
129static WRITE8_HANDLER( wallc_videoram_w )
131WRITE8_MEMBER(wallc_state::wallc_videoram_w)
130132{
131   wallc_state *state = space->machine().driver_data<wallc_state>();
132   UINT8 *videoram = state->m_videoram;
133   UINT8 *videoram = m_videoram;
133134   videoram[offset] = data;
134   state->m_bg_tilemap->mark_tile_dirty(offset);
135   m_bg_tilemap->mark_tile_dirty(offset);
135136}
136137
137138static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
154155   return 0;
155156}
156157
157static WRITE8_HANDLER( wallc_coin_counter_w )
158WRITE8_MEMBER(wallc_state::wallc_coin_counter_w)
158159{
159   coin_counter_w(space->machine(), 0,data & 2);
160   coin_counter_w(machine(), 0,data & 2);
160161}
161162
162163static ADDRESS_MAP_START( wallc_map, AS_PROGRAM, 8, wallc_state )
163164   AM_RANGE(0x0000, 0x7fff) AM_ROM
164   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE_LEGACY(wallc_videoram_w) AM_MIRROR(0xc00) AM_BASE(m_videoram)   /* 2114, 2114 */
165   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(wallc_videoram_w) AM_MIRROR(0xc00) AM_BASE(m_videoram)   /* 2114, 2114 */
165166   AM_RANGE(0xa000, 0xa3ff) AM_RAM      /* 2114, 2114 */
166167
167168   AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1")
r14845r14846
170171   AM_RANGE(0xb600, 0xb600) AM_READ_PORT("DSW2")
171172
172173   AM_RANGE(0xb000, 0xb000) AM_WRITENOP
173   AM_RANGE(0xb100, 0xb100) AM_WRITE_LEGACY(wallc_coin_counter_w)
174   AM_RANGE(0xb100, 0xb100) AM_WRITE(wallc_coin_counter_w)
174175   AM_RANGE(0xb200, 0xb200) AM_WRITENOP
175176   AM_RANGE(0xb500, 0xb500) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
176177   AM_RANGE(0xb600, 0xb600) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
src/mame/drivers/marinedt.c
r14845r14846
130130   UINT8 m_cxh;
131131   UINT8 m_cyrh;
132132   UINT8 m_cyqh;
133   DECLARE_WRITE8_MEMBER(tx_tileram_w);
134   DECLARE_READ8_MEMBER(marinedt_port1_r);
135   DECLARE_READ8_MEMBER(marinedt_coll_r);
136   DECLARE_READ8_MEMBER(marinedt_obj1_x_r);
137   DECLARE_READ8_MEMBER(marinedt_obj1_yr_r);
138   DECLARE_READ8_MEMBER(marinedt_obj1_yq_r);
139   DECLARE_WRITE8_MEMBER(marinedt_obj1_a_w);
140   DECLARE_WRITE8_MEMBER(marinedt_obj1_x_w);
141   DECLARE_WRITE8_MEMBER(marinedt_obj1_y_w);
142   DECLARE_WRITE8_MEMBER(marinedt_obj2_a_w);
143   DECLARE_WRITE8_MEMBER(marinedt_obj2_x_w);
144   DECLARE_WRITE8_MEMBER(marinedt_obj2_y_w);
145   DECLARE_WRITE8_MEMBER(marinedt_music_w);
146   DECLARE_WRITE8_MEMBER(marinedt_sound_w);
147   DECLARE_WRITE8_MEMBER(marinedt_pd_w);
148   DECLARE_WRITE8_MEMBER(marinedt_pf_w);
133149};
134150
135151
136static WRITE8_HANDLER( tx_tileram_w )
152WRITE8_MEMBER(marinedt_state::tx_tileram_w)
137153{
138   marinedt_state *state = space->machine().driver_data<marinedt_state>();
139154
140   state->m_tx_tileram[offset] = data;
141   state->m_tx_tilemap->mark_tile_dirty(offset);
155   m_tx_tileram[offset] = data;
156   m_tx_tilemap->mark_tile_dirty(offset);
142157}
143158
144static READ8_HANDLER( marinedt_port1_r )
159READ8_MEMBER(marinedt_state::marinedt_port1_r)
145160{
146   marinedt_state *state = space->machine().driver_data<marinedt_state>();
147161
148162   //might need to be reversed for cocktail stuff
149163
150164   /* x/y multiplexed */
151   return input_port_read(space->machine(), ((state->m_pf & 0x08) >> 3) ? "TRACKY" : "TRACKX");
165   return input_port_read(machine(), ((m_pf & 0x08) >> 3) ? "TRACKY" : "TRACKX");
152166}
153167
154static READ8_HANDLER( marinedt_coll_r )
168READ8_MEMBER(marinedt_state::marinedt_coll_r)
155169{
156170   //76543210
157171   //x------- obj1 to obj2 collision
r14845r14846
159173   //----x--- obj1 to playfield collision
160174   //-----xxx unused
161175
162   marinedt_state *state = space->machine().driver_data<marinedt_state>();
163   return state->m_coll | state->m_collh;
176   return m_coll | m_collh;
164177}
165178
166179//are these returning only during a collision?
167180//id imagine they are returning the pf char where the collission took place?
168181//what about where there is lots of colls?
169182//maybe the first on a scanline basis
170static READ8_HANDLER( marinedt_obj1_x_r )
183READ8_MEMBER(marinedt_state::marinedt_obj1_x_r)
171184{
172185   //76543210
173186   //xxxx---- unknown
174187   //----xxxx x pos in tile ram
175188
176   marinedt_state *state = space->machine().driver_data<marinedt_state>();
177   UINT8 *RAM = space->machine().region("maincpu")->base();
189   UINT8 *RAM = machine().region("maincpu")->base();
178190
179191   if (RAM[0x430e])
180      --state->m_cx;
192      --m_cx;
181193   else
182      ++state->m_cx;
194      ++m_cx;
183195
184196   //figure out why inc/dec based on 430e?
185   return state->m_cx | (state->m_cxh << 4);
197   return m_cx | (m_cxh << 4);
186198}
187199
188static READ8_HANDLER( marinedt_obj1_yr_r )
200READ8_MEMBER(marinedt_state::marinedt_obj1_yr_r)
189201{
190202   //76543210
191203   //xxxx---- unknown
192204   //----xxxx row in current screen quarter
193205
194   marinedt_state *state = space->machine().driver_data<marinedt_state>();
195206
196207   //has to be +1 if cx went over?
197   if (state->m_cx == 0x10)
198      state->m_cyr++;
208   if (m_cx == 0x10)
209      m_cyr++;
199210
200   return state->m_cyr | (state->m_cyrh << 4);
211   return m_cyr | (m_cyrh << 4);
201212}
202213
203static READ8_HANDLER( marinedt_obj1_yq_r )
214READ8_MEMBER(marinedt_state::marinedt_obj1_yq_r)
204215{
205216   //76543210
206217   //xx------ unknown
r14845r14846
208219   //----xx-- unknown
209220   //------xx screen quarter
210221
211   marinedt_state *state = space->machine().driver_data<marinedt_state>();
212   return state->m_cyq | (state->m_cyqh << 4);
222   return m_cyq | (m_cyqh << 4);
213223}
214224
215static WRITE8_HANDLER( marinedt_obj1_a_w ) { marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_obj1_a = data; }
216static WRITE8_HANDLER( marinedt_obj1_x_w ) { marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_obj1_x = data; }
217static WRITE8_HANDLER( marinedt_obj1_y_w ) { marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_obj1_y = data; }
218static WRITE8_HANDLER( marinedt_obj2_a_w ) { marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_obj2_a = data; }
219static WRITE8_HANDLER( marinedt_obj2_x_w ) { marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_obj2_x = data; }
220static WRITE8_HANDLER( marinedt_obj2_y_w ) { marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_obj2_y = data; }
225WRITE8_MEMBER(marinedt_state::marinedt_obj1_a_w){ m_obj1_a = data; }
226WRITE8_MEMBER(marinedt_state::marinedt_obj1_x_w){ m_obj1_x = data; }
227WRITE8_MEMBER(marinedt_state::marinedt_obj1_y_w){ m_obj1_y = data; }
228WRITE8_MEMBER(marinedt_state::marinedt_obj2_a_w){ m_obj2_a = data; }
229WRITE8_MEMBER(marinedt_state::marinedt_obj2_x_w){ m_obj2_x = data; }
230WRITE8_MEMBER(marinedt_state::marinedt_obj2_y_w){ m_obj2_y = data; }
221231
222static WRITE8_HANDLER( marinedt_music_w ){ marinedt_state *state = space->machine().driver_data<marinedt_state>();    state->m_music = data; }
232WRITE8_MEMBER(marinedt_state::marinedt_music_w){ m_music = data; }
223233
224static WRITE8_HANDLER( marinedt_sound_w )
234WRITE8_MEMBER(marinedt_state::marinedt_sound_w)
225235{
226236   //76543210
227237   //xx------ ??
r14845r14846
232242   //------x- dots hit
233243   //-------x ??
234244
235   marinedt_state *state = space->machine().driver_data<marinedt_state>();
236   state->m_sound = data;
245   m_sound = data;
237246}
238247
239static WRITE8_HANDLER( marinedt_pd_w )
248WRITE8_MEMBER(marinedt_state::marinedt_pd_w)
240249{
241250   //76543210
242251   //xxx----- ?? unused
r14845r14846
246255   //------x- obj2 enable
247256   //-------x obj1 enable
248257
249   marinedt_state *state = space->machine().driver_data<marinedt_state>();
250   state->m_pd = data;
258   m_pd = data;
251259}
252260
253261/*
r14845r14846
265273marinedt_pf_w: 07   // cocktail
266274marinedt_pf_w: 03   // non-flip sprite?
267275*/
268static WRITE8_HANDLER( marinedt_pf_w )
276WRITE8_MEMBER(marinedt_state::marinedt_pf_w)
269277{
270278   //76543210
271279   //xxxx---- ?? unused (will need to understand table of written values)
r14845r14846
274282   //------x- ?? upright/cocktail
275283   //-------x ?? service mode (coin lockout??)
276284
277   marinedt_state *state = space->machine().driver_data<marinedt_state>();
278285
279   //if ((state->m_pf & 0x07) != (data & 0x07))
286   //if ((m_pf & 0x07) != (data & 0x07))
280287   //  mame_printf_debug("marinedt_pf_w: %02x\n", data & 0x07);
281288
282   if ((state->m_pf & 0x02) != (data & 0x02))
289   if ((m_pf & 0x02) != (data & 0x02))
283290   {
284291      if (data & 0x02)
285292         mame_printf_debug("tile flip\n");
r14845r14846
287294         mame_printf_debug("tile non-flip\n");
288295
289296      if (data & 0x02)
290         state->m_tx_tilemap->set_flip(TILEMAP_FLIPX | TILEMAP_FLIPY);
297         m_tx_tilemap->set_flip(TILEMAP_FLIPX | TILEMAP_FLIPY);
291298      else
292         state->m_tx_tilemap->set_flip(0);
299         m_tx_tilemap->set_flip(0);
293300   }
294301
295   state->m_pf = data;
302   m_pf = data;
296303
297304   //if (data & 0xf0)
298   //    logerror("pf:%02x %d\n", state->m_pf);
299   //logerror("pd:%02x %d\n", state->m_pd, space->machine().primary_screen->frame_number());
305   //    logerror("pf:%02x %d\n", m_pf);
306   //logerror("pd:%02x %d\n", m_pd, machine().primary_screen->frame_number());
300307
301308}
302309
r14845r14846
304311   AM_RANGE(0x0000, 0x37ff) AM_ROM
305312   AM_RANGE(0x4000, 0x43ff) AM_RAM
306313   AM_RANGE(0x4400, 0x47ff) AM_RAM            //unused, vram mirror?
307   AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE_LEGACY(tx_tileram_w) AM_BASE(m_tx_tileram)
314   AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(tx_tileram_w) AM_BASE(m_tx_tileram)
308315   AM_RANGE(0x4c00, 0x4c00) AM_WRITENOP   //?? maybe off by one error
309316ADDRESS_MAP_END
310317
311318static ADDRESS_MAP_START( marinedt_io_map, AS_IO, 8, marinedt_state )
312319   ADDRESS_MAP_GLOBAL_MASK(0xff)
313320   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW0")      //dips coinage
314   AM_RANGE(0x01, 0x01) AM_READ_LEGACY(marinedt_port1_r)   //trackball xy muxed
315   AM_RANGE(0x02, 0x02) AM_READWRITE_LEGACY(marinedt_obj1_x_r, marinedt_obj1_a_w)
316   AM_RANGE(0x03, 0x03) AM_READ_PORT("IN0") AM_WRITE_LEGACY(marinedt_obj1_x_w)
317   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(marinedt_obj1_y_w)
318   AM_RANGE(0x05, 0x05) AM_WRITE_LEGACY(marinedt_music_w)
319   AM_RANGE(0x06, 0x06) AM_READWRITE_LEGACY(marinedt_obj1_yr_r, marinedt_sound_w)
320   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(marinedt_obj2_a_w)
321   AM_RANGE(0x09, 0x09) AM_WRITE_LEGACY(marinedt_obj2_x_w)
322   AM_RANGE(0x0a, 0x0a) AM_READWRITE_LEGACY(marinedt_obj1_yq_r, marinedt_obj2_y_w)
323   AM_RANGE(0x0d, 0x0d) AM_WRITE_LEGACY(marinedt_pd_w)
324   AM_RANGE(0x0e, 0x0e) AM_READWRITE_LEGACY(marinedt_coll_r, watchdog_reset_w)
325   AM_RANGE(0x0f, 0x0f) AM_WRITE_LEGACY(marinedt_pf_w)
321   AM_RANGE(0x01, 0x01) AM_READ(marinedt_port1_r)   //trackball xy muxed
322   AM_RANGE(0x02, 0x02) AM_READWRITE(marinedt_obj1_x_r, marinedt_obj1_a_w)
323   AM_RANGE(0x03, 0x03) AM_READ_PORT("IN0") AM_WRITE(marinedt_obj1_x_w)
324   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1") AM_WRITE(marinedt_obj1_y_w)
325   AM_RANGE(0x05, 0x05) AM_WRITE(marinedt_music_w)
326   AM_RANGE(0x06, 0x06) AM_READWRITE(marinedt_obj1_yr_r, marinedt_sound_w)
327   AM_RANGE(0x08, 0x08) AM_WRITE(marinedt_obj2_a_w)
328   AM_RANGE(0x09, 0x09) AM_WRITE(marinedt_obj2_x_w)
329   AM_RANGE(0x0a, 0x0a) AM_READWRITE(marinedt_obj1_yq_r, marinedt_obj2_y_w)
330   AM_RANGE(0x0d, 0x0d) AM_WRITE(marinedt_pd_w)
331   AM_RANGE(0x0e, 0x0e) AM_READWRITE(marinedt_coll_r, watchdog_reset_w)
332   AM_RANGE(0x0f, 0x0f) AM_WRITE(marinedt_pf_w)
326333ADDRESS_MAP_END
327334
328335
src/mame/drivers/sliver.c
r14845r14846
103103   UINT16 m_tempbuf[8];
104104
105105   required_device<cpu_device> m_maincpu;
106   DECLARE_WRITE16_MEMBER(fifo_data_w);
107   DECLARE_WRITE16_MEMBER(fifo_clear_w);
108   DECLARE_WRITE16_MEMBER(fifo_flush_w);
109   DECLARE_WRITE16_MEMBER(jpeg1_w);
110   DECLARE_WRITE16_MEMBER(jpeg2_w);
111   DECLARE_WRITE16_MEMBER(io_offset_w);
112   DECLARE_WRITE16_MEMBER(io_data_w);
113   DECLARE_WRITE16_MEMBER(sound_w);
114   DECLARE_WRITE8_MEMBER(oki_setbank);
106115};
107116
108117static void plot_pixel_rgb(sliver_state *state, int x, int y, UINT32 r, UINT32 g, UINT32 b)
r14845r14846
130139   state->m_bitmap_fg.pix32(y, x) = r | (g<<8) | (b<<16);
131140}
132141
133static WRITE16_HANDLER( fifo_data_w )
142WRITE16_MEMBER(sliver_state::fifo_data_w)
134143{
135   sliver_state *state = space->machine().driver_data<sliver_state>();
136144
137   if (state->m_tmp_counter < 8)
145   if (m_tmp_counter < 8)
138146   {
139      COMBINE_DATA(&state->m_tempbuf[state->m_tmp_counter]);
140      state->m_tmp_counter++;
141      if (state->m_tmp_counter == 8) // copy 8 bytes to fifo,  every byte should be copied directly, but it's easier to copy whole commands
147      COMBINE_DATA(&m_tempbuf[m_tmp_counter]);
148      m_tmp_counter++;
149      if (m_tmp_counter == 8) // copy 8 bytes to fifo,  every byte should be copied directly, but it's easier to copy whole commands
142150      {
143151         do
144152         {
145            state->m_fifo[state->m_fptr++]=state->m_tempbuf[8-state->m_tmp_counter];
146            if (state->m_fptr > (FIFO_SIZE - 1))
153            m_fifo[m_fptr++]=m_tempbuf[8-m_tmp_counter];
154            if (m_fptr > (FIFO_SIZE - 1))
147155            {
148               state->m_fptr=FIFO_SIZE-1;
156               m_fptr=FIFO_SIZE-1;
149157            }
150158         }
151         while (--state->m_tmp_counter > 0);
159         while (--m_tmp_counter > 0);
152160      }
153161   }
154162}
r14845r14846
187195   }
188196}
189197
190static WRITE16_HANDLER( fifo_clear_w )
198WRITE16_MEMBER(sliver_state::fifo_clear_w)
191199{
192   sliver_state *state = space->machine().driver_data<sliver_state>();
193200
194   state->m_bitmap_fg.fill(0);
195   state->m_fptr=0;
196   state->m_tmp_counter=0;
201   m_bitmap_fg.fill(0);
202   m_fptr=0;
203   m_tmp_counter=0;
197204}
198205
199static WRITE16_HANDLER( fifo_flush_w )
206WRITE16_MEMBER(sliver_state::fifo_flush_w)
200207{
201   blit_gfx(space->machine());
208   blit_gfx(machine());
202209}
203210
204211
205static WRITE16_HANDLER( jpeg1_w )
212WRITE16_MEMBER(sliver_state::jpeg1_w)
206213{
207   sliver_state *state = space->machine().driver_data<sliver_state>();
208214
209   COMBINE_DATA(&state->m_jpeg1);
215   COMBINE_DATA(&m_jpeg1);
210216}
211217
212218static void render_jpeg(running_machine &machine)
r14845r14846
266272
267273}
268274
269static WRITE16_HANDLER( jpeg2_w )
275WRITE16_MEMBER(sliver_state::jpeg2_w)
270276{
271   sliver_state *state = space->machine().driver_data<sliver_state>();
272277
273   COMBINE_DATA(&state->m_jpeg2);
278   COMBINE_DATA(&m_jpeg2);
274279
275   render_jpeg(space->machine());
280   render_jpeg(machine());
276281
277282}
278283
279static WRITE16_HANDLER(io_offset_w)
284WRITE16_MEMBER(sliver_state::io_offset_w)
280285{
281   sliver_state *state = space->machine().driver_data<sliver_state>();
282286
283   COMBINE_DATA(&state->m_io_offset);
287   COMBINE_DATA(&m_io_offset);
284288}
285289
286static WRITE16_HANDLER(io_data_w)
290WRITE16_MEMBER(sliver_state::io_data_w)
287291{
288   sliver_state *state = space->machine().driver_data<sliver_state>();
289292
290   if (state->m_io_offset < IO_SIZE)
293   if (m_io_offset < IO_SIZE)
291294   {
292295      int tmpx, tmpy;
293      COMBINE_DATA(&state->m_io_reg[state->m_io_offset]);
296      COMBINE_DATA(&m_io_reg[m_io_offset]);
294297
295      tmpy = state->m_io_reg[0x1a] + (state->m_io_reg[0x1b] << 8) - state->m_io_reg[0x20]; //0x20  ???
296      tmpx = state->m_io_reg[0x1e] + (state->m_io_reg[0x1f] << 8);
298      tmpy = m_io_reg[0x1a] + (m_io_reg[0x1b] << 8) - m_io_reg[0x20]; //0x20  ???
299      tmpx = m_io_reg[0x1e] + (m_io_reg[0x1f] << 8);
297300
298      if (tmpy != state->m_jpeg_y || tmpx != state->m_jpeg_x)
301      if (tmpy != m_jpeg_y || tmpx != m_jpeg_x)
299302      {
300         state->m_jpeg_x = tmpx;
301         state->m_jpeg_y = tmpy;
302         render_jpeg(space->machine());
303         m_jpeg_x = tmpx;
304         m_jpeg_y = tmpy;
305         render_jpeg(machine());
303306      }
304307   }
305308   else
306309   {
307      logerror("I/O access out of range: %x\n", state->m_io_offset);
310      logerror("I/O access out of range: %x\n", m_io_offset);
308311   }
309312}
310313
311static WRITE16_HANDLER(sound_w)
314WRITE16_MEMBER(sliver_state::sound_w)
312315{
313316   soundlatch_w(space, 0, data & 0xff);
314   cputag_set_input_line(space->machine(), "audiocpu", MCS51_INT0_LINE, HOLD_LINE);
317   cputag_set_input_line(machine(), "audiocpu", MCS51_INT0_LINE, HOLD_LINE);
315318}
316319
317320static ADDRESS_MAP_START( sliver_map, AS_PROGRAM, 16, sliver_state )
r14845r14846
323326
324327   AM_RANGE(0x300002, 0x300003) AM_NOP // bit 0 tested, writes 0xe0 and 0xc0 - both r and w at the end of interrupt code
325328
326   AM_RANGE(0x300004, 0x300005) AM_WRITE_LEGACY(io_offset_w) //unknown i/o device
327   AM_RANGE(0x300006, 0x300007) AM_WRITE_LEGACY(io_data_w)
329   AM_RANGE(0x300004, 0x300005) AM_WRITE(io_offset_w) //unknown i/o device
330   AM_RANGE(0x300006, 0x300007) AM_WRITE(io_data_w)
328331
329332   AM_RANGE(0x400000, 0x400001) AM_READ_PORT("P1_P2")
330333   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("SYSTEM")
331334   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("DSW")
332   AM_RANGE(0x400006, 0x400007) AM_WRITE_LEGACY(fifo_data_w)
333   AM_RANGE(0x400008, 0x400009) AM_WRITE_LEGACY(fifo_clear_w)
334   AM_RANGE(0x40000a, 0x40000b) AM_WRITE_LEGACY(fifo_flush_w)
335   AM_RANGE(0x40000c, 0x40000d) AM_WRITE_LEGACY(jpeg1_w)
336   AM_RANGE(0x40000e, 0x40000f) AM_WRITE_LEGACY(jpeg2_w)
335   AM_RANGE(0x400006, 0x400007) AM_WRITE(fifo_data_w)
336   AM_RANGE(0x400008, 0x400009) AM_WRITE(fifo_clear_w)
337   AM_RANGE(0x40000a, 0x40000b) AM_WRITE(fifo_flush_w)
338   AM_RANGE(0x40000c, 0x40000d) AM_WRITE(jpeg1_w)
339   AM_RANGE(0x40000e, 0x40000f) AM_WRITE(jpeg2_w)
337340
338341   AM_RANGE(0x400010, 0x400015) AM_WRITENOP //unknown
339   AM_RANGE(0x400016, 0x400017) AM_WRITE_LEGACY(sound_w)
342   AM_RANGE(0x400016, 0x400017) AM_WRITE(sound_w)
340343   AM_RANGE(0x400018, 0x400019) AM_WRITENOP //unknown
341344
342345   AM_RANGE(0xff0000, 0xffffff) AM_RAM
r14845r14846
344347
345348// Sound CPU
346349
347static WRITE8_HANDLER(oki_setbank)
350WRITE8_MEMBER(sliver_state::oki_setbank)
348351{
349   UINT8 *sound = space->machine().region("oki")->base();
352   UINT8 *sound = machine().region("oki")->base();
350353   int bank=(data^0xff)&3; //xor or not ?
351354   memcpy(sound+0x20000, sound+0x100000+0x20000*bank, 0x20000);
352355}
r14845r14846
359362   AM_RANGE(0x0100, 0x0100) AM_DEVREADWRITE("oki", okim6295_device, read, write)
360363   AM_RANGE(0x0101, 0x0101) AM_READ_LEGACY(soundlatch_r)
361364   /* ports */
362   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE_LEGACY(oki_setbank )
365   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(oki_setbank )
363366ADDRESS_MAP_END
364367
365368static VIDEO_START(sliver)
src/mame/drivers/tonton.c
r14845r14846
3838        m_v9938(*this, "v9938") { }
3939
4040   required_device<v9938_device> m_v9938;
41   DECLARE_WRITE8_MEMBER(tonton_outport_w);
4142};
4243
4344#define MAIN_CLOCK XTAL_21_4772MHz
r14845r14846
6667*          Multi-Purpose Output Port             *
6768*************************************************/
6869
69static WRITE8_HANDLER( tonton_outport_w )
70WRITE8_MEMBER(tonton_state::tonton_outport_w)
7071{
7172   /* lockout perhaps? */
72   coin_counter_w(space->machine(), offset, data & 0x01);
73   coin_counter_w(machine(), offset, data & 0x01);
7374
7475   // data & 2 is hopper related
7576
r14845r14846
9293   ADDRESS_MAP_GLOBAL_MASK(0xff)
9394   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0")
9495   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1")
95   AM_RANGE(0x00, 0x01) AM_WRITE_LEGACY(tonton_outport_w)
96   AM_RANGE(0x00, 0x01) AM_WRITE(tonton_outport_w)
9697   AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW1")
9798   AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW2")
9899   AM_RANGE(0x88, 0x8b) AM_DEVREADWRITE( "v9938", v9938_device, read, write )
src/mame/drivers/subsino.c
r14845r14846
257257   int m_colordac_offs;
258258   UINT8* m_stisub_colorram;
259259   UINT8 m_stisub_outc;
260   DECLARE_WRITE8_MEMBER(subsino_tiles_offset_w);
261   DECLARE_WRITE8_MEMBER(subsino_videoram_w);
262   DECLARE_WRITE8_MEMBER(subsino_colorram_w);
263   DECLARE_WRITE8_MEMBER(subsino_reel1_ram_w);
264   DECLARE_WRITE8_MEMBER(subsino_reel2_ram_w);
265   DECLARE_WRITE8_MEMBER(subsino_reel3_ram_w);
266   DECLARE_WRITE8_MEMBER(subsino_out_a_w);
267   DECLARE_WRITE8_MEMBER(subsino_out_b_w);
268   DECLARE_READ8_MEMBER(flash_r);
269   DECLARE_WRITE8_MEMBER(flash_w);
270   DECLARE_READ8_MEMBER(hwcheck_r);
271   DECLARE_WRITE8_MEMBER(subsino_out_c_w);
272   DECLARE_WRITE8_MEMBER(colordac_w);
273   DECLARE_WRITE8_MEMBER(stisub_out_c_w);
274   DECLARE_WRITE8_MEMBER(reel_scrollattr_w);
275   DECLARE_READ8_MEMBER(reel_scrollattr_r);
260276};
261277
262278
r14845r14846
266282***************************************************************************/
267283
268284
269static WRITE8_HANDLER( subsino_tiles_offset_w )
285WRITE8_MEMBER(subsino_state::subsino_tiles_offset_w)
270286{
271   subsino_state *state = space->machine().driver_data<subsino_state>();
272   state->m_tiles_offset = (data & 1) ? 0x1000: 0;
273   state->m_tmap->mark_tile_dirty(offset);
287   m_tiles_offset = (data & 1) ? 0x1000: 0;
288   m_tmap->mark_tile_dirty(offset);
274289//  popmessage("gfx %02x",data);
275290}
276291
277static WRITE8_HANDLER( subsino_videoram_w )
292WRITE8_MEMBER(subsino_state::subsino_videoram_w)
278293{
279   subsino_state *state = space->machine().driver_data<subsino_state>();
280   state->m_videoram[offset] = data;
281   state->m_tmap->mark_tile_dirty(offset);
294   m_videoram[offset] = data;
295   m_tmap->mark_tile_dirty(offset);
282296}
283297
284static WRITE8_HANDLER( subsino_colorram_w )
298WRITE8_MEMBER(subsino_state::subsino_colorram_w)
285299{
286   subsino_state *state = space->machine().driver_data<subsino_state>();
287   state->m_colorram[offset] = data;
288   state->m_tmap->mark_tile_dirty(offset);
300   m_colorram[offset] = data;
301   m_tmap->mark_tile_dirty(offset);
289302}
290303
291304static TILE_GET_INFO( get_tile_info )
r14845r14846
317330
318331
319332
320static WRITE8_HANDLER( subsino_reel1_ram_w )
333WRITE8_MEMBER(subsino_state::subsino_reel1_ram_w)
321334{
322   subsino_state *state = space->machine().driver_data<subsino_state>();
323   state->m_reel1_ram[offset] = data;
324   state->m_reel1_tilemap->mark_tile_dirty(offset);
335   m_reel1_ram[offset] = data;
336   m_reel1_tilemap->mark_tile_dirty(offset);
325337}
326338
327339static TILE_GET_INFO( get_subsino_reel1_tile_info )
r14845r14846
351363}
352364
353365
354static WRITE8_HANDLER( subsino_reel2_ram_w )
366WRITE8_MEMBER(subsino_state::subsino_reel2_ram_w)
355367{
356   subsino_state *state = space->machine().driver_data<subsino_state>();
357   state->m_reel2_ram[offset] = data;
358   state->m_reel2_tilemap->mark_tile_dirty(offset);
368   m_reel2_ram[offset] = data;
369   m_reel2_tilemap->mark_tile_dirty(offset);
359370}
360371
361372static TILE_GET_INFO( get_subsino_reel2_tile_info )
r14845r14846
384395         0);
385396}
386397
387static WRITE8_HANDLER( subsino_reel3_ram_w )
398WRITE8_MEMBER(subsino_state::subsino_reel3_ram_w)
388399{
389   subsino_state *state = space->machine().driver_data<subsino_state>();
390   state->m_reel3_ram[offset] = data;
391   state->m_reel3_tilemap->mark_tile_dirty(offset);
400   m_reel3_ram[offset] = data;
401   m_reel3_tilemap->mark_tile_dirty(offset);
392402}
393403
394404static TILE_GET_INFO( get_subsino_reel3_tile_info )
r14845r14846
584594*                          Lamps & other outputs.                          *
585595***************************************************************************/
586596
587static WRITE8_HANDLER( subsino_out_a_w )
597WRITE8_MEMBER(subsino_state::subsino_out_a_w)
588598{
589
590599/***** COIN PULSE: *****
591600
592601
r14845r14846
625634   output_set_lamp_value(14, (data >> 6) & 1);   /* Lamp 14 */
626635   output_set_lamp_value(15, (data >> 7) & 1);   /* Lamp 15 */
627636
628   coin_counter_w( space->machine(), 0, data & 0x01 );   /* coin / keyin */
629   coin_counter_w( space->machine(), 1, data & 0x02 );   /* keyin / coin */
630   coin_counter_w( space->machine(), 2, data & 0x10 );   /* keyout */
631   coin_counter_w( space->machine(), 3, data & 0x20 );   /* payout */
637   coin_counter_w( machine(), 0, data & 0x01 );   /* coin / keyin */
638   coin_counter_w( machine(), 1, data & 0x02 );   /* keyin / coin */
639   coin_counter_w( machine(), 2, data & 0x10 );   /* keyout */
640   coin_counter_w( machine(), 3, data & 0x20 );   /* payout */
632641
633642//  popmessage("Out A %02x",data);
634643
635644}
636645
637static WRITE8_HANDLER( subsino_out_b_w )
646WRITE8_MEMBER(subsino_state::subsino_out_b_w)
638647{
639648/***** LAMPS: *****
640649
r14845r14846
787796   AM_RANGE( 0x0d005, 0x0d005 ) AM_READ_PORT( "INA" )
788797   AM_RANGE( 0x0d006, 0x0d006 ) AM_READ_PORT( "INB" )
789798
790   AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE_LEGACY(subsino_out_b_w )
791   AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE_LEGACY(subsino_out_a_w )
799   AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE(subsino_out_b_w )
800   AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE(subsino_out_a_w )
792801
793802   AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" )
794803
r14845r14846
796805
797806   AM_RANGE( 0x0d018, 0x0d018 ) AM_DEVWRITE("oki", okim6295_device, write)
798807
799   AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE_LEGACY(subsino_tiles_offset_w )
808   AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE(subsino_tiles_offset_w )
800809
801   AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
802   AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
810   AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
811   AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
803812ADDRESS_MAP_END
804813
805814
r14845r14846
814823   AM_RANGE( 0x09005, 0x09005 ) AM_READ_PORT( "INA" )
815824   AM_RANGE( 0x09006, 0x09006 ) AM_READ_PORT( "INB" )
816825
817   AM_RANGE( 0x09009, 0x09009 ) AM_WRITE_LEGACY(subsino_out_b_w )
818   AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE_LEGACY(subsino_out_a_w )
826   AM_RANGE( 0x09009, 0x09009 ) AM_WRITE(subsino_out_b_w )
827   AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE(subsino_out_a_w )
819828
820829   AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" )
821830
r14845r14846
823832
824833   AM_RANGE( 0x09018, 0x09018 ) AM_DEVWRITE("oki", okim6295_device, write)
825834
826   AM_RANGE( 0x0901b, 0x0901b ) AM_WRITE_LEGACY(subsino_tiles_offset_w )
835   AM_RANGE( 0x0901b, 0x0901b ) AM_WRITE(subsino_tiles_offset_w )
827836
828837   AM_RANGE( 0x07800, 0x07fff ) AM_RAM
829   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
830   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
838   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
839   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
831840
832841   AM_RANGE( 0x00000, 0x13fff ) AM_ROM //overlap unmapped regions
833842ADDRESS_MAP_END
r14845r14846
841850static ADDRESS_MAP_START( victor21_map, AS_PROGRAM, 8, subsino_state )
842851   AM_RANGE( 0x09800, 0x09fff ) AM_RAM
843852
844   AM_RANGE( 0x09000, 0x09000 ) AM_WRITE_LEGACY(subsino_out_a_w )
845   AM_RANGE( 0x09001, 0x09001 ) AM_WRITE_LEGACY(subsino_out_b_w )
853   AM_RANGE( 0x09000, 0x09000 ) AM_WRITE(subsino_out_a_w )
854   AM_RANGE( 0x09001, 0x09001 ) AM_WRITE(subsino_out_b_w )
846855   AM_RANGE( 0x09002, 0x09002 ) AM_READ_PORT( "INC" )
847856   AM_RANGE( 0x09004, 0x09004 ) AM_READ_PORT( "INA" )
848857   AM_RANGE( 0x09005, 0x09005 ) AM_READ_PORT( "INB" )
r14845r14846
857866
858867   AM_RANGE( 0x0900e, 0x0900f ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
859868
860   AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE_LEGACY(subsino_tiles_offset_w )
869   AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE(subsino_tiles_offset_w )
861870
862871   AM_RANGE( 0x07800, 0x07fff ) AM_RAM
863   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
864   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
872   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
873   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
865874
866875   AM_RANGE( 0x00000, 0x08fff ) AM_ROM //overlap unmapped regions
867876   AM_RANGE( 0x10000, 0x13fff ) AM_ROM
r14845r14846
886895*/
887896
888897
889static READ8_HANDLER( flash_r )
898READ8_MEMBER(subsino_state::flash_r)
890899{
891   subsino_state *state = space->machine().driver_data<subsino_state>();
892//  printf("R %02x\n",state->m_flash_val);
900//  printf("R %02x\n",m_flash_val);
893901
894   if(state->m_flash_val == 0xff)
902   if(m_flash_val == 0xff)
895903      return 0xd9;
896   else if(state->m_flash_val <= 0xa)
897      return state->m_flash_val;
898   else if(state->m_flash_val == 0x92)
904   else if(m_flash_val <= 0xa)
905      return m_flash_val;
906   else if(m_flash_val == 0x92)
899907      return 0xeb; //protected GFXs in Cross Bingo
900908   else
901909      return 0xd9;
902910}
903911
904static WRITE8_HANDLER( flash_w )
912WRITE8_MEMBER(subsino_state::flash_w)
905913{
906   subsino_state *state = space->machine().driver_data<subsino_state>();
907   switch(state->m_flash_packet_start)
914   switch(m_flash_packet_start)
908915   {
909916      case 0:
910         state->m_flash_packet = data;
911         if((state->m_flash_packet & 0xf8) == 0xd0)
912            state->m_flash_packet_start = 1; //start of packet
917         m_flash_packet = data;
918         if((m_flash_packet & 0xf8) == 0xd0)
919            m_flash_packet_start = 1; //start of packet
913920         break;
914921      case 1:
915         state->m_flash_packet = data;
916         if((state->m_flash_packet & 0xf8) == 0xe0)
917            state->m_flash_packet_start = 0; //end of packet
922         m_flash_packet = data;
923         if((m_flash_packet & 0xf8) == 0xe0)
924            m_flash_packet_start = 0; //end of packet
918925         else
919            state->m_flash_val = data;
926            m_flash_val = data;
920927         break;
921928   }
922929}
923930
924931static ADDRESS_MAP_START( victor5_map, AS_PROGRAM, 8, subsino_state )
925932   AM_IMPORT_FROM( victor21_map )
926   AM_RANGE( 0x0900a, 0x0900a ) AM_READWRITE_LEGACY(flash_r, flash_w )
933   AM_RANGE( 0x0900a, 0x0900a ) AM_READWRITE(flash_r, flash_w )
927934   AM_RANGE( 0x0900b, 0x0900b ) AM_READNOP //"flash" status, bit 0
928935ADDRESS_MAP_END
929936
930937
931static READ8_HANDLER( hwcheck_r )
938READ8_MEMBER(subsino_state::hwcheck_r)
932939{
933940   /* Wants this at POST otherwise an "Hardware Error" occurs. */
934941   return 0x55;
r14845r14846
942949   AM_RANGE( 0x09002, 0x09002 ) AM_READ_PORT( "INA" )
943950   AM_RANGE( 0x09003, 0x09003 ) AM_READ_PORT( "INB" )
944951   AM_RANGE( 0x09004, 0x09004 ) AM_READ_PORT( "INC" )
945   AM_RANGE( 0x09005, 0x09005 ) AM_WRITE_LEGACY(subsino_out_a_w )
952   AM_RANGE( 0x09005, 0x09005 ) AM_WRITE(subsino_out_a_w )
946953
947954   AM_RANGE( 0x09008, 0x09008 ) AM_READ_PORT( "SW4" )
948   AM_RANGE( 0x09009, 0x09009 ) AM_READ_PORT( "SW3" )   // AM_WRITE_LEGACY(subsino_out_a_w )
949   AM_RANGE( 0x0900a, 0x0900a ) AM_READWRITE_LEGACY(hwcheck_r, subsino_out_b_w )
955   AM_RANGE( 0x09009, 0x09009 ) AM_READ_PORT( "SW3" )   // AM_WRITE(subsino_out_a_w )
956   AM_RANGE( 0x0900a, 0x0900a ) AM_READWRITE(hwcheck_r, subsino_out_b_w )
950957
951   AM_RANGE( 0x09010, 0x09010 ) AM_READWRITE_LEGACY(flash_r, flash_w )
958   AM_RANGE( 0x09010, 0x09010 ) AM_READWRITE(flash_r, flash_w )
952959//  AM_RANGE( 0x09011, 0x09011 ) //"flash" status, bit 0
953960//  AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" )
954961   AM_RANGE( 0x0900c, 0x0900d ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
955962
956963//  AM_RANGE( 0x09018, 0x09018 ) AM_DEVWRITE("oki", okim6295_device, write)
957964
958//  AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE_LEGACY(subsino_tiles_offset_w )
965//  AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE(subsino_tiles_offset_w )
959966
960967   AM_RANGE( 0x07800, 0x07fff ) AM_RAM
961   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
962   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
968   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
969   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
963970
964971   AM_RANGE( 0x00000, 0x8fff ) AM_ROM //overlap unmapped regions
965972
r14845r14846
967974
968975ADDRESS_MAP_END
969976
970static WRITE8_HANDLER( subsino_out_c_w )
977WRITE8_MEMBER(subsino_state::subsino_out_c_w)
971978{
972   subsino_state *state = space->machine().driver_data<subsino_state>();
973979   // not 100% sure on this
974980
975981   // ???? eccc
976982   // e = enable reels?
977983   // c = reel colour bank?
978   state->m_out_c = data;
984   m_out_c = data;
979985
980   state->m_reel1_tilemap->mark_all_dirty();
981   state->m_reel2_tilemap->mark_all_dirty();
982   state->m_reel3_tilemap->mark_all_dirty();
986   m_reel1_tilemap->mark_all_dirty();
987   m_reel2_tilemap->mark_all_dirty();
988   m_reel3_tilemap->mark_all_dirty();
983989//  popmessage("data %02x\n",data);
984990}
985991
r14845r14846
9951001   AM_RANGE( 0x09006, 0x09006 ) AM_READ_PORT( "INB" )
9961002
9971003   /* 0x09008: is marked as OUTPUT C in the test mode. */
998   AM_RANGE( 0x09008, 0x09008 ) AM_WRITE_LEGACY(subsino_out_c_w )
999   AM_RANGE( 0x09009, 0x09009 ) AM_WRITE_LEGACY(subsino_out_b_w )
1000   AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE_LEGACY(subsino_out_a_w )
1004   AM_RANGE( 0x09008, 0x09008 ) AM_WRITE(subsino_out_c_w )
1005   AM_RANGE( 0x09009, 0x09009 ) AM_WRITE(subsino_out_b_w )
1006   AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE(subsino_out_a_w )
10011007
10021008   AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" )
10031009
r14845r14846
10051011
10061012//  AM_RANGE( 0x0900c, 0x0900c ) AM_DEVWRITE("oki", okim6295_device, write)
10071013
1008   AM_RANGE( 0x0901b, 0x0901b ) AM_WRITE_LEGACY(subsino_tiles_offset_w )
1014   AM_RANGE( 0x0901b, 0x0901b ) AM_WRITE(subsino_tiles_offset_w )
10091015
10101016   AM_RANGE( 0x07800, 0x07fff ) AM_RAM
1011   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
1012   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
1017   AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
1018   AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
10131019
10141020   AM_RANGE( 0x00000, 0x0bfff ) AM_ROM // overlap unmapped regions
10151021   AM_RANGE( 0x10000, 0x13fff ) AM_ROM
r14845r14846
10191025   AM_RANGE( 0x15140, 0x1517f ) AM_RAM AM_BASE(m_reel2_scroll)
10201026   AM_RANGE( 0x15180, 0x151bf ) AM_RAM AM_BASE(m_reel1_scroll)
10211027
1022   AM_RANGE( 0x15800, 0x159ff ) AM_RAM_WRITE_LEGACY(subsino_reel1_ram_w) AM_BASE(m_reel1_ram)
1023   AM_RANGE( 0x15a00, 0x15bff ) AM_RAM_WRITE_LEGACY(subsino_reel2_ram_w) AM_BASE(m_reel2_ram)
1024   AM_RANGE( 0x15c00, 0x15dff ) AM_RAM_WRITE_LEGACY(subsino_reel3_ram_w) AM_BASE(m_reel3_ram)
1028   AM_RANGE( 0x15800, 0x159ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_BASE(m_reel1_ram)
1029   AM_RANGE( 0x15a00, 0x15bff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_BASE(m_reel2_ram)
1030   AM_RANGE( 0x15c00, 0x15dff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_BASE(m_reel3_ram)
10251031ADDRESS_MAP_END
10261032
10271033
1028static WRITE8_HANDLER(colordac_w)
1034WRITE8_MEMBER(subsino_state::colordac_w)
10291035{
1030   subsino_state *state = space->machine().driver_data<subsino_state>();
10311036   switch ( offset )
10321037   {
10331038      case 0:
1034         state->m_colordac_offs = data * 3;
1039         m_colordac_offs = data * 3;
10351040         break;
10361041
10371042      case 1:
1038         state->m_stisub_colorram[state->m_colordac_offs] = data;
1039         palette_set_color_rgb(space->machine(), state->m_colordac_offs/3,
1040            pal6bit(state->m_stisub_colorram[(state->m_colordac_offs/3)*3+0]),
1041            pal6bit(state->m_stisub_colorram[(state->m_colordac_offs/3)*3+1]),
1042            pal6bit(state->m_stisub_colorram[(state->m_colordac_offs/3)*3+2])
1043         m_stisub_colorram[m_colordac_offs] = data;
1044         palette_set_color_rgb(machine(), m_colordac_offs/3,
1045            pal6bit(m_stisub_colorram[(m_colordac_offs/3)*3+0]),
1046            pal6bit(m_stisub_colorram[(m_colordac_offs/3)*3+1]),
1047            pal6bit(m_stisub_colorram[(m_colordac_offs/3)*3+2])
10431048         );
1044         state->m_colordac_offs = (state->m_colordac_offs+1) % (256*3);
1049         m_colordac_offs = (m_colordac_offs+1) % (256*3);
10451050         break;
10461051
10471052      case 2:
r14845r14846
10541059}
10551060
10561061
1057static WRITE8_HANDLER( stisub_out_c_w )
1062WRITE8_MEMBER(subsino_state::stisub_out_c_w)
10581063{
1059   subsino_state *state = space->machine().driver_data<subsino_state>();
1060   state->m_stisub_outc = data;
1064   m_stisub_outc = data;
10611065
10621066}
10631067
10641068// this stuff is banked..
10651069// not 100% sure on the bank bits.. other bits are also set
1066static WRITE8_HANDLER( reel_scrollattr_w )
1070WRITE8_MEMBER(subsino_state::reel_scrollattr_w)
10671071{
1068   subsino_state *state = space->machine().driver_data<subsino_state>();
1069   if (state->m_stisub_outc&0x20)
1072   if (m_stisub_outc&0x20)
10701073   {
10711074      if (offset<0x200)
10721075      {
1073         state->m_reel1_attr[offset&0x1ff] = data;
1076         m_reel1_attr[offset&0x1ff] = data;
10741077      }
10751078      else if (offset<0x400)
10761079      {
1077         state->m_reel2_attr[offset&0x1ff] = data;
1080         m_reel2_attr[offset&0x1ff] = data;
10781081      }
10791082      else if (offset<0x600)
10801083      {
1081         state->m_reel3_attr[offset&0x1ff] = data;
1084         m_reel3_attr[offset&0x1ff] = data;
10821085      }
10831086      else
10841087      {
r14845r14846
10951098      }
10961099      else if (offset<0x80)
10971100      {
1098         state->m_reel2_scroll[offset&0x3f] = data;
1101         m_reel2_scroll[offset&0x3f] = data;
10991102      }
11001103      else if (offset<0xc0)
11011104      {
1102         state->m_reel1_scroll[offset&0x3f] = data;
1105         m_reel1_scroll[offset&0x3f] = data;
11031106      }
11041107      else
11051108      {
1106         state->m_reel3_scroll[offset&0x3f] = data;
1109         m_reel3_scroll[offset&0x3f] = data;
11071110      }
11081111   }
11091112}
11101113
1111static READ8_HANDLER( reel_scrollattr_r )
1114READ8_MEMBER(subsino_state::reel_scrollattr_r)
11121115{
1113   subsino_state *state = space->machine().driver_data<subsino_state>();
1114   return state->m_reel1_attr[offset];
1116   return m_reel1_attr[offset];
11151117}
11161118
11171119static ADDRESS_MAP_START( stisub_map, AS_PROGRAM, 8, subsino_state )
r14845r14846
11271129   AM_RANGE( 0x0d005, 0x0d005 ) AM_READ_PORT( "INB" )
11281130   AM_RANGE( 0x0d006, 0x0d006 ) AM_READ_PORT( "INA" )
11291131
1130   AM_RANGE( 0x0d008, 0x0d008 ) AM_WRITE_LEGACY(stisub_out_c_w )
1132   AM_RANGE( 0x0d008, 0x0d008 ) AM_WRITE(stisub_out_c_w )
11311133
1132   AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE_LEGACY(subsino_out_b_w )
1133   AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE_LEGACY(subsino_out_a_w )
1134   AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE(subsino_out_b_w )
1135   AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE(subsino_out_a_w )
11341136
11351137   AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" )
11361138
1137   AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE_LEGACY(colordac_w)
1139   AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w)
11381140
11391141   AM_RANGE( 0x0d016, 0x0d017 ) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w )
11401142
1141//  AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE_LEGACY(subsino_tiles_offset_w )
1143//  AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE(subsino_tiles_offset_w )
11421144
1143   AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
1144   AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
1145   AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
1146   AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
11451147
1146   AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE_LEGACY(reel_scrollattr_r, reel_scrollattr_w)
1148   AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE(reel_scrollattr_r, reel_scrollattr_w)
11471149
1148   AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE_LEGACY(subsino_reel1_ram_w) AM_BASE(m_reel1_ram)
1149   AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE_LEGACY(subsino_reel2_ram_w) AM_BASE(m_reel2_ram)
1150   AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE_LEGACY(subsino_reel3_ram_w) AM_BASE(m_reel3_ram)
1150   AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_BASE(m_reel1_ram)
1151   AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_BASE(m_reel2_ram)
1152   AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_BASE(m_reel3_ram)
11511153ADDRESS_MAP_END
11521154
11531155
r14845r14846
11731175//  AM_RANGE( 0x0d00b, 0x0d00b ) AM_WRITE
11741176   AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" )
11751177
1176   AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE_LEGACY(colordac_w)
1178   AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w)
11771179
11781180//  AM_RANGE( 0x0d012, 0x0d012 ) AM_WRITE
11791181
r14845r14846
11811183
11821184//  AM_RANGE( 0x0d018, 0x0d018 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
11831185
1184   AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE_LEGACY(subsino_colorram_w ) AM_BASE(m_colorram )
1185   AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE_LEGACY(subsino_videoram_w ) AM_BASE(m_videoram )
1186   AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_BASE(m_colorram )
1187   AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE(subsino_videoram_w ) AM_BASE(m_videoram )
11861188
1187   AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE_LEGACY(reel_scrollattr_r, reel_scrollattr_w)
1189   AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE(reel_scrollattr_r, reel_scrollattr_w)
11881190
1189   AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE_LEGACY(subsino_reel1_ram_w) AM_BASE(m_reel1_ram)
1190   AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE_LEGACY(subsino_reel2_ram_w) AM_BASE(m_reel2_ram)
1191   AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE_LEGACY(subsino_reel3_ram_w) AM_BASE(m_reel3_ram)
1191   AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_BASE(m_reel1_ram)
1192   AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_BASE(m_reel2_ram)
1193   AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_BASE(m_reel3_ram)
11921194ADDRESS_MAP_END
11931195
11941196
src/mame/drivers/mlanding.c
r14845r14846
4646   UINT16 m_dsp_HOLD_signal;
4747   UINT8 *m_mecha_ram;
4848   UINT8 m_trigger;
49   DECLARE_WRITE16_MEMBER(ml_tileram_w);
50   DECLARE_READ16_MEMBER(ml_tileram_r);
51   DECLARE_READ16_MEMBER(io1_r);
52   DECLARE_WRITE16_MEMBER(ml_output_w);
53   DECLARE_WRITE16_MEMBER(ml_sub_reset_w);
54   DECLARE_WRITE16_MEMBER(ml_to_sound_w);
55   DECLARE_WRITE8_MEMBER(ml_sound_to_main_w);
56   DECLARE_READ16_MEMBER(ml_analog1_lsb_r);
57   DECLARE_READ16_MEMBER(ml_analog2_lsb_r);
58   DECLARE_READ16_MEMBER(ml_analog3_lsb_r);
59   DECLARE_READ16_MEMBER(ml_analog1_msb_r);
60   DECLARE_READ16_MEMBER(ml_analog2_msb_r);
61   DECLARE_READ16_MEMBER(ml_analog3_msb_r);
62   DECLARE_WRITE16_MEMBER(ml_nmi_to_sound_w);
63   DECLARE_READ16_MEMBER(ml_mecha_ram_r);
64   DECLARE_WRITE16_MEMBER(ml_mecha_ram_w);
65   DECLARE_WRITE8_MEMBER(ml_msm_start_msb_w);
66   DECLARE_READ16_MEMBER(ml_dotram_r);
67   DECLARE_WRITE16_MEMBER(ml_dotram_w);
68   DECLARE_READ16_MEMBER(dsp_HOLD_signal_r);
69   DECLARE_READ8_MEMBER(test_r);
4970};
5071
5172
r14845r14846
200221   return 1;
201222}
202223
203static WRITE16_HANDLER(ml_tileram_w)
224WRITE16_MEMBER(mlanding_state::ml_tileram_w)
204225{
205   mlanding_state *state = space->machine().driver_data<mlanding_state>();
206   COMBINE_DATA(&state->m_ml_tileram[offset]);
226   COMBINE_DATA(&m_ml_tileram[offset]);
207227}
208228
209static READ16_HANDLER(ml_tileram_r)
229READ16_MEMBER(mlanding_state::ml_tileram_r)
210230{
211   mlanding_state *state = space->machine().driver_data<mlanding_state>();
212   return state->m_ml_tileram[offset];
231   return m_ml_tileram[offset];
213232}
214233
215234
216static READ16_HANDLER( io1_r ) //240006
235READ16_MEMBER(mlanding_state::io1_r)//240006
217236{
218   mlanding_state *state = space->machine().driver_data<mlanding_state>();
219237   /*
220238    fedcba9876543210
221239                   x  - mecha driver status
r14845r14846
227245    */
228246// multiplexed? or just overriden?
229247
230   int retval = (state->m_dma_active << 15) | (input_port_read(space->machine(), "DSW") & 0x7fff);
248   int retval = (m_dma_active << 15) | (input_port_read(machine(), "DSW") & 0x7fff);
231249   return retval;
232250}
233251
234252/* output */
235static WRITE16_HANDLER(ml_output_w)
253WRITE16_MEMBER(mlanding_state::ml_output_w)
236254{
237   mlanding_state *state = space->machine().driver_data<mlanding_state>();
238255   /*
239256    x--- ---- palette fg bankswitch
240257    ---x ---- coin lockout?
r14845r14846
243260    */
244261//  popmessage("%04x",data);
245262
246   state->m_pal_fg_bank = (data & 0x80)>>7;
263   m_pal_fg_bank = (data & 0x80)>>7;
247264}
248265
249266static WRITE8_DEVICE_HANDLER( sound_bankswitch_w )
r14845r14846
292309}
293310
294311/* TODO: this uses many bits */
295static WRITE16_HANDLER( ml_sub_reset_w )
312WRITE16_MEMBER(mlanding_state::ml_sub_reset_w)
296313{
297   mlanding_state *state = space->machine().driver_data<mlanding_state>();
298314   int pixels;
299315
300316   // Return the number of pixels drawn?
301   pixels = start_dma(space->machine());
317   pixels = start_dma(machine());
302318
303319   if (pixels)
304320   {
305      state->m_dma_active = 1;
306      space->machine().scheduler().timer_set(attotime::from_msec(20), FUNC(dma_complete));
321      m_dma_active = 1;
322      machine().scheduler().timer_set(attotime::from_msec(20), FUNC(dma_complete));
307323   }
308324
309325   if(!(data & 0x40)) // unknown line used
310      cputag_set_input_line(space->machine(), "sub", INPUT_LINE_RESET, CLEAR_LINE);
326      cputag_set_input_line(machine(), "sub", INPUT_LINE_RESET, CLEAR_LINE);
311327
312328   //data & 0x20 sound cpu?
313329
314330   if(!(data & 0x80)) // unknown line used
315331   {
316      cputag_set_input_line(space->machine(), "dsp", INPUT_LINE_RESET, CLEAR_LINE);
317      state->m_dsp_HOLD_signal = data & 0x80;
332      cputag_set_input_line(machine(), "dsp", INPUT_LINE_RESET, CLEAR_LINE);
333      m_dsp_HOLD_signal = data & 0x80;
318334   }
319335}
320336
321static WRITE16_HANDLER( ml_to_sound_w )
337WRITE16_MEMBER(mlanding_state::ml_to_sound_w)
322338{
323   device_t *tc0140syt = space->machine().device("tc0140syt");
339   device_t *tc0140syt = machine().device("tc0140syt");
324340   if (offset == 0)
325341      tc0140syt_port_w(tc0140syt, 0, data & 0xff);
326342   else if (offset == 1)
327343   {
328      //cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, ASSERT_LINE);
344      //cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, ASSERT_LINE);
329345      tc0140syt_comm_w(tc0140syt, 0, data & 0xff);
330346   }
331347}
332348
333static WRITE8_HANDLER( ml_sound_to_main_w )
349WRITE8_MEMBER(mlanding_state::ml_sound_to_main_w)
334350{
335   device_t *tc0140syt = space->machine().device("tc0140syt");
351   device_t *tc0140syt = machine().device("tc0140syt");
336352   if (offset == 0)
337353      tc0140syt_slave_port_w(tc0140syt, 0, data & 0xff);
338354   else if (offset == 1)
339355   {
340      //cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, CLEAR_LINE);
356      //cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, CLEAR_LINE);
341357      tc0140syt_slave_comm_w(tc0140syt, 0, data & 0xff);
342358   }
343359}
344360
345static READ16_HANDLER( ml_analog1_lsb_r )
361READ16_MEMBER(mlanding_state::ml_analog1_lsb_r)
346362{
347   return input_port_read(space->machine(), "STICKX") & 0xff;
363   return input_port_read(machine(), "STICKX") & 0xff;
348364}
349365
350static READ16_HANDLER( ml_analog2_lsb_r )
366READ16_MEMBER(mlanding_state::ml_analog2_lsb_r)
351367{
352   return input_port_read(space->machine(), "STICKY") & 0xff;
368   return input_port_read(machine(), "STICKY") & 0xff;
353369}
354370
355static READ16_HANDLER( ml_analog3_lsb_r )
371READ16_MEMBER(mlanding_state::ml_analog3_lsb_r)
356372{
357   return (input_port_read(space->machine(), "STICKZ") & 0xff);
373   return (input_port_read(machine(), "STICKZ") & 0xff);
358374}
359375
360376/*
r14845r14846
378394*/
379395
380396/* high bits of analog inputs + "limiters"/ADC converters. */
381static READ16_HANDLER( ml_analog1_msb_r )
397READ16_MEMBER(mlanding_state::ml_analog1_msb_r)
382398{
383   return ((input_port_read(space->machine(), "STICKY") & 0xf00)>>8) | (input_port_read(space->machine(), "IN2") & 0xf0);
399   return ((input_port_read(machine(), "STICKY") & 0xf00)>>8) | (input_port_read(machine(), "IN2") & 0xf0);
384400}
385401
386static READ16_HANDLER( ml_analog2_msb_r )
402READ16_MEMBER(mlanding_state::ml_analog2_msb_r)
387403{
388404   UINT8 res;
389405   UINT16 y_adc,x_adc;
390406
391   y_adc = input_port_read(space->machine(), "STICKY");
392   x_adc = input_port_read(space->machine(), "STICKZ");
407   y_adc = input_port_read(machine(), "STICKY");
408   x_adc = input_port_read(machine(), "STICKZ");
393409
394410   res = 0;
395411
r14845r14846
405421
406422//  popmessage("%04x %04x",x_adc,y_adc);
407423
408   return ((input_port_read(space->machine(), "STICKZ") & 0xf00)>>8) | res;
424   return ((input_port_read(machine(), "STICKZ") & 0xf00)>>8) | res;
409425}
410426
411static READ16_HANDLER( ml_analog3_msb_r )
427READ16_MEMBER(mlanding_state::ml_analog3_msb_r)
412428{
413429   UINT8 z_adc,res;
414430   UINT16 x_adc;
415431
416   z_adc = input_port_read(space->machine(), "STICKX");
417   x_adc = input_port_read(space->machine(), "STICKZ");
432   z_adc = input_port_read(machine(), "STICKX");
433   x_adc = input_port_read(machine(), "STICKZ");
418434
419435   res = 0;
420436
r14845r14846
428444   if(x_adc & 0x800 || x_adc == 0)
429445      res|= 0x10;
430446
431   return ((input_port_read(space->machine(), "STICKX") & 0xf00)>>8) | res;
447   return ((input_port_read(machine(), "STICKX") & 0xf00)>>8) | res;
432448}
433449
434static WRITE16_HANDLER( ml_nmi_to_sound_w )
450WRITE16_MEMBER(mlanding_state::ml_nmi_to_sound_w)
435451{
436//  cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, CLEAR_LINE);
452//  cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, CLEAR_LINE);
437453}
438454
439static READ16_HANDLER( ml_mecha_ram_r )
455READ16_MEMBER(mlanding_state::ml_mecha_ram_r)
440456{
441   mlanding_state *state = space->machine().driver_data<mlanding_state>();
442   return (state->m_mecha_ram[offset*2]<<8)|state->m_mecha_ram[offset*2+1];
457   return (m_mecha_ram[offset*2]<<8)|m_mecha_ram[offset*2+1];
443458}
444459
445static WRITE16_HANDLER( ml_mecha_ram_w )
460WRITE16_MEMBER(mlanding_state::ml_mecha_ram_w)
446461{
447   mlanding_state *state = space->machine().driver_data<mlanding_state>();
448   COMBINE_DATA(state->m_mecha_ram+offset*2+1);
462   COMBINE_DATA(m_mecha_ram+offset*2+1);
449463   data >>= 8;
450464   mem_mask >>= 8;
451   COMBINE_DATA(state->m_mecha_ram+offset*2);
465   COMBINE_DATA(m_mecha_ram+offset*2);
452466}
453467
454468static ADDRESS_MAP_START( mlanding_mem, AS_PROGRAM, 16, mlanding_state )
r14845r14846
456470   AM_RANGE(0x080000, 0x08ffff) AM_RAM
457471
458472   AM_RANGE(0x100000, 0x17ffff) AM_RAM AM_BASE(m_g_ram)// 512kB G RAM - enough here for double buffered 512x400x8 frame
459   AM_RANGE(0x180000, 0x1bffff) AM_READWRITE_LEGACY(ml_tileram_r, ml_tileram_w) AM_BASE(m_ml_tileram)
473   AM_RANGE(0x180000, 0x1bffff) AM_READWRITE(ml_tileram_r, ml_tileram_w) AM_BASE(m_ml_tileram)
460474   AM_RANGE(0x1c0000, 0x1c3fff) AM_RAM AM_SHARE("share2") AM_BASE(m_dma_ram)
461475   AM_RANGE(0x1c4000, 0x1cffff) AM_RAM AM_SHARE("share1")
462476
463   AM_RANGE(0x1d0000, 0x1d0001) AM_WRITE_LEGACY(ml_sub_reset_w)
464   AM_RANGE(0x1d0002, 0x1d0003) AM_WRITE_LEGACY(ml_nmi_to_sound_w) //sound reset ??
477   AM_RANGE(0x1d0000, 0x1d0001) AM_WRITE(ml_sub_reset_w)
478   AM_RANGE(0x1d0002, 0x1d0003) AM_WRITE(ml_nmi_to_sound_w) //sound reset ??
465479
466   AM_RANGE(0x2d0000, 0x2d0003) AM_WRITE_LEGACY(ml_to_sound_w)
480   AM_RANGE(0x2d0000, 0x2d0003) AM_WRITE(ml_to_sound_w)
467481   AM_RANGE(0x2d0000, 0x2d0001) AM_READNOP
468482   AM_RANGE(0x2d0002, 0x2d0003) AM_DEVREAD8_LEGACY("tc0140syt", tc0140syt_comm_r, 0x00ff)
469483
470484   AM_RANGE(0x200000, 0x20ffff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
471   AM_RANGE(0x280000, 0x2807ff) AM_READWRITE_LEGACY(ml_mecha_ram_r,ml_mecha_ram_w)
485   AM_RANGE(0x280000, 0x2807ff) AM_READWRITE(ml_mecha_ram_r,ml_mecha_ram_w)
472486
473487   AM_RANGE(0x290000, 0x290001) AM_READ_PORT("IN1")
474488   AM_RANGE(0x290002, 0x290003) AM_READ_PORT("IN0")
475489
476490   AM_RANGE(0x240004, 0x240005) AM_NOP //watchdog ??
477   AM_RANGE(0x240006, 0x240007) AM_READ_LEGACY(io1_r) // vblank ?
478   AM_RANGE(0x2a0000, 0x2a0001) AM_WRITE_LEGACY(ml_output_w)
491   AM_RANGE(0x240006, 0x240007) AM_READ(io1_r) // vblank ?
492   AM_RANGE(0x2a0000, 0x2a0001) AM_WRITE(ml_output_w)
479493
480494   /*  */
481   AM_RANGE(0x2b0000, 0x2b0001) AM_READ_LEGACY(ml_analog1_lsb_r)      //-40 .. 40 analog controls ?
482   AM_RANGE(0x2b0004, 0x2b0005) AM_READ_LEGACY(ml_analog2_lsb_r)      //-40 .. 40 analog controls ?
483   AM_RANGE(0x2b0006, 0x2b0007) AM_READ_LEGACY(ml_analog1_msb_r) // tested in service mode, dips?
484   AM_RANGE(0x2c0000, 0x2c0001) AM_READ_LEGACY(ml_analog3_lsb_r)      //-60 .. 60 analog controls ?
485   AM_RANGE(0x2c0002, 0x2c0003) AM_READ_LEGACY(ml_analog2_msb_r)
486   AM_RANGE(0x2b0002, 0x2b0003) AM_READ_LEGACY(ml_analog3_msb_r)      // IN2/IN3 could be switched
495   AM_RANGE(0x2b0000, 0x2b0001) AM_READ(ml_analog1_lsb_r)      //-40 .. 40 analog controls ?
496   AM_RANGE(0x2b0004, 0x2b0005) AM_READ(ml_analog2_lsb_r)      //-40 .. 40 analog controls ?
497   AM_RANGE(0x2b0006, 0x2b0007) AM_READ(ml_analog1_msb_r) // tested in service mode, dips?
498   AM_RANGE(0x2c0000, 0x2c0001) AM_READ(ml_analog3_lsb_r)      //-60 .. 60 analog controls ?
499   AM_RANGE(0x2c0002, 0x2c0003) AM_READ(ml_analog2_msb_r)
500   AM_RANGE(0x2b0002, 0x2b0003) AM_READ(ml_analog3_msb_r)      // IN2/IN3 could be switched
487501ADDRESS_MAP_END
488502
489503
r14845r14846
507521   state->m_adpcm_end = (state->m_adpcm_pos+0x800);
508522}
509523
510static WRITE8_HANDLER( ml_msm_start_msb_w )
524WRITE8_MEMBER(mlanding_state::ml_msm_start_msb_w)
511525{
512   mlanding_state *state = space->machine().driver_data<mlanding_state>();
513   state->m_adpcm_pos = (state->m_adpcm_pos & 0x00ff00) | ((data & 0x0f)<<16) | 0x20;
526   m_adpcm_pos = (m_adpcm_pos & 0x00ff00) | ((data & 0x0f)<<16) | 0x20;
514527}
515528
516529static ADDRESS_MAP_START( mlanding_z80_mem, AS_PROGRAM, 8, mlanding_state )
r14845r14846
518531   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
519532   AM_RANGE(0x8000, 0x8fff) AM_RAM
520533   AM_RANGE(0x9000, 0x9001) AM_MIRROR(0x00fe) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
521   AM_RANGE(0xa000, 0xa001) AM_WRITE_LEGACY(ml_sound_to_main_w)
534   AM_RANGE(0xa000, 0xa001) AM_WRITE(ml_sound_to_main_w)
522535   AM_RANGE(0xa001, 0xa001) AM_DEVREAD_LEGACY("tc0140syt", tc0140syt_slave_comm_r)
523536
524537//  AM_RANGE(0xb000, 0xb000) AM_WRITE_LEGACY(ml_msm5205_address_w) //guess
r14845r14846
526539//  AM_RANGE(0xd000, 0xd000) AM_DEVWRITE_LEGACY("msm", ml_msm5205_stop_w)
527540
528541   AM_RANGE(0xf000, 0xf000) AM_DEVWRITE_LEGACY("msm",ml_msm_start_lsb_w)
529   AM_RANGE(0xf200, 0xf200) AM_WRITE_LEGACY(ml_msm_start_msb_w)
542   AM_RANGE(0xf200, 0xf200) AM_WRITE(ml_msm_start_msb_w)
530543ADDRESS_MAP_END
531544
532static READ16_HANDLER( ml_dotram_r )
545READ16_MEMBER(mlanding_state::ml_dotram_r)
533546{
534   mlanding_state *state = space->machine().driver_data<mlanding_state>();
535   return state->m_ml_dotram[offset];
547   return m_ml_dotram[offset];
536548}
537549
538static WRITE16_HANDLER( ml_dotram_w )
550WRITE16_MEMBER(mlanding_state::ml_dotram_w)
539551{
540   mlanding_state *state = space->machine().driver_data<mlanding_state>();
541   state->m_ml_dotram[offset] = data;
552   m_ml_dotram[offset] = data;
542553}
543554
544static READ16_HANDLER( dsp_HOLD_signal_r )
555READ16_MEMBER(mlanding_state::dsp_HOLD_signal_r)
545556{
546   mlanding_state *state = space->machine().driver_data<mlanding_state>();
547   return state->m_dsp_HOLD_signal;
557   return m_dsp_HOLD_signal;
548558}
549559
550560
551static READ8_HANDLER( test_r )
561READ8_MEMBER(mlanding_state::test_r)
552562{
553   return space->machine().rand();
563   return machine().rand();
554564}
555565
556566//mecha driver ?
r14845r14846
559569   AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE(m_mecha_ram)
560570   AM_RANGE(0x8800, 0x8fff) AM_RAM
561571
562   AM_RANGE(0x9000, 0x9001) AM_READ_LEGACY(test_r)
563   AM_RANGE(0x9800, 0x9803) AM_READ_LEGACY(test_r)
572   AM_RANGE(0x9000, 0x9001) AM_READ(test_r)
573   AM_RANGE(0x9800, 0x9803) AM_READ(test_r)
564574ADDRESS_MAP_END
565575
566576static ADDRESS_MAP_START( DSP_map_program, AS_PROGRAM, 16, mlanding_state )
r14845r14846
568578ADDRESS_MAP_END
569579
570580static ADDRESS_MAP_START( DSP_map_data, AS_DATA, 16, mlanding_state )
571   AM_RANGE(0x0000, 0x1fff) AM_READWRITE_LEGACY(ml_dotram_r,ml_dotram_w)
581   AM_RANGE(0x0000, 0x1fff) AM_READWRITE(ml_dotram_r,ml_dotram_w)
572582ADDRESS_MAP_END
573583
574584static ADDRESS_MAP_START( DSP_map_io, AS_IO, 16, mlanding_state )
575   AM_RANGE(TMS32025_HOLD, TMS32025_HOLD) AM_READ_LEGACY(dsp_HOLD_signal_r)
585   AM_RANGE(TMS32025_HOLD, TMS32025_HOLD) AM_READ(dsp_HOLD_signal_r)
576586//  AM_RANGE(TMS32025_HOLDA, TMS32025_HOLDA) AM_WRITE_LEGACY(dsp_HOLDA_signal_w)
577587ADDRESS_MAP_END
578588
src/mame/drivers/neoprint.c
r14845r14846
3737   UINT8 m_audio_result;
3838   UINT8 m_bank_val;
3939   UINT8 m_vblank;
40   DECLARE_READ16_MEMBER(neoprint_calendar_r);
41   DECLARE_WRITE16_MEMBER(neoprint_calendar_w);
42   DECLARE_READ8_MEMBER(neoprint_unk_r);
43   DECLARE_READ16_MEMBER(neoprint_audio_result_r);
44   DECLARE_WRITE8_MEMBER(audio_cpu_clear_nmi_w);
45   DECLARE_WRITE16_MEMBER(audio_command_w);
46   DECLARE_READ8_MEMBER(audio_command_r);
47   DECLARE_WRITE8_MEMBER(audio_result_w);
48   DECLARE_WRITE16_MEMBER(nprsp_palette_w);
49   DECLARE_WRITE8_MEMBER(nprsp_bank_w);
50   DECLARE_READ16_MEMBER(rom_window_r);
4051};
4152
4253
r14845r14846
113124}
114125
115126
116static READ16_HANDLER( neoprint_calendar_r )
127READ16_MEMBER(neoprint_state::neoprint_calendar_r)
117128{
118   //if(cpu_get_pc(&space->device()) != 0x4b38 )//&& cpu_get_pc(&space->device()) != 0x5f86 && cpu_get_pc(&space->device()) != 0x5f90)
119   //  printf("%08x\n",cpu_get_pc(&space->device()));
129   //if(cpu_get_pc(&space.device()) != 0x4b38 )//&& cpu_get_pc(&space.device()) != 0x5f86 && cpu_get_pc(&space.device()) != 0x5f90)
130   //  printf("%08x\n",cpu_get_pc(&space.device()));
120131
121   return (upd4990a_databit_r(space->machine().device("upd4990a"), 0) << 15);
132   return (upd4990a_databit_r(machine().device("upd4990a"), 0) << 15);
122133}
123134
124static WRITE16_HANDLER( neoprint_calendar_w )
135WRITE16_MEMBER(neoprint_state::neoprint_calendar_w)
125136{
126    upd4990a_control_16_w(space->machine().device("upd4990a"), 0, ((data >> 8) & 7), mem_mask);
137    upd4990a_control_16_w(machine().device("upd4990a"), 0, ((data >> 8) & 7), mem_mask);
127138}
128139
129static READ8_HANDLER( neoprint_unk_r )
140READ8_MEMBER(neoprint_state::neoprint_unk_r)
130141{
131   neoprint_state *state = space->machine().driver_data<neoprint_state>();
132142
133143   /* ---x ---- tested in irq routine, odd/even field number? */
134144   /* ---- xx-- one of these two must be high */
135145   /* ---- --xx checked right before entering into attract mode, presumably printer/camera related */
136146
137   state->m_vblank = (space->machine().primary_screen->frame_number() & 0x1) ? 0x10 : 0x00;
147   m_vblank = (machine().primary_screen->frame_number() & 0x1) ? 0x10 : 0x00;
138148
139   //if(cpu_get_pc(&space->device()) != 0x1504 && cpu_get_pc(&space->device()) != 0x5f86 && cpu_get_pc(&space->device()) != 0x5f90)
140   //  printf("%08x\n",cpu_get_pc(&space->device()));
149   //if(cpu_get_pc(&space.device()) != 0x1504 && cpu_get_pc(&space.device()) != 0x5f86 && cpu_get_pc(&space.device()) != 0x5f90)
150   //  printf("%08x\n",cpu_get_pc(&space.device()));
141151
142   return state->m_vblank| 4 | 3;
152   return m_vblank| 4 | 3;
143153}
144154
145static READ16_HANDLER( neoprint_audio_result_r )
155READ16_MEMBER(neoprint_state::neoprint_audio_result_r)
146156{
147   neoprint_state *state = space->machine().driver_data<neoprint_state>();
148   return (state->m_audio_result << 8) | 0x00;
157   return (m_audio_result << 8) | 0x00;
149158}
150159
151160static void audio_cpu_assert_nmi(running_machine &machine)
r14845r14846
154163}
155164
156165
157static WRITE8_HANDLER( audio_cpu_clear_nmi_w )
166WRITE8_MEMBER(neoprint_state::audio_cpu_clear_nmi_w)
158167{
159   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, CLEAR_LINE);
168   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, CLEAR_LINE);
160169}
161170
162static WRITE16_HANDLER( audio_command_w )
171WRITE16_MEMBER(neoprint_state::audio_command_w)
163172{
164173   /* accessing the LSB only is not mapped */
165174   if (mem_mask != 0x00ff)
166175   {
167176      soundlatch_w(space, 0, data >> 8);
168177
169      audio_cpu_assert_nmi(space->machine());
178      audio_cpu_assert_nmi(machine());
170179
171180      /* boost the interleave to let the audio CPU read the command */
172      space->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50));
181      machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50));
173182
174      //if (LOG_CPU_COMM) logerror("MAIN CPU PC %06x: audio_command_w %04x - %04x\n", cpu_get_pc(&space->device()), data, mem_mask);
183      //if (LOG_CPU_COMM) logerror("MAIN CPU PC %06x: audio_command_w %04x - %04x\n", cpu_get_pc(&space.device()), data, mem_mask);
175184   }
176185}
177186
178187
179static READ8_HANDLER( audio_command_r )
188READ8_MEMBER(neoprint_state::audio_command_r)
180189{
181190   UINT8 ret = soundlatch_r(space, 0);
182191
183   //if (LOG_CPU_COMM) logerror(" AUD CPU PC   %04x: audio_command_r %02x\n", cpu_get_pc(&space->device()), ret);
192   //if (LOG_CPU_COMM) logerror(" AUD CPU PC   %04x: audio_command_r %02x\n", cpu_get_pc(&space.device()), ret);
184193
185194   /* this is a guess */
186195   audio_cpu_clear_nmi_w(space, 0, 0);
r14845r14846
190199
191200
192201
193static WRITE8_HANDLER( audio_result_w )
202WRITE8_MEMBER(neoprint_state::audio_result_w)
194203{
195   neoprint_state *state = space->machine().driver_data<neoprint_state>();
196   //neogeo_state *state = space->machine().driver_data<neogeo_state>();
197204
198   //if (LOG_CPU_COMM && (state->m_audio_result != data)) logerror(" AUD CPU PC   %04x: audio_result_w %02x\n", cpu_get_pc(&space->device()), data);
199205
200   state->m_audio_result = data;
206   //if (LOG_CPU_COMM && (m_audio_result != data)) logerror(" AUD CPU PC   %04x: audio_result_w %02x\n", cpu_get_pc(&space.device()), data);
207
208   m_audio_result = data;
201209}
202210
203211static ADDRESS_MAP_START( neoprint_map, AS_PROGRAM, 16, neoprint_state )
r14845r14846
207215   AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("nvram")
208216   AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_BASE(m_npvidram)
209217   AM_RANGE(0x500000, 0x51ffff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
210   AM_RANGE(0x600000, 0x600001) AM_READWRITE_LEGACY(neoprint_audio_result_r,audio_command_w)
211   AM_RANGE(0x600002, 0x600003) AM_READWRITE_LEGACY(neoprint_calendar_r,neoprint_calendar_w)
218   AM_RANGE(0x600000, 0x600001) AM_READWRITE(neoprint_audio_result_r,audio_command_w)
219   AM_RANGE(0x600002, 0x600003) AM_READWRITE(neoprint_calendar_r,neoprint_calendar_w)
212220   AM_RANGE(0x600004, 0x600005) AM_READ_PORT("SYSTEM") AM_WRITENOP
213221   AM_RANGE(0x600006, 0x600007) AM_READ_PORT("IN") AM_WRITENOP
214222   AM_RANGE(0x600008, 0x600009) AM_READ_PORT("DSW1")
215   AM_RANGE(0x60000a, 0x60000b) AM_READ8_LEGACY(neoprint_unk_r,0xff00)
223   AM_RANGE(0x60000a, 0x60000b) AM_READ8(neoprint_unk_r,0xff00)
216224   AM_RANGE(0x60000c, 0x60000d) AM_READ_PORT("DSW2")
217225   AM_RANGE(0x60000e, 0x60000f) AM_WRITENOP
218226
r14845r14846
221229   AM_RANGE(0x70001e, 0x70001f) AM_WRITENOP //watchdog
222230ADDRESS_MAP_END
223231
224static WRITE16_HANDLER( nprsp_palette_w )
232WRITE16_MEMBER(neoprint_state::nprsp_palette_w)
225233{
226234   UINT8 r,g,b,i;
227235
228   COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
236   COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
229237
230   g = (space->machine().generic.paletteram.u16[offset & ~1] & 0xf800) >> 8;
231   r = (space->machine().generic.paletteram.u16[offset & ~1] & 0x00f8) >> 0;
232   i = (space->machine().generic.paletteram.u16[offset | 1] & 0x1c00) >> 10;
233   b = (space->machine().generic.paletteram.u16[offset | 1] & 0x00f8) >> 0;
238   g = (machine().generic.paletteram.u16[offset & ~1] & 0xf800) >> 8;
239   r = (machine().generic.paletteram.u16[offset & ~1] & 0x00f8) >> 0;
240   i = (machine().generic.paletteram.u16[offset | 1] & 0x1c00) >> 10;
241   b = (machine().generic.paletteram.u16[offset | 1] & 0x00f8) >> 0;
234242   r |= i;
235243   g |= i;
236244   b |= i;
r14845r14846
244252
245253      pal_entry = ((offset & 0xfffe) >> 1) + ((offset & 0x20000) ? 0x8000 : 0);
246254
247      palette_set_color(space->machine(), pal_entry, MAKE_RGB(r,g,b));
255      palette_set_color(machine(), pal_entry, MAKE_RGB(r,g,b));
248256   }
249257}
250258
251static WRITE8_HANDLER( nprsp_bank_w )
259WRITE8_MEMBER(neoprint_state::nprsp_bank_w)
252260{
253   neoprint_state *state = space->machine().driver_data<neoprint_state>();
254261   /* this register seems flip-flop based ... */
255262
256263   if((data & 0xf0) == 0x20)
257264   {
258265      if((data & 0xf) == 0x1)
259         state->m_bank_val = 1;
266         m_bank_val = 1;
260267      if((data & 0xf) == 0x2)
261         state->m_bank_val = 0;
268         m_bank_val = 0;
262269   }
263270}
264271
265static READ16_HANDLER( rom_window_r )
272READ16_MEMBER(neoprint_state::rom_window_r)
266273{
267   neoprint_state *state = space->machine().driver_data<neoprint_state>();
268   UINT16 *rom = (UINT16 *)space->machine().region("maincpu")->base();
274   UINT16 *rom = (UINT16 *)machine().region("maincpu")->base();
269275
270   return rom[offset | 0x80000/2 | state->m_bank_val*0x40000/2];
276   return rom[offset | 0x80000/2 | m_bank_val*0x40000/2];
271277}
272278
273279static ADDRESS_MAP_START( nprsp_map, AS_PROGRAM, 16, neoprint_state )
274280   AM_RANGE(0x000000, 0x07ffff) AM_ROM
275   AM_RANGE(0x080000, 0x0fffff) AM_READ_LEGACY(rom_window_r)
276   AM_RANGE(0x200000, 0x200001) AM_READWRITE_LEGACY(neoprint_audio_result_r,audio_command_w)
277   AM_RANGE(0x200002, 0x200003) AM_READWRITE_LEGACY(neoprint_calendar_r,neoprint_calendar_w)
281   AM_RANGE(0x080000, 0x0fffff) AM_READ(rom_window_r)
282   AM_RANGE(0x200000, 0x200001) AM_READWRITE(neoprint_audio_result_r,audio_command_w)
283   AM_RANGE(0x200002, 0x200003) AM_READWRITE(neoprint_calendar_r,neoprint_calendar_w)
278284   AM_RANGE(0x200004, 0x200005) AM_READ_PORT("SYSTEM") AM_WRITENOP
279285   AM_RANGE(0x200006, 0x200007) AM_READ_PORT("IN") AM_WRITENOP
280   AM_RANGE(0x200008, 0x200009) AM_READ_PORT("DSW1") AM_WRITE8_LEGACY(nprsp_bank_w,0xff00)
281   AM_RANGE(0x20000a, 0x20000b) AM_READ8_LEGACY(neoprint_unk_r,0xff00)
286   AM_RANGE(0x200008, 0x200009) AM_READ_PORT("DSW1") AM_WRITE8(nprsp_bank_w,0xff00)
287   AM_RANGE(0x20000a, 0x20000b) AM_READ8(neoprint_unk_r,0xff00)
282288   AM_RANGE(0x20000c, 0x20000d) AM_READ_PORT("DSW2")
283289   AM_RANGE(0x20000e, 0x20000f) AM_WRITENOP
284290
r14845r14846
288294   AM_RANGE(0x300000, 0x33ffff) AM_RAM AM_SHARE("nvram")
289295   AM_RANGE(0x380000, 0x38ffff) AM_RAM
290296   AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_BASE(m_npvidram)
291   AM_RANGE(0x500000, 0x57ffff) AM_RAM_WRITE_LEGACY(nprsp_palette_w) AM_BASE_GENERIC(paletteram)
297   AM_RANGE(0x500000, 0x57ffff) AM_RAM_WRITE(nprsp_palette_w) AM_BASE_GENERIC(paletteram)
292298ADDRESS_MAP_END
293299
294300/*************************************
r14845r14846
315321 *************************************/
316322
317323static ADDRESS_MAP_START( neoprint_audio_io_map, AS_IO, 8, neoprint_state )
318  /*AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(audio_command_r, audio_cpu_clear_nmi_w);*/  /* may not and NMI clear */
319   AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ_LEGACY(audio_command_r) AM_WRITENOP
324  /*AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(audio_command_r, audio_cpu_clear_nmi_w);*/  /* may not and NMI clear */
325   AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r) AM_WRITENOP
320326   AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY("ymsnd", ym2610_r, ym2610_w)
321327//  AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) /* write - NMI enable / acknowledge? (the data written doesn't matter) */
322328//  AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_f000_f7ff_r)
323329//  AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_e000_efff_r)
324330//  AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_c000_dfff_r)
325331//  AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_8000_bfff_r)
326   AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE_LEGACY(audio_result_w)
332   AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(audio_result_w)
327333//  AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */
328334ADDRESS_MAP_END
329335
src/mame/drivers/tmaster.c
r14845r14846
145145
146146   required_device<cpu_device> m_maincpu;
147147   optional_device<microtouch_device> m_microtouch;
148   DECLARE_READ16_MEMBER(rtc_r);
149   DECLARE_WRITE16_MEMBER(rtc_w);
150   DECLARE_WRITE16_MEMBER(tmaster_color_w);
151   DECLARE_WRITE16_MEMBER(tmaster_addr_w);
152   DECLARE_WRITE16_MEMBER(tmaster_blitter_w);
153   DECLARE_READ16_MEMBER(tmaster_blitter_r);
154   DECLARE_READ16_MEMBER(tmaster_coins_r);
155   DECLARE_READ16_MEMBER(galgames_eeprom_r);
156   DECLARE_WRITE16_MEMBER(galgames_eeprom_w);
157   DECLARE_WRITE16_MEMBER(galgames_palette_offset_w);
158   DECLARE_WRITE16_MEMBER(galgames_palette_data_w);
159   DECLARE_READ16_MEMBER(galgames_okiram_r);
160   DECLARE_WRITE16_MEMBER(galgames_okiram_w);
161   DECLARE_WRITE16_MEMBER(galgames_cart_sel_w);
162   DECLARE_READ16_MEMBER(galgames_cart_clock_r);
163   DECLARE_WRITE16_MEMBER(galgames_cart_clock_w);
164   DECLARE_READ16_MEMBER(galgames_cart_data_r);
165   DECLARE_WRITE16_MEMBER(galgames_cart_data_w);
166   DECLARE_READ16_MEMBER(dummy_read_01);
148167};
149168
150169
r14845r14846
215234   return ((data / 10) << 4) | (data %10);
216235}
217236
218static READ16_HANDLER(rtc_r)
237READ16_MEMBER(tmaster_state::rtc_r)
219238{
220   tmaster_state *state = space->machine().driver_data<tmaster_state>();
221239   system_time systime;
222240
223   space->machine().current_datetime(systime);
224   state->m_rtc_ram[0x1] = binary_to_BCD(systime.local_time.second);
225   state->m_rtc_ram[0x2] = binary_to_BCD(systime.local_time.minute);
226   state->m_rtc_ram[0x3] = binary_to_BCD(systime.local_time.hour);
227   state->m_rtc_ram[0x4] = binary_to_BCD(systime.local_time.weekday);
228   state->m_rtc_ram[0x5] = binary_to_BCD(systime.local_time.mday);
229   state->m_rtc_ram[0x6] = binary_to_BCD(systime.local_time.month+1);
230   state->m_rtc_ram[0x7] = binary_to_BCD(systime.local_time.year % 100);
241   machine().current_datetime(systime);
242   m_rtc_ram[0x1] = binary_to_BCD(systime.local_time.second);
243   m_rtc_ram[0x2] = binary_to_BCD(systime.local_time.minute);
244   m_rtc_ram[0x3] = binary_to_BCD(systime.local_time.hour);
245   m_rtc_ram[0x4] = binary_to_BCD(systime.local_time.weekday);
246   m_rtc_ram[0x5] = binary_to_BCD(systime.local_time.mday);
247   m_rtc_ram[0x6] = binary_to_BCD(systime.local_time.month+1);
248   m_rtc_ram[0x7] = binary_to_BCD(systime.local_time.year % 100);
231249
232   return state->m_rtc_ram[offset];
250   return m_rtc_ram[offset];
233251}
234252
235static WRITE16_HANDLER(rtc_w)
253WRITE16_MEMBER(tmaster_state::rtc_w)
236254{
237   tmaster_state *state = space->machine().driver_data<tmaster_state>();
238255   if ( offset == 0 )
239256   {
240      state->m_rtc_ram[0x0] = data & 0xff;
257      m_rtc_ram[0x0] = data & 0xff;
241258   }
242259}
243260
r14845r14846
347364   return 0;
348365}
349366
350static WRITE16_HANDLER( tmaster_color_w )
367WRITE16_MEMBER(tmaster_state::tmaster_color_w)
351368{
352   tmaster_state *state = space->machine().driver_data<tmaster_state>();
353   COMBINE_DATA( &state->m_color );
369   COMBINE_DATA( &m_color );
354370}
355371
356static WRITE16_HANDLER( tmaster_addr_w )
372WRITE16_MEMBER(tmaster_state::tmaster_addr_w)
357373{
358   tmaster_state *state = space->machine().driver_data<tmaster_state>();
359   COMBINE_DATA( &state->m_addr );
374   COMBINE_DATA( &m_addr );
360375}
361376
362377static void tmaster_draw(running_machine &machine)
r14845r14846
472487   }
473488}
474489
475static WRITE16_HANDLER( tmaster_blitter_w )
490WRITE16_MEMBER(tmaster_state::tmaster_blitter_w)
476491{
477   tmaster_state *state = space->machine().driver_data<tmaster_state>();
478   COMBINE_DATA( state->m_regs + offset );
492   COMBINE_DATA( m_regs + offset );
479493   switch (offset*2)
480494   {
481495      case 0x0e:
482         tmaster_draw(space->machine());
483         cputag_set_input_line(space->machine(), "maincpu", 2, HOLD_LINE);
496         tmaster_draw(machine());
497         cputag_set_input_line(machine(), "maincpu", 2, HOLD_LINE);
484498         break;
485499   }
486500}
487501
488static READ16_HANDLER( tmaster_blitter_r )
502READ16_MEMBER(tmaster_state::tmaster_blitter_r)
489503{
490504   return 0x0000;   // bit 7 = 1 -> blitter busy
491505}
r14845r14846
500514                                Touch Master
501515***************************************************************************/
502516
503static READ16_HANDLER( tmaster_coins_r )
517READ16_MEMBER(tmaster_state::tmaster_coins_r)
504518{
505   return input_port_read(space->machine(), "COIN")|(space->machine().rand()&0x0800);
519   return input_port_read(machine(), "COIN")|(machine().rand()&0x0800);
506520}
507521
508522static ADDRESS_MAP_START( tmaster_map, AS_PROGRAM, 16, tmaster_state )
509523   AM_RANGE( 0x000000, 0x1fffff ) AM_ROM
510524   AM_RANGE( 0x200000, 0x27ffff ) AM_RAM
511525   AM_RANGE( 0x280000, 0x28ffef ) AM_RAM AM_SHARE("nvram")
512   AM_RANGE( 0x28fff0, 0x28ffff ) AM_READWRITE_LEGACY(rtc_r, rtc_w )
526   AM_RANGE( 0x28fff0, 0x28ffff ) AM_READWRITE(rtc_r, rtc_w )
513527
514   AM_RANGE( 0x300010, 0x300011 ) AM_READ_LEGACY(tmaster_coins_r )
528   AM_RANGE( 0x300010, 0x300011 ) AM_READ(tmaster_coins_r )
515529
516530   AM_RANGE( 0x300020, 0x30003f ) AM_DEVREADWRITE8_LEGACY("duart68681", duart68681_r, duart68681_w, 0xff )
517531
518532   AM_RANGE( 0x300040, 0x300041 ) AM_DEVWRITE_LEGACY("oki", tmaster_oki_bank_w )
519533
520   AM_RANGE( 0x300070, 0x300071 ) AM_WRITE_LEGACY(tmaster_addr_w )
534   AM_RANGE( 0x300070, 0x300071 ) AM_WRITE(tmaster_addr_w )
521535
522   AM_RANGE( 0x500000, 0x500011 ) AM_WRITE_LEGACY(tmaster_blitter_w ) AM_BASE(m_regs )
523   AM_RANGE( 0x500010, 0x500011 ) AM_READ_LEGACY(tmaster_blitter_r )
536   AM_RANGE( 0x500000, 0x500011 ) AM_WRITE(tmaster_blitter_w ) AM_BASE(m_regs )
537   AM_RANGE( 0x500010, 0x500011 ) AM_READ(tmaster_blitter_r )
524538
525539   AM_RANGE( 0x580000, 0x580001 ) AM_WRITENOP // often
526540
r14845r14846
528542
529543   AM_RANGE( 0x800000, 0x800001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
530544
531   AM_RANGE( 0x800010, 0x800011 ) AM_WRITE_LEGACY(tmaster_color_w )
545   AM_RANGE( 0x800010, 0x800011 ) AM_WRITE(tmaster_color_w )
532546ADDRESS_MAP_END
533547
534548
r14845r14846
574588
575589static const char *const galgames_eeprom_names[5] = { GALGAMES_EEPROM_BIOS, GALGAMES_EEPROM_CART1, GALGAMES_EEPROM_CART2, GALGAMES_EEPROM_CART3, GALGAMES_EEPROM_CART4 };
576590
577static READ16_HANDLER( galgames_eeprom_r )
591READ16_MEMBER(tmaster_state::galgames_eeprom_r)
578592{
579   tmaster_state *state = space->machine().driver_data<tmaster_state>();
580   eeprom_device *eeprom = space->machine().device<eeprom_device>(galgames_eeprom_names[state->m_galgames_cart]);
593   eeprom_device *eeprom = machine().device<eeprom_device>(galgames_eeprom_names[m_galgames_cart]);
581594
582595   return eeprom->read_bit() ? 0x80 : 0x00;
583596}
584597
585static WRITE16_HANDLER( galgames_eeprom_w )
598WRITE16_MEMBER(tmaster_state::galgames_eeprom_w)
586599{
587   tmaster_state *state = space->machine().driver_data<tmaster_state>();
588600   if (data & ~0x0003)
589      logerror("CPU #0 PC: %06X - Unknown EEPROM bit written %04X\n",cpu_get_pc(&space->device()),data);
601      logerror("CPU #0 PC: %06X - Unknown EEPROM bit written %04X\n",cpu_get_pc(&space.device()),data);
590602
591603   if ( ACCESSING_BITS_0_7 )
592604   {
593      eeprom_device *eeprom = space->machine().device<eeprom_device>(galgames_eeprom_names[state->m_galgames_cart]);
605      eeprom_device *eeprom = machine().device<eeprom_device>(galgames_eeprom_names[m_galgames_cart]);
594606
595607      // latch the bit
596608      eeprom->write_bit(data & 0x0001);
r14845r14846
602614
603615// BT481A Palette RAMDAC
604616
605static WRITE16_HANDLER( galgames_palette_offset_w )
617WRITE16_MEMBER(tmaster_state::galgames_palette_offset_w)
606618{
607   tmaster_state *state = space->machine().driver_data<tmaster_state>();
608619   if (ACCESSING_BITS_0_7)
609620   {
610      state->m_palette_offset = data & 0xff;
611      state->m_palette_index = 0;
621      m_palette_offset = data & 0xff;
622      m_palette_index = 0;
612623   }
613624}
614static WRITE16_HANDLER( galgames_palette_data_w )
625WRITE16_MEMBER(tmaster_state::galgames_palette_data_w)
615626{
616   tmaster_state *state = space->machine().driver_data<tmaster_state>();
617627   if (ACCESSING_BITS_0_7)
618628   {
619      state->m_palette_data[state->m_palette_index] = data & 0xff;
620      if (++state->m_palette_index == 3)
629      m_palette_data[m_palette_index] = data & 0xff;
630      if (++m_palette_index == 3)
621631      {
622632         int palette_base;
623633         for (palette_base = 0; palette_base < 0x1000; palette_base += 0x100)
624            palette_set_color(space->machine(), state->m_palette_offset + palette_base, MAKE_RGB(state->m_palette_data[0], state->m_palette_data[1], state->m_palette_data[2]));
625         state->m_palette_index = 0;
626         state->m_palette_offset++;
634            palette_set_color(machine(), m_palette_offset + palette_base, MAKE_RGB(m_palette_data[0], m_palette_data[1], m_palette_data[2]));
635         m_palette_index = 0;
636         m_palette_offset++;
627637      }
628638   }
629639}
630640
631641// Sound
632static READ16_HANDLER( galgames_okiram_r )
642READ16_MEMBER(tmaster_state::galgames_okiram_r)
633643{
634   return space->machine().region("oki")->base()[offset] | 0xff00;
644   return machine().region("oki")->base()[offset] | 0xff00;
635645}
636static WRITE16_HANDLER( galgames_okiram_w )
646WRITE16_MEMBER(tmaster_state::galgames_okiram_w)
637647{
638648   if (ACCESSING_BITS_0_7)
639      space->machine().region("oki")->base()[offset] = data & 0xff;
649      machine().region("oki")->base()[offset] = data & 0xff;
640650}
641651
642652// Carts (preliminary, PIC communication is not implemented)
r14845r14846
654664   memory_set_bank(machine, GALGAMES_BANK_240000_R, GALGAMES_ROM0 + state->m_galgames_cart);   // rom
655665}
656666
657static WRITE16_HANDLER( galgames_cart_sel_w )
667WRITE16_MEMBER(tmaster_state::galgames_cart_sel_w)
658668{
659669   // cart selection (0 1 2 3 4 7)
660670
r14845r14846
666676      {
667677         case 0x07:      // 7 resets the eeprom
668678            for (i = 0; i < 5; i++)
669               space->machine().device<eeprom_device>(galgames_eeprom_names[i])->set_cs_line(ASSERT_LINE);
679               machine().device<eeprom_device>(galgames_eeprom_names[i])->set_cs_line(ASSERT_LINE);
670680            break;
671681
672682         case 0x00:
r14845r14846
674684         case 0x02:
675685         case 0x03:
676686         case 0x04:
677            space->machine().device<eeprom_device>(galgames_eeprom_names[data & 0xff])->set_cs_line(CLEAR_LINE);
678            galgames_update_rombank(space->machine(), data & 0xff);
687            machine().device<eeprom_device>(galgames_eeprom_names[data & 0xff])->set_cs_line(CLEAR_LINE);
688            galgames_update_rombank(machine(), data & 0xff);
679689            break;
680690
681691         default:
682            space->machine().device<eeprom_device>(galgames_eeprom_names[0])->set_cs_line(CLEAR_LINE);
683            galgames_update_rombank(space->machine(), 0);
684            logerror("%06x: unknown cart sel = %04x\n", cpu_get_pc(&space->device()), data);
692            machine().device<eeprom_device>(galgames_eeprom_names[0])->set_cs_line(CLEAR_LINE);
693            galgames_update_rombank(machine(), 0);
694            logerror("%06x: unknown cart sel = %04x\n", cpu_get_pc(&space.device()), data);
685695            break;
686696      }
687697   }
688698}
689699
690static READ16_HANDLER( galgames_cart_clock_r )
700READ16_MEMBER(tmaster_state::galgames_cart_clock_r)
691701{
692702   return 0x0080;
693703}
694704
695static WRITE16_HANDLER( galgames_cart_clock_w )
705WRITE16_MEMBER(tmaster_state::galgames_cart_clock_w)
696706{
697   tmaster_state *state = space->machine().driver_data<tmaster_state>();
698707   if (ACCESSING_BITS_0_7)
699708   {
700709      // bit 3 = clock
r14845r14846
702711      // ROM/RAM banking
703712      if ((data & 0xf7) == 0x05)
704713      {
705         memory_set_bank(space->machine(), GALGAMES_BANK_000000_R, GALGAMES_RAM);   // ram
706         galgames_update_rombank(space->machine(), state->m_galgames_cart);
707         logerror("%06x: romram bank = %04x\n", cpu_get_pc(&space->device()), data);
714         memory_set_bank(machine(), GALGAMES_BANK_000000_R, GALGAMES_RAM);   // ram
715         galgames_update_rombank(machine(), m_galgames_cart);
716         logerror("%06x: romram bank = %04x\n", cpu_get_pc(&space.device()), data);
708717      }
709718      else
710719      {
711         memory_set_bank(space->machine(), GALGAMES_BANK_000000_R, GALGAMES_ROM0);   // rom
712         memory_set_bank(space->machine(), GALGAMES_BANK_200000_R, GALGAMES_RAM);   // ram
713         logerror("%06x: unknown romram bank = %04x\n", cpu_get_pc(&space->device()), data);
720         memory_set_bank(machine(), GALGAMES_BANK_000000_R, GALGAMES_ROM0);   // rom
721         memory_set_bank(machine(), GALGAMES_BANK_200000_R, GALGAMES_RAM);   // ram
722         logerror("%06x: unknown romram bank = %04x\n", cpu_get_pc(&space.device()), data);
714723      }
715724   }
716725}
717726
718static READ16_HANDLER( galgames_cart_data_r )
727READ16_MEMBER(tmaster_state::galgames_cart_data_r)
719728{
720729   return 0;
721730}
722static WRITE16_HANDLER( galgames_cart_data_w )
731WRITE16_MEMBER(tmaster_state::galgames_cart_data_w)
723732{
724733}
725734
726735
727static READ16_HANDLER( dummy_read_01 )
736READ16_MEMBER(tmaster_state::dummy_read_01)
728737{
729738   return 0x3;   // Pass the check at PC = 0xfae & a later one
730739}
r14845r14846
736745   AM_RANGE( 0x200000, 0x23ffff ) AM_READ_BANK(GALGAMES_BANK_200000_R) AM_WRITE_BANK(GALGAMES_BANK_200000_W)
737746   AM_RANGE( 0x240000, 0x3fffff ) AM_READ_BANK(GALGAMES_BANK_240000_R)
738747
739   AM_RANGE( 0x400000, 0x400011 ) AM_WRITE_LEGACY(tmaster_blitter_w ) AM_BASE(m_regs )
740   AM_RANGE( 0x400012, 0x400013 ) AM_WRITE_LEGACY(tmaster_addr_w )
741   AM_RANGE( 0x400014, 0x400015 ) AM_WRITE_LEGACY(tmaster_color_w )
742   AM_RANGE( 0x400020, 0x400021 ) AM_READ_LEGACY(tmaster_blitter_r )
748   AM_RANGE( 0x400000, 0x400011 ) AM_WRITE(tmaster_blitter_w ) AM_BASE(m_regs )
749   AM_RANGE( 0x400012, 0x400013 ) AM_WRITE(tmaster_addr_w )
750   AM_RANGE( 0x400014, 0x400015 ) AM_WRITE(tmaster_color_w )
751   AM_RANGE( 0x400020, 0x400021 ) AM_READ(tmaster_blitter_r )
743752
744   AM_RANGE( 0x600000, 0x600001 ) AM_READ_LEGACY(dummy_read_01 ) AM_WRITENOP
745   AM_RANGE( 0x700000, 0x700001 ) AM_READ_LEGACY(dummy_read_01 ) AM_WRITENOP
753   AM_RANGE( 0x600000, 0x600001 ) AM_READ(dummy_read_01 ) AM_WRITENOP
754   AM_RANGE( 0x700000, 0x700001 ) AM_READ(dummy_read_01 ) AM_WRITENOP
746755   AM_RANGE( 0x800020, 0x80003f ) AM_NOP   // ?
747756   AM_RANGE( 0x900000, 0x900001 ) AM_WRITE_LEGACY(watchdog_reset16_w )
748757
749758   AM_RANGE( 0xa00000, 0xa00001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
750   AM_RANGE( 0xb00000, 0xb7ffff ) AM_READWRITE_LEGACY(galgames_okiram_r, galgames_okiram_w ) // (only low bytes tested) 4x N341024SJ-15
759   AM_RANGE( 0xb00000, 0xb7ffff ) AM_READWRITE(galgames_okiram_r, galgames_okiram_w ) // (only low bytes tested) 4x N341024SJ-15
751760
752   AM_RANGE( 0xc00000, 0xc00001 ) AM_WRITE_LEGACY(galgames_palette_offset_w )
753   AM_RANGE( 0xc00002, 0xc00003 ) AM_WRITE_LEGACY(galgames_palette_data_w )
761   AM_RANGE( 0xc00000, 0xc00001 ) AM_WRITE(galgames_palette_offset_w )
762   AM_RANGE( 0xc00002, 0xc00003 ) AM_WRITE(galgames_palette_data_w )
754763
755764   AM_RANGE( 0xd00000, 0xd00001 ) AM_READ_PORT("TRACKBALL_1_X")
756765   AM_RANGE( 0xd00000, 0xd00001 ) AM_WRITENOP
r14845r14846
761770   AM_RANGE( 0xd0000a, 0xd0000b ) AM_READ_PORT("P2")
762771   AM_RANGE( 0xd0000c, 0xd0000d ) AM_READ_PORT("SYSTEM") AM_WRITENOP
763772
764   AM_RANGE( 0xd0000e, 0xd0000f ) AM_WRITE_LEGACY(galgames_cart_sel_w )
765   AM_RANGE( 0xd00010, 0xd00011 ) AM_READWRITE_LEGACY(galgames_eeprom_r, galgames_eeprom_w )
766   AM_RANGE( 0xd00012, 0xd00013 ) AM_READWRITE_LEGACY(galgames_cart_data_r, galgames_cart_data_w )
767   AM_RANGE( 0xd00014, 0xd00015 ) AM_READWRITE_LEGACY(galgames_cart_clock_r, galgames_cart_clock_w )
773   AM_RANGE( 0xd0000e, 0xd0000f ) AM_WRITE(galgames_cart_sel_w )
774   AM_RANGE( 0xd00010, 0xd00011 ) AM_READWRITE(galgames_eeprom_r, galgames_eeprom_w )
775   AM_RANGE( 0xd00012, 0xd00013 ) AM_READWRITE(galgames_cart_data_r, galgames_cart_data_w )
776   AM_RANGE( 0xd00014, 0xd00015 ) AM_READWRITE(galgames_cart_clock_r, galgames_cart_clock_w )
768777
769778ADDRESS_MAP_END
770779
src/mame/drivers/flyball.c
r14845r14846
4242
4343   /* devices */
4444   device_t *m_maincpu;
45   DECLARE_READ8_MEMBER(flyball_input_r);
46   DECLARE_READ8_MEMBER(flyball_scanline_r);
47   DECLARE_READ8_MEMBER(flyball_potsense_r);
48   DECLARE_WRITE8_MEMBER(flyball_potmask_w);
49   DECLARE_WRITE8_MEMBER(flyball_pitcher_pic_w);
50   DECLARE_WRITE8_MEMBER(flyball_ball_vert_w);
51   DECLARE_WRITE8_MEMBER(flyball_ball_horz_w);
52   DECLARE_WRITE8_MEMBER(flyball_pitcher_vert_w);
53   DECLARE_WRITE8_MEMBER(flyball_pitcher_horz_w);
54   DECLARE_WRITE8_MEMBER(flyball_misc_w);
4555};
4656
4757
r14845r14846
159169 *************************************/
160170
161171/* two physical buttons (start game and stop runner) share the same port bit */
162static READ8_HANDLER( flyball_input_r )
172READ8_MEMBER(flyball_state::flyball_input_r)
163173{
164   return input_port_read(space->machine(), "IN0") & input_port_read(space->machine(), "IN1");
174   return input_port_read(machine(), "IN0") & input_port_read(machine(), "IN1");
165175}
166176
167static READ8_HANDLER( flyball_scanline_r )
177READ8_MEMBER(flyball_state::flyball_scanline_r)
168178{
169   return space->machine().primary_screen->vpos() & 0x3f;
179   return machine().primary_screen->vpos() & 0x3f;
170180}
171181
172static READ8_HANDLER( flyball_potsense_r )
182READ8_MEMBER(flyball_state::flyball_potsense_r)
173183{
174   flyball_state *state = space->machine().driver_data<flyball_state>();
175   return state->m_potsense & ~state->m_potmask;
184   return m_potsense & ~m_potmask;
176185}
177186
178static WRITE8_HANDLER( flyball_potmask_w )
187WRITE8_MEMBER(flyball_state::flyball_potmask_w)
179188{
180   flyball_state *state = space->machine().driver_data<flyball_state>();
181   state->m_potmask |= data & 0xf;
189   m_potmask |= data & 0xf;
182190}
183191
184static WRITE8_HANDLER( flyball_pitcher_pic_w )
192WRITE8_MEMBER(flyball_state::flyball_pitcher_pic_w)
185193{
186   flyball_state *state = space->machine().driver_data<flyball_state>();
187   state->m_pitcher_pic = data & 0xf;
194   m_pitcher_pic = data & 0xf;
188195}
189196
190static WRITE8_HANDLER( flyball_ball_vert_w )
197WRITE8_MEMBER(flyball_state::flyball_ball_vert_w)
191198{
192   flyball_state *state = space->machine().driver_data<flyball_state>();
193   state->m_ball_vert = data;
199   m_ball_vert = data;
194200}
195201
196static WRITE8_HANDLER( flyball_ball_horz_w )
202WRITE8_MEMBER(flyball_state::flyball_ball_horz_w)
197203{
198   flyball_state *state = space->machine().driver_data<flyball_state>();
199   state->m_ball_horz = data;
204   m_ball_horz = data;
200205}
201206
202static WRITE8_HANDLER( flyball_pitcher_vert_w )
207WRITE8_MEMBER(flyball_state::flyball_pitcher_vert_w)
203208{
204   flyball_state *state = space->machine().driver_data<flyball_state>();
205   state->m_pitcher_vert = data;
209   m_pitcher_vert = data;
206210}
207211
208static WRITE8_HANDLER( flyball_pitcher_horz_w )
212WRITE8_MEMBER(flyball_state::flyball_pitcher_horz_w)
209213{
210   flyball_state *state = space->machine().driver_data<flyball_state>();
211   state->m_pitcher_horz = data;
214   m_pitcher_horz = data;
212215}
213216
214static WRITE8_HANDLER( flyball_misc_w )
217WRITE8_MEMBER(flyball_state::flyball_misc_w)
215218{
216219   int bit = ~data & 1;
217220
218221   switch (offset)
219222   {
220223   case 0:
221      set_led_status(space->machine(), 0, bit);
224      set_led_status(machine(), 0, bit);
222225      break;
223226   case 1:
224227      /* crowd very loud */
r14845r14846
249252   ADDRESS_MAP_GLOBAL_MASK(0x1fff)
250253   AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0x100) AM_RAM
251254   AM_RANGE(0x0800, 0x0800) AM_NOP
252   AM_RANGE(0x0801, 0x0801) AM_WRITE_LEGACY(flyball_pitcher_pic_w)
253   AM_RANGE(0x0802, 0x0802) AM_READ_LEGACY(flyball_scanline_r)
254   AM_RANGE(0x0803, 0x0803) AM_READ_LEGACY(flyball_potsense_r)
255   AM_RANGE(0x0804, 0x0804) AM_WRITE_LEGACY(flyball_ball_vert_w)
256   AM_RANGE(0x0805, 0x0805) AM_WRITE_LEGACY(flyball_ball_horz_w)
257   AM_RANGE(0x0806, 0x0806) AM_WRITE_LEGACY(flyball_pitcher_vert_w)
258   AM_RANGE(0x0807, 0x0807) AM_WRITE_LEGACY(flyball_pitcher_horz_w)
259   AM_RANGE(0x0900, 0x0900) AM_WRITE_LEGACY(flyball_potmask_w)
260   AM_RANGE(0x0a00, 0x0a07) AM_WRITE_LEGACY(flyball_misc_w)
261   AM_RANGE(0x0b00, 0x0b00) AM_READ_LEGACY(flyball_input_r)
255   AM_RANGE(0x0801, 0x0801) AM_WRITE(flyball_pitcher_pic_w)
256   AM_RANGE(0x0802, 0x0802) AM_READ(flyball_scanline_r)
257   AM_RANGE(0x0803, 0x0803) AM_READ(flyball_potsense_r)
258   AM_RANGE(0x0804, 0x0804) AM_WRITE(flyball_ball_vert_w)
259   AM_RANGE(0x0805, 0x0805) AM_WRITE(flyball_ball_horz_w)
260   AM_RANGE(0x0806, 0x0806) AM_WRITE(flyball_pitcher_vert_w)
261   AM_RANGE(0x0807, 0x0807) AM_WRITE(flyball_pitcher_horz_w)
262   AM_RANGE(0x0900, 0x0900) AM_WRITE(flyball_potmask_w)
263   AM_RANGE(0x0a00, 0x0a07) AM_WRITE(flyball_misc_w)
264   AM_RANGE(0x0b00, 0x0b00) AM_READ(flyball_input_r)
262265   AM_RANGE(0x0d00, 0x0eff) AM_WRITEONLY AM_BASE(m_playfield_ram)
263266   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_BASE(m_rombase) /* program */
264267ADDRESS_MAP_END
src/mame/drivers/unkhorse.c
r14845r14846
44  probably early 80s, manufacturer unknown
55   
66  from a broken PCB, labeled EFI TG-007
7  8085A CPU + 8155 (for I/O, and maybe sound)
7  8085A CPU + 8155 (for I/O and sound)
88  8KB RAM mainly for bitmap video, and 512x4 RAM for color map
99 
1010TODO:
1111- identify game!
12- sound
13- improve inputs
14- confirm colors
12- improve I/O:
13  * more buttons/sensors?
14  * horse_output_w bits
15  * 6-pos dipswitch on the pcb, only 4 are known at the moment
16- confirm colors and sound pitch
1517 
1618***************************************************************************/
1719 
1820#include "emu.h"
1921#include "cpu/i8085/i8085.h"
2022#include "machine/i8155.h"
23#include "sound/dac.h"
2124 
2225 
2326class horse_state : public driver_device
r14845r14846
4043 
4144PALETTE_INIT( horse )
4245{
43   // palette is simply 1bpp
46   // palette is simply 3bpp
4447   for (int i = 0; i < 8; i++)
4548      palette_set_color_rgb(machine, i, pal1bit(i >> 2), pal1bit(i >> 1), pal1bit(i >> 0));
4649}
r14845r14846
8790static READ8_DEVICE_HANDLER(horse_input_r)
8891{
8992   horse_state *state = device->machine().driver_data<horse_state>();
90   UINT8 ret = 0xff;
9193 
92   if (state->m_output & 0x80)
93      ret &= input_port_read(device->machine(), "IN0");
94   switch (state->m_output >> 6 & 3)
95   {
96      case 0: return input_port_read(device->machine(), "IN0");
97      case 1: return input_port_read(device->machine(), "IN1");
98      case 2: return input_port_read(device->machine(), "IN2");
99      default: break;
100   }
94101 
95   if (state->m_output & 0x40)
96      ret &= input_port_read(device->machine(), "IN1");
97 
98   return ret;
102   return 0xff;
99103}
100104 
101105static WRITE8_DEVICE_HANDLER(horse_output_w)
r14845r14846
104108   state->m_output = data;
105109   
106110   // d4: payout related
107   // d6-d7: input select
111   // d6-d7: input mux
108112   // other bits: ?
109113}
110114 
111115static WRITE_LINE_DEVICE_HANDLER(horse_timer_out)
112116{
113   // sound?
114   // TODO
117   dac_signed_w(device->machine().device("dac"), 0, state ? 0x7f : 0);
115118}
116119 
117120static I8155_INTERFACE(i8155_intf)
r14845r14846
135138 
136139static INPUT_PORTS_START( horse )
137140   PORT_START("IN0")
138   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
141   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )   PORT_DIPLOCATION("SW:1,2,3")
139142   PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
140143   PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
141144   PORT_DIPSETTING( 0x03, DEF_STR( 1C_3C ) )
r14845r14846
144147   PORT_DIPSETTING( 0x06, DEF_STR( 1C_6C ) )
145148   PORT_DIPSETTING( 0x07, DEF_STR( 1C_7C ) )
146149   PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
147   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
148   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
149   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
150   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
151   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
150   PORT_DIPNAME( 0x08, 0x08, "UNK04" )            PORT_DIPLOCATION("SW:4")
151   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
152   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
153   PORT_DIPNAME( 0x10, 0x10, "UNK05" )            PORT_DIPLOCATION("SW:5")
154   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
155   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
156   PORT_DIPNAME( 0x20, 0x20, "Maximum Bet" )      PORT_DIPLOCATION("SW:6")
157   PORT_DIPSETTING(    0x20, "20" )
158   PORT_DIPSETTING(    0x00, "50" )
159   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
160   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
152161 
153162   PORT_START("IN1")
154   PORT_DIPNAME( 0x01, 0x01, "UNK1" )
155   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
156   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
157   PORT_DIPNAME( 0x02, 0x02, "UNK2" )
158   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
159   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
160   PORT_DIPNAME( 0x04, 0x04, "UNK3" )
161   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
162   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
163   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
164   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
165   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
163166   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
164167   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
165168   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
166169   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
167170   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
171 
172   PORT_START("IN2")
173   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
174   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
175   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
176   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
177   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
178   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
179   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
180   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
168181INPUT_PORTS_END
169182 
170183 
r14845r14846
187200   MCFG_CPU_IO_MAP(horse_io_map)
188201   MCFG_CPU_VBLANK_INT("screen", horse_interrupt)
189202 
190   MCFG_I8155_ADD("i8155", XTAL_12MHz / 2, i8155_intf) // divider guessed
203   MCFG_I8155_ADD("i8155", XTAL_12MHz / 2, i8155_intf)
191204 
192205   /* video hardware */
193206   MCFG_SCREEN_ADD("screen", RASTER)
r14845r14846
202215   MCFG_PALETTE_INIT(horse)
203216 
204217   /* sound hardware */
205   // ..
218   MCFG_SPEAKER_STANDARD_MONO("mono")
219 
220   MCFG_SOUND_ADD("dac", DAC, 0)
221   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
206222MACHINE_CONFIG_END
207223 
208224 
r14845r14846
224240ROM_END
225241 
226242 
227GAME( 19??, unkhorse, 0, horse, horse, 0, ROT270, "<unknown>", "unknown Japanese horse gambling game", GAME_NO_SOUND | GAME_IMPERFECT_COLORS )
243GAME( 19??, unkhorse, 0, horse, horse, 0, ROT270, "<unknown>", "unknown Japanese horse gambling game", 0 )
src/mame/drivers/pturn.c
r14845r14846
9797   int m_nmi_sub;
9898   UINT8 *m_spriteram;
9999   size_t m_spriteram_size;
100   DECLARE_WRITE8_MEMBER(pturn_videoram_w);
101   DECLARE_WRITE8_MEMBER(nmi_main_enable_w);
102   DECLARE_WRITE8_MEMBER(nmi_sub_enable_w);
103   DECLARE_WRITE8_MEMBER(sound_w);
104   DECLARE_WRITE8_MEMBER(bgcolor_w);
105   DECLARE_WRITE8_MEMBER(bg_scrollx_w);
106   DECLARE_WRITE8_MEMBER(fgpalette_w);
107   DECLARE_WRITE8_MEMBER(bg_scrolly_w);
108   DECLARE_WRITE8_MEMBER(fgbank_w);
109   DECLARE_WRITE8_MEMBER(bgbank_w);
110   DECLARE_WRITE8_MEMBER(flip_w);
111   DECLARE_READ8_MEMBER(pturn_custom_r);
100112};
101113
102114
r14845r14846
202214}
203215#endif
204216
205static WRITE8_HANDLER( pturn_videoram_w )
217WRITE8_MEMBER(pturn_state::pturn_videoram_w)
206218{
207   pturn_state *state = space->machine().driver_data<pturn_state>();
208   UINT8 *videoram = state->m_videoram;
219   UINT8 *videoram = m_videoram;
209220   videoram[offset]=data;
210   state->m_fgmap->mark_tile_dirty(offset);
221   m_fgmap->mark_tile_dirty(offset);
211222}
212223
213224
214static WRITE8_HANDLER( nmi_main_enable_w )
225WRITE8_MEMBER(pturn_state::nmi_main_enable_w)
215226{
216   pturn_state *state = space->machine().driver_data<pturn_state>();
217   state->m_nmi_main = data;
227   m_nmi_main = data;
218228}
219229
220static WRITE8_HANDLER( nmi_sub_enable_w )
230WRITE8_MEMBER(pturn_state::nmi_sub_enable_w)
221231{
222   pturn_state *state = space->machine().driver_data<pturn_state>();
223   state->m_nmi_sub = data;
232   m_nmi_sub = data;
224233}
225234
226static WRITE8_HANDLER(sound_w)
235WRITE8_MEMBER(pturn_state::sound_w)
227236{
228237   soundlatch_w(space,0,data);
229238}
230239
231240
232static WRITE8_HANDLER(bgcolor_w)
241WRITE8_MEMBER(pturn_state::bgcolor_w)
233242{
234   pturn_state *state = space->machine().driver_data<pturn_state>();
235   state->m_bgcolor=data;
243   m_bgcolor=data;
236244}
237245
238static WRITE8_HANDLER(bg_scrollx_w)
246WRITE8_MEMBER(pturn_state::bg_scrollx_w)
239247{
240   pturn_state *state = space->machine().driver_data<pturn_state>();
241   state->m_bgmap->set_scrolly(0, (data>>5)*32*8);
242   state->m_bgpalette=data&0x1f;
243   state->m_bgmap->mark_all_dirty();
248   m_bgmap->set_scrolly(0, (data>>5)*32*8);
249   m_bgpalette=data&0x1f;
250   m_bgmap->mark_all_dirty();
244251}
245252
246static WRITE8_HANDLER(fgpalette_w)
253WRITE8_MEMBER(pturn_state::fgpalette_w)
247254{
248   pturn_state *state = space->machine().driver_data<pturn_state>();
249   state->m_fgpalette=data&0x1f;
250   state->m_fgmap->mark_all_dirty();
255   m_fgpalette=data&0x1f;
256   m_fgmap->mark_all_dirty();
251257}
252258
253static WRITE8_HANDLER(bg_scrolly_w)
259WRITE8_MEMBER(pturn_state::bg_scrolly_w)
254260{
255   pturn_state *state = space->machine().driver_data<pturn_state>();
256   state->m_bgmap->set_scrollx(0, data);
261   m_bgmap->set_scrollx(0, data);
257262}
258263
259static WRITE8_HANDLER(fgbank_w)
264WRITE8_MEMBER(pturn_state::fgbank_w)
260265{
261   pturn_state *state = space->machine().driver_data<pturn_state>();
262   state->m_fgbank=data&1;
263   state->m_fgmap->mark_all_dirty();
266   m_fgbank=data&1;
267   m_fgmap->mark_all_dirty();
264268}
265269
266static WRITE8_HANDLER(bgbank_w)
270WRITE8_MEMBER(pturn_state::bgbank_w)
267271{
268   pturn_state *state = space->machine().driver_data<pturn_state>();
269   state->m_bgbank=data&1;
270   state->m_bgmap->mark_all_dirty();
272   m_bgbank=data&1;
273   m_bgmap->mark_all_dirty();
271274}
272275
273static WRITE8_HANDLER(flip_w)
276WRITE8_MEMBER(pturn_state::flip_w)
274277{
275   flip_screen_set(space->machine(), data);
278   flip_screen_set(machine(), data);
276279}
277280
278281
279static READ8_HANDLER (pturn_custom_r)
282READ8_MEMBER(pturn_state::pturn_custom_r)
280283{
281284   int addr = (int)offset + 0xc800;
282285
r14845r14846
305308static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pturn_state )
306309   AM_RANGE(0x0000, 0x7fff) AM_ROM
307310   AM_RANGE(0xc000, 0xc7ff) AM_RAM
308   AM_RANGE(0xc800, 0xcfff) AM_WRITENOP AM_READ_LEGACY(pturn_custom_r)
311   AM_RANGE(0xc800, 0xcfff) AM_WRITENOP AM_READ(pturn_custom_r)
309312
310313   AM_RANGE(0xdfe0, 0xdfe0) AM_NOP
311314
312   AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE_LEGACY(pturn_videoram_w) AM_BASE(m_videoram)
313   AM_RANGE(0xe400, 0xe400) AM_WRITE_LEGACY(fgpalette_w)
314   AM_RANGE(0xe800, 0xe800) AM_WRITE_LEGACY(sound_w)
315   AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(pturn_videoram_w) AM_BASE(m_videoram)
316   AM_RANGE(0xe400, 0xe400) AM_WRITE(fgpalette_w)
317   AM_RANGE(0xe800, 0xe800) AM_WRITE(sound_w)
315318
316319   AM_RANGE(0xf000, 0xf0ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
317320
318   AM_RANGE(0xf400, 0xf400) AM_WRITE_LEGACY(bg_scrollx_w)
321   AM_RANGE(0xf400, 0xf400) AM_WRITE(bg_scrollx_w)
319322
320323   AM_RANGE(0xf800, 0xf800) AM_READ_PORT("P1") AM_WRITENOP
321   AM_RANGE(0xf801, 0xf801) AM_READ_PORT("P2") AM_WRITE_LEGACY(bgcolor_w)
324   AM_RANGE(0xf801, 0xf801) AM_READ_PORT("P2") AM_WRITE(bgcolor_w)
322325   AM_RANGE(0xf802, 0xf802) AM_READ_PORT("SYSTEM")
323   AM_RANGE(0xf803, 0xf803) AM_WRITE_LEGACY(bg_scrolly_w)
326   AM_RANGE(0xf803, 0xf803) AM_WRITE(bg_scrolly_w)
324327   AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW2")
325328   AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW1")
326329   AM_RANGE(0xf806, 0xf806) AM_READNOP /* Protection related, ((val&3)==2) -> jump to 0 */
327330
328   AM_RANGE(0xfc00, 0xfc00) AM_WRITE_LEGACY(flip_w)
329   AM_RANGE(0xfc01, 0xfc01) AM_WRITE_LEGACY(nmi_main_enable_w)
331   AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_w)
332   AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_main_enable_w)
330333   AM_RANGE(0xfc02, 0xfc02) AM_WRITENOP /* Unknown */
331334   AM_RANGE(0xfc03, 0xfc03) AM_WRITENOP /* Unknown */
332   AM_RANGE(0xfc04, 0xfc04) AM_WRITE_LEGACY(bgbank_w)
333   AM_RANGE(0xfc05, 0xfc05) AM_WRITE_LEGACY(fgbank_w)
335   AM_RANGE(0xfc04, 0xfc04) AM_WRITE(bgbank_w)
336   AM_RANGE(0xfc05, 0xfc05) AM_WRITE(fgbank_w)
334337   AM_RANGE(0xfc06, 0xfc06) AM_WRITENOP /* Unknown */
335338   AM_RANGE(0xfc07, 0xfc07) AM_WRITENOP /* Unknown */
336339
r14845r14846
339342static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, pturn_state )
340343   AM_RANGE(0x0000, 0x0fff) AM_ROM
341344   AM_RANGE(0x2000, 0x23ff) AM_RAM
342   AM_RANGE(0x3000, 0x3000) AM_READ_LEGACY(soundlatch_r) AM_WRITE_LEGACY(nmi_sub_enable_w)
345   AM_RANGE(0x3000, 0x3000) AM_READ_LEGACY(soundlatch_r) AM_WRITE(nmi_sub_enable_w)
343346   AM_RANGE(0x4000, 0x4000) AM_RAM
344347   AM_RANGE(0x5000, 0x5001) AM_DEVWRITE_LEGACY("ay1", ay8910_address_data_w)
345348   AM_RANGE(0x6000, 0x6001) AM_DEVWRITE_LEGACY("ay2", ay8910_address_data_w)
src/mame/drivers/jubilee.c
r14845r14846
9898
9999   UINT8 *m_videoram;
100100   tilemap_t *m_bg_tilemap;
101   DECLARE_WRITE8_MEMBER(jubileep_videoram_w);
102   DECLARE_READ8_MEMBER(unk_r);
101103};
102104
103105
r14845r14846
106108*************************/
107109
108110
109static WRITE8_HANDLER( jubileep_videoram_w )
111WRITE8_MEMBER(jubilee_state::jubileep_videoram_w)
110112{
111   jubilee_state *state = space->machine().driver_data<jubilee_state>();
112   state->m_videoram[offset] = data;
113   state->m_bg_tilemap->mark_tile_dirty(offset);
113   m_videoram[offset] = data;
114   m_bg_tilemap->mark_tile_dirty(offset);
114115}
115116
116117
r14845r14846
163164static ADDRESS_MAP_START( jubileep_map, AS_PROGRAM, 8, jubilee_state )
164165   ADDRESS_MAP_GLOBAL_MASK(0x3fff)
165166   AM_RANGE(0x0000, 0x2fff) AM_ROM
166   AM_RANGE(0x3000, 0x30ff) AM_WRITE_LEGACY(jubileep_videoram_w) AM_BASE(m_videoram)   /* wrong... just placed somewhere */
167   AM_RANGE(0x3000, 0x30ff) AM_WRITE(jubileep_videoram_w) AM_BASE(m_videoram)   /* wrong... just placed somewhere */
167168   AM_RANGE(0x3100, 0x3fff) AM_RAM
168169ADDRESS_MAP_END
169170
r14845r14846
177178*/
178179
179180
180static READ8_HANDLER(unk_r)
181READ8_MEMBER(jubilee_state::unk_r)
181182{
182   return (space->machine().rand() & 0xff);
183   return (machine().rand() & 0xff);
183184}
184185
185186static ADDRESS_MAP_START( jubileep_cru_map, AS_IO, 8, jubilee_state )
186//  AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(unk_r)
187//  AM_RANGE(0x0000, 0xffff) AM_READ(unk_r)
187188//  AM_RANGE(0x00, 0x00) AM_DEVREADWRITE_LEGACY("crtc",  mc6845_status_r, mc6845_address_w)
188189//  AM_RANGE(0x01, 0x01) AM_DEVREADWRITE_LEGACY("crtc", mc6845_register_r, mc6845_register_w)
189   AM_RANGE(0xc8, 0xc8) AM_READ_LEGACY(unk_r)
190   AM_RANGE(0xc8, 0xc8) AM_READ(unk_r)
190191ADDRESS_MAP_END
191192
192193/* I/O byte R/W
src/mame/drivers/goldngam.c
r14845r14846
244244      : driver_device(mconfig, type, tag) { }
245245
246246   UINT16 *m_videoram;
247   DECLARE_READ16_MEMBER(unk_r);
247248};
248249
249250
r14845r14846
289290* Memory Map Information *
290291*************************/
291292
292static READ16_HANDLER(unk_r)
293READ16_MEMBER(goldngam_state::unk_r)
293294{
294    int test1 = (space->machine().rand() & 0xae00);
295    int test1 = (machine().rand() & 0xae00);
295296//  popmessage("VAL = %02x", test1);
296297
297298   return test1;
r14845r14846
301302   AM_RANGE(0x000000, 0x03ffff) AM_ROM
302303   AM_RANGE(0x200000, 0x20ffff) AM_RAM
303304   AM_RANGE(0x400002, 0x400003) AM_NOP // hopper status read ?
304   AM_RANGE(0x40000c, 0x40000d) AM_READ_LEGACY(unk_r)
305   AM_RANGE(0x40000c, 0x40000d) AM_READ(unk_r)
305306   AM_RANGE(0x40000e, 0x40000f) AM_READ_PORT("DSW2")   // not sure...
306307   AM_RANGE(0x402000, 0x402001) AM_DEVREAD8_LEGACY("aysnd", ay8910_r, 0x00ff)
307308   AM_RANGE(0x402000, 0x402003) AM_DEVWRITE8_LEGACY("aysnd", ay8910_address_data_w, 0x00ff) //wrong
src/mame/drivers/laserbas.c
r14845r14846
4949   UINT8    m_vram1[0x8000];
5050   UINT8    m_vram2[0x8000];
5151   UINT8    *m_protram;
52   DECLARE_READ8_MEMBER(vram_r);
53   DECLARE_WRITE8_MEMBER(vram_w);
54   DECLARE_READ8_MEMBER(read_unk);
55   DECLARE_WRITE8_MEMBER(vrambank_w);
56   DECLARE_READ8_MEMBER(protram_r);
57   DECLARE_WRITE8_MEMBER(protram_w);
5258};
5359
5460
r14845r14846
8187   return 0;
8288}
8389
84static READ8_HANDLER(vram_r)
90READ8_MEMBER(laserbas_state::vram_r)
8591{
86   laserbas_state *state = space->machine().driver_data<laserbas_state>();
8792
88   if(!state->m_vrambank)
89      return state->m_vram1[offset];
93   if(!m_vrambank)
94      return m_vram1[offset];
9095   else
91      return state->m_vram2[offset];
96      return m_vram2[offset];
9297}
9398
94static WRITE8_HANDLER(vram_w)
99WRITE8_MEMBER(laserbas_state::vram_w)
95100{
96   laserbas_state *state = space->machine().driver_data<laserbas_state>();
97101
98   if(!state->m_vrambank)
99      state->m_vram1[offset] = data;
102   if(!m_vrambank)
103      m_vram1[offset] = data;
100104   else
101      state->m_vram2[offset] = data;
105      m_vram2[offset] = data;
102106}
103107
104108#if 0
105static READ8_HANDLER( read_unk )
109READ8_MEMBER(laserbas_state::read_unk)
106110{
107   laserbas_state *state = space->machine().driver_data<laserbas_state>();
108111
109   state->m_count ^= 0x80;
110   return state->m_count | 0x7f;
112   m_count ^= 0x80;
113   return m_count | 0x7f;
111114}
112115#endif
113116
114static WRITE8_HANDLER(vrambank_w)
117WRITE8_MEMBER(laserbas_state::vrambank_w)
115118{
116   laserbas_state *state = space->machine().driver_data<laserbas_state>();
117119
118120   /* either bit 2 or 3 controls flip screen */
119121
120   state->m_vrambank = data & 0x40;
122   m_vrambank = data & 0x40;
121123}
122124
123static READ8_HANDLER( protram_r )
125READ8_MEMBER(laserbas_state::protram_r)
124126{
125   laserbas_state *state = space->machine().driver_data<laserbas_state>();
126127
127   return state->m_protram[offset];
128   return m_protram[offset];
128129}
129130
130static WRITE8_HANDLER( protram_w )
131WRITE8_MEMBER(laserbas_state::protram_w)
131132{
132   laserbas_state *state = space->machine().driver_data<laserbas_state>();
133133
134   state->m_protram[offset] = data;
134   m_protram[offset] = data;
135135}
136136
137137static ADDRESS_MAP_START( laserbas_memory, AS_PROGRAM, 8, laserbas_state )
138138   //ADDRESS_MAP_UNMAP_HIGH
139139   AM_RANGE(0x0000, 0x3fff) AM_ROM
140   AM_RANGE(0x4000, 0xbfff) AM_READWRITE_LEGACY(vram_r, vram_w)
140   AM_RANGE(0x4000, 0xbfff) AM_READWRITE(vram_r, vram_w)
141141   AM_RANGE(0xc000, 0xf7ff) AM_ROM
142   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(protram_r, protram_w) AM_BASE(m_protram) /* protection device */
142   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(protram_r, protram_w) AM_BASE(m_protram) /* protection device */
143143   AM_RANGE(0xfc00, 0xffff) AM_RAM
144144ADDRESS_MAP_END
145145
r14845r14846
147147   ADDRESS_MAP_GLOBAL_MASK(0xff)
148148   AM_RANGE(0x00, 0x00) AM_DEVWRITE("crtc", mc6845_device, address_w)
149149   AM_RANGE(0x01, 0x01) AM_DEVWRITE("crtc", mc6845_device, register_w)
150   AM_RANGE(0x10, 0x10) AM_WRITE_LEGACY(vrambank_w)
150   AM_RANGE(0x10, 0x10) AM_WRITE(vrambank_w)
151151   AM_RANGE(0x20, 0x20) AM_READ_PORT("IN1") // DSW + something else?
152152   AM_RANGE(0x21, 0x21) AM_READ_PORT("IN0")
153153   AM_RANGE(0x22, 0x22) AM_READ_PORT("IN2")
src/mame/drivers/kingpin.c
r14845r14846
3333      : driver_device(mconfig, type, tag) { }
3434
3535   UINT8 *m_code_base;
36   DECLARE_READ8_MEMBER(io_read_missing_dips);
3637};
3738
3839
39static READ8_HANDLER( io_read_missing_dips )
40READ8_MEMBER(kingpin_state::io_read_missing_dips)
4041{
4142   return 0x00;
4243}
r14845r14846
106107
107108static ADDRESS_MAP_START( kingpin_io_map, AS_IO, 8, kingpin_state )
108109   ADDRESS_MAP_GLOBAL_MASK(0xff)
109   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(io_read_missing_dips)
110   AM_RANGE(0x00, 0x00) AM_READ(io_read_missing_dips)
110111   AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW")
111/*  AM_RANGE(0x02, 0x02) AM_READ_LEGACY(io_read_missing_dips) */
112/*  AM_RANGE(0x02, 0x02) AM_READ(io_read_missing_dips) */
112113/*  AM_RANGE(0x02, 0x02) AM_WRITE_LEGACY(NO IDEA) */
113114   AM_RANGE(0x10, 0x10) AM_READ_PORT("IN0")
114115   AM_RANGE(0x11, 0x11) AM_READ_PORT("IN1")
src/mame/drivers/taitopjc.c
r14845r14846
7171   taitopjc_state(const machine_config &mconfig, device_type type, const char *tag)
7272      : driver_device(mconfig, type, tag)
7373   { }
74   DECLARE_READ64_MEMBER(video_r);
75   DECLARE_WRITE64_MEMBER(video_w);
76   DECLARE_READ64_MEMBER(ppc_common_r);
77   DECLARE_READ64_MEMBER(dsp_r);
78   DECLARE_WRITE64_MEMBER(dsp_w);
79   DECLARE_READ8_MEMBER(tlcs_common_r);
80   DECLARE_WRITE8_MEMBER(tlcs_common_w);
81   DECLARE_READ8_MEMBER(tlcs_sound_r);
82   DECLARE_WRITE8_MEMBER(tlcs_sound_w);
7483};
7584
7685static VIDEO_START( taitopjc )
r14845r14846
157166   }
158167}
159168
160static READ64_HANDLER(video_r)
169READ64_MEMBER(taitopjc_state::video_r)
161170{
162171   UINT64 r = 0;
163172
r14845r14846
165174   {
166175      if (ACCESSING_BITS_32_63)
167176      {
168         r |= (UINT64)(videochip_r(space, video_address)) << 32;
177         r |= (UINT64)(videochip_r(&space, video_address)) << 32;
169178      }
170179   }
171180
172181   return r;
173182}
174183
175static WRITE64_HANDLER(video_w)
184WRITE64_MEMBER(taitopjc_state::video_w)
176185{
177186   if (offset == 0)
178187   {
179188      if (ACCESSING_BITS_32_63)
180189      {
181190         //printf("Address %08X = %08X\n", video_address, (UINT32)(data >> 32));
182         videochip_w(space, video_address, (UINT32)(data >> 32));
191         videochip_w(&space, video_address, (UINT32)(data >> 32));
183192      }
184193   }
185194   if (offset == 1)
r14845r14846
205214};
206215*/
207216
208static READ64_HANDLER(ppc_common_r)
217READ64_MEMBER(taitopjc_state::ppc_common_r)
209218{
210219   UINT64 r = 0;
211220   UINT32 address;
r14845r14846
247256
248257static UINT16 dsp_ram[0x1000];
249258
250static READ64_HANDLER(dsp_r)
259READ64_MEMBER(taitopjc_state::dsp_r)
251260{
252261   UINT64 r = 0;
253262
r14845r14846
262271   return r;
263272}
264273
265static WRITE64_HANDLER(dsp_w)
274WRITE64_MEMBER(taitopjc_state::dsp_w)
266275{
267276   logerror("dsp_w: %08X, %08X%08X, %08X%08X\n", offset, (UINT32)(data >> 32), (UINT32)(data), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask));
268277
r14845r14846
311320
312321static ADDRESS_MAP_START( ppc603e_mem, AS_PROGRAM, 64, taitopjc_state )
313322   AM_RANGE(0x00000000, 0x003fffff) AM_RAM // Work RAM
314   AM_RANGE(0x40000000, 0x4000000f) AM_READWRITE_LEGACY(video_r, video_w)
315   AM_RANGE(0x80000000, 0x80003fff) AM_READWRITE_LEGACY(dsp_r, dsp_w)
316   AM_RANGE(0xc0000000, 0xc000ffff) AM_READ_LEGACY(ppc_common_r)
323   AM_RANGE(0x40000000, 0x4000000f) AM_READWRITE(video_r, video_w)
324   AM_RANGE(0x80000000, 0x80003fff) AM_READWRITE(dsp_r, dsp_w)
325   AM_RANGE(0xc0000000, 0xc000ffff) AM_READ(ppc_common_r)
317326   AM_RANGE(0xff000000, 0xff01ffff) AM_ROM AM_REGION("user2", 0)
318327   AM_RANGE(0xffe00000, 0xffffffff) AM_ROM AM_REGION("user1", 0)
319328ADDRESS_MAP_END
r14845r14846
321330
322331
323332
324static READ8_HANDLER(tlcs_common_r)
333READ8_MEMBER(taitopjc_state::tlcs_common_r)
325334{
326335   return common_ram[offset];
327336}
328337
329static WRITE8_HANDLER(tlcs_common_w)
338WRITE8_MEMBER(taitopjc_state::tlcs_common_w)
330339{
331340//  printf("tlcs_common_w: %08X, %02X\n", offset, data);
332341
333342   common_ram[offset] = data;
334343}
335344
336static READ8_HANDLER(tlcs_sound_r)
345READ8_MEMBER(taitopjc_state::tlcs_sound_r)
337346{
338347   if (offset == 0x17)
339348   {
r14845r14846
343352   return 0;
344353}
345354
346static WRITE8_HANDLER(tlcs_sound_w)
355WRITE8_MEMBER(taitopjc_state::tlcs_sound_w)
347356{
348357//  printf("tlcs_sound_w: %08X, %02X\n", offset, data);
349358}
r14845r14846
367376
368377static ADDRESS_MAP_START( tlcs900h_mem, AS_PROGRAM, 8, taitopjc_state )
369378   AM_RANGE(0x010000, 0x02ffff) AM_RAM      // Work RAM
370   AM_RANGE(0x040000, 0x0400ff) AM_READWRITE_LEGACY(tlcs_sound_r, tlcs_sound_w)
371   AM_RANGE(0x060000, 0x061fff) AM_READWRITE_LEGACY(tlcs_common_r, tlcs_common_w)
379   AM_RANGE(0x040000, 0x0400ff) AM_READWRITE(tlcs_sound_r, tlcs_sound_w)
380   AM_RANGE(0x060000, 0x061fff) AM_READWRITE(tlcs_common_r, tlcs_common_w)
372381   AM_RANGE(0xfc0000, 0xffffff) AM_ROM AM_REGION("io_cpu", 0)
373382ADDRESS_MAP_END
374383
src/mame/drivers/clayshoo.c
r14845r14846
3131   emu_timer *m_analog_timer_1, *m_analog_timer_2;
3232   UINT8 m_input_port_select;
3333   UINT8 m_analog_port_val;
34   DECLARE_WRITE8_MEMBER(analog_reset_w);
35   DECLARE_READ8_MEMBER(analog_r);
3436};
3537
3638
r14845r14846
107109}
108110
109111
110static WRITE8_HANDLER( analog_reset_w )
112WRITE8_MEMBER(clayshoo_state::analog_reset_w)
111113{
112   clayshoo_state *state = space->machine().driver_data<clayshoo_state>();
113114
114115   /* reset the analog value, and start the two times that will fire
115116       off in a short period proportional to the position of the
116117       analog control and set the appropriate bit. */
117118
118   state->m_analog_port_val = 0xff;
119   m_analog_port_val = 0xff;
119120
120   state->m_analog_timer_1->adjust(compute_duration(&space->device(), input_port_read(space->machine(), "AN1")), 0x02);
121   state->m_analog_timer_2->adjust(compute_duration(&space->device(), input_port_read(space->machine(), "AN2")), 0x01);
121   m_analog_timer_1->adjust(compute_duration(&space.device(), input_port_read(machine(), "AN1")), 0x02);
122   m_analog_timer_2->adjust(compute_duration(&space.device(), input_port_read(machine(), "AN2")), 0x01);
122123}
123124
124125
125static READ8_HANDLER( analog_r )
126READ8_MEMBER(clayshoo_state::analog_r)
126127{
127   clayshoo_state *state = space->machine().driver_data<clayshoo_state>();
128   return state->m_analog_port_val;
128   return m_analog_port_val;
129129}
130130
131131
r14845r14846
222222   AM_RANGE(0x4000, 0x47ff) AM_ROM
223223   AM_RANGE(0x8000, 0x97ff) AM_RAM AM_BASE_SIZE(m_videoram, m_videoram_size)   /* 6k of video ram according to readme */
224224   AM_RANGE(0x9800, 0xa800) AM_WRITENOP     /* not really mapped, but cleared */
225   AM_RANGE(0xc800, 0xc800) AM_READWRITE_LEGACY(analog_r, analog_reset_w)
225   AM_RANGE(0xc800, 0xc800) AM_READWRITE(analog_r, analog_reset_w)
226226ADDRESS_MAP_END
227227
228228
src/mame/drivers/ghosteo.c
r14845r14846
8484   int m_security_count;
8585   UINT32 m_bballoon_port[20];
8686   struct nand_t m_nand;
87   DECLARE_WRITE32_MEMBER(sound_w);
88   DECLARE_READ32_MEMBER(bballoon_speedup_r);
8789};
8890
8991
r14845r14846
329331   i2cmem_sda_write( i2cmem, state);
330332}
331333
332static WRITE32_HANDLER( sound_w )
334WRITE32_MEMBER(ghosteo_state::sound_w)
333335{
334336   if ((data >= 0x20) && (data <= 0x7F))
335337   {
r14845r14846
349351   AM_RANGE(0x10000000, 0x10000003) AM_READ_PORT("10000000")
350352   AM_RANGE(0x10100000, 0x10100003) AM_READ_PORT("10100000")
351353   AM_RANGE(0x10200000, 0x10200003) AM_READ_PORT("10200000")
352   AM_RANGE(0x10300000, 0x10300003) AM_WRITE_LEGACY(sound_w)
354   AM_RANGE(0x10300000, 0x10300003) AM_WRITE(sound_w)
353355   AM_RANGE(0x30000000, 0x31ffffff) AM_RAM AM_BASE(m_system_memory) AM_MIRROR(0x02000000)
354356ADDRESS_MAP_END
355357
r14845r14846
435437
436438device_t* s3c2410;
437439
438static READ32_HANDLER( bballoon_speedup_r )
440READ32_MEMBER(ghosteo_state::bballoon_speedup_r)
439441{
440442   UINT32 ret = s3c2410_lcd_r(s3c2410, offset+0x10/4, mem_mask);
441443
442444
443   int pc = cpu_get_pc(&space->device());
445   int pc = cpu_get_pc(&space.device());
444446
445447   // these are vblank waits
446448   if (pc == 0x3001c0e4 || pc == 0x3001c0d8)
447449   {
448450      // BnB Arcade
449      device_spin_until_time(&space->device(), attotime::from_usec(20));
451      device_spin_until_time(&space.device(), attotime::from_usec(20));
450452   }
451453   else if (pc == 0x3002b580 || pc == 0x3002b550)
452454   {
453455      // Happy Tour
454      device_spin_until_time(&space->device(), attotime::from_usec(20));
456      device_spin_until_time(&space.device(), attotime::from_usec(20));
455457   }
456458   //else
457459   //  printf("speedup %08x %08x\n", pc, ret);
r14845r14846
461463
462464static MACHINE_RESET( bballoon )
463465{
464   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x4d000010, 0x4d000013, FUNC(bballoon_speedup_r));
466   ghosteo_state *state = machine.driver_data<ghosteo_state>();
467   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x4d000010, 0x4d000013,read32_delegate(FUNC(ghosteo_state::bballoon_speedup_r), state));
465468   s3c2410 = machine.device("s3c2410");
466469}
467470
src/mame/drivers/dunhuang.c
r14845r14846
9393   UINT8          m_colorram[0x40 * 0x20];
9494   UINT8          m_colorram2[0x40 * 0x8];
9595   UINT8          m_paldata[3 * 256];
96   DECLARE_WRITE8_MEMBER(dunhuang_pos_x_w);
97   DECLARE_WRITE8_MEMBER(dunhuang_pos_y_w);
98   DECLARE_WRITE8_MEMBER(dunhuang_tile_w);
99   DECLARE_WRITE8_MEMBER(dunhuang_tile2_w);
100   DECLARE_WRITE8_MEMBER(dunhuang_clear_y_w);
101   DECLARE_WRITE8_MEMBER(dunhuang_horiz_clear_w);
102   DECLARE_WRITE8_MEMBER(dunhuang_vert_clear_w);
103   DECLARE_WRITE8_MEMBER(dunhuang_block_dest_w);
104   DECLARE_WRITE8_MEMBER(dunhuang_block_x_w);
105   DECLARE_WRITE8_MEMBER(dunhuang_block_y_w);
106   DECLARE_WRITE8_MEMBER(dunhuang_block_w_w);
107   DECLARE_WRITE8_MEMBER(dunhuang_block_c_w);
108   DECLARE_WRITE8_MEMBER(dunhuang_block_addr_lo_w);
109   DECLARE_WRITE8_MEMBER(dunhuang_block_addr_hi_w);
110   DECLARE_WRITE8_MEMBER(dunhuang_block_h_w);
111   DECLARE_WRITE8_MEMBER(dunhuang_paloffs_w);
112   DECLARE_WRITE8_MEMBER(dunhuang_paldata_w);
113   DECLARE_WRITE8_MEMBER(dunhuang_layers_w);
114   DECLARE_WRITE8_MEMBER(dunhuang_input_w);
115   DECLARE_READ8_MEMBER(dunhuang_service_r);
116   DECLARE_READ8_MEMBER(dunhuang_input_r);
117   DECLARE_WRITE8_MEMBER(dunhuang_rombank_w);
118   DECLARE_WRITE8_MEMBER(dunhuang_82_w);
96119};
97120
98121
r14845r14846
170193
171194// Tilemaps access
172195
173static WRITE8_HANDLER( dunhuang_pos_x_w )
196WRITE8_MEMBER(dunhuang_state::dunhuang_pos_x_w)
174197{
175   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
176   state->m_pos_x = data & 0x3f;
177   state->m_written = 0;
178   state->m_written2 = 0;
198   m_pos_x = data & 0x3f;
199   m_written = 0;
200   m_written2 = 0;
179201}
180202
181static WRITE8_HANDLER( dunhuang_pos_y_w )
203WRITE8_MEMBER(dunhuang_state::dunhuang_pos_y_w)
182204{
183   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
184   state->m_pos_y = data;
185   state->m_written = 0;
186   state->m_written2 = 0;
205   m_pos_y = data;
206   m_written = 0;
207   m_written2 = 0;
187208}
188209
189static WRITE8_HANDLER( dunhuang_tile_w )
210WRITE8_MEMBER(dunhuang_state::dunhuang_tile_w)
190211{
191   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
192212   int addr;
193213
194   if (state->m_written & (1 << offset))
214   if (m_written & (1 << offset))
195215   {
196      state->m_written = 0;
197      state->m_pos_x++;
198      if (state->m_pos_x == 0x40)
216      m_written = 0;
217      m_pos_x++;
218      if (m_pos_x == 0x40)
199219      {
200         state->m_pos_x = 0;
201         state->m_pos_y++;
220         m_pos_x = 0;
221         m_pos_y++;
202222      }
203223   }
204   state->m_written |= 1 << offset;
224   m_written |= 1 << offset;
205225
206   addr = (state->m_pos_x & 0x3f) + (state->m_pos_y & 0x1f) * 0x40;
226   addr = (m_pos_x & 0x3f) + (m_pos_y & 0x1f) * 0x40;
207227   switch (offset)
208228   {
209      case 0:   state->m_videoram[addr] = (state->m_videoram[addr] & 0xff00) | data;      break;
210      case 1:   state->m_videoram[addr] = (state->m_videoram[addr] & 0x00ff) | (data<<8);   break;
211      case 2:   state->m_colorram[addr] = data;                                    break;
229      case 0:   m_videoram[addr] = (m_videoram[addr] & 0xff00) | data;      break;
230      case 1:   m_videoram[addr] = (m_videoram[addr] & 0x00ff) | (data<<8);   break;
231      case 2:   m_colorram[addr] = data;                                    break;
212232   }
213   state->m_tmap->mark_tile_dirty(addr);
233   m_tmap->mark_tile_dirty(addr);
214234}
215235
216static WRITE8_HANDLER( dunhuang_tile2_w )
236WRITE8_MEMBER(dunhuang_state::dunhuang_tile2_w)
217237{
218   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
219238   int addr;
220239
221   if (state->m_written2 & (1 << offset))
240   if (m_written2 & (1 << offset))
222241   {
223      state->m_written2 = 0;
224      state->m_pos_x++;
225      if (state->m_pos_x == 0x40)
242      m_written2 = 0;
243      m_pos_x++;
244      if (m_pos_x == 0x40)
226245      {
227         state->m_pos_x = 0;
228         state->m_pos_y++;
246         m_pos_x = 0;
247         m_pos_y++;
229248      }
230249   }
231   state->m_written2 |= 1 << offset;
250   m_written2 |= 1 << offset;
232251
233   addr = (state->m_pos_x & 0x3f) + (state->m_pos_y & 0x07) * 0x40;
252   addr = (m_pos_x & 0x3f) + (m_pos_y & 0x07) * 0x40;
234253   switch (offset)
235254   {
236      case 0:   state->m_videoram2[addr] = (state->m_videoram2[addr] & 0xff00) | data;      break;
237      case 1:   state->m_videoram2[addr] = (state->m_videoram2[addr] & 0x00ff) | (data<<8);   break;
238      case 2:   state->m_colorram2[addr] = data;                                 break;
255      case 0:   m_videoram2[addr] = (m_videoram2[addr] & 0xff00) | data;      break;
256      case 1:   m_videoram2[addr] = (m_videoram2[addr] & 0x00ff) | (data<<8);   break;
257      case 2:   m_colorram2[addr] = data;                                 break;
239258   }
240   state->m_tmap2->mark_tile_dirty(addr);
259   m_tmap2->mark_tile_dirty(addr);
241260}
242261
243262// Clear a row of tiles (videoram)
244263
245static WRITE8_HANDLER( dunhuang_clear_y_w )
264WRITE8_MEMBER(dunhuang_state::dunhuang_clear_y_w)
246265{
247   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
248   state->m_clear_y = data;
266   m_clear_y = data;
249267}
250static WRITE8_HANDLER( dunhuang_horiz_clear_w )
268WRITE8_MEMBER(dunhuang_state::dunhuang_horiz_clear_w)
251269{
252   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
253270   int i;
254//  logerror("%06x: horiz clear, y = %02x, data = %02d\n", cpu_get_pc(&space->device()), state->m_clear_y,data);
271//  logerror("%06x: horiz clear, y = %02x, data = %02d\n", cpu_get_pc(&space.device()), m_clear_y,data);
255272   for (i = 0; i < 0x40; i++)
256273   {
257      int addr = state->m_clear_y * 0x40 + i;
274      int addr = m_clear_y * 0x40 + i;
258275
259      state->m_videoram[addr] = 0;
260      state->m_colorram[addr] = 0;
261      state->m_tmap->mark_tile_dirty(addr);
276      m_videoram[addr] = 0;
277      m_colorram[addr] = 0;
278      m_tmap->mark_tile_dirty(addr);
262279   }
263280}
264281
265282// Clear a column of tiles (videoram2)
266283
267static WRITE8_HANDLER( dunhuang_vert_clear_w )
284WRITE8_MEMBER(dunhuang_state::dunhuang_vert_clear_w)
268285{
269   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
270286   int i;
271//  logerror("%06x: vert clear, x = %02x, y = %02x, data = %02x\n", cpu_get_pc(&space->device()), state->m_pos_x,state->m_pos_y,data);
287//  logerror("%06x: vert clear, x = %02x, y = %02x, data = %02x\n", cpu_get_pc(&space.device()), m_pos_x,m_pos_y,data);
272288   for (i = 0; i < 0x08; i++)
273289   {
274      int addr = (state->m_pos_x & 0x3f) + (i & 0x07) * 0x40;
290      int addr = (m_pos_x & 0x3f) + (i & 0x07) * 0x40;
275291
276      state->m_videoram2[addr] = 1;
277      state->m_colorram2[addr] = 0;
278      state->m_tmap2->mark_tile_dirty(addr);
292      m_videoram2[addr] = 1;
293      m_colorram2[addr] = 0;
294      m_tmap2->mark_tile_dirty(addr);
279295   }
280296}
281297
r14845r14846
285301// The tiles codes are read from the graphics roms too!
286302//
287303
288static WRITE8_HANDLER( dunhuang_block_dest_w )
304WRITE8_MEMBER(dunhuang_state::dunhuang_block_dest_w)
289305{
290   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
291   state->m_block_dest = data;
306   m_block_dest = data;
292307}
293308
294static WRITE8_HANDLER( dunhuang_block_x_w )
309WRITE8_MEMBER(dunhuang_state::dunhuang_block_x_w)
295310{
296   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
297   state->m_block_x = data;
311   m_block_x = data;
298312}
299313
300static WRITE8_HANDLER( dunhuang_block_y_w )
314WRITE8_MEMBER(dunhuang_state::dunhuang_block_y_w)
301315{
302   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
303   state->m_block_y = data;
316   m_block_y = data;
304317}
305318
306static WRITE8_HANDLER( dunhuang_block_w_w )
319WRITE8_MEMBER(dunhuang_state::dunhuang_block_w_w)
307320{
308   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
309   state->m_block_w = data;
321   m_block_w = data;
310322}
311323
312static WRITE8_HANDLER( dunhuang_block_c_w )
324WRITE8_MEMBER(dunhuang_state::dunhuang_block_c_w)
313325{
314   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
315   state->m_block_c = data;
326   m_block_c = data;
316327}
317328
318static WRITE8_HANDLER( dunhuang_block_addr_lo_w )
329WRITE8_MEMBER(dunhuang_state::dunhuang_block_addr_lo_w)
319330{
320   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
321   state->m_block_addr_lo = data;
331   m_block_addr_lo = data;
322332}
323333
324static WRITE8_HANDLER( dunhuang_block_addr_hi_w )
334WRITE8_MEMBER(dunhuang_state::dunhuang_block_addr_hi_w)
325335{
326   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
327   state->m_block_addr_hi = data;
336   m_block_addr_hi = data;
328337}
329338
330339
331static WRITE8_HANDLER( dunhuang_block_h_w )
340WRITE8_MEMBER(dunhuang_state::dunhuang_block_h_w)
332341{
333   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
334342   int i,j, addr;
335343   UINT8 *tile_addr;
336344
337//  logerror("%06x: block dst %x, src %x, xy %x %x, wh %x %x, clr %x\n", cpu_get_pc(&space->device()), state->m_block_dest, (state->m_block_addr_hi << 8) + state->m_block_addr_lo, state->m_block_x,state->m_block_y,state->m_block_w+1,state->m_block_h+1,state->m_block_c);
345//  logerror("%06x: block dst %x, src %x, xy %x %x, wh %x %x, clr %x\n", cpu_get_pc(&space.device()), m_block_dest, (m_block_addr_hi << 8) + m_block_addr_lo, m_block_x,m_block_y,m_block_w+1,m_block_h+1,m_block_c);
338346
339   state->m_block_h = data;
347   m_block_h = data;
340348
341   tile_addr = space->machine().region("gfx2")->base() + ((state->m_block_addr_hi << 8) + state->m_block_addr_lo) * 4;
349   tile_addr = machine().region("gfx2")->base() + ((m_block_addr_hi << 8) + m_block_addr_lo) * 4;
342350
343   switch (state->m_block_dest)
351   switch (m_block_dest)
344352   {
345353      case 0x04:   // write to videoram
346         for (j = 0; j <= state->m_block_h; j++)
354         for (j = 0; j <= m_block_h; j++)
347355         {
348            for (i = 0; i <= state->m_block_w; i++)
356            for (i = 0; i <= m_block_w; i++)
349357            {
350               addr = ((state->m_block_x + i)& 0x3f) + ((state->m_block_y + j) & 0x1f) * 0x40;
358               addr = ((m_block_x + i)& 0x3f) + ((m_block_y + j) & 0x1f) * 0x40;
351359
352               state->m_videoram[addr] = (tile_addr[1] << 8) | tile_addr[0];
353               state->m_colorram[addr] = state->m_block_c;
354               state->m_tmap->mark_tile_dirty(addr);
360               m_videoram[addr] = (tile_addr[1] << 8) | tile_addr[0];
361               m_colorram[addr] = m_block_c;
362               m_tmap->mark_tile_dirty(addr);
355363               tile_addr += 4;
356364            }
357365         }
358366         break;
359367
360368      case 0x08:   // write to videoram2
361         for (j = 0; j <= state->m_block_h; j++)
369         for (j = 0; j <= m_block_h; j++)
362370         {
363            for (i = 0; i <= state->m_block_w; i++)
371            for (i = 0; i <= m_block_w; i++)
364372            {
365               addr = ((state->m_block_x + i)& 0x3f) + ((state->m_block_y + j) & 0x7) * 0x40;
373               addr = ((m_block_x + i)& 0x3f) + ((m_block_y + j) & 0x7) * 0x40;
366374
367               state->m_videoram2[addr] = (tile_addr[1] << 8) | tile_addr[0];
368               state->m_colorram2[addr] = state->m_block_c;
369               state->m_tmap2->mark_tile_dirty(addr);
375               m_videoram2[addr] = (tile_addr[1] << 8) | tile_addr[0];
376               m_colorram2[addr] = m_block_c;
377               m_tmap2->mark_tile_dirty(addr);
370378               tile_addr += 4;
371379            }
372380         }
373381         break;
374382
375383      default:
376         popmessage("%06x: block dst=%x", cpu_get_pc(&space->device()), state->m_block_dest);
384         popmessage("%06x: block dst=%x", cpu_get_pc(&space.device()), m_block_dest);
377385   }
378386}
379387
380388// Palette: HMC HM86171 VGA 256 colour RAMDAC
381389
382static WRITE8_HANDLER( dunhuang_paloffs_w )
390WRITE8_MEMBER(dunhuang_state::dunhuang_paloffs_w)
383391{
384   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
385   state->m_paloffs = data * 3;
392   m_paloffs = data * 3;
386393}
387394
388static WRITE8_HANDLER( dunhuang_paldata_w )
395WRITE8_MEMBER(dunhuang_state::dunhuang_paldata_w)
389396{
390   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
391   state->m_paldata[state->m_paloffs] = data;
397   m_paldata[m_paloffs] = data;
392398
393   palette_set_color_rgb( space->machine(), state->m_paloffs/3,
394      pal6bit(state->m_paldata[(state->m_paloffs/3)*3+0]),
395      pal6bit(state->m_paldata[(state->m_paloffs/3)*3+1]),
396      pal6bit(state->m_paldata[(state->m_paloffs/3)*3+2])
399   palette_set_color_rgb( machine(), m_paloffs/3,
400      pal6bit(m_paldata[(m_paloffs/3)*3+0]),
401      pal6bit(m_paldata[(m_paloffs/3)*3+1]),
402      pal6bit(m_paldata[(m_paloffs/3)*3+2])
397403   );
398404
399   state->m_paloffs = (state->m_paloffs + 1) % (3*256);
405   m_paloffs = (m_paloffs + 1) % (3*256);
400406}
401407
402408// Layers control (not understood)
403409
404static WRITE8_HANDLER( dunhuang_layers_w )
410WRITE8_MEMBER(dunhuang_state::dunhuang_layers_w)
405411{
406   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
407412//  popmessage("layers %02x",data);
408   state->m_layers = data;
413   m_layers = data;
409414}
410415
411416/***************************************************************************
r14845r14846
420425
421426// Inputs
422427
423static WRITE8_HANDLER( dunhuang_input_w )
428WRITE8_MEMBER(dunhuang_state::dunhuang_input_w)
424429{
425   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
426   state->m_input = data;
430   m_input = data;
427431}
428432
429static READ8_HANDLER( dunhuang_service_r )
433READ8_MEMBER(dunhuang_state::dunhuang_service_r)
430434{
431   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
432   return input_port_read(space->machine(), "SERVICE")
433    | ((state->m_hopper && !(space->machine().primary_screen->frame_number() % 10)) ? 0x00 : 0x08)   // bit 3: hopper sensor
435   return input_port_read(machine(), "SERVICE")
436    | ((m_hopper && !(machine().primary_screen->frame_number() % 10)) ? 0x00 : 0x08)   // bit 3: hopper sensor
434437    | 0x80                                                // bit 7 low -> tiles block transferrer busy
435438   ;
436439}
r14845r14846
446449   logerror("%s: warning, unknown dsw bits read, input = %02x\n", device->machine().describe_context(), state->m_input);
447450   return 0xff;
448451}
449static READ8_HANDLER( dunhuang_input_r )
452READ8_MEMBER(dunhuang_state::dunhuang_input_r)
450453{
451   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
452   if (!(state->m_input & 0x01))   return input_port_read(space->machine(), "IN0");
453   if (!(state->m_input & 0x02))   return input_port_read(space->machine(), "IN1");
454   if (!(state->m_input & 0x04))   return input_port_read(space->machine(), "IN2");
455   if (!(state->m_input & 0x08))   return input_port_read(space->machine(), "IN3");
456   if (!(state->m_input & 0x10))   return input_port_read(space->machine(), "IN4");
457   logerror("%s: warning, unknown input bits read, input = %02x\n", space->machine().describe_context(), state->m_input);
454   if (!(m_input & 0x01))   return input_port_read(machine(), "IN0");
455   if (!(m_input & 0x02))   return input_port_read(machine(), "IN1");
456   if (!(m_input & 0x04))   return input_port_read(machine(), "IN2");
457   if (!(m_input & 0x08))   return input_port_read(machine(), "IN3");
458   if (!(m_input & 0x10))   return input_port_read(machine(), "IN4");
459   logerror("%s: warning, unknown input bits read, input = %02x\n", machine().describe_context(), m_input);
458460   return 0xff;
459461}
460462
461static WRITE8_HANDLER( dunhuang_rombank_w )
463WRITE8_MEMBER(dunhuang_state::dunhuang_rombank_w)
462464{
463   dunhuang_state *state = space->machine().driver_data<dunhuang_state>();
464465
465466   // ?                data & 0x01
466467   // ?                data & 0x02
467468
468   memory_set_bank(space->machine(), "bank1", ((data >> 2) & 0x7));
469   memory_set_bank(machine(), "bank1", ((data >> 2) & 0x7));
469470
470471   // COIN OUT:        data & 0x20
471   coin_counter_w(space->machine(), 0,   data & 0x40);
472   state->m_hopper = data & 0x80;
472   coin_counter_w(machine(), 0,   data & 0x40);
473   m_hopper = data & 0x80;
473474}
474475
475476
476477#ifdef UNUSED_FUNCTION
477static WRITE8_HANDLER( dunhuang_82_w )
478WRITE8_MEMBER(dunhuang_state::dunhuang_82_w)
478479{
479480//  popmessage("82 = %02x",dunhuang_82);
480481}
481482#endif
482483
483484static ADDRESS_MAP_START( dunhuang_io_map, AS_IO, 8, dunhuang_state )
484   AM_RANGE( 0x0000, 0x0000 ) AM_WRITE_LEGACY(dunhuang_pos_x_w )
485   AM_RANGE( 0x0001, 0x0001 ) AM_WRITE_LEGACY(dunhuang_pos_y_w )
486   AM_RANGE( 0x0002, 0x0004 ) AM_WRITE_LEGACY(dunhuang_tile_w )
487   AM_RANGE( 0x0005, 0x0007 ) AM_WRITE_LEGACY(dunhuang_tile2_w )
485   AM_RANGE( 0x0000, 0x0000 ) AM_WRITE(dunhuang_pos_x_w )
486   AM_RANGE( 0x0001, 0x0001 ) AM_WRITE(dunhuang_pos_y_w )
487   AM_RANGE( 0x0002, 0x0004 ) AM_WRITE(dunhuang_tile_w )
488   AM_RANGE( 0x0005, 0x0007 ) AM_WRITE(dunhuang_tile2_w )
488489
489   AM_RANGE( 0x0008, 0x0008 ) AM_WRITE_LEGACY(dunhuang_vert_clear_w )
490   AM_RANGE( 0x0008, 0x0008 ) AM_WRITE(dunhuang_vert_clear_w )
490491
491492   AM_RANGE( 0x000c, 0x000c ) AM_READ_LEGACY(watchdog_reset_r )
492493
493   AM_RANGE( 0x000f, 0x000f ) AM_WRITE_LEGACY(dunhuang_block_addr_lo_w )
494   AM_RANGE( 0x0010, 0x0010 ) AM_WRITE_LEGACY(dunhuang_block_addr_hi_w )
494   AM_RANGE( 0x000f, 0x000f ) AM_WRITE(dunhuang_block_addr_lo_w )
495   AM_RANGE( 0x0010, 0x0010 ) AM_WRITE(dunhuang_block_addr_hi_w )
495496//  AM_RANGE( 0x0011, 0x0011 ) ?
496   AM_RANGE( 0x0012, 0x0012 ) AM_WRITE_LEGACY(dunhuang_block_c_w )
497   AM_RANGE( 0x0015, 0x0015 ) AM_WRITE_LEGACY(dunhuang_block_x_w )
498   AM_RANGE( 0x0016, 0x0016 ) AM_WRITE_LEGACY(dunhuang_block_y_w )
499   AM_RANGE( 0x0017, 0x0017 ) AM_WRITE_LEGACY(dunhuang_block_w_w )
500   AM_RANGE( 0x0018, 0x0018 ) AM_WRITE_LEGACY(dunhuang_block_h_w )
497   AM_RANGE( 0x0012, 0x0012 ) AM_WRITE(dunhuang_block_c_w )
498   AM_RANGE( 0x0015, 0x0015 ) AM_WRITE(dunhuang_block_x_w )
499   AM_RANGE( 0x0016, 0x0016 ) AM_WRITE(dunhuang_block_y_w )
500   AM_RANGE( 0x0017, 0x0017 ) AM_WRITE(dunhuang_block_w_w )
501   AM_RANGE( 0x0018, 0x0018 ) AM_WRITE(dunhuang_block_h_w )
501502
502   AM_RANGE( 0x0019, 0x0019 ) AM_WRITE_LEGACY(dunhuang_clear_y_w )
503   AM_RANGE( 0x001a, 0x001a ) AM_WRITE_LEGACY(dunhuang_horiz_clear_w )
503   AM_RANGE( 0x0019, 0x0019 ) AM_WRITE(dunhuang_clear_y_w )
504   AM_RANGE( 0x001a, 0x001a ) AM_WRITE(dunhuang_horiz_clear_w )
504505
505   AM_RANGE( 0x001b, 0x001b ) AM_WRITE_LEGACY(dunhuang_block_dest_w )
506   AM_RANGE( 0x001b, 0x001b ) AM_WRITE(dunhuang_block_dest_w )
506507
507508   AM_RANGE( 0x0081, 0x0081 ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_register_port_w   )
508509   AM_RANGE( 0x0089, 0x0089 ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_data_port_w      )
509510
510//  AM_RANGE( 0x0082, 0x0082 ) AM_WRITE_LEGACY(dunhuang_82_w )
511//  AM_RANGE( 0x0082, 0x0082 ) AM_WRITE(dunhuang_82_w )
511512
512   AM_RANGE( 0x0083, 0x0083 ) AM_WRITE_LEGACY(dunhuang_paloffs_w )
513   AM_RANGE( 0x008b, 0x008b ) AM_WRITE_LEGACY(dunhuang_paldata_w )
513   AM_RANGE( 0x0083, 0x0083 ) AM_WRITE(dunhuang_paloffs_w )
514   AM_RANGE( 0x008b, 0x008b ) AM_WRITE(dunhuang_paldata_w )
514515
515   AM_RANGE( 0x0084, 0x0084 ) AM_READ_LEGACY(dunhuang_service_r )
516   AM_RANGE( 0x0085, 0x0085 ) AM_READ_LEGACY(dunhuang_input_r )
516   AM_RANGE( 0x0084, 0x0084 ) AM_READ(dunhuang_service_r )
517   AM_RANGE( 0x0085, 0x0085 ) AM_READ(dunhuang_input_r )
517518
518   AM_RANGE( 0x0086, 0x0086 ) AM_WRITE_LEGACY(dunhuang_rombank_w )
519   AM_RANGE( 0x0087, 0x0087 ) AM_WRITE_LEGACY(dunhuang_layers_w )
519   AM_RANGE( 0x0086, 0x0086 ) AM_WRITE(dunhuang_rombank_w )
520   AM_RANGE( 0x0087, 0x0087 ) AM_WRITE(dunhuang_layers_w )
520521
521522   AM_RANGE( 0x0088, 0x0088 ) AM_DEVREAD_LEGACY("ay8910", ay8910_r )
522523   AM_RANGE( 0x0090, 0x0090 ) AM_DEVWRITE_LEGACY("ay8910", ay8910_data_w )
r14845r14846
757758   AY8910_DEFAULT_LOADS,
758759   //  A                   B
759760   DEVCB_NULL,                     DEVCB_HANDLER(dunhuang_dsw_r),   // R
760   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, dunhuang_input_w),   DEVCB_NULL                  // W
761   DEVCB_DRIVER_MEMBER(dunhuang_state, dunhuang_input_w),   DEVCB_NULL                  // W
761762};
762763
763764
src/mame/drivers/deco_ld.c
r14845r14846
119119   required_device<pioneer_ldv1000_device> m_laserdisc;
120120   UINT8 m_laserdisc_data;
121121   int m_nmimask;
122   DECLARE_WRITE8_MEMBER(rblaster_sound_w);
123   DECLARE_WRITE8_MEMBER(rblaster_vram_bank_w);
124   DECLARE_READ8_MEMBER(laserdisc_r);
125   DECLARE_WRITE8_MEMBER(laserdisc_w);
126   DECLARE_READ8_MEMBER(test_r);
127   DECLARE_WRITE8_MEMBER(nmimask_w);
122128};
123129
124130
r14845r14846
148154}
149155
150156#if 0
151static WRITE8_HANDLER( rblaster_sound_w )
157WRITE8_MEMBER(deco_ld_state::rblaster_sound_w)
152158{
153159   soundlatch_w(space,0,data);
154   device_set_input_line(space->machine().cpu[1], 0, HOLD_LINE);
160   device_set_input_line(machine().cpu[1], 0, HOLD_LINE);
155161}
156162#endif
157163
158static WRITE8_HANDLER( rblaster_vram_bank_w )
164WRITE8_MEMBER(deco_ld_state::rblaster_vram_bank_w)
159165{
160   deco_ld_state *state = space->machine().driver_data<deco_ld_state>();
161   state->m_vram_bank = data;
166   m_vram_bank = data;
162167}
163168
164static READ8_HANDLER( laserdisc_r )
169READ8_MEMBER(deco_ld_state::laserdisc_r)
165170{
166   deco_ld_state *state = space->machine().driver_data<deco_ld_state>();
167   UINT8 result = state->m_laserdisc->status_r();
171   UINT8 result = m_laserdisc->status_r();
168172//  mame_printf_debug("laserdisc_r = %02X\n", result);
169173   return result;
170174}
171175
172176
173static WRITE8_HANDLER( laserdisc_w )
177WRITE8_MEMBER(deco_ld_state::laserdisc_w)
174178{
175   deco_ld_state *state = space->machine().driver_data<deco_ld_state>();
176   state->m_laserdisc_data = data;
179   m_laserdisc_data = data;
177180}
178181
179static READ8_HANDLER( test_r )
182READ8_MEMBER(deco_ld_state::test_r)
180183{
181   return space->machine().rand();
184   return machine().rand();
182185}
183186
184187static ADDRESS_MAP_START( begas_map, AS_PROGRAM, 8, deco_ld_state )
185188   AM_RANGE(0x0000, 0x0fff) AM_RAM
186189//  AM_RANGE(0x1000, 0x1007) AM_NOP
187   AM_RANGE(0x1000, 0x1000) AM_READ_LEGACY(test_r)
188   AM_RANGE(0x1001, 0x1001) AM_READ_LEGACY(test_r)
189   AM_RANGE(0x1002, 0x1002) AM_READ_LEGACY(test_r)
190   AM_RANGE(0x1003, 0x1003) AM_READ_LEGACY(test_r)
190   AM_RANGE(0x1000, 0x1000) AM_READ(test_r)
191   AM_RANGE(0x1001, 0x1001) AM_READ(test_r)
192   AM_RANGE(0x1002, 0x1002) AM_READ(test_r)
193   AM_RANGE(0x1003, 0x1003) AM_READ(test_r)
191194   AM_RANGE(0x1001, 0x1001) AM_WRITENOP //???
192195//  AM_RANGE(0x1003, 0x1003) AM_READ_PORT("IN0")
193   AM_RANGE(0x1003, 0x1003) AM_WRITE_LEGACY(rblaster_vram_bank_w) //might be 1001
196   AM_RANGE(0x1003, 0x1003) AM_WRITE(rblaster_vram_bank_w) //might be 1001
194197   AM_RANGE(0x1006, 0x1006) AM_NOP //ld status / command
195   AM_RANGE(0x1007, 0x1007) AM_READWRITE_LEGACY(laserdisc_r,laserdisc_w) // ld data
198   AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // ld data
196199   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE_LEGACY(paletteram_RRRGGGBB_w) AM_BASE_GENERIC(paletteram)
197200   AM_RANGE(0x2000, 0x27ff) AM_RAM
198201   AM_RANGE(0x2800, 0x2fff) AM_RAM AM_BASE(m_videoram)
r14845r14846
203206static ADDRESS_MAP_START( cobra_map, AS_PROGRAM, 8, deco_ld_state )
204207   AM_RANGE(0x0000, 0x0fff) AM_RAM
205208   AM_RANGE(0x1000, 0x1000) AM_READ_PORT("IN1")
206   AM_RANGE(0x1001, 0x1001) AM_READ_LEGACY(test_r)//_PORT("IN2")
207   AM_RANGE(0x1002, 0x1002) AM_READ_LEGACY(test_r)//_PORT("IN3")
208   AM_RANGE(0x1003, 0x1003) AM_READ_LEGACY(test_r)//AM_READ_PORT("IN0")
209//  AM_RANGE(0x1004, 0x1004) AM_READ_LEGACY(test_r)//_PORT("IN4")
210//  AM_RANGE(0x1005, 0x1005) AM_READ_LEGACY(test_r)//_PORT("IN5")
211   AM_RANGE(0x1004, 0x1004) AM_WRITE_LEGACY(rblaster_vram_bank_w) //might be 1001
209   AM_RANGE(0x1001, 0x1001) AM_READ(test_r)//_PORT("IN2")
210   AM_RANGE(0x1002, 0x1002) AM_READ(test_r)//_PORT("IN3")
211   AM_RANGE(0x1003, 0x1003) AM_READ(test_r)//AM_READ_PORT("IN0")
212//  AM_RANGE(0x1004, 0x1004) AM_READ(test_r)//_PORT("IN4")
213//  AM_RANGE(0x1005, 0x1005) AM_READ(test_r)//_PORT("IN5")
214   AM_RANGE(0x1004, 0x1004) AM_WRITE(rblaster_vram_bank_w) //might be 1001
212215   AM_RANGE(0x1006, 0x1006) AM_NOP //ld status / command
213   AM_RANGE(0x1007, 0x1007) AM_READWRITE_LEGACY(laserdisc_r,laserdisc_w) // ld data
216   AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // ld data
214217   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE_LEGACY(paletteram_RRRGGGBB_w) AM_BASE_GENERIC(paletteram)
215218   AM_RANGE(0x2000, 0x2fff) AM_RAM
216219   AM_RANGE(0x3000, 0x37ff) AM_RAM //vram attr?
r14845r14846
224227//  AM_RANGE(0x1000, 0x1007) AM_NOP
225228   AM_RANGE(0x1001, 0x1001) AM_WRITENOP //???
226229   AM_RANGE(0x1003, 0x1003) AM_READ_PORT("IN0")
227   AM_RANGE(0x1003, 0x1003) AM_WRITE_LEGACY(rblaster_vram_bank_w) //might be 1001
230   AM_RANGE(0x1003, 0x1003) AM_WRITE(rblaster_vram_bank_w) //might be 1001
228231   AM_RANGE(0x1006, 0x1006) AM_NOP //ld status / command
229   AM_RANGE(0x1007, 0x1007) AM_READWRITE_LEGACY(laserdisc_r,laserdisc_w) // ld data
232   AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // ld data
230233   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE_LEGACY(paletteram_RRRGGGBB_w) AM_BASE_GENERIC(paletteram)
231234   AM_RANGE(0x2800, 0x2fff) AM_RAM AM_BASE(m_videoram)
232235   AM_RANGE(0x3000, 0x3fff) AM_RAM
r14845r14846
236239/* sound arrangement is pratically identical to Zero Target. */
237240
238241#ifdef UNUSED_FUNCTION
239static WRITE8_HANDLER( nmimask_w )
242WRITE8_MEMBER(deco_ld_state::nmimask_w)
240243{
241   deco_ld_state *state = space->machine().driver_data<deco_ld_state>();
242   state->m_nmimask = data & 0x80;
244   m_nmimask = data & 0x80;
243245}
244246#endif
245247
src/mame/drivers/progolf.c
r14845r14846
7171   UINT8 m_scrollx_lo;
7272   UINT8 m_gfx_switch;
7373   UINT8 m_sound_cmd;
74   DECLARE_WRITE8_MEMBER(progolf_charram_w);
75   DECLARE_WRITE8_MEMBER(progolf_char_vregs_w);
76   DECLARE_WRITE8_MEMBER(progolf_scrollx_lo_w);
77   DECLARE_WRITE8_MEMBER(progolf_scrollx_hi_w);
78   DECLARE_WRITE8_MEMBER(progolf_flip_screen_w);
79   DECLARE_WRITE8_MEMBER(audio_command_w);
80   DECLARE_READ8_MEMBER(audio_command_r);
81   DECLARE_READ8_MEMBER(progolf_videoram_r);
82   DECLARE_WRITE8_MEMBER(progolf_videoram_w);
7483};
7584
7685
r14845r14846
140149   return 0;
141150}
142151
143static WRITE8_HANDLER( progolf_charram_w )
152WRITE8_MEMBER(progolf_state::progolf_charram_w)
144153{
145   progolf_state *state = space->machine().driver_data<progolf_state>();
146154   int i;
147   state->m_fbram[offset] = data;
155   m_fbram[offset] = data;
148156
149   if(state->m_char_pen == 7)
157   if(m_char_pen == 7)
150158   {
151159      for(i=0;i<8;i++)
152         state->m_fg_fb[offset*8+i] = 0;
160         m_fg_fb[offset*8+i] = 0;
153161   }
154162   else
155163   {
156164      for(i=0;i<8;i++)
157165      {
158         if(state->m_fg_fb[offset*8+i] == state->m_char_pen)
159            state->m_fg_fb[offset*8+i] = data & (1<<(7-i)) ? state->m_char_pen : 0;
166         if(m_fg_fb[offset*8+i] == m_char_pen)
167            m_fg_fb[offset*8+i] = data & (1<<(7-i)) ? m_char_pen : 0;
160168         else
161            state->m_fg_fb[offset*8+i] = data & (1<<(7-i)) ? state->m_fg_fb[offset*8+i]|state->m_char_pen : state->m_fg_fb[offset*8+i];
169            m_fg_fb[offset*8+i] = data & (1<<(7-i)) ? m_fg_fb[offset*8+i]|m_char_pen : m_fg_fb[offset*8+i];
162170      }
163171   }
164172}
165173
166static WRITE8_HANDLER( progolf_char_vregs_w )
174WRITE8_MEMBER(progolf_state::progolf_char_vregs_w)
167175{
168   progolf_state *state = space->machine().driver_data<progolf_state>();
169   state->m_char_pen = data & 0x07;
170   state->m_gfx_switch = data & 0xf0;
171   state->m_char_pen_vreg = data & 0x30;
176   m_char_pen = data & 0x07;
177   m_gfx_switch = data & 0xf0;
178   m_char_pen_vreg = data & 0x30;
172179}
173180
174static WRITE8_HANDLER( progolf_scrollx_lo_w )
181WRITE8_MEMBER(progolf_state::progolf_scrollx_lo_w)
175182{
176   progolf_state *state = space->machine().driver_data<progolf_state>();
177   state->m_scrollx_lo = data;
183   m_scrollx_lo = data;
178184}
179185
180static WRITE8_HANDLER( progolf_scrollx_hi_w )
186WRITE8_MEMBER(progolf_state::progolf_scrollx_hi_w)
181187{
182   progolf_state *state = space->machine().driver_data<progolf_state>();
183   state->m_scrollx_hi = data;
188   m_scrollx_hi = data;
184189}
185190
186static WRITE8_HANDLER( progolf_flip_screen_w )
191WRITE8_MEMBER(progolf_state::progolf_flip_screen_w)
187192{
188   flip_screen_set(space->machine(), data & 1);
193   flip_screen_set(machine(), data & 1);
189194   if(data & 0xfe)
190195      printf("$9600 with data = %02x used\n",data);
191196}
192197
193static WRITE8_HANDLER( audio_command_w )
198WRITE8_MEMBER(progolf_state::audio_command_w)
194199{
195   progolf_state *state = space->machine().driver_data<progolf_state>();
196   state->m_sound_cmd = data;
197   cputag_set_input_line(space->machine(), "audiocpu", 0, ASSERT_LINE);
200   m_sound_cmd = data;
201   cputag_set_input_line(machine(), "audiocpu", 0, ASSERT_LINE);
198202}
199203
200static READ8_HANDLER( audio_command_r )
204READ8_MEMBER(progolf_state::audio_command_r)
201205{
202   progolf_state *state = space->machine().driver_data<progolf_state>();
203   cputag_set_input_line(space->machine(), "audiocpu", 0, CLEAR_LINE);
204   return state->m_sound_cmd;
206   cputag_set_input_line(machine(), "audiocpu", 0, CLEAR_LINE);
207   return m_sound_cmd;
205208}
206209
207static READ8_HANDLER( progolf_videoram_r )
210READ8_MEMBER(progolf_state::progolf_videoram_r)
208211{
209   progolf_state *state = space->machine().driver_data<progolf_state>();
210   UINT8 *videoram = state->m_videoram;
211   UINT8 *gfx_rom = space->machine().region("gfx1")->base();
212   UINT8 *videoram = m_videoram;
213   UINT8 *gfx_rom = machine().region("gfx1")->base();
212214
213215   if (offset >= 0x0800)
214216   {
215      if      (state->m_gfx_switch == 0x50)
217      if      (m_gfx_switch == 0x50)
216218         return gfx_rom[offset];
217      else if (state->m_gfx_switch == 0x60)
219      else if (m_gfx_switch == 0x60)
218220         return gfx_rom[offset + 0x1000];
219      else if (state->m_gfx_switch == 0x70)
221      else if (m_gfx_switch == 0x70)
220222         return gfx_rom[offset + 0x2000];
221223      else
222224         return videoram[offset];
223225   } else {
224      if      (state->m_gfx_switch == 0x10)
226      if      (m_gfx_switch == 0x10)
225227         return gfx_rom[offset];
226      else if (state->m_gfx_switch == 0x20)
228      else if (m_gfx_switch == 0x20)
227229         return gfx_rom[offset + 0x1000];
228      else if (state->m_gfx_switch == 0x30)
230      else if (m_gfx_switch == 0x30)
229231         return gfx_rom[offset + 0x2000];
230232      else
231233         return videoram[offset];
232234   }
233235}
234236
235static WRITE8_HANDLER( progolf_videoram_w )
237WRITE8_MEMBER(progolf_state::progolf_videoram_w)
236238{
237   progolf_state *state = space->machine().driver_data<progolf_state>();
238   UINT8 *videoram = state->m_videoram;
239   //if(state->m_gfx_switch & 0x40)
239   UINT8 *videoram = m_videoram;
240   //if(m_gfx_switch & 0x40)
240241   videoram[offset] = data;
241242}
242243
243244static ADDRESS_MAP_START( main_cpu, AS_PROGRAM, 8, progolf_state )
244245   AM_RANGE(0x0000, 0x5fff) AM_RAM
245   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE_LEGACY(progolf_charram_w) AM_BASE(m_fbram)
246   AM_RANGE(0x8000, 0x8fff) AM_READWRITE_LEGACY(progolf_videoram_r,progolf_videoram_w)
247   AM_RANGE(0x9000, 0x9000) AM_READ_PORT("IN2") AM_WRITE_LEGACY(progolf_char_vregs_w)
248   AM_RANGE(0x9200, 0x9200) AM_READ_PORT("P1") AM_WRITE_LEGACY(progolf_scrollx_hi_w) //p1 inputs
249   AM_RANGE(0x9400, 0x9400) AM_READ_PORT("P2") AM_WRITE_LEGACY(progolf_scrollx_lo_w) //p2 inputs
250   AM_RANGE(0x9600, 0x9600) AM_READ_PORT("IN0") AM_WRITE_LEGACY(progolf_flip_screen_w)   /* VBLANK */
246   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE(progolf_charram_w) AM_BASE(m_fbram)
247   AM_RANGE(0x8000, 0x8fff) AM_READWRITE(progolf_videoram_r,progolf_videoram_w)
248   AM_RANGE(0x9000, 0x9000) AM_READ_PORT("IN2") AM_WRITE(progolf_char_vregs_w)
249   AM_RANGE(0x9200, 0x9200) AM_READ_PORT("P1") AM_WRITE(progolf_scrollx_hi_w) //p1 inputs
250   AM_RANGE(0x9400, 0x9400) AM_READ_PORT("P2") AM_WRITE(progolf_scrollx_lo_w) //p2 inputs
251   AM_RANGE(0x9600, 0x9600) AM_READ_PORT("IN0") AM_WRITE(progolf_flip_screen_w)   /* VBLANK */
251252   AM_RANGE(0x9800, 0x9800) AM_READ_PORT("DSW1")
252253   AM_RANGE(0x9800, 0x9800) AM_DEVWRITE("crtc", mc6845_device, address_w)
253254   AM_RANGE(0x9801, 0x9801) AM_DEVWRITE("crtc", mc6845_device, register_w)
254   AM_RANGE(0x9a00, 0x9a00) AM_READ_PORT("DSW2") AM_WRITE_LEGACY(audio_command_w)
255   AM_RANGE(0x9a00, 0x9a00) AM_READ_PORT("DSW2") AM_WRITE(audio_command_w)
255256//  AM_RANGE(0x9e00, 0x9e00) AM_WRITENOP
256257   AM_RANGE(0xb000, 0xffff) AM_ROM
257258ADDRESS_MAP_END
r14845r14846
262263   AM_RANGE(0x5000, 0x5fff) AM_DEVWRITE_LEGACY("ay1", ay8910_address_w)
263264   AM_RANGE(0x6000, 0x6fff) AM_DEVREADWRITE_LEGACY("ay2", ay8910_r, ay8910_data_w)
264265   AM_RANGE(0x7000, 0x7fff) AM_DEVWRITE_LEGACY("ay2", ay8910_address_w)
265   AM_RANGE(0x8000, 0x8fff) AM_READ_LEGACY(audio_command_r) AM_WRITENOP //volume control?
266   AM_RANGE(0x8000, 0x8fff) AM_READ(audio_command_r) AM_WRITENOP //volume control?
266267   AM_RANGE(0xf000, 0xffff) AM_ROM
267268ADDRESS_MAP_END
268269
src/mame/drivers/jackie.c
r14845r14846
7676   UINT16 m_unk_reg[3][5];
7777
7878   required_device<cpu_device> m_maincpu;
79   DECLARE_WRITE8_MEMBER(fg_tile_w);
80   DECLARE_WRITE8_MEMBER(fg_color_w);
81   DECLARE_WRITE8_MEMBER(bg_scroll_w);
82   DECLARE_WRITE8_MEMBER(jackie_reel1_ram_w);
83   DECLARE_WRITE8_MEMBER(jackie_reel2_ram_w);
84   DECLARE_WRITE8_MEMBER(jackie_reel3_ram_w);
85   DECLARE_WRITE8_MEMBER(jackie_unk_reg1_lo_w);
86   DECLARE_WRITE8_MEMBER(jackie_unk_reg2_lo_w);
87   DECLARE_WRITE8_MEMBER(jackie_unk_reg3_lo_w);
88   DECLARE_WRITE8_MEMBER(jackie_unk_reg1_hi_w);
89   DECLARE_WRITE8_MEMBER(jackie_unk_reg2_hi_w);
90   DECLARE_WRITE8_MEMBER(jackie_unk_reg3_hi_w);
91   DECLARE_WRITE8_MEMBER(jackie_nmi_and_coins_w);
92   DECLARE_WRITE8_MEMBER(jackie_lamps_w);
93   DECLARE_READ8_MEMBER(igs_irqack_r);
94   DECLARE_WRITE8_MEMBER(igs_irqack_w);
95   DECLARE_READ8_MEMBER(expram_r);
96   void jackie_unk_reg_lo_w( int offset, UINT8 data, int reg );
97   void jackie_unk_reg_hi_w( int offset, UINT8 data, int reg );
98   void show_out();
7999};
80100
81101
r14845r14846
89109   SET_TILE_INFO(0, code, tile != 0x1fff ? ((code >> 12) & 0xe) + 1 : 0, 0);
90110}
91111
92static WRITE8_HANDLER( fg_tile_w )
112WRITE8_MEMBER(jackie_state::fg_tile_w)
93113{
94   jackie_state *state = space->machine().driver_data<jackie_state>();
95   state->m_fg_tile_ram[offset] = data;
96   state->m_fg_tilemap->mark_tile_dirty(offset);
114   m_fg_tile_ram[offset] = data;
115   m_fg_tilemap->mark_tile_dirty(offset);
97116}
98117
99static WRITE8_HANDLER( fg_color_w )
118WRITE8_MEMBER(jackie_state::fg_color_w)
100119{
101   jackie_state *state = space->machine().driver_data<jackie_state>();
102   state->m_fg_color_ram[offset] = data;
103   state->m_fg_tilemap->mark_tile_dirty(offset);
120   m_fg_color_ram[offset] = data;
121   m_fg_tilemap->mark_tile_dirty(offset);
104122}
105123
106124
107125
108126
109static WRITE8_HANDLER( bg_scroll_w )
127WRITE8_MEMBER(jackie_state::bg_scroll_w)
110128{
111   jackie_state *state = space->machine().driver_data<jackie_state>();
112   state->m_bg_scroll[offset] = data;
129   m_bg_scroll[offset] = data;
113130}
114131
115132
116static WRITE8_HANDLER( jackie_reel1_ram_w )
133WRITE8_MEMBER(jackie_state::jackie_reel1_ram_w)
117134{
118   jackie_state *state = space->machine().driver_data<jackie_state>();
119   state->m_reel1_ram[offset] = data;
120   state->m_reel1_tilemap->mark_tile_dirty(offset);
135   m_reel1_ram[offset] = data;
136   m_reel1_tilemap->mark_tile_dirty(offset);
121137}
122138
123139static TILE_GET_INFO( get_jackie_reel1_tile_info )
r14845r14846
129145
130146
131147
132static WRITE8_HANDLER( jackie_reel2_ram_w )
148WRITE8_MEMBER(jackie_state::jackie_reel2_ram_w)
133149{
134   jackie_state *state = space->machine().driver_data<jackie_state>();
135   state->m_reel2_ram[offset] = data;
136   state->m_reel2_tilemap->mark_tile_dirty(offset);
150   m_reel2_ram[offset] = data;
151   m_reel2_tilemap->mark_tile_dirty(offset);
137152}
138153
139154static TILE_GET_INFO( get_jackie_reel2_tile_info )
r14845r14846
144159}
145160
146161
147static WRITE8_HANDLER( jackie_reel3_ram_w )
162WRITE8_MEMBER(jackie_state::jackie_reel3_ram_w)
148163{
149   jackie_state *state = space->machine().driver_data<jackie_state>();
150   state->m_reel3_ram[offset] = data;
151   state->m_reel3_tilemap->mark_tile_dirty(offset);
164   m_reel3_ram[offset] = data;
165   m_reel3_tilemap->mark_tile_dirty(offset);
152166}
153167
154168static TILE_GET_INFO( get_jackie_reel3_tile_info )
r14845r14846
234248}
235249
236250
237static void show_out(jackie_state *state)
251void jackie_state::show_out()
238252{
239253#ifdef MAME_DEBUG
240254//  popmessage("%02x %02x %02x", state->m_out[0], state->m_out[1], state->m_out[2]);
241255   popmessage("520: %04x %04x %04x %04x %04x\n560: %04x %04x %04x %04x %04x\n5A0: %04x %04x %04x %04x %04x",
242      state->m_unk_reg[0][0],state->m_unk_reg[0][1],state->m_unk_reg[0][2],state->m_unk_reg[0][3],state->m_unk_reg[0][4],
243      state->m_unk_reg[1][0],state->m_unk_reg[1][1],state->m_unk_reg[1][2],state->m_unk_reg[1][3],state->m_unk_reg[1][4],
244      state->m_unk_reg[2][0],state->m_unk_reg[2][1],state->m_unk_reg[2][2],state->m_unk_reg[2][3],state->m_unk_reg[2][4]
256      m_unk_reg[0][0],m_unk_reg[0][1],m_unk_reg[0][2],m_unk_reg[0][3],m_unk_reg[0][4],
257      m_unk_reg[1][0],m_unk_reg[1][1],m_unk_reg[1][2],m_unk_reg[1][3],m_unk_reg[1][4],
258      m_unk_reg[2][0],m_unk_reg[2][1],m_unk_reg[2][2],m_unk_reg[2][3],m_unk_reg[2][4]
245259   );
246260#endif
247261}
248262
249static void jackie_unk_reg_lo_w( address_space *space, int offset, UINT8 data, int reg )
263void jackie_state::jackie_unk_reg_lo_w( int offset, UINT8 data, int reg )
250264{
251   jackie_state *state = space->machine().driver_data<jackie_state>();
252   state->m_unk_reg[reg][offset] &= 0xff00;
253   state->m_unk_reg[reg][offset] |= data;
254   show_out(state);
265   m_unk_reg[reg][offset] &= 0xff00;
266   m_unk_reg[reg][offset] |= data;
267   show_out();
255268}
256269
257static WRITE8_HANDLER( jackie_unk_reg1_lo_w ) { jackie_unk_reg_lo_w( space, offset, data, 0 ); }
258static WRITE8_HANDLER( jackie_unk_reg2_lo_w ) { jackie_unk_reg_lo_w( space, offset, data, 1 ); }
259static WRITE8_HANDLER( jackie_unk_reg3_lo_w ) { jackie_unk_reg_lo_w( space, offset, data, 2 ); }
270WRITE8_MEMBER(jackie_state::jackie_unk_reg1_lo_w){ jackie_unk_reg_lo_w( offset, data, 0 ); }
271WRITE8_MEMBER(jackie_state::jackie_unk_reg2_lo_w){ jackie_unk_reg_lo_w( offset, data, 1 ); }
272WRITE8_MEMBER(jackie_state::jackie_unk_reg3_lo_w){ jackie_unk_reg_lo_w( offset, data, 2 ); }
260273
261static void jackie_unk_reg_hi_w( address_space *space, int offset, UINT8 data, int reg )
274void jackie_state::jackie_unk_reg_hi_w( int offset, UINT8 data, int reg )
262275{
263   jackie_state *state = space->machine().driver_data<jackie_state>();
264   state->m_unk_reg[reg][offset] &= 0xff;
265   state->m_unk_reg[reg][offset] |= data << 8;
266   show_out(state);
276   m_unk_reg[reg][offset] &= 0xff;
277   m_unk_reg[reg][offset] |= data << 8;
278   show_out();
267279}
268280
269static WRITE8_HANDLER( jackie_unk_reg1_hi_w ) { jackie_unk_reg_hi_w( space, offset, data, 0 ); }
270static WRITE8_HANDLER( jackie_unk_reg2_hi_w ) { jackie_unk_reg_hi_w( space, offset, data, 1 ); }
271static WRITE8_HANDLER( jackie_unk_reg3_hi_w ) { jackie_unk_reg_hi_w( space, offset, data, 2 ); }
281WRITE8_MEMBER(jackie_state::jackie_unk_reg1_hi_w){ jackie_unk_reg_hi_w( offset, data, 0 ); }
282WRITE8_MEMBER(jackie_state::jackie_unk_reg2_hi_w){ jackie_unk_reg_hi_w( offset, data, 1 ); }
283WRITE8_MEMBER(jackie_state::jackie_unk_reg3_hi_w){ jackie_unk_reg_hi_w( offset, data, 2 ); }
272284
273static WRITE8_HANDLER( jackie_nmi_and_coins_w )
285WRITE8_MEMBER(jackie_state::jackie_nmi_and_coins_w)
274286{
275   jackie_state *state = space->machine().driver_data<jackie_state>();
276   coin_counter_w(space->machine(), 0,      data & 0x01);   // coin_a
277   coin_counter_w(space->machine(), 1,      data & 0x04);   // coin_c
278   coin_counter_w(space->machine(), 2,      data & 0x08);   // key in
279   coin_counter_w(space->machine(), 3,      data & 0x10);   // coin state->m_out mech
287   coin_counter_w(machine(), 0,      data & 0x01);   // coin_a
288   coin_counter_w(machine(), 1,      data & 0x04);   // coin_c
289   coin_counter_w(machine(), 2,      data & 0x08);   // key in
290   coin_counter_w(machine(), 3,      data & 0x10);   // coin m_out mech
280291
281   set_led_status(space->machine(), 6,      data & 0x20);   // led for coin state->m_out / state->m_hopper active
292   set_led_status(machine(), 6,      data & 0x20);   // led for coin m_out / m_hopper active
282293
283   state->m_exp_bank   = (data & 0x02) ? 1 : 0;      // expram bank number
284   state->m_nmi_enable = data & 0x80;     // nmi enable?
294   m_exp_bank   = (data & 0x02) ? 1 : 0;      // expram bank number
295   m_nmi_enable = data & 0x80;     // nmi enable?
285296
286   state->m_out[0] = data;
287   show_out(state);
297   m_out[0] = data;
298   show_out();
288299}
289300
290static WRITE8_HANDLER( jackie_lamps_w )
301WRITE8_MEMBER(jackie_state::jackie_lamps_w)
291302{
292   jackie_state *state = space->machine().driver_data<jackie_state>();
293303/*
294304    - Lbits -
295305    7654 3210
r14845r14846
308318   output_set_lamp_value(5, (data >> 2) & 1);      /* Lamp 5 - HOLD 5 */
309319   output_set_lamp_value(6, (data & 1));         /* Lamp 6 - START */
310320
311   state->m_hopper         =   (~data)& 0x80;
321   m_hopper         =   (~data)& 0x80;
312322
313   state->m_out[1] = data;
314   show_out(state);
323   m_out[1] = data;
324   show_out();
315325}
316326
317static READ8_HANDLER( igs_irqack_r )
327READ8_MEMBER(jackie_state::igs_irqack_r)
318328{
319   jackie_state *state = space->machine().driver_data<jackie_state>();
320   state->m_irq_enable = 1;
329   m_irq_enable = 1;
321330   return 0;
322331}
323332
324static WRITE8_HANDLER( igs_irqack_w )
333WRITE8_MEMBER(jackie_state::igs_irqack_w)
325334{
326   jackie_state *state = space->machine().driver_data<jackie_state>();
327//  cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
328   state->m_out[2] = data;
329   show_out(state);
335//  cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
336   m_out[2] = data;
337   show_out();
330338}
331339
332static READ8_HANDLER( expram_r )
340READ8_MEMBER(jackie_state::expram_r)
333341{
334   jackie_state *state = space->machine().driver_data<jackie_state>();
335   UINT8 *rom = space->machine().region("gfx3")->base();
342   UINT8 *rom = machine().region("gfx3")->base();
336343
337   offset += state->m_exp_bank * 0x8000;
338//  logerror("PC %06X: %04x = %02x\n",cpu_get_pc(&space->device()),offset,rom[offset]);
344   offset += m_exp_bank * 0x8000;
345//  logerror("PC %06X: %04x = %02x\n",cpu_get_pc(&space.device()),offset,rom[offset]);
339346   return rom[offset];
340347}
341348
r14845r14846
346353ADDRESS_MAP_END
347354
348355static ADDRESS_MAP_START( jackie_io_map, AS_IO, 8, jackie_state )
349   AM_RANGE(0x0520, 0x0524) AM_WRITE_LEGACY(jackie_unk_reg1_lo_w)
350   AM_RANGE(0x0d20, 0x0d24) AM_WRITE_LEGACY(jackie_unk_reg1_hi_w)
351   AM_RANGE(0x0560, 0x0564) AM_WRITE_LEGACY(jackie_unk_reg2_lo_w)
352   AM_RANGE(0x0d60, 0x0d64) AM_WRITE_LEGACY(jackie_unk_reg2_hi_w)
353   AM_RANGE(0x05a0, 0x05a4) AM_WRITE_LEGACY(jackie_unk_reg3_lo_w)
354   AM_RANGE(0x0da0, 0x0da4) AM_WRITE_LEGACY(jackie_unk_reg3_hi_w)
356   AM_RANGE(0x0520, 0x0524) AM_WRITE(jackie_unk_reg1_lo_w)
357   AM_RANGE(0x0d20, 0x0d24) AM_WRITE(jackie_unk_reg1_hi_w)
358   AM_RANGE(0x0560, 0x0564) AM_WRITE(jackie_unk_reg2_lo_w)
359   AM_RANGE(0x0d60, 0x0d64) AM_WRITE(jackie_unk_reg2_hi_w)
360   AM_RANGE(0x05a0, 0x05a4) AM_WRITE(jackie_unk_reg3_lo_w)
361   AM_RANGE(0x0da0, 0x0da4) AM_WRITE(jackie_unk_reg3_hi_w)
355362   AM_RANGE(0x1000, 0x1107) AM_RAM AM_BASE(m_bg_scroll2 )
356363   AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split1_w ) AM_BASE_GENERIC( paletteram )
357364   AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split2_w ) AM_BASE_GENERIC( paletteram2 )
r14845r14846
360367   AM_RANGE(0x4002, 0x4002) AM_READ_PORT("DSW3")         /* DSW3 */
361368   AM_RANGE(0x4003, 0x4003) AM_READ_PORT("DSW4")         /* DSW4 */
362369   AM_RANGE(0x4004, 0x4004) AM_READ_PORT("DSW5")         /* DSW5 */
363   AM_RANGE(0x5080, 0x5080) AM_WRITE_LEGACY(jackie_nmi_and_coins_w)
370   AM_RANGE(0x5080, 0x5080) AM_WRITE(jackie_nmi_and_coins_w)
364371   AM_RANGE(0x5081, 0x5081) AM_READ_PORT("SERVICE")
365372   AM_RANGE(0x5082, 0x5082) AM_READ_PORT("COINS")
366373   AM_RANGE(0x5090, 0x5090) AM_READ_PORT("BUTTONS1")
367   AM_RANGE(0x5091, 0x5091) AM_WRITE_LEGACY(jackie_lamps_w )
374   AM_RANGE(0x5091, 0x5091) AM_WRITE(jackie_lamps_w )
368375   AM_RANGE(0x50a0, 0x50a0) AM_READ_PORT("BUTTONS2")
369376   AM_RANGE(0x50b0, 0x50b1) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w)
370   AM_RANGE(0x50c0, 0x50c0) AM_READ_LEGACY(igs_irqack_r) AM_WRITE_LEGACY(igs_irqack_w)
371   AM_RANGE(0x6000, 0x60ff) AM_RAM_WRITE_LEGACY(bg_scroll_w ) AM_BASE(m_bg_scroll )
372   AM_RANGE(0x6800, 0x69ff) AM_RAM_WRITE_LEGACY(jackie_reel1_ram_w )  AM_BASE(m_reel1_ram )
373   AM_RANGE(0x6a00, 0x6bff) AM_RAM_WRITE_LEGACY(jackie_reel2_ram_w )  AM_BASE(m_reel2_ram )
374   AM_RANGE(0x6c00, 0x6dff) AM_RAM_WRITE_LEGACY(jackie_reel3_ram_w )  AM_BASE(m_reel3_ram )
375   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
376   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
377   AM_RANGE(0x8000, 0xffff) AM_READ_LEGACY(expram_r)
377   AM_RANGE(0x50c0, 0x50c0) AM_READ(igs_irqack_r) AM_WRITE(igs_irqack_w)
378   AM_RANGE(0x6000, 0x60ff) AM_RAM_WRITE(bg_scroll_w ) AM_BASE(m_bg_scroll )
379   AM_RANGE(0x6800, 0x69ff) AM_RAM_WRITE(jackie_reel1_ram_w )  AM_BASE(m_reel1_ram )
380   AM_RANGE(0x6a00, 0x6bff) AM_RAM_WRITE(jackie_reel2_ram_w )  AM_BASE(m_reel2_ram )
381   AM_RANGE(0x6c00, 0x6dff) AM_RAM_WRITE(jackie_reel3_ram_w )  AM_BASE(m_reel3_ram )
382   AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
383   AM_RANGE(0x7800, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
384   AM_RANGE(0x8000, 0xffff) AM_READ(expram_r)
378385ADDRESS_MAP_END
379386
380387static CUSTOM_INPUT( hopper_r )
src/mame/drivers/blackt96.c
r14845r14846
6161
6262   UINT16* m_tilemapram;
6363   UINT16* m_tilemapram2;
64   DECLARE_WRITE16_MEMBER(blackt96_c0000_w);
65   DECLARE_WRITE16_MEMBER(blackt96_80000_w);
66   DECLARE_READ8_MEMBER(PIC16C5X_T0_clk_r);
67   DECLARE_WRITE8_MEMBER(blackt96_soundio_port00_w);
68   DECLARE_READ8_MEMBER(blackt96_soundio_port01_r);
69   DECLARE_WRITE8_MEMBER(blackt96_soundio_port01_w);
70   DECLARE_READ8_MEMBER(blackt96_soundio_port02_r);
71   DECLARE_WRITE8_MEMBER(blackt96_soundio_port02_w);
6472};
6573
6674
r14845r14846
156164}
157165
158166
159static WRITE16_HANDLER( blackt96_c0000_w )
167WRITE16_MEMBER(blackt96_state::blackt96_c0000_w)
160168{
161169   printf("blackt96_c0000_w %04x %04x\n",data,mem_mask);
162170}
163171
164static WRITE16_HANDLER( blackt96_80000_w )
172WRITE16_MEMBER(blackt96_state::blackt96_80000_w)
165173{
166174   // TO sound MCU?
167175   printf("blackt96_80000_w %04x %04x\n",data,mem_mask);
r14845r14846
170178
171179static ADDRESS_MAP_START( blackt96_map, AS_PROGRAM, 16, blackt96_state )
172180   AM_RANGE(0x000000, 0x07ffff) AM_ROM
173   AM_RANGE(0x080000, 0x080001) AM_READ_PORT("P1_P2") AM_WRITE_LEGACY(blackt96_80000_w)
174   AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1") AM_WRITE_LEGACY(blackt96_c0000_w) // COIN INPUT
181   AM_RANGE(0x080000, 0x080001) AM_READ_PORT("P1_P2") AM_WRITE(blackt96_80000_w)
182   AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1") AM_WRITE(blackt96_c0000_w) // COIN INPUT
175183   AM_RANGE(0x0e0000, 0x0e0001) AM_READ_PORT("IN2")
176184   AM_RANGE(0x0e8000, 0x0e8001) AM_READ_PORT("IN3")
177185   AM_RANGE(0x0f0000, 0x0f0001) AM_READ_PORT("DSW1")
r14845r14846
443451GFXDECODE_END
444452
445453
446static READ8_HANDLER( PIC16C5X_T0_clk_r )
454READ8_MEMBER(blackt96_state::PIC16C5X_T0_clk_r)
447455{
448456   return 0;
449457}
450458
451static WRITE8_HANDLER( blackt96_soundio_port00_w )
459WRITE8_MEMBER(blackt96_state::blackt96_soundio_port00_w)
452460{
453
454461}
455462
456static READ8_HANDLER( blackt96_soundio_port01_r )
463READ8_MEMBER(blackt96_state::blackt96_soundio_port01_r)
457464{
458   return space->machine().rand();
465   return machine().rand();
459466}
460467
461static WRITE8_HANDLER( blackt96_soundio_port01_w )
468WRITE8_MEMBER(blackt96_state::blackt96_soundio_port01_w)
462469{
463
464470}
465471
466static READ8_HANDLER( blackt96_soundio_port02_r )
472READ8_MEMBER(blackt96_state::blackt96_soundio_port02_r)
467473{
468   return space->machine().rand();
474   return machine().rand();
469475}
470476
471static WRITE8_HANDLER( blackt96_soundio_port02_w )
477WRITE8_MEMBER(blackt96_state::blackt96_soundio_port02_w)
472478{
473
474479}
475480
476481static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, blackt96_state )
477   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(blackt96_soundio_port00_w )
478   AM_RANGE(0x01, 0x01) AM_READWRITE_LEGACY(blackt96_soundio_port01_r, blackt96_soundio_port01_w )
479   AM_RANGE(0x02, 0x02) AM_READWRITE_LEGACY(blackt96_soundio_port02_r, blackt96_soundio_port02_w )
480   AM_RANGE(PIC16C5x_T0, PIC16C5x_T0) AM_READ_LEGACY(PIC16C5X_T0_clk_r)
482   AM_RANGE(0x00, 0x00) AM_WRITE(blackt96_soundio_port00_w )
483   AM_RANGE(0x01, 0x01) AM_READWRITE(blackt96_soundio_port01_r, blackt96_soundio_port01_w )
484   AM_RANGE(0x02, 0x02) AM_READWRITE(blackt96_soundio_port02_r, blackt96_soundio_port02_w )
485   AM_RANGE(PIC16C5x_T0, PIC16C5x_T0) AM_READ(PIC16C5X_T0_clk_r)
481486ADDRESS_MAP_END
482487
483488
src/mame/drivers/ace.c
r14845r14846
5656
5757   /* input-related */
5858   int m_objpos[8];
59   DECLARE_WRITE8_MEMBER(ace_objpos_w);
60   DECLARE_READ8_MEMBER(ace_objpos_r);
61   DECLARE_WRITE8_MEMBER(ace_characterram_w);
62   DECLARE_WRITE8_MEMBER(ace_scoreram_w);
63   DECLARE_READ8_MEMBER(unk_r);
5964};
6065
6166
62static WRITE8_HANDLER( ace_objpos_w )
67WRITE8_MEMBER(aceal_state::ace_objpos_w)
6368{
64   aceal_state *state = space->machine().driver_data<aceal_state>();
65   state->m_objpos[offset] = data;
69   m_objpos[offset] = data;
6670}
6771
6872#if 0
69static READ8_HANDLER( ace_objpos_r )
73READ8_MEMBER(aceal_state::ace_objpos_r)
7074{
71   aceal_state *state = space->machine().driver_data<aceal_state>();
72   return state->m_objpos[offset];
75   return m_objpos[offset];
7376}
7477#endif
7578
r14845r14846
128131}
129132
130133
131static WRITE8_HANDLER( ace_characterram_w )
134WRITE8_MEMBER(aceal_state::ace_characterram_w)
132135{
133   aceal_state *state = space->machine().driver_data<aceal_state>();
134   if (state->m_characterram[offset] != data)
136   if (m_characterram[offset] != data)
135137   {
136138      if (data & ~0x07)
137139      {
138140         logerror("write to %04x data = %02x\n", 0x8000 + offset, data);
139141         popmessage("write to %04x data = %02x\n", 0x8000 + offset, data);
140142      }
141      state->m_characterram[offset] = data;
142      gfx_element_mark_dirty(space->machine().gfx[1], 0);
143      gfx_element_mark_dirty(space->machine().gfx[2], 0);
144      gfx_element_mark_dirty(space->machine().gfx[3], 0);
143      m_characterram[offset] = data;
144      gfx_element_mark_dirty(machine().gfx[1], 0);
145      gfx_element_mark_dirty(machine().gfx[2], 0);
146      gfx_element_mark_dirty(machine().gfx[3], 0);
145147   }
146148}
147149
148static WRITE8_HANDLER( ace_scoreram_w )
150WRITE8_MEMBER(aceal_state::ace_scoreram_w)
149151{
150   aceal_state *state = space->machine().driver_data<aceal_state>();
151   state->m_scoreram[offset] = data;
152   gfx_element_mark_dirty(space->machine().gfx[4], offset / 32);
152   m_scoreram[offset] = data;
153   gfx_element_mark_dirty(machine().gfx[4], offset / 32);
153154}
154155
155static READ8_HANDLER( unk_r )
156READ8_MEMBER(aceal_state::unk_r)
156157{
157   return space->machine().rand() & 0xff;
158   return machine().rand() & 0xff;
158159}
159160
160161
r14845r14846
166167
167168   AM_RANGE(0x0000, 0x09ff) AM_ROM
168169
169   AM_RANGE(0x2000, 0x20ff) AM_RAM_WRITE_LEGACY(ace_scoreram_w) AM_BASE(m_scoreram)   /* 2x2101 */
170   AM_RANGE(0x2000, 0x20ff) AM_RAM_WRITE(ace_scoreram_w) AM_BASE(m_scoreram)   /* 2x2101 */
170171   AM_RANGE(0x8300, 0x83ff) AM_RAM AM_BASE(m_ram2)   /* 2x2101 */
171   AM_RANGE(0x8000, 0x80ff) AM_RAM_WRITE_LEGACY(ace_characterram_w) AM_BASE(m_characterram)   /* 3x3101 (3bits: 0, 1, 2) */
172   AM_RANGE(0x8000, 0x80ff) AM_RAM_WRITE(ace_characterram_w) AM_BASE(m_characterram)   /* 3x3101 (3bits: 0, 1, 2) */
172173
173   AM_RANGE(0xc000, 0xc005) AM_WRITE_LEGACY(ace_objpos_w)
174   AM_RANGE(0xc000, 0xc005) AM_WRITE(ace_objpos_w)
174175
175176   /* players inputs */
176177   AM_RANGE(0xc008, 0xc008) AM_READ_PORT("c008")
r14845r14846
184185   AM_RANGE(0xc010, 0xc010) AM_READ_PORT("c010")
185186   AM_RANGE(0xc011, 0xc011) AM_READ_PORT("c011")
186187
187   AM_RANGE(0xc012, 0xc012) AM_READ_LEGACY(unk_r)
188   AM_RANGE(0xc012, 0xc012) AM_READ(unk_r)
188189
189190   /* vblank */
190191   AM_RANGE(0xc014, 0xc014) AM_READ_PORT("c014")
r14845r14846
195196   /* start (must read 1 at least once to make the game run) */
196197   AM_RANGE(0xc016, 0xc016) AM_READ_PORT("c016")
197198
198   AM_RANGE(0xc017, 0xc017) AM_READ_LEGACY(unk_r)
199   AM_RANGE(0xc018, 0xc018) AM_READ_LEGACY(unk_r)
200   AM_RANGE(0xc019, 0xc019) AM_READ_LEGACY(unk_r)
199   AM_RANGE(0xc017, 0xc017) AM_READ(unk_r)
200   AM_RANGE(0xc018, 0xc018) AM_READ(unk_r)
201   AM_RANGE(0xc019, 0xc019) AM_READ(unk_r)
201202
202   AM_RANGE(0xc020, 0xc020) AM_READ_LEGACY(unk_r)
203   AM_RANGE(0xc021, 0xc021) AM_READ_LEGACY(unk_r)
204   AM_RANGE(0xc022, 0xc022) AM_READ_LEGACY(unk_r)
205   AM_RANGE(0xc023, 0xc023) AM_READ_LEGACY(unk_r)
206   AM_RANGE(0xc024, 0xc024) AM_READ_LEGACY(unk_r)
207   AM_RANGE(0xc025, 0xc025) AM_READ_LEGACY(unk_r)
208   AM_RANGE(0xc026, 0xc026) AM_READ_LEGACY(unk_r)
203   AM_RANGE(0xc020, 0xc020) AM_READ(unk_r)
204   AM_RANGE(0xc021, 0xc021) AM_READ(unk_r)
205   AM_RANGE(0xc022, 0xc022) AM_READ(unk_r)
206   AM_RANGE(0xc023, 0xc023) AM_READ(unk_r)
207   AM_RANGE(0xc024, 0xc024) AM_READ(unk_r)
208   AM_RANGE(0xc025, 0xc025) AM_READ(unk_r)
209   AM_RANGE(0xc026, 0xc026) AM_READ(unk_r)
209210
210211ADDRESS_MAP_END
211212
src/mame/drivers/dreamwld.c
r14845r14846
146146
147147   /* misc */
148148   int      m_protindex;
149   DECLARE_WRITE32_MEMBER(dreamwld_bg_videoram_w);
150   DECLARE_WRITE32_MEMBER(dreamwld_bg2_videoram_w);
151   DECLARE_READ32_MEMBER(dreamwld_protdata_r);
152   DECLARE_WRITE32_MEMBER(dreamwld_6295_0_bank_w);
153   DECLARE_WRITE32_MEMBER(dreamwld_6295_1_bank_w);
154   DECLARE_WRITE32_MEMBER(dreamwld_palette_w);
149155};
150156
151157
r14845r14846
215221}
216222
217223
218static WRITE32_HANDLER( dreamwld_bg_videoram_w )
224WRITE32_MEMBER(dreamwld_state::dreamwld_bg_videoram_w)
219225{
220   dreamwld_state *state = space->machine().driver_data<dreamwld_state>();
221   COMBINE_DATA(&state->m_bg_videoram[offset]);
222   state->m_bg_tilemap->mark_tile_dirty(offset * 2);
223   state->m_bg_tilemap->mark_tile_dirty(offset * 2 + 1);
226   COMBINE_DATA(&m_bg_videoram[offset]);
227   m_bg_tilemap->mark_tile_dirty(offset * 2);
228   m_bg_tilemap->mark_tile_dirty(offset * 2 + 1);
224229}
225230
226231static TILE_GET_INFO( get_dreamwld_bg_tile_info )
r14845r14846
234239}
235240
236241
237static WRITE32_HANDLER( dreamwld_bg2_videoram_w )
242WRITE32_MEMBER(dreamwld_state::dreamwld_bg2_videoram_w)
238243{
239   dreamwld_state *state = space->machine().driver_data<dreamwld_state>();
240   COMBINE_DATA(&state->m_bg2_videoram[offset]);
241   state->m_bg2_tilemap->mark_tile_dirty(offset * 2);
242   state->m_bg2_tilemap->mark_tile_dirty(offset * 2 + 1);
244   COMBINE_DATA(&m_bg2_videoram[offset]);
245   m_bg2_tilemap->mark_tile_dirty(offset * 2);
246   m_bg2_tilemap->mark_tile_dirty(offset * 2 + 1);
243247}
244248
245249static TILE_GET_INFO( get_dreamwld_bg2_tile_info )
r14845r14846
389393
390394
391395
392static READ32_HANDLER( dreamwld_protdata_r )
396READ32_MEMBER(dreamwld_state::dreamwld_protdata_r)
393397{
394398   //static int count = 0;
395   dreamwld_state *state = space->machine().driver_data<dreamwld_state>();
396399
400
397401   //printf("protection read %04x\n", count);
398402   //count++;
399403
400   UINT8 *protdata = space->machine().region("user1")->base();
401   size_t protsize = space->machine().region("user1")->bytes();
402   UINT8 dat = protdata[(state->m_protindex++) % protsize];
404   UINT8 *protdata = machine().region("user1")->base();
405   size_t protsize = machine().region("user1")->bytes();
406   UINT8 dat = protdata[(m_protindex++) % protsize];
403407
404408   // real hw returns 00 after end of data, I haven't checked if it's possible to overflow the read counter
405409   // and read out the internal rom.
r14845r14846
408412}
409413
410414
411static WRITE32_HANDLER( dreamwld_6295_0_bank_w )
415WRITE32_MEMBER(dreamwld_state::dreamwld_6295_0_bank_w)
412416{
413   UINT8 *sound = space->machine().region("oki1")->base();
417   UINT8 *sound = machine().region("oki1")->base();
414418
415419   if (ACCESSING_BITS_0_7)
416420      memcpy(sound + 0x30000, sound + 0xb0000 + 0x10000 * (data&0x3), 0x10000);
r14845r14846
418422      logerror("OKI0: unk bank write %x mem_mask %8x\n", data, mem_mask);
419423}
420424
421static WRITE32_HANDLER( dreamwld_6295_1_bank_w )
425WRITE32_MEMBER(dreamwld_state::dreamwld_6295_1_bank_w)
422426{
423   UINT8 *sound = space->machine().region("oki2")->base();
427   UINT8 *sound = machine().region("oki2")->base();
424428
425429   if (ACCESSING_BITS_0_7)
426430      memcpy(sound + 0x30000, sound + 0xb0000 + 0x10000 * (data&0x3), 0x10000);
r14845r14846
430434
431435// why doesn't using paletteram16_xRRRRRGGGGGBBBBB_word_w with a 16-bit handler work? colours are
432436// severely corrupt on dream world's semicom screen + many sprites, seems palette values get duplicated.
433static WRITE32_HANDLER( dreamwld_palette_w )
437WRITE32_MEMBER(dreamwld_state::dreamwld_palette_w)
434438{
435   dreamwld_state *state = space->machine().driver_data<dreamwld_state>();
436439   UINT16 dat;
437440   int color;
438441
439   COMBINE_DATA(&state->m_paletteram[offset]);
442   COMBINE_DATA(&m_paletteram[offset]);
440443   color = offset * 2;
441444
442   dat = state->m_paletteram[offset] & 0x7fff;
443   palette_set_color_rgb(space->machine(), color+1, pal5bit(dat >> 10), pal5bit(dat >> 5), pal5bit(dat >> 0));
445   dat = m_paletteram[offset] & 0x7fff;
446   palette_set_color_rgb(machine(), color+1, pal5bit(dat >> 10), pal5bit(dat >> 5), pal5bit(dat >> 0));
444447
445   dat = (state->m_paletteram[offset] >> 16) & 0x7fff;
446   palette_set_color_rgb(space->machine(), color, pal5bit(dat >> 10), pal5bit(dat >> 5), pal5bit(dat >> 0));
448   dat = (m_paletteram[offset] >> 16) & 0x7fff;
449   palette_set_color_rgb(machine(), color, pal5bit(dat >> 10), pal5bit(dat >> 5), pal5bit(dat >> 0));
447450}
448451
449452
r14845r14846
452455   AM_RANGE(0x000000, 0x0fffff) AM_ROM  AM_WRITENOP
453456
454457   AM_RANGE(0x400000, 0x401fff) AM_RAM AM_BASE(m_spriteram)
455   AM_RANGE(0x600000, 0x601fff) AM_RAM AM_WRITE_LEGACY(dreamwld_palette_w) AM_BASE(m_paletteram)
456   AM_RANGE(0x800000, 0x801fff) AM_RAM_WRITE_LEGACY(dreamwld_bg_videoram_w ) AM_BASE(m_bg_videoram)
457   AM_RANGE(0x802000, 0x803fff) AM_RAM_WRITE_LEGACY(dreamwld_bg2_videoram_w ) AM_BASE(m_bg2_videoram)
458   AM_RANGE(0x600000, 0x601fff) AM_RAM AM_WRITE(dreamwld_palette_w) AM_BASE(m_paletteram)
459   AM_RANGE(0x800000, 0x801fff) AM_RAM_WRITE(dreamwld_bg_videoram_w ) AM_BASE(m_bg_videoram)
460   AM_RANGE(0x802000, 0x803fff) AM_RAM_WRITE(dreamwld_bg2_videoram_w ) AM_BASE(m_bg2_videoram)
458461   AM_RANGE(0x804000, 0x805fff) AM_RAM AM_BASE(m_vregs)  // scroll regs etc.
459462
460463   AM_RANGE(0xc00000, 0xc00003) AM_READ_PORT("INPUTS")
461464   AM_RANGE(0xc00004, 0xc00007) AM_READ_PORT("c00004")
462465
463   AM_RANGE(0xc0000c, 0xc0000f) AM_WRITE_LEGACY(dreamwld_6295_0_bank_w) // sfx
466   AM_RANGE(0xc0000c, 0xc0000f) AM_WRITE(dreamwld_6295_0_bank_w) // sfx
464467   AM_RANGE(0xc00018, 0xc0001b) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0xff000000) // sfx
465468
466   AM_RANGE(0xc00030, 0xc00033) AM_READ_LEGACY(dreamwld_protdata_r) // it reads protection data (irq code) from here and puts it at ffd000
469   AM_RANGE(0xc00030, 0xc00033) AM_READ(dreamwld_protdata_r) // it reads protection data (irq code) from here and puts it at ffd000
467470
468471   AM_RANGE(0xfe0000, 0xffffff) AM_RAM AM_BASE(m_workram) // work ram
469472ADDRESS_MAP_END
r14845r14846
471474static ADDRESS_MAP_START( dreamwld_map, AS_PROGRAM, 32, dreamwld_state )
472475   AM_IMPORT_FROM( baryon_map )
473476
474   AM_RANGE(0xc0002c, 0xc0002f) AM_WRITE_LEGACY(dreamwld_6295_1_bank_w) // sfx
477   AM_RANGE(0xc0002c, 0xc0002f) AM_WRITE(dreamwld_6295_1_bank_w) // sfx
475478   AM_RANGE(0xc00028, 0xc0002b) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0xff000000) // sfx
476479ADDRESS_MAP_END
477480
src/mame/drivers/panicr.c
r14845r14846
7777   UINT8 *m_scrollram;
7878   UINT8 *m_mainram;
7979   UINT8 *m_spriteram;
80   DECLARE_READ8_MEMBER(t5182shared_r);
81   DECLARE_WRITE8_MEMBER(t5182shared_w);
8082};
8183
8284
r14845r14846
171173      0);
172174}
173175
174static READ8_HANDLER(t5182shared_r)
176READ8_MEMBER(panicr_state::t5182shared_r)
175177{
176178   if ((offset & 1) == 0)
177      return t5182_sharedram_r(space, offset/2);
179      return t5182_sharedram_r(&space, offset/2);
178180   else
179181      return 0;
180182}
181183
182static WRITE8_HANDLER(t5182shared_w)
184WRITE8_MEMBER(panicr_state::t5182shared_w)
183185{
184186   if ((offset & 1) == 0)
185      t5182_sharedram_w(space, offset/2, data);
187      t5182_sharedram_w(&space, offset/2, data);
186188}
187189
188190
r14845r14846
196198   AM_RANGE(0x0d002, 0x0d002) AM_READ_LEGACY(t5182_sharedram_semaphore_snd_r)
197199   AM_RANGE(0x0d004, 0x0d004) AM_WRITE_LEGACY(t5182_sharedram_semaphore_main_acquire_w)
198200   AM_RANGE(0x0d006, 0x0d006) AM_WRITE_LEGACY(t5182_sharedram_semaphore_main_release_w)
199   AM_RANGE(0x0d200, 0x0d2ff) AM_READWRITE_LEGACY(t5182shared_r, t5182shared_w)
201   AM_RANGE(0x0d200, 0x0d2ff) AM_READWRITE(t5182shared_r, t5182shared_w)
200202   AM_RANGE(0x0d400, 0x0d400) AM_READ_PORT("P1")
201203   AM_RANGE(0x0d402, 0x0d402) AM_READ_PORT("P2")
202204   AM_RANGE(0x0d404, 0x0d404) AM_READ_PORT("START")
src/mame/drivers/istellar.c
r14845r14846
3939   UINT8 m_ldp_latch1;
4040   UINT8 m_ldp_latch2;
4141   UINT8 m_z80_2_nmi_enable;
42   DECLARE_READ8_MEMBER(z80_0_latch1_read);
43   DECLARE_WRITE8_MEMBER(z80_0_latch2_write);
44   DECLARE_READ8_MEMBER(z80_2_ldp_read);
45   DECLARE_READ8_MEMBER(z80_2_latch2_read);
46   DECLARE_READ8_MEMBER(z80_2_nmienable);
47   DECLARE_READ8_MEMBER(z80_2_unknown_read);
48   DECLARE_WRITE8_MEMBER(z80_2_latch1_write);
49   DECLARE_WRITE8_MEMBER(z80_2_ldp_write);
4250};
4351
4452
r14845r14846
93101
94102/* MEMORY HANDLERS */
95103/* Z80 0 R/W */
96static READ8_HANDLER(z80_0_latch1_read)
104READ8_MEMBER(istellar_state::z80_0_latch1_read)
97105{
98   istellar_state *state = space->machine().driver_data<istellar_state>();
99   /*logerror("CPU0 : reading LDP status latch (%x)\n", state->m_ldp_latch1);*/
100   return state->m_ldp_latch1;
106   /*logerror("CPU0 : reading LDP status latch (%x)\n", m_ldp_latch1);*/
107   return m_ldp_latch1;
101108}
102109
103static WRITE8_HANDLER(z80_0_latch2_write)
110WRITE8_MEMBER(istellar_state::z80_0_latch2_write)
104111{
105   istellar_state *state = space->machine().driver_data<istellar_state>();
106112   /*logerror("CPU0 : writing cpu_latch2 (%x).  Potentially followed by an IRQ.\n", data);*/
107   state->m_ldp_latch2 = data;
113   m_ldp_latch2 = data;
108114
109115   /* A CPU2 NMI */
110   if (state->m_z80_2_nmi_enable)
116   if (m_z80_2_nmi_enable)
111117   {
112118      logerror("Executing an NMI on CPU2\n");
113      cputag_set_input_line(space->machine(), "sub", INPUT_LINE_NMI, PULSE_LINE);      /* Maybe this is a ASSERT_LINE, CLEAR_LINE combo? */
114      state->m_z80_2_nmi_enable = 0;
119      cputag_set_input_line(machine(), "sub", INPUT_LINE_NMI, PULSE_LINE);      /* Maybe this is a ASSERT_LINE, CLEAR_LINE combo? */
120      m_z80_2_nmi_enable = 0;
115121   }
116122}
117123
r14845r14846
120126
121127
122128/* Z80 2 R/W */
123static READ8_HANDLER(z80_2_ldp_read)
129READ8_MEMBER(istellar_state::z80_2_ldp_read)
124130{
125   istellar_state *state = space->machine().driver_data<istellar_state>();
126   UINT8 readResult = state->m_laserdisc->status_r();
131   UINT8 readResult = m_laserdisc->status_r();
127132   logerror("CPU2 : reading LDP : %x\n", readResult);
128133   return readResult;
129134}
130135
131static READ8_HANDLER(z80_2_latch2_read)
136READ8_MEMBER(istellar_state::z80_2_latch2_read)
132137{
133   istellar_state *state = space->machine().driver_data<istellar_state>();
134   logerror("CPU2 : reading latch2 (%x)\n", state->m_ldp_latch2);
135   return state->m_ldp_latch2;
138   logerror("CPU2 : reading latch2 (%x)\n", m_ldp_latch2);
139   return m_ldp_latch2;
136140}
137141
138static READ8_HANDLER(z80_2_nmienable)
142READ8_MEMBER(istellar_state::z80_2_nmienable)
139143{
140   istellar_state *state = space->machine().driver_data<istellar_state>();
141144   logerror("CPU2 : ENABLING NMI\n");
142   state->m_z80_2_nmi_enable = 1;
145   m_z80_2_nmi_enable = 1;
143146   return 0x00;
144147}
145148
146static READ8_HANDLER(z80_2_unknown_read)
149READ8_MEMBER(istellar_state::z80_2_unknown_read)
147150{
148151   logerror("CPU2 : c000!\n");
149152   return 0x00;
150153}
151154
152static WRITE8_HANDLER(z80_2_latch1_write)
155WRITE8_MEMBER(istellar_state::z80_2_latch1_write)
153156{
154   istellar_state *state = space->machine().driver_data<istellar_state>();
155157   logerror("CPU2 : writing latch1 (%x)\n", data);
156   state->m_ldp_latch1 = data;
158   m_ldp_latch1 = data;
157159}
158160
159static WRITE8_HANDLER(z80_2_ldp_write)
161WRITE8_MEMBER(istellar_state::z80_2_ldp_write)
160162{
161   istellar_state *state = space->machine().driver_data<istellar_state>();
162163   logerror("CPU2 : writing LDP : 0x%x\n", data);
163   state->m_laserdisc->data_w(data);
164   m_laserdisc->data_w(data);
164165}
165166
166167
r14845r14846
182183static ADDRESS_MAP_START( z80_2_mem, AS_PROGRAM, 8, istellar_state )
183184   AM_RANGE(0x0000,0x17ff) AM_ROM
184185   AM_RANGE(0x1800,0x1fff) AM_RAM
185   AM_RANGE(0xc000,0xc000) AM_READ_LEGACY(z80_2_unknown_read)      /* Seems to be thrown away every time it's read - maybe interrupt related? */
186   AM_RANGE(0xc000,0xc000) AM_READ(z80_2_unknown_read)      /* Seems to be thrown away every time it's read - maybe interrupt related? */
186187ADDRESS_MAP_END
187188
188189
r14845r14846
193194   AM_RANGE(0x02,0x02) AM_READ_PORT("DSW1")
194195   AM_RANGE(0x03,0x03) AM_READ_PORT("DSW2")
195196   /*AM_RANGE(0x04,0x04) AM_WRITE_LEGACY(volatile_palette_write)*/
196   AM_RANGE(0x05,0x05) AM_READWRITE_LEGACY(z80_0_latch1_read,z80_0_latch2_write)
197   AM_RANGE(0x05,0x05) AM_READWRITE(z80_0_latch1_read,z80_0_latch2_write)
197198ADDRESS_MAP_END
198199
199200static ADDRESS_MAP_START( z80_1_io, AS_IO, 8, istellar_state )
r14845r14846
205206
206207static ADDRESS_MAP_START( z80_2_io, AS_IO, 8, istellar_state )
207208   ADDRESS_MAP_GLOBAL_MASK(0xff)
208   AM_RANGE(0x00,0x00) AM_READWRITE_LEGACY(z80_2_ldp_read,z80_2_ldp_write)
209   AM_RANGE(0x01,0x01) AM_READWRITE_LEGACY(z80_2_latch2_read,z80_2_latch1_write)
210   AM_RANGE(0x02,0x02) AM_READ_LEGACY(z80_2_nmienable)
209   AM_RANGE(0x00,0x00) AM_READWRITE(z80_2_ldp_read,z80_2_ldp_write)
210   AM_RANGE(0x01,0x01) AM_READWRITE(z80_2_latch2_read,z80_2_latch1_write)
211   AM_RANGE(0x02,0x02) AM_READ(z80_2_nmienable)
211212/*  AM_RANGE(0x03,0x03) AM_WRITE_LEGACY(z80_2_ldtrans_write)*/
212213ADDRESS_MAP_END
213214
src/mame/drivers/macs.c
r14845r14846
7171   UINT8 m_rev;
7272   UINT8 *m_ram1;
7373   UINT8 *m_ram2;
74   DECLARE_WRITE8_MEMBER(rambank_w);
75   DECLARE_READ8_MEMBER(macs_input_r);
76   DECLARE_WRITE8_MEMBER(macs_rom_bank_w);
77   DECLARE_WRITE8_MEMBER(macs_output_w);
7478};
7579
7680
r14845r14846
9195   AM_RANGE(0xf800, 0xffff) AM_RAMBANK("bank2") /* common /backup ram ?*/
9296ADDRESS_MAP_END
9397
94static WRITE8_HANDLER(rambank_w)
98WRITE8_MEMBER(macs_state::rambank_w)
9599{
96   macs_state *state = space->machine().driver_data<macs_state>();
97   memory_set_bankptr(space->machine(),  "bank3", &state->m_ram1[0x10000+(data&1)*0x800] );
100   memory_set_bankptr(machine(),  "bank3", &m_ram1[0x10000+(data&1)*0x800] );
98101}
99102
100static READ8_HANDLER( macs_input_r )
103READ8_MEMBER(macs_state::macs_input_r)
101104{
102   macs_state *state = space->machine().driver_data<macs_state>();
103105   switch(offset)
104106   {
105107      case 0:
106108      {
107109         /*It's bit-wise*/
108         switch(state->m_mux_data&0x0f)
110         switch(m_mux_data&0x0f)
109111         {
110            case 0x00: return input_port_read(space->machine(), "IN0");
111            case 0x01: return input_port_read(space->machine(), "IN1");
112            case 0x02: return input_port_read(space->machine(), "IN2");
113            case 0x04: return input_port_read(space->machine(), "IN3");
114            case 0x08: return input_port_read(space->machine(), "IN4");
112            case 0x00: return input_port_read(machine(), "IN0");
113            case 0x01: return input_port_read(machine(), "IN1");
114            case 0x02: return input_port_read(machine(), "IN2");
115            case 0x04: return input_port_read(machine(), "IN3");
116            case 0x08: return input_port_read(machine(), "IN4");
115117            default:
116            logerror("Unmapped mahjong panel mux data %02x\n",state->m_mux_data);
118            logerror("Unmapped mahjong panel mux data %02x\n",m_mux_data);
117119            return 0xff;
118120         }
119121      }
120      case 1: return input_port_read(space->machine(), "SYS0");
121      case 2: return input_port_read(space->machine(), "DSW0");
122      case 3: return input_port_read(space->machine(), "DSW1");
123      case 4: return input_port_read(space->machine(), "DSW2");
124      case 5: return input_port_read(space->machine(), "DSW3");
125      case 6: return input_port_read(space->machine(), "DSW4");
126      case 7: return input_port_read(space->machine(), "SYS1");
127      default:   popmessage("Unmapped I/O read at PC = %06x offset = %02x",cpu_get_pc(&space->device()),offset+0xc0);
122      case 1: return input_port_read(machine(), "SYS0");
123      case 2: return input_port_read(machine(), "DSW0");
124      case 3: return input_port_read(machine(), "DSW1");
125      case 4: return input_port_read(machine(), "DSW2");
126      case 5: return input_port_read(machine(), "DSW3");
127      case 6: return input_port_read(machine(), "DSW4");
128      case 7: return input_port_read(machine(), "SYS1");
129      default:   popmessage("Unmapped I/O read at PC = %06x offset = %02x",cpu_get_pc(&space.device()),offset+0xc0);
128130   }
129131
130132   return 0xff;
131133}
132134
133135
134static WRITE8_HANDLER( macs_rom_bank_w )
136WRITE8_MEMBER(macs_state::macs_rom_bank_w)
135137{
136   memory_set_bankptr(space->machine(),  "bank1", space->machine().region("maincpu")->base() + (data* 0x4000) + 0x10000 + macs_cart_slot*0x400000 );
138   memory_set_bankptr(machine(),  "bank1", machine().region("maincpu")->base() + (data* 0x4000) + 0x10000 + macs_cart_slot*0x400000 );
137139
138140   st0016_rom_bank=data;
139141}
140142
141static WRITE8_HANDLER( macs_output_w )
143WRITE8_MEMBER(macs_state::macs_output_w)
142144{
143   macs_state *state = space->machine().driver_data<macs_state>();
144   UINT8 *ROM = space->machine().region("maincpu")->base();
145   UINT8 *ROM = machine().region("maincpu")->base();
145146
146147   switch(offset)
147148   {
r14845r14846
152153        ---- --x- Cassette A slot
153154        */
154155
155      if(state->m_rev == 1)
156      if(m_rev == 1)
156157      {
157158         /* FIXME: dunno if this RAM bank is right, DASM tracking made on the POST screens indicates that there's just one RAM bank,
158159                      but then MACS2 games locks up. */
159         memory_set_bankptr(space->machine(),  "bank3", &state->m_ram1[((data&0x20)>>5)*0x1000+0x000] );
160         memory_set_bankptr(machine(),  "bank3", &m_ram1[((data&0x20)>>5)*0x1000+0x000] );
160161
161162         macs_cart_slot = (data & 0xc) >> 2;
162163
163         memory_set_bankptr(space->machine(),  "bank4", &ROM[macs_cart_slot*0x400000+0x10000] );
164         memory_set_bankptr(machine(),  "bank4", &ROM[macs_cart_slot*0x400000+0x10000] );
164165      }
165166
166      memory_set_bankptr(space->machine(),  "bank2", &state->m_ram1[((data&0x20)>>5)*0x1000+0x800] );
167      memory_set_bankptr(machine(),  "bank2", &m_ram1[((data&0x20)>>5)*0x1000+0x800] );
167168      break;
168      case 2: state->m_mux_data = data; break;
169      case 2: m_mux_data = data; break;
169170
170171   }
171172}
r14845r14846
173174static ADDRESS_MAP_START( macs_io, AS_IO, 8, macs_state )
174175   ADDRESS_MAP_GLOBAL_MASK(0xff)
175176   AM_RANGE(0x00, 0xbf) AM_READ_LEGACY(st0016_vregs_r) AM_WRITE_LEGACY(st0016_vregs_w) /* video/crt regs ? */
176   AM_RANGE(0xc0, 0xc7) AM_READWRITE_LEGACY(macs_input_r,macs_output_w)
177   AM_RANGE(0xc0, 0xc7) AM_READWRITE(macs_input_r,macs_output_w)
177178   AM_RANGE(0xe0, 0xe0) AM_WRITENOP /* renju = $40, neratte = 0 */
178   AM_RANGE(0xe1, 0xe1) AM_WRITE_LEGACY(macs_rom_bank_w)
179   AM_RANGE(0xe1, 0xe1) AM_WRITE(macs_rom_bank_w)
179180   AM_RANGE(0xe2, 0xe2) AM_WRITE_LEGACY(st0016_sprite_bank_w)
180181   AM_RANGE(0xe3, 0xe4) AM_WRITE_LEGACY(st0016_character_bank_w)
181182   AM_RANGE(0xe5, 0xe5) AM_WRITE_LEGACY(st0016_palette_bank_w)
182   AM_RANGE(0xe6, 0xe6) AM_WRITE_LEGACY(rambank_w) /* banking ? ram bank ? shared rambank ? */
183   AM_RANGE(0xe6, 0xe6) AM_WRITE(rambank_w) /* banking ? ram bank ? shared rambank ? */
183184   AM_RANGE(0xe7, 0xe7) AM_WRITENOP /* watchdog */
184185   AM_RANGE(0xf0, 0xf0) AM_READ_LEGACY(st0016_dma_r)
185186ADDRESS_MAP_END
src/mame/drivers/sbowling.c
r14845r14846
6363   UINT8 m_pix[2];
6464
6565   required_device<cpu_device> m_maincpu;
66   DECLARE_WRITE8_MEMBER(sbw_videoram_w);
67   DECLARE_WRITE8_MEMBER(pix_shift_w);
68   DECLARE_WRITE8_MEMBER(pix_data_w);
69   DECLARE_READ8_MEMBER(pix_data_r);
70   DECLARE_WRITE8_MEMBER(system_w);
71   DECLARE_WRITE8_MEMBER(graph_control_w);
72   DECLARE_READ8_MEMBER(controls_r);
6673};
6774
6875static TILE_GET_INFO( get_sb_tile_info )
r14845r14846
8491   tmpbitmap->pix16(y, x) = col;
8592}
8693
87static WRITE8_HANDLER( sbw_videoram_w )
94WRITE8_MEMBER(sbowling_state::sbw_videoram_w)
8895{
89   sbowling_state *state = space->machine().driver_data<sbowling_state>();
90   int flip = flip_screen_get(space->machine());
96   int flip = flip_screen_get(machine());
9197   int x,y,i,v1,v2;
9298
93   state->m_videoram[offset] = data;
99   m_videoram[offset] = data;
94100
95101   offset &= 0x1fff;
96102
97103   y = offset / 32;
98104   x = (offset % 32) * 8;
99105
100   v1 = state->m_videoram[offset];
101   v2 = state->m_videoram[offset+0x2000];
106   v1 = m_videoram[offset];
107   v2 = m_videoram[offset+0x2000];
102108
103109   for (i = 0; i < 8; i++)
104110   {
105      plot_pixel_sbw(state->m_tmpbitmap, x++, y, state->m_color_prom_address | ( ((v1&1)*0x20) | ((v2&1)*0x40) ), flip);
111      plot_pixel_sbw(m_tmpbitmap, x++, y, m_color_prom_address | ( ((v1&1)*0x20) | ((v2&1)*0x40) ), flip);
106112      v1 >>= 1;
107113      v2 >>= 1;
108114   }
r14845r14846
126132   state->m_sb_tilemap = tilemap_create(machine, get_sb_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
127133}
128134
129static WRITE8_HANDLER( pix_shift_w )
135WRITE8_MEMBER(sbowling_state::pix_shift_w)
130136{
131   sbowling_state *state = space->machine().driver_data<sbowling_state>();
132137
133   state->m_pix_sh = data;
138   m_pix_sh = data;
134139}
135static WRITE8_HANDLER( pix_data_w )
140WRITE8_MEMBER(sbowling_state::pix_data_w)
136141{
137   sbowling_state *state = space->machine().driver_data<sbowling_state>();
138142
139   state->m_pix[0] = state->m_pix[1];
140   state->m_pix[1] = data;
143   m_pix[0] = m_pix[1];
144   m_pix[1] = data;
141145}
142static READ8_HANDLER( pix_data_r )
146READ8_MEMBER(sbowling_state::pix_data_r)
143147{
144   sbowling_state *state = space->machine().driver_data<sbowling_state>();
145148   UINT32 p1, p0;
146149   int res;
147   int sh = state->m_pix_sh & 7;
150   int sh = m_pix_sh & 7;
148151
149   p1 = state->m_pix[1];
150   p0 = state->m_pix[0];
152   p1 = m_pix[1];
153   p0 = m_pix[0];
151154
152155   res = (((p1 << (sh+8)) | (p0 << sh)) & 0xff00) >> 8;
153156
r14845r14846
169172
170173}
171174
172static WRITE8_HANDLER (system_w)
175WRITE8_MEMBER(sbowling_state::system_w)
173176{
174177   /*
175178        76543210
r14845r14846
178181        -----x-- 1 ?
179182        ----x--- flip screen/controls
180183    */
181   sbowling_state *state = space->machine().driver_data<sbowling_state>();
182184
183   flip_screen_set(space->machine(), data&1);
184185
185   if ((state->m_sbw_system^data)&1)
186   flip_screen_set(machine(), data&1);
187
188   if ((m_sbw_system^data)&1)
186189   {
187190      int offs;
188191      for (offs = 0;offs < 0x4000; offs++)
189         sbw_videoram_w(space, offs, state->m_videoram[offs]);
192         sbw_videoram_w(space, offs, m_videoram[offs]);
190193   }
191   state->m_sbw_system = data;
194   m_sbw_system = data;
192195}
193196
194static WRITE8_HANDLER(graph_control_w)
197WRITE8_MEMBER(sbowling_state::graph_control_w)
195198{
196199   /*
197200        76543210
r14845r14846
201204        xx------ color PROM address lines A4,A3
202205    */
203206
204   sbowling_state *state = space->machine().driver_data<sbowling_state>();
205207
206   state->m_color_prom_address = ((data&0x07)<<7) | ((data&0xc0)>>3);
207208
208   state->m_bgmap = ((data>>4)^3) & 0x3;
209   state->m_sb_tilemap->mark_all_dirty();
209   m_color_prom_address = ((data&0x07)<<7) | ((data&0xc0)>>3);
210
211   m_bgmap = ((data>>4)^3) & 0x3;
212   m_sb_tilemap->mark_all_dirty();
210213}
211214
212static READ8_HANDLER (controls_r)
215READ8_MEMBER(sbowling_state::controls_r)
213216{
214   sbowling_state *state = space->machine().driver_data<sbowling_state>();
215217
216   if (state->m_sbw_system & 2)
217      return input_port_read(space->machine(), "TRACKY");
218   if (m_sbw_system & 2)
219      return input_port_read(machine(), "TRACKY");
218220   else
219      return input_port_read(space->machine(), "TRACKX");
221      return input_port_read(machine(), "TRACKX");
220222}
221223
222224static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sbowling_state )
223225   AM_RANGE(0x0000, 0x2fff) AM_ROM
224   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE_LEGACY(sbw_videoram_w) AM_BASE(m_videoram)
226   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE(sbw_videoram_w) AM_BASE(m_videoram)
225227   AM_RANGE(0xf800, 0xf801) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
226228   AM_RANGE(0xf801, 0xf801) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
227229   AM_RANGE(0xfc00, 0xffff) AM_RAM
r14845r14846
230232
231233static ADDRESS_MAP_START( port_map, AS_IO, 8, sbowling_state )
232234   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE_LEGACY(watchdog_reset_w)
233   AM_RANGE(0x01, 0x01) AM_READWRITE_LEGACY(controls_r, pix_data_w)
234   AM_RANGE(0x02, 0x02) AM_READWRITE_LEGACY(pix_data_r, pix_shift_w)
235   AM_RANGE(0x01, 0x01) AM_READWRITE(controls_r, pix_data_w)
236   AM_RANGE(0x02, 0x02) AM_READWRITE(pix_data_r, pix_shift_w)
235237   AM_RANGE(0x03, 0x03) AM_READ_PORT("IN1") AM_WRITENOP
236   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW0") AM_WRITE_LEGACY(system_w)
237   AM_RANGE(0x05, 0x05) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(graph_control_w)
238   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW0") AM_WRITE(system_w)
239   AM_RANGE(0x05, 0x05) AM_READ_PORT("DSW1") AM_WRITE(graph_control_w)
238240ADDRESS_MAP_END
239241
240242
src/mame/drivers/good.c
r14845r14846
5050   /* video-related */
5151   tilemap_t  *m_bg_tilemap;
5252   tilemap_t  *m_fg_tilemap;
53   DECLARE_WRITE16_MEMBER(fg_tilemapram_w);
54   DECLARE_WRITE16_MEMBER(bg_tilemapram_w);
5355};
5456
5557
56static WRITE16_HANDLER( fg_tilemapram_w )
58WRITE16_MEMBER(good_state::fg_tilemapram_w)
5759{
58   good_state *state = space->machine().driver_data<good_state>();
59   COMBINE_DATA(&state->m_fg_tilemapram[offset]);
60   state->m_fg_tilemap->mark_tile_dirty(offset / 2);
60   COMBINE_DATA(&m_fg_tilemapram[offset]);
61   m_fg_tilemap->mark_tile_dirty(offset / 2);
6162}
6263
6364static TILE_GET_INFO( get_fg_tile_info )
r14845r14846
6869   SET_TILE_INFO(0, tileno, attr, 0);
6970}
7071
71static WRITE16_HANDLER( bg_tilemapram_w )
72WRITE16_MEMBER(good_state::bg_tilemapram_w)
7273{
73   good_state *state = space->machine().driver_data<good_state>();
74   COMBINE_DATA(&state->m_bg_tilemapram[offset]);
75   state->m_bg_tilemap->mark_tile_dirty(offset / 2);
74   COMBINE_DATA(&m_bg_tilemapram[offset]);
75   m_bg_tilemap->mark_tile_dirty(offset / 2);
7676}
7777
7878static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
113113
114114   AM_RANGE(0x800000, 0x8007ff) AM_RAM_WRITE_LEGACY(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
115115
116   AM_RANGE(0x820000, 0x820fff) AM_RAM_WRITE_LEGACY(fg_tilemapram_w) AM_BASE(m_fg_tilemapram)
117   AM_RANGE(0x822000, 0x822fff) AM_RAM_WRITE_LEGACY(bg_tilemapram_w) AM_BASE(m_bg_tilemapram)
116   AM_RANGE(0x820000, 0x820fff) AM_RAM_WRITE(fg_tilemapram_w) AM_BASE(m_fg_tilemapram)
117   AM_RANGE(0x822000, 0x822fff) AM_RAM_WRITE(bg_tilemapram_w) AM_BASE(m_bg_tilemapram)
118118
119119   AM_RANGE(0xff0000, 0xffefff) AM_RAM
120120ADDRESS_MAP_END
src/mame/drivers/mirage.c
r14845r14846
6767   required_device<okim6295_device> m_oki_sfx;
6868   required_device<okim6295_device> m_oki_bgm;
6969   required_device<buffered_spriteram16_device> m_spriteram;
70   DECLARE_WRITE16_MEMBER(mirage_mux_w);
71   DECLARE_READ16_MEMBER(mirage_input_r);
72   DECLARE_WRITE16_MEMBER(okim1_rombank_w);
73   DECLARE_WRITE16_MEMBER(okim0_rombank_w);
7074};
7175
7276static VIDEO_START( mirage )
r14845r14846
96100}
97101
98102
99static WRITE16_HANDLER( mirage_mux_w )
103WRITE16_MEMBER(miragemi_state::mirage_mux_w)
100104{
101   miragemi_state *state = space->machine().driver_data<miragemi_state>();
102   state->m_mux_data = data & 0x1f;
105   m_mux_data = data & 0x1f;
103106}
104107
105static READ16_HANDLER( mirage_input_r )
108READ16_MEMBER(miragemi_state::mirage_input_r)
106109{
107   miragemi_state *state = space->machine().driver_data<miragemi_state>();
108   switch (state->m_mux_data & 0x1f)
110   switch (m_mux_data & 0x1f)
109111   {
110      case 0x01: return input_port_read(space->machine(), "KEY0");
111      case 0x02: return input_port_read(space->machine(), "KEY1");
112      case 0x04: return input_port_read(space->machine(), "KEY2");
113      case 0x08: return input_port_read(space->machine(), "KEY3");
114      case 0x10: return input_port_read(space->machine(), "KEY4");
112      case 0x01: return input_port_read(machine(), "KEY0");
113      case 0x02: return input_port_read(machine(), "KEY1");
114      case 0x04: return input_port_read(machine(), "KEY2");
115      case 0x08: return input_port_read(machine(), "KEY3");
116      case 0x10: return input_port_read(machine(), "KEY4");
115117   }
116118
117119   return 0xffff;
118120}
119121
120static WRITE16_HANDLER( okim1_rombank_w )
122WRITE16_MEMBER(miragemi_state::okim1_rombank_w)
121123{
122   miragemi_state *state = space->machine().driver_data<miragemi_state>();
123   state->m_oki_sfx->set_bank_base(0x40000 * (data & 0x3));
124   m_oki_sfx->set_bank_base(0x40000 * (data & 0x3));
124125}
125126
126static WRITE16_HANDLER( okim0_rombank_w )
127WRITE16_MEMBER(miragemi_state::okim0_rombank_w)
127128{
128   miragemi_state *state = space->machine().driver_data<miragemi_state>();
129129
130130   /*bits 4-6 used on POST? */
131   state->m_oki_bgm->set_bank_base(0x40000 * (data & 0x7));
131   m_oki_bgm->set_bank_base(0x40000 * (data & 0x7));
132132}
133133
134134static ADDRESS_MAP_START( mirage_map, AS_PROGRAM, 16, miragemi_state )
r14845r14846
148148   AM_RANGE(0x160000, 0x160001) AM_WRITENOP
149149   AM_RANGE(0x168000, 0x16800f) AM_DEVWRITE_LEGACY("tilegen1", deco16ic_pf_control_w)
150150   AM_RANGE(0x16a000, 0x16a001) AM_WRITENOP
151   AM_RANGE(0x16c000, 0x16c001) AM_WRITE_LEGACY(okim1_rombank_w)
152   AM_RANGE(0x16c002, 0x16c003) AM_WRITE_LEGACY(okim0_rombank_w)
153   AM_RANGE(0x16c004, 0x16c005) AM_WRITE_LEGACY(mirage_mux_w)
154   AM_RANGE(0x16c006, 0x16c007) AM_READ_LEGACY(mirage_input_r)
151   AM_RANGE(0x16c000, 0x16c001) AM_WRITE(okim1_rombank_w)
152   AM_RANGE(0x16c002, 0x16c003) AM_WRITE(okim0_rombank_w)
153   AM_RANGE(0x16c004, 0x16c005) AM_WRITE(mirage_mux_w)
154   AM_RANGE(0x16c006, 0x16c007) AM_READ(mirage_input_r)
155155   AM_RANGE(0x16e000, 0x16e001) AM_WRITENOP
156156   AM_RANGE(0x16e002, 0x16e003) AM_READ_PORT("SYSTEM_IN")
157157   AM_RANGE(0x170000, 0x173fff) AM_RAM
src/mame/drivers/bfmsys85.c
r14845r14846
9090   UINT8 m_codec_data[256];
9191   UINT8 m_sys85_data_line_r;
9292   UINT8 m_sys85_data_line_t;
93   DECLARE_WRITE8_MEMBER(watchdog_w);
94   DECLARE_READ8_MEMBER(irqlatch_r);
95   DECLARE_WRITE8_MEMBER(reel12_w);
96   DECLARE_WRITE8_MEMBER(reel34_w);
97   DECLARE_WRITE8_MEMBER(mmtr_w);
98   DECLARE_READ8_MEMBER(mmtr_r);
99   DECLARE_WRITE8_MEMBER(vfd_w);
100   DECLARE_WRITE8_MEMBER(mux_ctrl_w);
101   DECLARE_READ8_MEMBER(mux_ctrl_r);
102   DECLARE_WRITE8_MEMBER(mux_data_w);
103   DECLARE_READ8_MEMBER(mux_data_r);
104   DECLARE_WRITE8_MEMBER(mux_enable_w);
105   DECLARE_WRITE8_MEMBER(triac_w);
106   DECLARE_READ8_MEMBER(triac_r);
93107};
94108
95109
r14845r14846
160174
161175///////////////////////////////////////////////////////////////////////////
162176
163static WRITE8_HANDLER( watchdog_w )
177WRITE8_MEMBER(bfmsys85_state::watchdog_w)
164178{
165179}
166180
r14845r14846
178192
179193///////////////////////////////////////////////////////////////////////////
180194
181static READ8_HANDLER( irqlatch_r )
195READ8_MEMBER(bfmsys85_state::irqlatch_r)
182196{
183   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
184   int result = state->m_irq_status | 0x02;
197   int result = m_irq_status | 0x02;
185198
186   state->m_irq_status = 0;
199   m_irq_status = 0;
187200
188201   return result;
189202}
190203
191204///////////////////////////////////////////////////////////////////////////
192205
193static WRITE8_HANDLER( reel12_w )
206WRITE8_MEMBER(bfmsys85_state::reel12_w)
194207{
195   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
196   if ( stepper_update(0, (data>>4)&0x0f) ) state->m_reel_changed |= 0x01;
197   if ( stepper_update(1, data&0x0f   ) ) state->m_reel_changed |= 0x02;
208   if ( stepper_update(0, (data>>4)&0x0f) ) m_reel_changed |= 0x01;
209   if ( stepper_update(1, data&0x0f   ) ) m_reel_changed |= 0x02;
198210
199   if ( stepper_optic_state(0) ) state->m_optic_pattern |=  0x01;
200   else                          state->m_optic_pattern &= ~0x01;
201   if ( stepper_optic_state(1) ) state->m_optic_pattern |=  0x02;
202   else                          state->m_optic_pattern &= ~0x02;
211   if ( stepper_optic_state(0) ) m_optic_pattern |=  0x01;
212   else                          m_optic_pattern &= ~0x01;
213   if ( stepper_optic_state(1) ) m_optic_pattern |=  0x02;
214   else                          m_optic_pattern &= ~0x02;
203215   awp_draw_reel(0);
204216   awp_draw_reel(1);
205217}
206218
207219///////////////////////////////////////////////////////////////////////////
208220
209static WRITE8_HANDLER( reel34_w )
221WRITE8_MEMBER(bfmsys85_state::reel34_w)
210222{
211   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
212   if ( stepper_update(2, (data>>4)&0x0f) ) state->m_reel_changed |= 0x04;
213   if ( stepper_update(3, data&0x0f   ) ) state->m_reel_changed |= 0x08;
223   if ( stepper_update(2, (data>>4)&0x0f) ) m_reel_changed |= 0x04;
224   if ( stepper_update(3, data&0x0f   ) ) m_reel_changed |= 0x08;
214225
215   if ( stepper_optic_state(2) ) state->m_optic_pattern |=  0x04;
216   else                          state->m_optic_pattern &= ~0x04;
217   if ( stepper_optic_state(3) ) state->m_optic_pattern |=  0x08;
218   else                          state->m_optic_pattern &= ~0x08;
226   if ( stepper_optic_state(2) ) m_optic_pattern |=  0x04;
227   else                          m_optic_pattern &= ~0x04;
228   if ( stepper_optic_state(3) ) m_optic_pattern |=  0x08;
229   else                          m_optic_pattern &= ~0x08;
219230   awp_draw_reel(2);
220231   awp_draw_reel(3);
221232}
r14845r14846
224235// mechanical meters //////////////////////////////////////////////////////
225236///////////////////////////////////////////////////////////////////////////
226237
227static WRITE8_HANDLER( mmtr_w )
238WRITE8_MEMBER(bfmsys85_state::mmtr_w)
228239{
229   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
230240   int i;
231   int  changed = state->m_mmtr_latch ^ data;
241   int  changed = m_mmtr_latch ^ data;
232242
233   state->m_mmtr_latch = data;
243   m_mmtr_latch = data;
234244
235245   for (i=0; i<8; i++)
236246   if ( changed & (1 << i) )   MechMtr_update(i, data & (1 << i) );
237247
238   if ( data ) generic_pulse_irq_line(space->machine().device("maincpu"), M6809_FIRQ_LINE, 1);
248   if ( data ) generic_pulse_irq_line(machine().device("maincpu"), M6809_FIRQ_LINE, 1);
239249}
240250///////////////////////////////////////////////////////////////////////////
241251
242static READ8_HANDLER( mmtr_r )
252READ8_MEMBER(bfmsys85_state::mmtr_r)
243253{
244   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
245   return state->m_mmtr_latch;
254   return m_mmtr_latch;
246255}
247256///////////////////////////////////////////////////////////////////////////
248257
249static WRITE8_HANDLER( vfd_w )
258WRITE8_MEMBER(bfmsys85_state::vfd_w)
250259{
251   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
252   int changed = state->m_vfd_latch ^ data;
260   int changed = m_vfd_latch ^ data;
253261
254   state->m_vfd_latch = data;
262   m_vfd_latch = data;
255263
256264   if ( changed )
257265   {
r14845r14846
280288// input / output multiplexers ///////////////////////////////////////////////////
281289//////////////////////////////////////////////////////////////////////////////////
282290
283static WRITE8_HANDLER( mux_ctrl_w )
291WRITE8_MEMBER(bfmsys85_state::mux_ctrl_w)
284292{
285   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
286293   switch ( data & 0xF0 )
287294   {
288295      case 0x10:
r14845r14846
295302
296303      case 0x40:
297304      //logerror(" sys85 mux: read strobe");
298      state->m_mux_input_strobe = data & 0x07;
305      m_mux_input_strobe = data & 0x07;
299306
300      if ( state->m_mux_input_strobe == 5 ) state->m_Inputs[5] = 0xFF ^ state->m_optic_pattern;
307      if ( m_mux_input_strobe == 5 ) m_Inputs[5] = 0xFF ^ m_optic_pattern;
301308
302      state->m_mux_input = ~state->m_Inputs[state->m_mux_input_strobe];
309      m_mux_input = ~m_Inputs[m_mux_input_strobe];
303310      break;
304311
305312      case 0x80:
306      state->m_mux_output_strobe = data & 0x0F;
313      m_mux_output_strobe = data & 0x0F;
307314      break;
308315
309316      case 0xC0:
r14845r14846
316323   }
317324}
318325
319static READ8_HANDLER( mux_ctrl_r )
326READ8_MEMBER(bfmsys85_state::mux_ctrl_r)
320327{
321328  // software waits for bit7 to become low
322329
323330  return 0;
324331}
325332
326static WRITE8_HANDLER( mux_data_w )
333WRITE8_MEMBER(bfmsys85_state::mux_data_w)
327334{
328   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
329335   int pattern = 0x01, i,
330   off = state->m_mux_output_strobe<<4;
336   off = m_mux_output_strobe<<4;
331337
332338   for ( i = 0; i < 8; i++ )
333339   {
r14845r14846
337343   }
338344}
339345
340static READ8_HANDLER( mux_data_r )
346READ8_MEMBER(bfmsys85_state::mux_data_r)
341347{
342   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
343   return state->m_mux_input;
348   return m_mux_input;
344349}
345350
346351///////////////////////////////////////////////////////////////////////////
347352
348static WRITE8_HANDLER( mux_enable_w )
353WRITE8_MEMBER(bfmsys85_state::mux_enable_w)
349354{
350355}
351356
r14845r14846
353358// payslide triacs ////////////////////////////////////////////////////////
354359///////////////////////////////////////////////////////////////////////////
355360
356static WRITE8_HANDLER( triac_w )
361WRITE8_MEMBER(bfmsys85_state::triac_w)
357362{
358   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
359   state->m_triac_latch = data;
363   m_triac_latch = data;
360364}
361365
362366///////////////////////////////////////////////////////////////////////////
363367
364static READ8_HANDLER( triac_r )
368READ8_MEMBER(bfmsys85_state::triac_r)
365369{
366   bfmsys85_state *state = space->machine().driver_data<bfmsys85_state>();
367   return state->m_triac_latch;
370   return m_triac_latch;
368371}
369372
370373// machine start (called only once) ////////////////////////////////////////
r14845r14846
387390static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, bfmsys85_state )
388391
389392   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram") //8k RAM
390   AM_RANGE(0x2000, 0x21FF) AM_WRITE_LEGACY(reel34_w)         // reel 3+4 latch
391   AM_RANGE(0x2200, 0x23FF) AM_WRITE_LEGACY(reel12_w)         // reel 1+2 latch
392   AM_RANGE(0x2400, 0x25FF) AM_WRITE_LEGACY(vfd_w)         // vfd latch
393   AM_RANGE(0x2000, 0x21FF) AM_WRITE(reel34_w)         // reel 3+4 latch
394   AM_RANGE(0x2200, 0x23FF) AM_WRITE(reel12_w)         // reel 1+2 latch
395   AM_RANGE(0x2400, 0x25FF) AM_WRITE(vfd_w)         // vfd latch
393396
394   AM_RANGE(0x2600, 0x27FF) AM_READWRITE_LEGACY(mmtr_r,mmtr_w)// mechanical meter latch
395   AM_RANGE(0x2800, 0x2800) AM_READ_LEGACY(triac_r)         // payslide triacs
396   AM_RANGE(0x2800, 0x29FF) AM_WRITE_LEGACY(triac_w)         // triacs
397   AM_RANGE(0x2600, 0x27FF) AM_READWRITE(mmtr_r,mmtr_w)// mechanical meter latch
398   AM_RANGE(0x2800, 0x2800) AM_READ(triac_r)         // payslide triacs
399   AM_RANGE(0x2800, 0x29FF) AM_WRITE(triac_w)         // triacs
397400
398   AM_RANGE(0x2A00, 0x2A00) AM_READWRITE_LEGACY(mux_data_r,mux_data_w)// mux
399   AM_RANGE(0x2A01, 0x2A01) AM_READWRITE_LEGACY(mux_ctrl_r,mux_ctrl_w)// mux status register
400   AM_RANGE(0x2E00, 0x2E00) AM_READ_LEGACY(irqlatch_r)      // irq latch ( MC6850 / timer )
401   AM_RANGE(0x2A00, 0x2A00) AM_READWRITE(mux_data_r,mux_data_w)// mux
402   AM_RANGE(0x2A01, 0x2A01) AM_READWRITE(mux_ctrl_r,mux_ctrl_w)// mux status register
403   AM_RANGE(0x2E00, 0x2E00) AM_READ(irqlatch_r)      // irq latch ( MC6850 / timer )
401404
402405   AM_RANGE(0x3000, 0x3000) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
403406   AM_RANGE(0x3001, 0x3001) AM_READNOP //sound latch
r14845r14846
409412   AM_RANGE(0x3406, 0x3406) AM_DEVREAD("acia6850_0", acia6850_device, status_read)
410413   AM_RANGE(0x3407, 0x3407) AM_DEVREAD("acia6850_0", acia6850_device, data_read)
411414
412   AM_RANGE(0x3600, 0x3600) AM_WRITE_LEGACY(mux_enable_w)      // mux enable
415   AM_RANGE(0x3600, 0x3600) AM_WRITE(mux_enable_w)      // mux enable
413416
414417   AM_RANGE(0x4000, 0xffff) AM_ROM                  // 48K ROM
415   AM_RANGE(0x8000, 0xFFFF) AM_WRITE_LEGACY(watchdog_w)      // kick watchdog
418   AM_RANGE(0x8000, 0xFFFF) AM_WRITE(watchdog_w)      // kick watchdog
416419
417420ADDRESS_MAP_END
418421
src/mame/drivers/ettrivia.c
r14845r14846
4747   UINT8 *m_fg_videoram;
4848   tilemap_t *m_bg_tilemap;
4949   tilemap_t *m_fg_tilemap;
50   DECLARE_WRITE8_MEMBER(ettrivia_fg_w);
51   DECLARE_WRITE8_MEMBER(ettrivia_bg_w);
52   DECLARE_WRITE8_MEMBER(ettrivia_control_w);
53   DECLARE_READ8_MEMBER(ettrivia_question_r);
54   DECLARE_WRITE8_MEMBER(b000_w);
55   DECLARE_READ8_MEMBER(b000_r);
56   DECLARE_WRITE8_MEMBER(b800_w);
5057};
5158
5259
53static WRITE8_HANDLER( ettrivia_fg_w )
60WRITE8_MEMBER(ettrivia_state::ettrivia_fg_w)
5461{
55   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
56   state->m_fg_videoram[offset] = data;
57   state->m_fg_tilemap->mark_tile_dirty(offset);
62   m_fg_videoram[offset] = data;
63   m_fg_tilemap->mark_tile_dirty(offset);
5864}
5965
60static WRITE8_HANDLER( ettrivia_bg_w )
66WRITE8_MEMBER(ettrivia_state::ettrivia_bg_w)
6167{
62   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
63   state->m_bg_videoram[offset] = data;
64   state->m_bg_tilemap->mark_tile_dirty(offset);
68   m_bg_videoram[offset] = data;
69   m_bg_tilemap->mark_tile_dirty(offset);
6570}
6671
67static WRITE8_HANDLER( ettrivia_control_w )
72WRITE8_MEMBER(ettrivia_state::ettrivia_control_w)
6873{
69   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
70   space->machine().tilemap().mark_all_dirty();
74   machine().tilemap().mark_all_dirty();
7175
72   state->m_palreg  = (data >> 1) & 3;
73   state->m_gfx_bank = (data >> 2) & 1;
76   m_palreg  = (data >> 1) & 3;
77   m_gfx_bank = (data >> 2) & 1;
7478
75   state->m_question_bank = (data >> 3) & 3;
79   m_question_bank = (data >> 3) & 3;
7680
77   coin_counter_w(space->machine(), 0, data & 0x80);
81   coin_counter_w(machine(), 0, data & 0x80);
7882
79   flip_screen_set(space->machine(), data & 1);
83   flip_screen_set(machine(), data & 1);
8084}
8185
82static READ8_HANDLER( ettrivia_question_r )
86READ8_MEMBER(ettrivia_state::ettrivia_question_r)
8387{
84   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
85   UINT8 *QUESTIONS = space->machine().region("user1")->base();
86   return QUESTIONS[offset + 0x10000 * state->m_question_bank];
88   UINT8 *QUESTIONS = machine().region("user1")->base();
89   return QUESTIONS[offset + 0x10000 * m_question_bank];
8790}
8891
89static WRITE8_HANDLER( b000_w )
92WRITE8_MEMBER(ettrivia_state::b000_w)
9093{
91   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
92   state->m_b000_val = data;
94   m_b000_val = data;
9395}
9496
95static READ8_HANDLER( b000_r )
97READ8_MEMBER(ettrivia_state::b000_r)
9698{
97   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
98   if(state->m_b800_prev)
99      return state->m_b000_ret;
99   if(m_b800_prev)
100      return m_b000_ret;
100101   else
101      return state->m_b000_val;
102      return m_b000_val;
102103}
103104
104static WRITE8_HANDLER( b800_w )
105WRITE8_MEMBER(ettrivia_state::b800_w)
105106{
106   ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
107107   switch(data)
108108   {
109109      /* special case to return the value written to 0xb000 */
110110      /* does it reset the chips too ? */
111111      case 0:   break;
112      case 0xc4: state->m_b000_ret = ay8910_r(space->machine().device("ay1"), 0);   break;
113      case 0x94: state->m_b000_ret = ay8910_r(space->machine().device("ay2"), 0);   break;
114      case 0x86: state->m_b000_ret = ay8910_r(space->machine().device("ay3"), 0);   break;
112      case 0xc4: m_b000_ret = ay8910_r(machine().device("ay1"), 0);   break;
113      case 0x94: m_b000_ret = ay8910_r(machine().device("ay2"), 0);   break;
114      case 0x86: m_b000_ret = ay8910_r(machine().device("ay3"), 0);   break;
115115
116116      case 0x80:
117         switch(state->m_b800_prev)
117         switch(m_b800_prev)
118118         {
119            case 0xe0: ay8910_address_w(space->machine().device("ay1"),0,state->m_b000_val);   break;
120            case 0x98: ay8910_address_w(space->machine().device("ay2"),0,state->m_b000_val);   break;
121            case 0x83: ay8910_address_w(space->machine().device("ay3"),0,state->m_b000_val);   break;
119            case 0xe0: ay8910_address_w(machine().device("ay1"),0,m_b000_val);   break;
120            case 0x98: ay8910_address_w(machine().device("ay2"),0,m_b000_val);   break;
121            case 0x83: ay8910_address_w(machine().device("ay3"),0,m_b000_val);   break;
122122
123            case 0xa0: ay8910_data_w(space->machine().device("ay1"),0,state->m_b000_val);   break;
124            case 0x88: ay8910_data_w(space->machine().device("ay2"),0,state->m_b000_val);   break;
125            case 0x81: ay8910_data_w(space->machine().device("ay3"),0,state->m_b000_val);   break;
123            case 0xa0: ay8910_data_w(machine().device("ay1"),0,m_b000_val);   break;
124            case 0x88: ay8910_data_w(machine().device("ay2"),0,m_b000_val);   break;
125            case 0x81: ay8910_data_w(machine().device("ay3"),0,m_b000_val);   break;
126126
127127         }
128128      break;
129129   }
130130
131   state->m_b800_prev = data;
131   m_b800_prev = data;
132132}
133133
134134static ADDRESS_MAP_START( cpu_map, AS_PROGRAM, 8, ettrivia_state )
135135   AM_RANGE(0x0000, 0x7fff) AM_ROM
136136   AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("nvram")
137   AM_RANGE(0x9000, 0x9000) AM_WRITE_LEGACY(ettrivia_control_w)
137   AM_RANGE(0x9000, 0x9000) AM_WRITE(ettrivia_control_w)
138138   AM_RANGE(0x9800, 0x9800) AM_WRITENOP
139139   AM_RANGE(0xa000, 0xa000) AM_WRITENOP
140   AM_RANGE(0xb000, 0xb000) AM_READ_LEGACY(b000_r) AM_WRITE_LEGACY(b000_w)
141   AM_RANGE(0xb800, 0xb800) AM_WRITE_LEGACY(b800_w)
142   AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE_LEGACY(ettrivia_fg_w) AM_BASE(m_fg_videoram)
143   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE_LEGACY(ettrivia_bg_w) AM_BASE(m_bg_videoram)
140   AM_RANGE(0xb000, 0xb000) AM_READ(b000_r) AM_WRITE(b000_w)
141   AM_RANGE(0xb800, 0xb800) AM_WRITE(b800_w)
142   AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(ettrivia_fg_w) AM_BASE(m_fg_videoram)
143   AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(ettrivia_bg_w) AM_BASE(m_bg_videoram)
144144ADDRESS_MAP_END
145145
146146static ADDRESS_MAP_START( io_map, AS_IO, 8, ettrivia_state )
147   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(ettrivia_question_r)
147   AM_RANGE(0x0000, 0xffff) AM_READ(ettrivia_question_r)
148148ADDRESS_MAP_END
149149
150150static INPUT_PORTS_START( ettrivia )
src/mame/drivers/jalmah.c
r14845r14846
157157   UINT8 m_oki_rom;
158158   UINT8 m_oki_bank;
159159   UINT8 m_oki_za;
160   DECLARE_WRITE16_MEMBER(sc0_vram_w);
161   DECLARE_WRITE16_MEMBER(sc3_vram_w);
162   DECLARE_WRITE16_MEMBER(sc1_vram_w);
163   DECLARE_WRITE16_MEMBER(sc2_vram_w);
164   DECLARE_WRITE16_MEMBER(jalmah_tilebank_w);
165   DECLARE_WRITE16_MEMBER(jalmah_scroll_w);
166   DECLARE_WRITE16_MEMBER(urashima_bank_w);
167   DECLARE_WRITE16_MEMBER(urashima_sc0_vram_w);
168   DECLARE_WRITE16_MEMBER(urashima_sc3_vram_w);
169   DECLARE_WRITE16_MEMBER(urashima_vregs_w);
170   DECLARE_WRITE16_MEMBER(urashima_dma_w);
171   DECLARE_WRITE16_MEMBER(jalmah_okirom_w);
172   DECLARE_WRITE16_MEMBER(jalmah_okibank_w);
173   DECLARE_WRITE16_MEMBER(jalmah_flip_screen_w);
174   DECLARE_READ16_MEMBER(urashima_mcu_r);
175   DECLARE_WRITE16_MEMBER(urashima_mcu_w);
176   DECLARE_READ16_MEMBER(daireika_mcu_r);
177   DECLARE_WRITE16_MEMBER(daireika_mcu_w);
178   DECLARE_READ16_MEMBER(mjzoomin_mcu_r);
179   DECLARE_WRITE16_MEMBER(mjzoomin_mcu_w);
180   DECLARE_READ16_MEMBER(kakumei_mcu_r);
181   DECLARE_READ16_MEMBER(suchipi_mcu_r);
160182};
161183
162184
r14845r14846
472494   return 0;
473495}
474496
475static WRITE16_HANDLER( sc0_vram_w )
497WRITE16_MEMBER(jalmah_state::sc0_vram_w)
476498{
477   jalmah_state *state = space->machine().driver_data<jalmah_state>();
478   COMBINE_DATA(&state->m_sc0_vram[offset]);
499   COMBINE_DATA(&m_sc0_vram[offset]);
479500   /*2048x256 tilemap*/
480   state->m_sc0_tilemap_0->mark_tile_dirty(offset);
501   m_sc0_tilemap_0->mark_tile_dirty(offset);
481502   /*1024x512 tilemap*/
482   state->m_sc0_tilemap_1->mark_tile_dirty(offset);
503   m_sc0_tilemap_1->mark_tile_dirty(offset);
483504   /*512x1024 tilemap*/
484   state->m_sc0_tilemap_2->mark_tile_dirty(offset);
505   m_sc0_tilemap_2->mark_tile_dirty(offset);
485506   /*256x2048 tilemap*/
486   state->m_sc0_tilemap_3->mark_tile_dirty(offset);
507   m_sc0_tilemap_3->mark_tile_dirty(offset);
487508}
488509
489static WRITE16_HANDLER( sc3_vram_w )
510WRITE16_MEMBER(jalmah_state::sc3_vram_w)
490511{
491   jalmah_state *state = space->machine().driver_data<jalmah_state>();
492   COMBINE_DATA(&state->m_sc3_vram[offset]);
512   COMBINE_DATA(&m_sc3_vram[offset]);
493513   /*2048x256 tilemap*/
494   state->m_sc3_tilemap_0->mark_tile_dirty(offset);
514   m_sc3_tilemap_0->mark_tile_dirty(offset);
495515   /*1024x512 tilemap*/
496   state->m_sc3_tilemap_2->mark_tile_dirty(offset);
516   m_sc3_tilemap_2->mark_tile_dirty(offset);
497517   /*512x1024 tilemap*/
498   state->m_sc3_tilemap_3->mark_tile_dirty(offset);
518   m_sc3_tilemap_3->mark_tile_dirty(offset);
499519}
500520
501static WRITE16_HANDLER( sc1_vram_w )
521WRITE16_MEMBER(jalmah_state::sc1_vram_w)
502522{
503   jalmah_state *state = space->machine().driver_data<jalmah_state>();
504   COMBINE_DATA(&state->m_sc1_vram[offset]);
523   COMBINE_DATA(&m_sc1_vram[offset]);
505524   /*2048x256 tilemap*/
506   state->m_sc1_tilemap_0->mark_tile_dirty(offset);
525   m_sc1_tilemap_0->mark_tile_dirty(offset);
507526   /*1024x512 tilemap*/
508   state->m_sc1_tilemap_1->mark_tile_dirty(offset);
527   m_sc1_tilemap_1->mark_tile_dirty(offset);
509528   /*512x1024 tilemap*/
510   state->m_sc1_tilemap_2->mark_tile_dirty(offset);
529   m_sc1_tilemap_2->mark_tile_dirty(offset);
511530   /*256x2048 tilemap*/
512   state->m_sc1_tilemap_3->mark_tile_dirty(offset);
531   m_sc1_tilemap_3->mark_tile_dirty(offset);
513532}
514533
515static WRITE16_HANDLER( sc2_vram_w )
534WRITE16_MEMBER(jalmah_state::sc2_vram_w)
516535{
517   jalmah_state *state = space->machine().driver_data<jalmah_state>();
518   COMBINE_DATA(&state->m_sc2_vram[offset]);
536   COMBINE_DATA(&m_sc2_vram[offset]);
519537   /*2048x256 tilemap*/
520   state->m_sc2_tilemap_0->mark_tile_dirty(offset);
538   m_sc2_tilemap_0->mark_tile_dirty(offset);
521539   /*1024x512 tilemap*/
522   state->m_sc2_tilemap_1->mark_tile_dirty(offset);
540   m_sc2_tilemap_1->mark_tile_dirty(offset);
523541   /*512x1024 tilemap*/
524   state->m_sc2_tilemap_2->mark_tile_dirty(offset);
542   m_sc2_tilemap_2->mark_tile_dirty(offset);
525543   /*256x2048 tilemap*/
526   state->m_sc2_tilemap_3->mark_tile_dirty(offset);
544   m_sc2_tilemap_3->mark_tile_dirty(offset);
527545}
528546
529static WRITE16_HANDLER( jalmah_tilebank_w )
547WRITE16_MEMBER(jalmah_state::jalmah_tilebank_w)
530548{
531   jalmah_state *state = space->machine().driver_data<jalmah_state>();
532549   /*
533550     xxxx ---- fg bank (used by suchipi)
534551     ---- xxxx Priority number (trusted,see mjzoomin)
r14845r14846
536553   //popmessage("Write to tilebank %02x",data);
537554   if (ACCESSING_BITS_0_7)
538555   {
539      if (state->m_sc0bank != ((data & 0xf0) >> 4))
556      if (m_sc0bank != ((data & 0xf0) >> 4))
540557      {
541         state->m_sc0bank = (data & 0xf0) >> 4;
542         state->m_sc0_tilemap_0->mark_all_dirty();
543         state->m_sc0_tilemap_1->mark_all_dirty();
544         state->m_sc0_tilemap_2->mark_all_dirty();
545         state->m_sc0_tilemap_3->mark_all_dirty();
558         m_sc0bank = (data & 0xf0) >> 4;
559         m_sc0_tilemap_0->mark_all_dirty();
560         m_sc0_tilemap_1->mark_all_dirty();
561         m_sc0_tilemap_2->mark_all_dirty();
562         m_sc0_tilemap_3->mark_all_dirty();
546563      }
547      if (state->m_pri != (data & 0x0f))
548         state->m_pri = data & 0x0f;
564      if (m_pri != (data & 0x0f))
565         m_pri = data & 0x0f;
549566   }
550567}
551568
552static WRITE16_HANDLER( jalmah_scroll_w )
569WRITE16_MEMBER(jalmah_state::jalmah_scroll_w)
553570{
554   jalmah_state *state = space->machine().driver_data<jalmah_state>();
555   UINT16 *jm_scrollram = state->m_jm_scrollram;
556   UINT16 *jm_vregs = state->m_jm_vregs;
571   UINT16 *jm_scrollram = m_jm_scrollram;
572   UINT16 *jm_vregs = m_jm_vregs;
557573   //logerror("[%04x]<-%04x\n",(offset+0x10)*2,data);
558574   switch(offset+(0x10))
559575   {
r14845r14846
579595   }
580596}
581597
582static WRITE16_HANDLER( urashima_bank_w )
598WRITE16_MEMBER(jalmah_state::urashima_bank_w)
583599{
584   jalmah_state *state = space->machine().driver_data<jalmah_state>();
585600   if (ACCESSING_BITS_0_7)
586601   {
587      if (state->m_sc0bank != (data & 0x0f))
602      if (m_sc0bank != (data & 0x0f))
588603      {
589         state->m_sc0bank = (data & 0x0f);
590         state->m_sc0_tilemap_0->mark_all_dirty();
591         //state->m_sc0_tilemap_2->mark_all_dirty();
592         //state->m_sc0_tilemap_3->mark_all_dirty();
604         m_sc0bank = (data & 0x0f);
605         m_sc0_tilemap_0->mark_all_dirty();
606         //m_sc0_tilemap_2->mark_all_dirty();
607         //m_sc0_tilemap_3->mark_all_dirty();
593608      }
594609   }
595610}
596611
597static WRITE16_HANDLER( urashima_sc0_vram_w )
612WRITE16_MEMBER(jalmah_state::urashima_sc0_vram_w)
598613{
599   jalmah_state *state = space->machine().driver_data<jalmah_state>();
600   COMBINE_DATA(&state->m_sc0_vram[offset]);
601   state->m_sc0_tilemap_0->mark_tile_dirty(offset);
614   COMBINE_DATA(&m_sc0_vram[offset]);
615   m_sc0_tilemap_0->mark_tile_dirty(offset);
602616}
603617
604static WRITE16_HANDLER( urashima_sc3_vram_w )
618WRITE16_MEMBER(jalmah_state::urashima_sc3_vram_w)
605619{
606   jalmah_state *state = space->machine().driver_data<jalmah_state>();
607   COMBINE_DATA(&state->m_sc3_vram[offset]);
608   state->m_sc3_tilemap_0->mark_tile_dirty(offset);
620   COMBINE_DATA(&m_sc3_vram[offset]);
621   m_sc3_tilemap_0->mark_tile_dirty(offset);
609622}
610623
611624/*Urashima Mahjong uses a bigger (and mostly unused/wasted) video register ram.*/
612static WRITE16_HANDLER( urashima_vregs_w )
625WRITE16_MEMBER(jalmah_state::urashima_vregs_w)
613626{
614   jalmah_state *state = space->machine().driver_data<jalmah_state>();
615   UINT16 *jm_scrollram = state->m_jm_scrollram;
616   UINT16 *jm_vregs = state->m_jm_vregs;
627   UINT16 *jm_scrollram = m_jm_scrollram;
628   UINT16 *jm_vregs = m_jm_vregs;
617629   //logerror("[%04x]<-%04x\n",(offset)*2,data);
618630   switch(offset)
619631   {
r14845r14846
685697/*Funky "DMA" / protection thing*/
686698/*---- -x-- "DMA" execute.*/
687699/*---- ---x used too very often,I don't have any clue of what it is,it might just be the source or the destination address.*/
688static WRITE16_HANDLER( urashima_dma_w )
700WRITE16_MEMBER(jalmah_state::urashima_dma_w)
689701{
690702   if(data & 4)
691703   {
692704      UINT32 i;
693705      for(i = 0; i < 0x200; i += 2)
694         space->write_word(0x88200 + i, space->read_word(0x88400 + i));
706         space.write_word(0x88200 + i, space.read_word(0x88400 + i));
695707   }
696708}
697709
r14845r14846
928940******************************************************************************************/
929941
930942
931static WRITE16_HANDLER( jalmah_okirom_w )
943WRITE16_MEMBER(jalmah_state::jalmah_okirom_w)
932944{
933   jalmah_state *state = space->machine().driver_data<jalmah_state>();
934945   if(ACCESSING_BITS_0_7)
935946   {
936      UINT8 *oki = space->machine().region("oki")->base();
947      UINT8 *oki = machine().region("oki")->base();
937948
938      state->m_oki_rom = data & 1;
949      m_oki_rom = data & 1;
939950
940951      /* ZA appears to be related to the banking, or maybe kakumei2 uses PAL shuffling and this is for something else? */
941      state->m_oki_za = (data & 2) ? 1 : 0;
952      m_oki_za = (data & 2) ? 1 : 0;
942953
943      memcpy(&oki[0x20000], &oki[(state->m_oki_rom * 0x80000) + ((state->m_oki_bank+state->m_oki_za) * 0x20000) + 0x40000], 0x20000);
954      memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
944955   }
945956
946   //popmessage("PC=%06x %02x %02x %02x %08x",cpu_get_pc(&space->device()),state->m_oki_rom,state->m_oki_za,state->m_oki_bank,(state->m_oki_rom * 0x80000) + ((state->m_oki_bank+state->m_oki_za) * 0x20000) + 0x40000);
957   //popmessage("PC=%06x %02x %02x %02x %08x",cpu_get_pc(&space.device()),m_oki_rom,m_oki_za,m_oki_bank,(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000);
947958}
948959
949static WRITE16_HANDLER( jalmah_okibank_w )
960WRITE16_MEMBER(jalmah_state::jalmah_okibank_w)
950961{
951   jalmah_state *state = space->machine().driver_data<jalmah_state>();
952962   if(ACCESSING_BITS_0_7)
953963   {
954      UINT8 *oki = space->machine().region("oki")->base();
964      UINT8 *oki = machine().region("oki")->base();
955965
956      state->m_oki_bank = data & 3;
966      m_oki_bank = data & 3;
957967
958      memcpy(&oki[0x20000], &oki[(state->m_oki_rom * 0x80000) + ((state->m_oki_bank+state->m_oki_za) * 0x20000) + 0x40000], 0x20000);
968      memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
959969   }
960970
961   //popmessage("PC=%06x %02x %02x %02x %08x",cpu_get_pc(&space->device()),state->m_oki_rom,state->m_oki_za,state->m_oki_bank,(state->m_oki_rom * 0x80000) + ((state->m_oki_bank+state->m_oki_za) * 0x20000) + 0x40000);
971   //popmessage("PC=%06x %02x %02x %02x %08x",cpu_get_pc(&space.device()),m_oki_rom,m_oki_za,m_oki_bank,(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000);
962972}
963973
964static WRITE16_HANDLER( jalmah_flip_screen_w )
974WRITE16_MEMBER(jalmah_state::jalmah_flip_screen_w)
965975{
966976   /*---- ----x flip screen*/
967   flip_screen_set(space->machine(), data & 1);
977   flip_screen_set(machine(), data & 1);
968978
969979//  popmessage("%04x",data);
970980}
r14845r14846
974984   AM_RANGE(0x080000, 0x080001) AM_READ_PORT("SYSTEM")
975985   AM_RANGE(0x080002, 0x080003) AM_READ_PORT("DSW")
976986   //       0x080004, 0x080005  MCU read,different for each game
977   AM_RANGE(0x080010, 0x080011) AM_WRITE_LEGACY(jalmah_flip_screen_w)
987   AM_RANGE(0x080010, 0x080011) AM_WRITE(jalmah_flip_screen_w)
978988   //       0x080012, 0x080013  MCU write related,same for each game
979989   //       0x080014, 0x080015  MCU write related,same for each game
980/**/AM_RANGE(0x080016, 0x080017) AM_RAM_WRITE_LEGACY(jalmah_tilebank_w)
981   AM_RANGE(0x080018, 0x080019) AM_WRITE_LEGACY(jalmah_okibank_w)
982   AM_RANGE(0x08001a, 0x08001b) AM_WRITE_LEGACY(jalmah_okirom_w)
983/**/AM_RANGE(0x080020, 0x08003f) AM_RAM_WRITE_LEGACY(jalmah_scroll_w)
990/**/AM_RANGE(0x080016, 0x080017) AM_RAM_WRITE(jalmah_tilebank_w)
991   AM_RANGE(0x080018, 0x080019) AM_WRITE(jalmah_okibank_w)
992   AM_RANGE(0x08001a, 0x08001b) AM_WRITE(jalmah_okirom_w)
993/**/AM_RANGE(0x080020, 0x08003f) AM_RAM_WRITE(jalmah_scroll_w)
984994   AM_RANGE(0x080040, 0x080041) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
985995   //       0x084000, 0x084001  ?
986996   AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE_LEGACY(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram) /* Palette RAM */
987   AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE_LEGACY(sc0_vram_w) AM_BASE(m_sc0_vram)
988   AM_RANGE(0x094000, 0x097fff) AM_RAM_WRITE_LEGACY(sc1_vram_w) AM_BASE(m_sc1_vram)
989   AM_RANGE(0x098000, 0x09bfff) AM_RAM_WRITE_LEGACY(sc2_vram_w) AM_BASE(m_sc2_vram)
990   AM_RANGE(0x09c000, 0x09ffff) AM_RAM_WRITE_LEGACY(sc3_vram_w) AM_BASE(m_sc3_vram)
997   AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(sc0_vram_w) AM_BASE(m_sc0_vram)
998   AM_RANGE(0x094000, 0x097fff) AM_RAM_WRITE(sc1_vram_w) AM_BASE(m_sc1_vram)
999   AM_RANGE(0x098000, 0x09bfff) AM_RAM_WRITE(sc2_vram_w) AM_BASE(m_sc2_vram)
1000   AM_RANGE(0x09c000, 0x09ffff) AM_RAM_WRITE(sc3_vram_w) AM_BASE(m_sc3_vram)
9911001   AM_RANGE(0x0f0000, 0x0f0fff) AM_RAM AM_BASE(m_jm_shared_ram)/*shared with MCU*/
9921002   AM_RANGE(0x0f1000, 0x0fffff) AM_RAM /*Work Ram*/
9931003   AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_BASE(m_jm_mcu_code)/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/
r14845r14846
9981008   AM_RANGE(0x080000, 0x080001) AM_READ_PORT("SYSTEM")
9991009   AM_RANGE(0x080002, 0x080003) AM_READ_PORT("DSW")
10001010   //       0x080004, 0x080005  MCU read,different for each game
1001   AM_RANGE(0x080010, 0x080011) AM_WRITE_LEGACY(jalmah_flip_screen_w)
1011   AM_RANGE(0x080010, 0x080011) AM_WRITE(jalmah_flip_screen_w)
10021012   //       0x080012, 0x080013  MCU write related,same for each game
10031013   //       0x080014, 0x080015  MCU write related,same for each game
1004/**/AM_RANGE(0x080016, 0x080017) AM_RAM_WRITE_LEGACY(urashima_dma_w)
1005   AM_RANGE(0x080018, 0x080019) AM_WRITE_LEGACY(jalmah_okibank_w)
1006   AM_RANGE(0x08001a, 0x08001b) AM_WRITE_LEGACY(jalmah_okirom_w)
1007/**/AM_RANGE(0x08001c, 0x08001d) AM_RAM_WRITE_LEGACY(urashima_bank_w)
1014/**/AM_RANGE(0x080016, 0x080017) AM_RAM_WRITE(urashima_dma_w)
1015   AM_RANGE(0x080018, 0x080019) AM_WRITE(jalmah_okibank_w)
1016   AM_RANGE(0x08001a, 0x08001b) AM_WRITE(jalmah_okirom_w)
1017/**/AM_RANGE(0x08001c, 0x08001d) AM_RAM_WRITE(urashima_bank_w)
10081018   AM_RANGE(0x080040, 0x080041) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
10091019   //       0x084000, 0x084001  ?
10101020   AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE_LEGACY(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram) /* Palette RAM */
1011   AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE_LEGACY(urashima_sc0_vram_w) AM_BASE(m_sc0_vram)
1012   AM_RANGE(0x094000, 0x097fff) AM_RAM_WRITE_LEGACY(urashima_sc0_vram_w)
1013   AM_RANGE(0x098000, 0x09bfff) AM_RAM_WRITE_LEGACY(urashima_sc0_vram_w)
1021   AM_RANGE(0x090000, 0x093fff) AM_RAM_WRITE(urashima_sc0_vram_w) AM_BASE(m_sc0_vram)
1022   AM_RANGE(0x094000, 0x097fff) AM_RAM_WRITE(urashima_sc0_vram_w)
1023   AM_RANGE(0x098000, 0x09bfff) AM_RAM_WRITE(urashima_sc0_vram_w)
10141024//  AM_RANGE(0x094000, 0x097fff) AM_RAM_WRITE_LEGACY(urashima_sc1_vram_w) AM_BASE(m_sc1_vram)/*unused*/
10151025//  AM_RANGE(0x098000, 0x09bfff) AM_RAM_WRITE_LEGACY(urashima_sc2_vram_w) AM_BASE(m_sc2_vram)/*unused*/
10161026   /*$9c000-$9cfff Video Registers*/
1017/**/AM_RANGE(0x09c000, 0x09dfff) AM_WRITE_LEGACY(urashima_vregs_w)
1027/**/AM_RANGE(0x09c000, 0x09dfff) AM_WRITE(urashima_vregs_w)
10181028/**///AM_RANGE(0x09c480, 0x09c49f) AM_RAM_WRITE_LEGACY(urashima_sc2vregs_w)
1019   AM_RANGE(0x09e000, 0x0a1fff) AM_RAM_WRITE_LEGACY(urashima_sc3_vram_w) AM_BASE(m_sc3_vram)
1029   AM_RANGE(0x09e000, 0x0a1fff) AM_RAM_WRITE(urashima_sc3_vram_w) AM_BASE(m_sc3_vram)
10201030   AM_RANGE(0x0f0000, 0x0f0fff) AM_RAM AM_BASE(m_jm_shared_ram)/*shared with MCU*/
10211031   AM_RANGE(0x0f1000, 0x0fffff) AM_RAM /*Work Ram*/
10221032   AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_BASE(m_jm_mcu_code)/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/
r14845r14846
17161726
17171727******************************************************************************************/
17181728
1719static READ16_HANDLER( urashima_mcu_r )
1729READ16_MEMBER(jalmah_state::urashima_mcu_r)
17201730{
1721   jalmah_state *state = space->machine().driver_data<jalmah_state>();
17221731   static const int resp[] = {   0x99, 0xd8, 0x00,
17231732                     0x2a, 0x6a, 0x00,
17241733                     0x9c, 0xd8, 0x00,
r14845r14846
17311740                     0x21, 0x61, 0x00 };
17321741   int res;
17331742
1734   res = resp[state->m_respcount++];
1735   if (state->m_respcount >= sizeof(resp)/sizeof(resp[0])) state->m_respcount = 0;
1743   res = resp[m_respcount++];
1744   if (m_respcount >= sizeof(resp)/sizeof(resp[0])) m_respcount = 0;
17361745
1737//  logerror("%04x: mcu_r %02x\n",cpu_get_pc(&space->device()),res);
1746//  logerror("%04x: mcu_r %02x\n",cpu_get_pc(&space.device()),res);
17381747
17391748   return res;
17401749}
r14845r14846
17421751/*
17431752data value is REQ under mjzoomin video test menu.It is related to the MCU?
17441753*/
1745static WRITE16_HANDLER( urashima_mcu_w )
1754WRITE16_MEMBER(jalmah_state::urashima_mcu_w)
17461755{
1747   jalmah_state *state = space->machine().driver_data<jalmah_state>();
1748   UINT16 *jm_shared_ram = state->m_jm_shared_ram;
1749   UINT16 *jm_mcu_code = state->m_jm_mcu_code;
1756   UINT16 *jm_shared_ram = m_jm_shared_ram;
1757   UINT16 *jm_mcu_code = m_jm_mcu_code;
17501758   if(ACCESSING_BITS_0_7 && data)
17511759   {
17521760      /*******************************************************
r14845r14846
19361944   }
19371945}
19381946
1939static READ16_HANDLER( daireika_mcu_r )
1947READ16_MEMBER(jalmah_state::daireika_mcu_r)
19401948{
1941   jalmah_state *state = space->machine().driver_data<jalmah_state>();
19421949   static const int resp[] = {   0x99, 0xd8, 0x00,
19431950                     0x2a, 0x6a, 0x00,
19441951                     0x9c, 0xd8, 0x00,
r14845r14846
19511958                     0x21, 0x61, 0x00 };
19521959   int res;
19531960
1954   res = resp[state->m_respcount++];
1955   if (state->m_respcount >= sizeof(resp)/sizeof(resp[0])) state->m_respcount = 0;
1961   res = resp[m_respcount++];
1962   if (m_respcount >= sizeof(resp)/sizeof(resp[0])) m_respcount = 0;
19561963
1957//  logerror("%04x: mcu_r %02x\n",cpu_get_pc(&space->device()),res);
1964//  logerror("%04x: mcu_r %02x\n",cpu_get_pc(&space.device()),res);
19581965
19591966   return res;
19601967}
r14845r14846
19651972static const UINT16 dai_mcu_code[0x11] = { 0x33c5, 0x0010, 0x07fe, 0x3a39,0x000f,0x000c,0xda86,0x0245,
19661973                                  0x003f, 0x33c5, 0x000f, 0x000c,0x3a39,0x0010,0x07fe,0x4e75    };
19671974
1968static WRITE16_HANDLER( daireika_mcu_w )
1975WRITE16_MEMBER(jalmah_state::daireika_mcu_w)
19691976{
1970   jalmah_state *state = space->machine().driver_data<jalmah_state>();
1971   UINT16 *jm_shared_ram = state->m_jm_shared_ram;
1972   UINT16 *jm_mcu_code = state->m_jm_mcu_code;
1977   UINT16 *jm_shared_ram = m_jm_shared_ram;
1978   UINT16 *jm_mcu_code = m_jm_mcu_code;
19731979   UINT16 i;
19741980
19751981   if(ACCESSING_BITS_0_7 && data)
r14845r14846
21132119      jm_shared_ram[0x0128/2] = 0x0010;
21142120      jm_shared_ram[0x012a/2] = 0x8980;
21152121
2116      //state->m_pri $f0590
2122      //m_pri $f0590
21172123      jm_mcu_code[0x8980/2] = 0x33fc;
21182124      jm_mcu_code[0x8982/2] = 0x0006;
21192125      jm_mcu_code[0x8984/2] = 0x000f;
2120      jm_mcu_code[0x8986/2] = 0x0590; //move.w #$6,$f0590 (state->m_pri n)
2126      jm_mcu_code[0x8986/2] = 0x0590; //move.w #$6,$f0590 (m_pri n)
21212127      jm_mcu_code[0x8988/2] = 0x4df9;
21222128      jm_mcu_code[0x898a/2] = 0x0009;
21232129      jm_mcu_code[0x898c/2] = 0xc000; //lea.w #9c000,A6
r14845r14846
22182224   }
22192225}
22202226
2221static READ16_HANDLER( mjzoomin_mcu_r )
2227READ16_MEMBER(jalmah_state::mjzoomin_mcu_r)
22222228{
2223   jalmah_state *state = space->machine().driver_data<jalmah_state>();
22242229   static const int resp[] = {   0x9c, 0xd8, 0x00,
22252230                     0x2a, 0x6a, 0x00,
22262231                     0x99, 0xd8, 0x00,
r14845r14846
22322237                     0x21, 0x61, 0x00 };
22332238   int res;
22342239
2235   res = resp[state->m_respcount++];
2236   if (state->m_respcount >= sizeof(resp)/sizeof(resp[0])) state->m_respcount = 0;
2240   res = resp[m_respcount++];
2241   if (m_respcount >= sizeof(resp)/sizeof(resp[0])) m_respcount = 0;
22372242
2238//  logerror("%04x: mcu_r %02x\n",cpu_get_pc(&space->device()),res);
2243//  logerror("%04x: mcu_r %02x\n",cpu_get_pc(&space.device()),res);
22392244
22402245   return res;
22412246}
r14845r14846
22432248/*
22442249data value is REQ under mjzoomin video test menu.It is related to the MCU?
22452250*/
2246static WRITE16_HANDLER( mjzoomin_mcu_w )
2251WRITE16_MEMBER(jalmah_state::mjzoomin_mcu_w)
22472252{
2248   jalmah_state *state = space->machine().driver_data<jalmah_state>();
2249   UINT16 *jm_shared_ram = state->m_jm_shared_ram;
2250   UINT16 *jm_mcu_code = state->m_jm_mcu_code;
2253   UINT16 *jm_shared_ram = m_jm_shared_ram;
2254   UINT16 *jm_mcu_code = m_jm_mcu_code;
22512255   if(ACCESSING_BITS_0_7 && data)
22522256   {
22532257      /******************************************************
r14845r14846
23572361   }
23582362}
23592363
2360static READ16_HANDLER( kakumei_mcu_r )
2364READ16_MEMBER(jalmah_state::kakumei_mcu_r)
23612365{
2362   jalmah_state *state = space->machine().driver_data<jalmah_state>();
23632366   static const int resp[] = {   0x8a, 0xd8, 0x00,
23642367                     0x3c, 0x7c, 0x00,
23652368                     0x99, 0xd8, 0x00,
r14845r14846
23712374                     0x3e, 0x7e, 0x00 };
23722375   int res;
23732376
2374   res = resp[state->m_respcount++];
2375   if (state->m_respcount >= sizeof(resp)/sizeof(resp[0])) state->m_respcount = 0;
2377   res = resp[m_respcount++];
2378   if (m_respcount >= sizeof(resp)/sizeof(resp[0])) m_respcount = 0;
23762379
2377//  popmessage("%04x: mcu_r %02x",cpu_get_pc(&space->device()),res);
2380//  popmessage("%04x: mcu_r %02x",cpu_get_pc(&space.device()),res);
23782381
23792382   return res;
23802383}
23812384
2382static READ16_HANDLER( suchipi_mcu_r )
2385READ16_MEMBER(jalmah_state::suchipi_mcu_r)
23832386{
2384   jalmah_state *state = space->machine().driver_data<jalmah_state>();
23852387   static const int resp[] = {   0x8a, 0xd8, 0x00,
23862388                     0x3c, 0x7c, 0x00,
23872389                     0x99, 0xd8, 0x00,
r14845r14846
23932395                     0x3e, 0x7e, 0x00 };
23942396   int res;
23952397
2396   res = resp[state->m_respcount++];
2397   if (state->m_respcount >= sizeof(resp)/sizeof(resp[0])) state->m_respcount = 0;
2398   res = resp[m_respcount++];
2399   if (m_respcount >= sizeof(resp)/sizeof(resp[0])) m_respcount = 0;
23982400
2399//  popmessage("%04x: mcu_r %02x",cpu_get_pc(&space->device()),res);
2401//  popmessage("%04x: mcu_r %02x",cpu_get_pc(&space.device()),res);
24002402
24012403   return res;
24022404}
r14845r14846
24042406static DRIVER_INIT( urashima )
24052407{
24062408   jalmah_state *state = machine.driver_data<jalmah_state>();
2407   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80004, 0x80005, FUNC(urashima_mcu_r) );
2408   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x80012, 0x80013, FUNC(urashima_mcu_w) );
2409   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x80004, 0x80005, read16_delegate(FUNC(jalmah_state::urashima_mcu_r), state));
2410   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x80012, 0x80013, write16_delegate(FUNC(jalmah_state::urashima_mcu_w), state));
24092411
24102412   state->m_mcu_prg = 0x12;
24112413}
r14845r14846
24132415static DRIVER_INIT( daireika )
24142416{
24152417   jalmah_state *state = machine.driver_data<jalmah_state>();
2416   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80004, 0x80005, FUNC(daireika_mcu_r) );
2417   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x80012, 0x80013, FUNC(daireika_mcu_w) );
2418   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x80004, 0x80005, read16_delegate(FUNC(jalmah_state::daireika_mcu_r), state));
2419   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x80012, 0x80013, write16_delegate(FUNC(jalmah_state::daireika_mcu_w), state));
24182420
24192421   state->m_mcu_prg = 0x11;
24202422}
r14845r14846
24222424static DRIVER_INIT( mjzoomin )
24232425{
24242426   jalmah_state *state = machine.driver_data<jalmah_state>();
2425   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80004, 0x80005, FUNC(mjzoomin_mcu_r) );
2426   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x80012, 0x80013, FUNC(mjzoomin_mcu_w) );
2427   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x80004, 0x80005, read16_delegate(FUNC(jalmah_state::mjzoomin_mcu_r), state));
2428   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x80012, 0x80013, write16_delegate(FUNC(jalmah_state::mjzoomin_mcu_w), state));
24272429
24282430   state->m_mcu_prg = 0x13;
24292431}
r14845r14846
24312433static DRIVER_INIT( kakumei )
24322434{
24332435   jalmah_state *state = machine.driver_data<jalmah_state>();
2434   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80004, 0x80005, FUNC(kakumei_mcu_r) );
2435
2436   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x80004, 0x80005, read16_delegate(FUNC(jalmah_state::kakumei_mcu_r), state));
24362437   state->m_mcu_prg = 0x21;
24372438}
24382439
24392440static DRIVER_INIT( kakumei2 )
24402441{
24412442   jalmah_state *state = machine.driver_data<jalmah_state>();
2442   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80004, 0x80005, FUNC(kakumei_mcu_r) );
2443   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x80004, 0x80005, read16_delegate(FUNC(jalmah_state::kakumei_mcu_r), state));
24432444
24442445   state->m_mcu_prg = 0x22;
24452446}
r14845r14846
24472448static DRIVER_INIT( suchipi )
24482449{
24492450   jalmah_state *state = machine.driver_data<jalmah_state>();
2450   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x80004, 0x80005, FUNC(suchipi_mcu_r) );
2451   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x80004, 0x80005, read16_delegate(FUNC(jalmah_state::suchipi_mcu_r), state));
24512452
24522453   state->m_mcu_prg = 0x23;
24532454}
src/mame/drivers/supdrapo.c
r14845r14846
7575   UINT8 *m_col_line;
7676   UINT8 *m_videoram;
7777   UINT8 m_wdog;
78   DECLARE_READ8_MEMBER(sdpoker_rng_r);
79   DECLARE_WRITE8_MEMBER(wdog8000_w);
80   DECLARE_WRITE8_MEMBER(debug8004_w);
81   DECLARE_WRITE8_MEMBER(debug7c00_w);
82   DECLARE_WRITE8_MEMBER(coinin_w);
83   DECLARE_WRITE8_MEMBER(payout_w);
7884};
7985
8086
r14845r14846
147153                            R/W Handlers
148154**********************************************************************/
149155
150static READ8_HANDLER( sdpoker_rng_r )
156READ8_MEMBER(supdrapo_state::sdpoker_rng_r)
151157{
152   return space->machine().rand();
158   return machine().rand();
153159}
154160
155static WRITE8_HANDLER( wdog8000_w )
161WRITE8_MEMBER(supdrapo_state::wdog8000_w)
156162{
157163/*  Kind of state watchdog alternating 0x00 & 0x01 writes.
158164    Used when exit the test mode (writes 2 consecutive 0's).
r14845r14846
179185  Watchdog: 00
180186
181187*/
182   supdrapo_state *state = space->machine().driver_data<supdrapo_state>();
183188
184   if (state->m_wdog == data)
189
190   if (m_wdog == data)
185191   {
186192      watchdog_reset_w(space, 0, 0);   /* Reset */
187193   }
188194
189   state->m_wdog = data;
195   m_wdog = data;
190196//  logerror("Watchdog: %02X\n", data);
191197}
192198
193199
194static WRITE8_HANDLER( debug8004_w )
200WRITE8_MEMBER(supdrapo_state::debug8004_w)
195201{
196202/*  Writes 0x00 each time the machine is initialized */
197203
r14845r14846
199205//  popmessage("written : %02X", data);
200206}
201207
202static WRITE8_HANDLER( debug7c00_w )
208WRITE8_MEMBER(supdrapo_state::debug7c00_w)
203209{
204210/*  This one write 0's constantly when the input test mode is running */
205211   logerror("debug7c00: %02X\n", data);
r14845r14846
210216                         Coin I/O Counters
211217**********************************************************************/
212218
213static WRITE8_HANDLER( coinin_w )
219WRITE8_MEMBER(supdrapo_state::coinin_w)
214220{
215   coin_counter_w(space->machine(), 0, data & 0x01);   /* Coin In */
221   coin_counter_w(machine(), 0, data & 0x01);   /* Coin In */
216222}
217223
218static WRITE8_HANDLER( payout_w )
224WRITE8_MEMBER(supdrapo_state::payout_w)
219225{
220   coin_counter_w(space->machine(), 1, data & 0x01);   /* Payout */
226   coin_counter_w(machine(), 1, data & 0x01);   /* Payout */
221227}
222228
223229
r14845r14846
250256   AM_RANGE(0x6800, 0x6bff) AM_RAM AM_BASE(m_videoram)
251257   AM_RANGE(0x6c00, 0x6fff) AM_RAM AM_BASE(m_char_bank)
252258   AM_RANGE(0x7000, 0x7bff) AM_RAM //$7600 seems watchdog
253   AM_RANGE(0x7c00, 0x7c00) AM_WRITE_LEGACY(debug7c00_w)
254   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN4") AM_WRITE_LEGACY(wdog8000_w)
259   AM_RANGE(0x7c00, 0x7c00) AM_WRITE(debug7c00_w)
260   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN4") AM_WRITE(wdog8000_w)
255261   AM_RANGE(0x8001, 0x8001) AM_READ_PORT("IN0")
256   AM_RANGE(0x8002, 0x8002) AM_READ_PORT("IN1") AM_WRITE_LEGACY(payout_w)
257   AM_RANGE(0x8003, 0x8003) AM_READ_PORT("IN2") AM_WRITE_LEGACY(coinin_w)
258   AM_RANGE(0x8004, 0x8004) AM_READ_PORT("IN3") AM_WRITE_LEGACY(debug8004_w)
262   AM_RANGE(0x8002, 0x8002) AM_READ_PORT("IN1") AM_WRITE(payout_w)
263   AM_RANGE(0x8003, 0x8003) AM_READ_PORT("IN2") AM_WRITE(coinin_w)
264   AM_RANGE(0x8004, 0x8004) AM_READ_PORT("IN3") AM_WRITE(debug8004_w)
259265   AM_RANGE(0x8005, 0x8005) AM_READ_PORT("SW1")
260266   AM_RANGE(0x8006, 0x8006) AM_READ_PORT("SW2")
261267   AM_RANGE(0x9000, 0x90ff) AM_RAM AM_SHARE("nvram")
262   AM_RANGE(0x9400, 0x9400) AM_READ_LEGACY(sdpoker_rng_r)
268   AM_RANGE(0x9400, 0x9400) AM_READ(sdpoker_rng_r)
263269   AM_RANGE(0x9800, 0x9801) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
264270ADDRESS_MAP_END
265271
src/mame/drivers/namcos2.c
r14845r14846
473473   namcos2_state(const machine_config &mconfig, device_type type, const char *tag)
474474      : driver_device(mconfig, type, tag)
475475   { }
476   DECLARE_READ16_MEMBER(namcos2_68k_dpram_word_r);
477   DECLARE_WRITE16_MEMBER(namcos2_68k_dpram_word_w);
478   DECLARE_READ8_MEMBER(namcos2_dpram_byte_r);
479   DECLARE_WRITE8_MEMBER(namcos2_dpram_byte_w);
476480};
477481
478482static UINT8 *namcos2_dpram;   /* 2Kx8 */
r14845r14846
536540   }
537541}
538542
539static READ16_HANDLER( namcos2_68k_dpram_word_r )
543READ16_MEMBER(namcos2_state::namcos2_68k_dpram_word_r)
540544{
541545   return namcos2_dpram[offset];
542546}
543547
544static WRITE16_HANDLER( namcos2_68k_dpram_word_w )
548WRITE16_MEMBER(namcos2_state::namcos2_68k_dpram_word_w)
545549{
546550   if( ACCESSING_BITS_0_7 )
547551   {
r14845r14846
570574}
571575
572576
573static READ8_HANDLER( namcos2_dpram_byte_r )
577READ8_MEMBER(namcos2_state::namcos2_dpram_byte_r)
574578{
575579   return namcos2_dpram[offset];
576580}
577581
578static WRITE8_HANDLER( namcos2_dpram_byte_w )
582WRITE8_MEMBER(namcos2_state::namcos2_dpram_byte_w)
579583{
580584   namcos2_dpram[offset] = data;
581585}
r14845r14846
601605   AM_RANGE(0x400000, 0x41ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram16_r,namco_tilemapvideoram16_w)
602606   AM_RANGE(0x420000, 0x42003f) AM_READWRITE_LEGACY(namco_tilemapcontrol16_r,namco_tilemapcontrol16_w)
603607   AM_RANGE(0x440000, 0x44ffff) AM_READWRITE_LEGACY(namcos2_68k_video_palette_r,namcos2_68k_video_palette_w) AM_BASE_LEGACY(&namcos2_68k_palette_ram) AM_SIZE_LEGACY(&namcos2_68k_palette_size)
604   AM_RANGE(0x460000, 0x460fff) AM_READWRITE_LEGACY(namcos2_68k_dpram_word_r,namcos2_68k_dpram_word_w)
605   AM_RANGE(0x468000, 0x468fff) AM_READWRITE_LEGACY(namcos2_68k_dpram_word_r,namcos2_68k_dpram_word_w) /* mirror */
608   AM_RANGE(0x460000, 0x460fff) AM_READWRITE(namcos2_68k_dpram_word_r,namcos2_68k_dpram_word_w)
609   AM_RANGE(0x468000, 0x468fff) AM_READWRITE(namcos2_68k_dpram_word_r,namcos2_68k_dpram_word_w) /* mirror */
606610   AM_RANGE(0x480000, 0x483fff) AM_READWRITE_LEGACY(namcos2_68k_serial_comms_ram_r,namcos2_68k_serial_comms_ram_w) AM_BASE_LEGACY(&namcos2_68k_serial_comms_ram)
607611   AM_RANGE(0x4a0000, 0x4a000f) AM_READWRITE_LEGACY(namcos2_68k_serial_comms_ctrl_r,namcos2_68k_serial_comms_ctrl_w)
608612ADDRESS_MAP_END
r14845r14846
747751   AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank6") /* banked */
748752   AM_RANGE(0x4000, 0x4001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r,ym2151_w)
749753   AM_RANGE(0x5000, 0x6fff) AM_DEVREADWRITE_LEGACY("c140", c140_r,c140_w)
750   AM_RANGE(0x7000, 0x77ff) AM_READWRITE_LEGACY(namcos2_dpram_byte_r,namcos2_dpram_byte_w) AM_BASE_LEGACY(&namcos2_dpram)
751   AM_RANGE(0x7800, 0x7fff) AM_READWRITE_LEGACY(namcos2_dpram_byte_r,namcos2_dpram_byte_w) /* mirror */
754   AM_RANGE(0x7000, 0x77ff) AM_READWRITE(namcos2_dpram_byte_r,namcos2_dpram_byte_w) AM_BASE_LEGACY(&namcos2_dpram)
755   AM_RANGE(0x7800, 0x7fff) AM_READWRITE(namcos2_dpram_byte_r,namcos2_dpram_byte_w) /* mirror */
752756   AM_RANGE(0x8000, 0x9fff) AM_RAM
753757   AM_RANGE(0xa000, 0xbfff) AM_WRITENOP /* Amplifier enable on 1st write */
754758   AM_RANGE(0xc000, 0xc001) AM_WRITE_LEGACY(namcos2_sound_bankselect_w)
r14845r14846
779783   AM_RANGE(0x3001, 0x3001) AM_READ_PORT("MCUDI1")
780784   AM_RANGE(0x3002, 0x3002) AM_READ_PORT("MCUDI2")
781785   AM_RANGE(0x3003, 0x3003) AM_READ_PORT("MCUDI3")
782   AM_RANGE(0x5000, 0x57ff) AM_READWRITE_LEGACY(namcos2_dpram_byte_r,namcos2_dpram_byte_w) AM_BASE_LEGACY(&namcos2_dpram)
786   AM_RANGE(0x5000, 0x57ff) AM_READWRITE(namcos2_dpram_byte_r,namcos2_dpram_byte_w) AM_BASE_LEGACY(&namcos2_dpram)
783787   AM_RANGE(0x6000, 0x6fff) AM_READNOP /* watchdog */
784788   AM_RANGE(0x8000, 0xffff) AM_ROM
785789ADDRESS_MAP_END
src/mame/drivers/thayers.c
r14845r14846
5555   int m_cart_present;
5656   int m_pr7820_enter;
5757   struct ssi263_t m_ssi263;
58   DECLARE_WRITE8_MEMBER(intrq_w);
59   DECLARE_READ8_MEMBER(irqstate_r);
60   DECLARE_WRITE8_MEMBER(timer_int_ack_w);
61   DECLARE_WRITE8_MEMBER(data_rdy_int_ack_w);
62   DECLARE_WRITE8_MEMBER(cop_d_w);
63   DECLARE_READ8_MEMBER(cop_data_r);
64   DECLARE_WRITE8_MEMBER(cop_data_w);
65   DECLARE_READ8_MEMBER(cop_l_r);
66   DECLARE_WRITE8_MEMBER(cop_l_w);
67   DECLARE_READ8_MEMBER(cop_g_r);
68   DECLARE_WRITE8_MEMBER(control_w);
69   DECLARE_WRITE8_MEMBER(cop_g_w);
70   DECLARE_READ8_MEMBER(cop_si_r);
71   DECLARE_WRITE8_MEMBER(cop_so_w);
72   DECLARE_WRITE8_MEMBER(control2_w);
73   DECLARE_READ8_MEMBER(dsw_b_r);
74   DECLARE_READ8_MEMBER(laserdsc_data_r);
75   DECLARE_WRITE8_MEMBER(laserdsc_data_w);
76   DECLARE_WRITE8_MEMBER(laserdsc_control_w);
77   DECLARE_WRITE8_MEMBER(den1_w);
78   DECLARE_WRITE8_MEMBER(den2_w);
79   DECLARE_WRITE8_MEMBER(ssi263_register_w);
80   DECLARE_READ8_MEMBER(ssi263_register_r);
5881};
5982
6083
r14845r14846
84107   cputag_set_input_line(machine, "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
85108}
86109
87static WRITE8_HANDLER( intrq_w )
110WRITE8_MEMBER(thayers_state::intrq_w)
88111{
89112   // T = 1.1 * R30 * C53 = 1.1 * 750K * 0.01uF = 8.25 ms
90113
91   cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, HOLD_LINE);
114   cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, HOLD_LINE);
92115
93   space->machine().scheduler().timer_set(attotime::from_usec(8250), FUNC(intrq_tick));
116   machine().scheduler().timer_set(attotime::from_usec(8250), FUNC(intrq_tick));
94117}
95118
96static READ8_HANDLER( irqstate_r )
119READ8_MEMBER(thayers_state::irqstate_r)
97120{
98   thayers_state *state = space->machine().driver_data<thayers_state>();
99121   /*
100122
101123        bit     description
r14845r14846
111133
112134    */
113135
114   return (state->m_data_rdy_int << 5) | (state->m_timer_int << 4) | 0x08 | (state->m_ssi_data_request << 2);
136   return (m_data_rdy_int << 5) | (m_timer_int << 4) | 0x08 | (m_ssi_data_request << 2);
115137}
116138
117static WRITE8_HANDLER( timer_int_ack_w )
139WRITE8_MEMBER(thayers_state::timer_int_ack_w)
118140{
119   thayers_state *state = space->machine().driver_data<thayers_state>();
120   state->m_timer_int = 1;
141   m_timer_int = 1;
121142
122   check_interrupt(space->machine());
143   check_interrupt(machine());
123144}
124145
125static WRITE8_HANDLER( data_rdy_int_ack_w )
146WRITE8_MEMBER(thayers_state::data_rdy_int_ack_w)
126147{
127   thayers_state *state = space->machine().driver_data<thayers_state>();
128   state->m_data_rdy_int = 1;
148   m_data_rdy_int = 1;
129149
130   check_interrupt(space->machine());
150   check_interrupt(machine());
131151}
132152
133static WRITE8_HANDLER( cop_d_w )
153WRITE8_MEMBER(thayers_state::cop_d_w)
134154{
135   thayers_state *state = space->machine().driver_data<thayers_state>();
136155   /*
137156
138157        bit     description
r14845r14846
146165
147166   if (!BIT(data, 0))
148167   {
149      state->m_timer_int = 0;
168      m_timer_int = 0;
150169   }
151170
152171   if (!BIT(data, 1))
153172   {
154      state->m_data_rdy_int = 0;
173      m_data_rdy_int = 0;
155174   }
156175
157   check_interrupt(space->machine());
176   check_interrupt(machine());
158177}
159178
160179/* COP Communication */
161180
162static READ8_HANDLER( cop_data_r )
181READ8_MEMBER(thayers_state::cop_data_r)
163182{
164   thayers_state *state = space->machine().driver_data<thayers_state>();
165   if (!state->m_cop_data_latch_enable)
183   if (!m_cop_data_latch_enable)
166184   {
167      return state->m_cop_data_latch;
185      return m_cop_data_latch;
168186   }
169187   else
170188   {
171      return state->m_cop_l;
189      return m_cop_l;
172190   }
173191}
174192
175static WRITE8_HANDLER( cop_data_w )
193WRITE8_MEMBER(thayers_state::cop_data_w)
176194{
177   thayers_state *state = space->machine().driver_data<thayers_state>();
178   state->m_cop_data_latch = data;
195   m_cop_data_latch = data;
179196}
180197
181static READ8_HANDLER( cop_l_r )
198READ8_MEMBER(thayers_state::cop_l_r)
182199{
183   thayers_state *state = space->machine().driver_data<thayers_state>();
184   if (!state->m_cop_data_latch_enable)
200   if (!m_cop_data_latch_enable)
185201   {
186      return state->m_cop_data_latch;
202      return m_cop_data_latch;
187203   }
188204   else
189205   {
r14845r14846
191207   }
192208}
193209
194static WRITE8_HANDLER( cop_l_w )
210WRITE8_MEMBER(thayers_state::cop_l_w)
195211{
196   thayers_state *state = space->machine().driver_data<thayers_state>();
197   state->m_cop_l = data;
212   m_cop_l = data;
198213}
199214
200static READ8_HANDLER( cop_g_r )
215READ8_MEMBER(thayers_state::cop_g_r)
201216{
202   thayers_state *state = space->machine().driver_data<thayers_state>();
203217   /*
204218
205219        bit     description
r14845r14846
211225
212226    */
213227
214   return state->m_cop_cmd_latch;
228   return m_cop_cmd_latch;
215229}
216230
217static WRITE8_HANDLER( control_w )
231WRITE8_MEMBER(thayers_state::control_w)
218232{
219   thayers_state *state = space->machine().driver_data<thayers_state>();
220233   /*
221234
222235        bit     description
r14845r14846
232245
233246    */
234247
235   state->m_cop_cmd_latch = (data >> 5) & 0x07;
248   m_cop_cmd_latch = (data >> 5) & 0x07;
236249}
237250
238static WRITE8_HANDLER( cop_g_w )
251WRITE8_MEMBER(thayers_state::cop_g_w)
239252{
240   thayers_state *state = space->machine().driver_data<thayers_state>();
241253   /*
242254
243255        bit     description
r14845r14846
249261
250262    */
251263
252   state->m_cop_data_latch_enable = BIT(data, 3);
264   m_cop_data_latch_enable = BIT(data, 3);
253265}
254266
255267/* Keyboard */
256268
257static READ8_HANDLER(cop_si_r)
269READ8_MEMBER(thayers_state::cop_si_r)
258270{
259   thayers_state *state = space->machine().driver_data<thayers_state>();
260271   /* keyboard data */
261272
262273   /*
r14845r14846
267278
268279    */
269280
270   switch (state->m_rx_bit)
281   switch (m_rx_bit)
271282   {
272283   case 0:
273284   case 1:
r14845r14846
275286      return 1;
276287
277288   case 4:
278      return (state->m_keylatch == 9);
289      return (m_keylatch == 9);
279290
280291   case 5:
281292   case 6:
r14845r14846
285296         UINT8 data;
286297         char port[4];
287298
288         sprintf(port, "R%d", state->m_keylatch);
299         sprintf(port, "R%d", m_keylatch);
289300
290         data = BIT(input_port_read(space->machine(), port), state->m_rx_bit - 5);
301         data = BIT(input_port_read(machine(), port), m_rx_bit - 5);
291302
292303         return data;
293304      }
r14845r14846
297308   }
298309}
299310
300static WRITE8_HANDLER( cop_so_w )
311WRITE8_MEMBER(thayers_state::cop_so_w)
301312{
302   thayers_state *state = space->machine().driver_data<thayers_state>();
303313   /* keyboard clock */
304314
305315   if (data)
306316   {
307      state->m_rx_bit++;
317      m_rx_bit++;
308318
309      if (state->m_rx_bit == 10)
319      if (m_rx_bit == 10)
310320      {
311         state->m_rx_bit = 0;
321         m_rx_bit = 0;
312322
313         state->m_keylatch++;
323         m_keylatch++;
314324
315         if (state->m_keylatch == 10)
325         if (m_keylatch == 10)
316326         {
317            state->m_keylatch = 0;
327            m_keylatch = 0;
318328         }
319329      }
320330   }
r14845r14846
322332
323333/* I/O Board */
324334
325static WRITE8_HANDLER( control2_w )
335WRITE8_MEMBER(thayers_state::control2_w)
326336{
327   thayers_state *state = space->machine().driver_data<thayers_state>();
328337   /*
329338
330339        bit     description
r14845r14846
340349
341350    */
342351
343   if ((!BIT(data, 2)) & state->m_cart_present)
352   if ((!BIT(data, 2)) & m_cart_present)
344353   {
345      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, HOLD_LINE);
354      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_NMI, HOLD_LINE);
346355   }
347356}
348357
349static READ8_HANDLER( dsw_b_r )
358READ8_MEMBER(thayers_state::dsw_b_r)
350359{
351   return (input_port_read(space->machine(), "COIN") & 0xf0) | (input_port_read(space->machine(), "DSWB") & 0x0f);
360   return (input_port_read(machine(), "COIN") & 0xf0) | (input_port_read(machine(), "DSWB") & 0x0f);
352361}
353362
354static READ8_HANDLER( laserdsc_data_r )
363READ8_MEMBER(thayers_state::laserdsc_data_r)
355364{
356   thayers_state *state = space->machine().driver_data<thayers_state>();
357   if (state->m_ldv1000 != NULL) return state->m_ldv1000->status_r();
358   if (state->m_pr7820 != NULL) return state->m_pr7820->data_r();
365   if (m_ldv1000 != NULL) return m_ldv1000->status_r();
366   if (m_pr7820 != NULL) return m_pr7820->data_r();
359367   return 0;
360368}
361369
362static WRITE8_HANDLER( laserdsc_data_w )
370WRITE8_MEMBER(thayers_state::laserdsc_data_w)
363371{
364   thayers_state *state = space->machine().driver_data<thayers_state>();
365   state->m_laserdisc_data = data;
372   m_laserdisc_data = data;
366373}
367374
368static WRITE8_HANDLER( laserdsc_control_w )
375WRITE8_MEMBER(thayers_state::laserdsc_control_w)
369376{
370   thayers_state *state = space->machine().driver_data<thayers_state>();
371377   /*
372378
373379        bit     description
r14845r14846
383389
384390    */
385391
386   coin_counter_w(space->machine(), 0, BIT(data, 4));
392   coin_counter_w(machine(), 0, BIT(data, 4));
387393
388394   if (BIT(data, 5))
389395   {
390      if (state->m_ldv1000 != NULL)
396      if (m_ldv1000 != NULL)
391397      {
392         state->m_ldv1000->data_w(state->m_laserdisc_data);
393         state->m_ldv1000->enter_w(BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
398         m_ldv1000->data_w(m_laserdisc_data);
399         m_ldv1000->enter_w(BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
394400      }
395      if (state->m_pr7820 != NULL)
401      if (m_pr7820 != NULL)
396402      {
397         state->m_pr7820->data_w(state->m_laserdisc_data);
398         state->m_pr7820_enter = BIT(data, 6) ? CLEAR_LINE : ASSERT_LINE;
399         state->m_pr7820->enter_w(state->m_pr7820_enter);
403         m_pr7820->data_w(m_laserdisc_data);
404         m_pr7820_enter = BIT(data, 6) ? CLEAR_LINE : ASSERT_LINE;
405         m_pr7820->enter_w(m_pr7820_enter);
400406         // BIT(data, 7) is INT/_EXT, but there is no such input line in laserdsc.h
401407      }
402408   }
403409}
404410
405static WRITE8_HANDLER( den1_w )
411WRITE8_MEMBER(thayers_state::den1_w)
406412{
407413   /*
408414
r14845r14846
422428   output_set_digit_value(data >> 4, led_map[data & 0x0f]);
423429}
424430
425static WRITE8_HANDLER( den2_w )
431WRITE8_MEMBER(thayers_state::den2_w)
426432{
427433   /*
428434
r14845r14846
467473   check_interrupt(machine);
468474}
469475
470static WRITE8_HANDLER( ssi263_register_w )
476WRITE8_MEMBER(thayers_state::ssi263_register_w)
471477{
472   thayers_state *state = space->machine().driver_data<thayers_state>();
473   struct ssi263_t &ssi263 = state->m_ssi263;
478   struct ssi263_t &ssi263 = m_ssi263;
474479   switch (offset)
475480   {
476481   case 0:
r14845r14846
482487      ssi263.dr = (data >> 5) & 0x03;
483488      ssi263.p = data & 0x3f;
484489
485      state->m_ssi_data_request = 1;
486      check_interrupt(space->machine());
490      m_ssi_data_request = 1;
491      check_interrupt(machine());
487492
488493      switch (ssi263.mode)
489494      {
490495      case 0:
491496      case 1:
492497         // phoneme timing response
493         space->machine().scheduler().timer_set(attotime::from_usec(phoneme_time), FUNC(ssi263_phoneme_tick));
498         machine().scheduler().timer_set(attotime::from_usec(phoneme_time), FUNC(ssi263_phoneme_tick));
494499         break;
495500      case 2:
496501         // frame timing response
497         space->machine().scheduler().timer_set(attotime::from_usec(frame_time), FUNC(ssi263_phoneme_tick));
502         machine().scheduler().timer_set(attotime::from_usec(frame_time), FUNC(ssi263_phoneme_tick));
498503         break;
499504      case 3:
500505         // disable A/_R output
r14845r14846
570575   }
571576}
572577
573static READ8_HANDLER( ssi263_register_r )
578READ8_MEMBER(thayers_state::ssi263_register_r)
574579{
575   thayers_state *state = space->machine().driver_data<thayers_state>();
576580   // D7 becomes an output, as the inverted state of A/_R. The register address bits are ignored.
577581
578   return !state->m_ssi_data_request << 7;
582   return !m_ssi_data_request << 7;
579583}
580584
581585/* Memory Maps */
r14845r14846
588592
589593static ADDRESS_MAP_START( thayers_io_map, AS_IO, 8, thayers_state )
590594   ADDRESS_MAP_GLOBAL_MASK(0xff)
591   AM_RANGE(0x00, 0x07) AM_READWRITE_LEGACY(ssi263_register_r, ssi263_register_w)
592   AM_RANGE(0x20, 0x20) AM_WRITE_LEGACY(control_w)
593   AM_RANGE(0x40, 0x40) AM_READWRITE_LEGACY(irqstate_r, control2_w)
594   AM_RANGE(0x80, 0x80) AM_READWRITE_LEGACY(cop_data_r, cop_data_w)
595   AM_RANGE(0xa0, 0xa0) AM_WRITE_LEGACY(timer_int_ack_w)
596   AM_RANGE(0xc0, 0xc0) AM_WRITE_LEGACY(data_rdy_int_ack_w)
597   AM_RANGE(0xf0, 0xf0) AM_READ_LEGACY(laserdsc_data_r)
598   AM_RANGE(0xf1, 0xf1) AM_READ_LEGACY(dsw_b_r)
595   AM_RANGE(0x00, 0x07) AM_READWRITE(ssi263_register_r, ssi263_register_w)
596   AM_RANGE(0x20, 0x20) AM_WRITE(control_w)
597   AM_RANGE(0x40, 0x40) AM_READWRITE(irqstate_r, control2_w)
598   AM_RANGE(0x80, 0x80) AM_READWRITE(cop_data_r, cop_data_w)
599   AM_RANGE(0xa0, 0xa0) AM_WRITE(timer_int_ack_w)
600   AM_RANGE(0xc0, 0xc0) AM_WRITE(data_rdy_int_ack_w)
601   AM_RANGE(0xf0, 0xf0) AM_READ(laserdsc_data_r)
602   AM_RANGE(0xf1, 0xf1) AM_READ(dsw_b_r)
599603   AM_RANGE(0xf2, 0xf2) AM_READ_PORT("DSWA")
600   AM_RANGE(0xf3, 0xf3) AM_WRITE_LEGACY(intrq_w)
601   AM_RANGE(0xf4, 0xf4) AM_WRITE_LEGACY(laserdsc_data_w)
602   AM_RANGE(0xf5, 0xf5) AM_WRITE_LEGACY(laserdsc_control_w)
603   AM_RANGE(0xf6, 0xf6) AM_WRITE_LEGACY(den1_w)
604   AM_RANGE(0xf7, 0xf7) AM_WRITE_LEGACY(den2_w)
604   AM_RANGE(0xf3, 0xf3) AM_WRITE(intrq_w)
605   AM_RANGE(0xf4, 0xf4) AM_WRITE(laserdsc_data_w)
606   AM_RANGE(0xf5, 0xf5) AM_WRITE(laserdsc_control_w)
607   AM_RANGE(0xf6, 0xf6) AM_WRITE(den1_w)
608   AM_RANGE(0xf7, 0xf7) AM_WRITE(den2_w)
605609ADDRESS_MAP_END
606610
607611static ADDRESS_MAP_START( thayers_cop_io_map, AS_IO, 8, thayers_state )
608   AM_RANGE(COP400_PORT_L, COP400_PORT_L) AM_READWRITE_LEGACY(cop_l_r, cop_l_w)
609   AM_RANGE(COP400_PORT_G, COP400_PORT_G) AM_READWRITE_LEGACY(cop_g_r, cop_g_w)
610   AM_RANGE(COP400_PORT_D, COP400_PORT_D) AM_WRITE_LEGACY(cop_d_w)
612   AM_RANGE(COP400_PORT_L, COP400_PORT_L) AM_READWRITE(cop_l_r, cop_l_w)
613   AM_RANGE(COP400_PORT_G, COP400_PORT_G) AM_READWRITE(cop_g_r, cop_g_w)
614   AM_RANGE(COP400_PORT_D, COP400_PORT_D) AM_WRITE(cop_d_w)
611615   AM_RANGE(COP400_PORT_SK, COP400_PORT_SK) AM_WRITENOP
612   AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_READ_LEGACY(cop_si_r) AM_WRITE_LEGACY(cop_so_w)
616   AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_READ(cop_si_r) AM_WRITE(cop_so_w)
613617ADDRESS_MAP_END
614618
615619/* Input Ports */
src/mame/drivers/merit.c
r14845r14846
7070   int m_question_address;
7171   int m_decryption_key;
7272   UINT8 *m_backup_ram;
73   DECLARE_READ8_MEMBER(questions_r);
74   DECLARE_WRITE8_MEMBER(low_offset_w);
75   DECLARE_WRITE8_MEMBER(med_offset_w);
76   DECLARE_WRITE8_MEMBER(high_offset_w);
77   DECLARE_READ8_MEMBER(palette_r);
78   DECLARE_WRITE8_MEMBER(palette_w);
79   DECLARE_WRITE8_MEMBER(casino5_bank_w);
7380};
7481
7582
r14845r14846
8794}
8895
8996
90static READ8_HANDLER( questions_r )
97READ8_MEMBER(merit_state::questions_r)
9198{
92   merit_state *state = space->machine().driver_data<merit_state>();
93   UINT8 *questions = space->machine().region("user1")->base();
99   UINT8 *questions = machine().region("user1")->base();
94100   int address;
95101
96   switch(state->m_question_address >> 16)
102   switch(m_question_address >> 16)
97103   {
98104      case 0x30: address = 0x00000;
99105         break;
r14845r14846
131137 *          break;
132138 */
133139
134      default: logerror("read unknown question rom: %02X\n",state->m_question_address >> 16);
140      default: logerror("read unknown question rom: %02X\n",m_question_address >> 16);
135141         return 0xff;
136142   }
137143
138   address |= state->m_question_address & 0xffff;
144   address |= m_question_address & 0xffff;
139145
140146   return questions[address];
141147}
142148
143static WRITE8_HANDLER( low_offset_w )
149WRITE8_MEMBER(merit_state::low_offset_w)
144150{
145   merit_state *state = space->machine().driver_data<merit_state>();
146   offset = (offset & 0xf0) | ((offset - state->m_decryption_key) & 0x0f);
151   offset = (offset & 0xf0) | ((offset - m_decryption_key) & 0x0f);
147152   offset = BITSWAP8(offset,7,6,5,4,0,1,2,3);
148   state->m_question_address = (state->m_question_address & 0xffff00) | offset;
153   m_question_address = (m_question_address & 0xffff00) | offset;
149154}
150155
151static WRITE8_HANDLER( med_offset_w )
156WRITE8_MEMBER(merit_state::med_offset_w)
152157{
153   merit_state *state = space->machine().driver_data<merit_state>();
154   offset = (offset & 0xf0) | ((offset - state->m_decryption_key) & 0x0f);
158   offset = (offset & 0xf0) | ((offset - m_decryption_key) & 0x0f);
155159   offset = BITSWAP8(offset,7,6,5,4,0,1,2,3);
156   state->m_question_address = (state->m_question_address & 0xff00ff) | (offset << 8);
160   m_question_address = (m_question_address & 0xff00ff) | (offset << 8);
157161}
158162
159static WRITE8_HANDLER( high_offset_w )
163WRITE8_MEMBER(merit_state::high_offset_w)
160164{
161   merit_state *state = space->machine().driver_data<merit_state>();
162165   offset = BITSWAP8(offset,7,6,5,4,0,1,2,3);
163   state->m_question_address = (state->m_question_address & 0x00ffff) | (offset << 16);
166   m_question_address = (m_question_address & 0x00ffff) | (offset << 16);
164167}
165168
166static READ8_HANDLER( palette_r )
169READ8_MEMBER(merit_state::palette_r)
167170{
168   merit_state *state = space->machine().driver_data<merit_state>();
169171   int co;
170172
171   co = ((state->m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
172   return state->m_ram_palette[co];
173   co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
174   return m_ram_palette[co];
173175}
174176
175static WRITE8_HANDLER( palette_w )
177WRITE8_MEMBER(merit_state::palette_w)
176178{
177   merit_state *state = space->machine().driver_data<merit_state>();
178179   int co;
179180
180   space->machine().primary_screen->update_now();
181   machine().primary_screen->update_now();
181182   data &= 0x0f;
182183
183   co = ((state->m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
184   state->m_ram_palette[co] = data;
184   co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
185   m_ram_palette[co] = data;
185186
186187}
187188
r14845r14846
326327   state->m_backup_ram[0x1011] = 0xc9; //ret
327328}
328329
329static WRITE8_HANDLER(casino5_bank_w)
330WRITE8_MEMBER(merit_state::casino5_bank_w)
330331{
331332   if ( data == 0 )
332333   {
333      memory_set_bank(space->machine(), "bank1", 1);
334      memory_set_bank(space->machine(), "bank2", 1);
334      memory_set_bank(machine(), "bank1", 1);
335      memory_set_bank(machine(), "bank2", 1);
335336   }
336337   else if ( data == 0xff )
337338   {
338      memory_set_bank(space->machine(), "bank1", 0);
339      memory_set_bank(space->machine(), "bank2", 0);
339      memory_set_bank(machine(), "bank1", 0);
340      memory_set_bank(machine(), "bank2", 0);
340341   }
341342   else
342343   {
r14845r14846
358359   AM_RANGE(0xe001, 0xe001) AM_DEVWRITE("crtc", mc6845_device, register_w)
359360   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
360361   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
361   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
362   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
362363ADDRESS_MAP_END
363364
364365static ADDRESS_MAP_START( casino5_map, AS_PROGRAM, 8, merit_state )
r14845r14846
366367   AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1")
367368   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank2")
368369   AM_RANGE(0x6000, 0x6fff) AM_RAM AM_SHARE("nvram")
369   AM_RANGE(0x7000, 0x7000) AM_WRITE_LEGACY(casino5_bank_w)
370   AM_RANGE(0x7000, 0x7000) AM_WRITE(casino5_bank_w)
370371   AM_RANGE(0x7001, 0x7fff) AM_RAM
371372   AM_RANGE(0xa000, 0xa003) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
372373   AM_RANGE(0xc000, 0xc003) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
r14845r14846
374375   AM_RANGE(0xe001, 0xe001) AM_DEVWRITE("crtc", mc6845_device, register_w)
375376   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
376377   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
377   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
378   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
378379ADDRESS_MAP_END
379380
380381static ADDRESS_MAP_START( bigappg_map, AS_PROGRAM, 8, merit_state )
r14845r14846
386387   AM_RANGE(0xe001, 0xe001) AM_DEVWRITE("crtc", mc6845_device, register_w)
387388   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
388389   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
389   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
390   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
390391ADDRESS_MAP_END
391392
392393static ADDRESS_MAP_START( dodge_map, AS_PROGRAM, 8, merit_state )
r14845r14846
398399   AM_RANGE(0xe001, 0xe001) AM_DEVWRITE("crtc", mc6845_device, register_w)
399400   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
400401   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
401   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
402   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
402403ADDRESS_MAP_END
403404
404405/* Address decoding is done by prom u13 on crt200a hardware. It decodes
r14845r14846
408409
409410static ADDRESS_MAP_START( trvwhiz_map, AS_PROGRAM, 8, merit_state )
410411   AM_RANGE(0x0000, 0x3fff) AM_ROM
411   AM_RANGE(0x4c00, 0x4cff) AM_READWRITE_LEGACY(questions_r, high_offset_w)
412   AM_RANGE(0x5400, 0x54ff) AM_WRITE_LEGACY(low_offset_w)
413   AM_RANGE(0x5800, 0x58ff) AM_WRITE_LEGACY(med_offset_w)
412   AM_RANGE(0x4c00, 0x4cff) AM_READWRITE(questions_r, high_offset_w)
413   AM_RANGE(0x5400, 0x54ff) AM_WRITE(low_offset_w)
414   AM_RANGE(0x5800, 0x58ff) AM_WRITE(med_offset_w)
414415   AM_RANGE(0x6000, 0x67ff) AM_RAM
415416   AM_RANGE(0xa000, 0xa003) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
416417   AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
r14845r14846
418419   AM_RANGE(0xe001, 0xe001) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, register_w)
419420   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
420421   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
421   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
422   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
422423ADDRESS_MAP_END
423424
424425static ADDRESS_MAP_START( trvwhiz_io_map, AS_IO, 8, merit_state )
r14845r14846
432433   AM_RANGE(0xa000, 0xbfff) AM_RAM
433434   AM_RANGE(0xc008, 0xc00b) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
434435   AM_RANGE(0xc00c, 0xc00f) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
435   AM_RANGE(0xce00, 0xceff) AM_READWRITE_LEGACY(questions_r, high_offset_w)
436   AM_RANGE(0xd600, 0xd6ff) AM_WRITE_LEGACY(low_offset_w)
437   AM_RANGE(0xda00, 0xdaff) AM_WRITE_LEGACY(med_offset_w)
436   AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
437   AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
438   AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
438439   AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, address_w)
439440   AM_RANGE(0xe001, 0xe001) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, register_w)
440441   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
441442   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
442   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
443   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
443444ADDRESS_MAP_END
444445
445446static ADDRESS_MAP_START( phrcraze_io_map, AS_IO, 8, merit_state )
r14845r14846
453454   AM_RANGE(0x8000, 0x9fff) AM_RAM
454455   AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
455456   AM_RANGE(0xc008, 0xc00b) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
456   AM_RANGE(0xce00, 0xceff) AM_READWRITE_LEGACY(questions_r, high_offset_w)
457   AM_RANGE(0xd600, 0xd6ff) AM_WRITE_LEGACY(low_offset_w)
458   AM_RANGE(0xda00, 0xdaff) AM_WRITE_LEGACY(med_offset_w)
457   AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
458   AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
459   AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
459460   AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, address_w)
460461   AM_RANGE(0xe001, 0xe001) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, register_w)
461462   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
462463   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
463   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
464   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
464465ADDRESS_MAP_END
465466
466467static ADDRESS_MAP_START( tictac_io_map, AS_IO, 8, merit_state )
r14845r14846
474475   AM_RANGE(0xa000, 0xbfff) AM_RAM
475476   AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
476477   AM_RANGE(0xc008, 0xc00b) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
477   AM_RANGE(0xce00, 0xceff) AM_READWRITE_LEGACY(questions_r, high_offset_w)
478   AM_RANGE(0xd600, 0xd6ff) AM_WRITE_LEGACY(low_offset_w)
479   AM_RANGE(0xda00, 0xdaff) AM_WRITE_LEGACY(med_offset_w)
478   AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
479   AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
480   AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
480481   AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, address_w)
481482   AM_RANGE(0xe001, 0xe001) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, register_w)
482483   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
483484   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
484   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
485   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
485486ADDRESS_MAP_END
486487
487488static ADDRESS_MAP_START( dtrvwz5_map, AS_PROGRAM, 8, merit_state )
r14845r14846
490491   AM_RANGE(0xb000, 0xb0ff) AM_ROM /* protection? code jumps here */
491492   AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
492493   AM_RANGE(0xc008, 0xc00b) AM_MIRROR(0x1df0) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
493   AM_RANGE(0xce00, 0xceff) AM_READWRITE_LEGACY(questions_r, high_offset_w)
494   AM_RANGE(0xd600, 0xd6ff) AM_WRITE_LEGACY(low_offset_w)
495   AM_RANGE(0xda00, 0xdaff) AM_WRITE_LEGACY(med_offset_w)
494   AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
495   AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
496   AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
496497   AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, address_w)
497498   AM_RANGE(0xe001, 0xe001) AM_MIRROR(0x05f0) AM_DEVWRITE("crtc", mc6845_device, register_w)
498499   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
499500   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
500   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
501   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
501502ADDRESS_MAP_END
502503
503504static ADDRESS_MAP_START( couple_map, AS_PROGRAM, 8, merit_state )
r14845r14846
510511   AM_RANGE(0xe001, 0xe001) AM_DEVWRITE("crtc", mc6845_device, register_w)
511512   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
512513   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
513   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
514   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
514515ADDRESS_MAP_END
515516
516517
src/mame/drivers/dotrikun.c
r14845r14846
3535
3636   /* video-related */
3737   UINT8          m_color;
38   DECLARE_WRITE8_MEMBER(dotrikun_color_w);
3839};
3940
4041
r14845r14846
4445 *
4546 *************************************/
4647
47static WRITE8_HANDLER( dotrikun_color_w )
48WRITE8_MEMBER(dotrikun_state::dotrikun_color_w)
4849{
49   dotrikun_state *state = space->machine().driver_data<dotrikun_state>();
5050   /*
5151    x--- ---- screen color swap?
5252    ---- -x-- B
r14845r14846
5454    ---- ---x R
5555    */
5656
57   state->m_color = data;
58   space->machine().primary_screen->update_partial(space->machine().primary_screen->vpos());
57   m_color = data;
58   machine().primary_screen->update_partial(machine().primary_screen->vpos());
5959}
6060
6161
r14845r14846
104104
105105static ADDRESS_MAP_START( io_map, AS_IO, 8, dotrikun_state )
106106   ADDRESS_MAP_GLOBAL_MASK(0xff)
107   AM_RANGE(0x00, 0x00) AM_READ_PORT("INPUTS") AM_WRITE_LEGACY(dotrikun_color_w)
107   AM_RANGE(0x00, 0x00) AM_READ_PORT("INPUTS") AM_WRITE(dotrikun_color_w)
108108ADDRESS_MAP_END
109109
110110
src/mame/drivers/sms.c
r14845r14846
230230   UINT8 m_communication_port_status;
231231   bitmap_ind16 m_bitmap;
232232   UINT8 m_vid_regs[7];
233   DECLARE_WRITE8_MEMBER(bankswitch_w);
234   DECLARE_READ8_MEMBER(link_r);
235   DECLARE_WRITE8_MEMBER(link_w);
236   DECLARE_READ8_MEMBER(z80_8088_r);
237   DECLARE_READ8_MEMBER(p03_r);
238   DECLARE_WRITE8_MEMBER(p03_w);
239   DECLARE_WRITE8_MEMBER(video_w);
233240};
234241
235242
r14845r14846
239246 *
240247 *************************************/
241248
242static WRITE8_HANDLER(bankswitch_w)
249WRITE8_MEMBER(smsmfg_state::bankswitch_w)
243250{
244   memory_set_bank(space->machine(), "bank1", data);
251   memory_set_bank(machine(), "bank1", data);
245252}
246253
247254/*************************************
r14845r14846
250257 *
251258 *************************************/
252259
253static READ8_HANDLER(link_r)
260READ8_MEMBER(smsmfg_state::link_r)
254261{
255   smsmfg_state *state = space->machine().driver_data<smsmfg_state>();
256262   switch(offset)
257263   {
258264      case 0:
259         state->m_communication_port_status &= ~0x01;
260         return state->m_communication_port[0];
265         m_communication_port_status &= ~0x01;
266         return m_communication_port[0];
261267      case 1:
262         state->m_communication_port_status &= ~0x02;
263         return state->m_communication_port[1];
268         m_communication_port_status &= ~0x02;
269         return m_communication_port[1];
264270      case 2:
265         return state->m_communication_port_status;
271         return m_communication_port_status;
266272   }
267273   return 0;
268274};
269275
270static WRITE8_HANDLER(link_w)
276WRITE8_MEMBER(smsmfg_state::link_w)
271277{
272   smsmfg_state *state = space->machine().driver_data<smsmfg_state>();
273278   switch(offset)
274279   {
275280      case 0:
276         state->m_communication_port_status |= 0x08;
277         state->m_communication_port[3] = data;
281         m_communication_port_status |= 0x08;
282         m_communication_port[3] = data;
278283         break;
279284      case 1:
280         state->m_communication_port_status |= 0x04;
281         state->m_communication_port[2] = data;
285         m_communication_port_status |= 0x04;
286         m_communication_port[2] = data;
282287         break;
283288   }
284289}
285290
286static READ8_HANDLER(z80_8088_r)
291READ8_MEMBER(smsmfg_state::z80_8088_r)
287292{
288   smsmfg_state *state = space->machine().driver_data<smsmfg_state>();
289   return state->m_communication_port_status;
293   return m_communication_port_status;
290294}
291295
292static READ8_HANDLER(p03_r)
296READ8_MEMBER(smsmfg_state::p03_r)
293297{
294   smsmfg_state *state = space->machine().driver_data<smsmfg_state>();
295298   switch(offset)
296299   {
297300      case 0:
298         state->m_communication_port_status &= ~0x08;
299         return state->m_communication_port[3];
301         m_communication_port_status &= ~0x08;
302         return m_communication_port[3];
300303      case 1:
301         state->m_communication_port_status &= ~0x04;
302         return state->m_communication_port[2];
304         m_communication_port_status &= ~0x04;
305         return m_communication_port[2];
303306   }
304307   return 0;
305308}
306309
307static WRITE8_HANDLER(p03_w)
310WRITE8_MEMBER(smsmfg_state::p03_w)
308311{
309   smsmfg_state *state = space->machine().driver_data<smsmfg_state>();
310312   switch(offset)
311313   {
312314      case 0:
313         state->m_communication_port_status |= 0x01;
314         state->m_communication_port[0] = data;
315         m_communication_port_status |= 0x01;
316         m_communication_port[0] = data;
315317         break;
316318      case 1:
317         state->m_communication_port_status |= 0x02;
318         state->m_communication_port[1] = data;
319         m_communication_port_status |= 0x02;
320         m_communication_port[1] = data;
319321         break;
320322   }
321323}
r14845r14846
432434 *
433435 *************************************/
434436
435static WRITE8_HANDLER(video_w)
437WRITE8_MEMBER(smsmfg_state::video_w)
436438{
437   smsmfg_state *state = space->machine().driver_data<smsmfg_state>();
438   state->m_vid_regs[offset] = data;
439   m_vid_regs[offset] = data;
439440   if ( offset == 5 )
440441   {
441442      int x,y;
442      int xstart = state->m_vid_regs[0] + state->m_vid_regs[1]*256;
443      int width = state->m_vid_regs[2];
444      int ystart = state->m_vid_regs[3];
445      int height = state->m_vid_regs[4];
446      int color = state->m_vid_regs[5];
443      int xstart = m_vid_regs[0] + m_vid_regs[1]*256;
444      int width = m_vid_regs[2];
445      int ystart = m_vid_regs[3];
446      int height = m_vid_regs[4];
447      int color = m_vid_regs[5];
447448
448449      if ( height == 0 )
449450         height = 256;
r14845r14846
456457         for ( x = xstart; x < xstart + width; x++ )
457458         {
458459            if ( y < 256 )
459            state->m_bitmap.pix16(y, x) = color;
460            m_bitmap.pix16(y, x) = color;
460461         }
461462      }
462463   }
r14845r14846
497498static ADDRESS_MAP_START( sms_map, AS_PROGRAM, 8, smsmfg_state )
498499   AM_RANGE(0x00000, 0x007ff) AM_RAM AM_SHARE("nvram")
499500   AM_RANGE(0x00800, 0x00803) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
500   AM_RANGE(0x01000, 0x01007) AM_WRITE_LEGACY(video_w)
501   AM_RANGE(0x01800, 0x01803) AM_READWRITE_LEGACY(link_r, link_w)
501   AM_RANGE(0x01000, 0x01007) AM_WRITE(video_w)
502   AM_RANGE(0x01800, 0x01803) AM_READWRITE(link_r, link_w)
502503   AM_RANGE(0x04000, 0x07fff) AM_ROMBANK("bank1")
503   AM_RANGE(0x04000, 0x04000) AM_WRITE_LEGACY(bankswitch_w)
504   AM_RANGE(0x04000, 0x04000) AM_WRITE(bankswitch_w)
504505   AM_RANGE(0x08000, 0x0ffff) AM_ROM
505506   AM_RANGE(0xf8000, 0xfffff) AM_ROM // mirror for vectors
506507ADDRESS_MAP_END
507508
508509static ADDRESS_MAP_START( sureshot_map, AS_PROGRAM, 8, smsmfg_state )
509510   AM_RANGE(0x00000, 0x007ff) AM_RAM AM_SHARE("nvram")
510   AM_RANGE(0x02000, 0x02007) AM_WRITE_LEGACY(video_w)
511   AM_RANGE(0x02000, 0x02007) AM_WRITE(video_w)
511512   AM_RANGE(0x03000, 0x03003) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w)
512   AM_RANGE(0x03800, 0x03803) AM_READWRITE_LEGACY(link_r, link_w)
513   AM_RANGE(0x03800, 0x03803) AM_READWRITE(link_r, link_w)
513514   AM_RANGE(0x08000, 0x0ffff) AM_ROM
514515   AM_RANGE(0xf8000, 0xfffff) AM_ROM // mirror for vectors
515516ADDRESS_MAP_END
r14845r14846
519520   AM_RANGE(0x2000, 0x27ff) AM_RAM
520521   AM_RANGE(0x3100, 0x3103) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w)
521522   AM_RANGE(0x3381, 0x3382) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
522   AM_RANGE(0x3400, 0x3400) AM_READ_LEGACY(z80_8088_r)
523   AM_RANGE(0x3500, 0x3501) AM_READWRITE_LEGACY(p03_r, p03_w)
523   AM_RANGE(0x3400, 0x3400) AM_READ(z80_8088_r)
524   AM_RANGE(0x3500, 0x3501) AM_READWRITE(p03_r, p03_w)
524525ADDRESS_MAP_END
525526
526527/*************************************
src/mame/drivers/spoker.c
r14845r14846
4040   int m_hopper;
4141   UINT8 m_igs_magic[2];
4242   UINT8 m_out[3];
43   DECLARE_WRITE8_MEMBER(bg_tile_w);
44   DECLARE_WRITE8_MEMBER(fg_tile_w);
45   DECLARE_WRITE8_MEMBER(fg_color_w);
46   DECLARE_WRITE8_MEMBER(spoker_nmi_and_coins_w);
47   DECLARE_WRITE8_MEMBER(spoker_video_and_leds_w);
48   DECLARE_WRITE8_MEMBER(spoker_leds_w);
49   DECLARE_WRITE8_MEMBER(spoker_magic_w);
50   DECLARE_READ8_MEMBER(spoker_magic_r);
4351};
4452
45static WRITE8_HANDLER( bg_tile_w )
53WRITE8_MEMBER(spoker_state::bg_tile_w)
4654{
47   spoker_state *state = space->machine().driver_data<spoker_state>();
4855
49   state->m_bg_tile_ram[offset] = data;
50   state->m_bg_tilemap->mark_tile_dirty(offset);
56   m_bg_tile_ram[offset] = data;
57   m_bg_tilemap->mark_tile_dirty(offset);
5158}
5259
5360static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
6471   SET_TILE_INFO(0, code, (4*(code >> 14)+3), 0);
6572}
6673
67static WRITE8_HANDLER( fg_tile_w )
74WRITE8_MEMBER(spoker_state::fg_tile_w)
6875{
69   spoker_state *state = space->machine().driver_data<spoker_state>();
7076
71   state->m_fg_tile_ram[offset] = data;
72   state->m_fg_tilemap->mark_tile_dirty(offset);
77   m_fg_tile_ram[offset] = data;
78   m_fg_tilemap->mark_tile_dirty(offset);
7379}
7480
75static WRITE8_HANDLER( fg_color_w )
81WRITE8_MEMBER(spoker_state::fg_color_w)
7682{
77   spoker_state *state = space->machine().driver_data<spoker_state>();
7883
79   state->m_fg_color_ram[offset] = data;
80   state->m_fg_tilemap->mark_tile_dirty(offset);
84   m_fg_color_ram[offset] = data;
85   m_fg_tilemap->mark_tile_dirty(offset);
8186}
8287
8388static VIDEO_START(spoker)
r14845r14846
119124#endif
120125}
121126
122static WRITE8_HANDLER( spoker_nmi_and_coins_w )
127WRITE8_MEMBER(spoker_state::spoker_nmi_and_coins_w)
123128{
124   spoker_state *state = space->machine().driver_data<spoker_state>();
125129
126130   if ((data) & (0x22))
127131   {
128      logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space->device()),data);
132      logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space.device()),data);
129133//      popmessage("%02x",data);
130134   }
131135
132   coin_counter_w(space->machine(), 0,      data & 0x01);   // coin_a
133   coin_counter_w(space->machine(), 1,      data & 0x04);   // coin_c
134   coin_counter_w(space->machine(), 2,      data & 0x08);   // key in
135   coin_counter_w(space->machine(), 3,      data & 0x10);   // coin out mech
136   coin_counter_w(machine(), 0,      data & 0x01);   // coin_a
137   coin_counter_w(machine(), 1,      data & 0x04);   // coin_c
138   coin_counter_w(machine(), 2,      data & 0x08);   // key in
139   coin_counter_w(machine(), 3,      data & 0x10);   // coin out mech
136140
137   set_led_status(space->machine(), 6,      data & 0x40);   // led for coin out / hopper active
141   set_led_status(machine(), 6,      data & 0x40);   // led for coin out / hopper active
138142
139   if(((state->m_nmi_ack & 0x80) == 0) && data & 0x80)
140      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
143   if(((m_nmi_ack & 0x80) == 0) && data & 0x80)
144      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_NMI, CLEAR_LINE);
141145
142   state->m_nmi_ack = data & 0x80;     // nmi acknowledge, 0 -> 1
146   m_nmi_ack = data & 0x80;     // nmi acknowledge, 0 -> 1
143147
144   state->m_out[0] = data;
145   show_out(state->m_out);
148   m_out[0] = data;
149   show_out(m_out);
146150}
147151
148static WRITE8_HANDLER( spoker_video_and_leds_w )
152WRITE8_MEMBER(spoker_state::spoker_video_and_leds_w)
149153{
150   spoker_state *state = space->machine().driver_data<spoker_state>();
151154
152   set_led_status(space->machine(), 4,     data & 0x01);   // start?
153   set_led_status(space->machine(), 5,     data & 0x04);   // l_bet?
155   set_led_status(machine(), 4,     data & 0x01);   // start?
156   set_led_status(machine(), 5,     data & 0x04);   // l_bet?
154157
155   state->m_video_enable   =     data & 0x40;
156   state->m_hopper         =   (~data)& 0x80;
158   m_video_enable   =     data & 0x40;
159   m_hopper         =   (~data)& 0x80;
157160
158   state->m_out[1] = data;
159   show_out(state->m_out);
161   m_out[1] = data;
162   show_out(m_out);
160163}
161164
162static WRITE8_HANDLER( spoker_leds_w )
165WRITE8_MEMBER(spoker_state::spoker_leds_w)
163166{
164   spoker_state *state = space->machine().driver_data<spoker_state>();
165167
166   set_led_status(space->machine(), 0, data & 0x01);   // stop_1
167   set_led_status(space->machine(), 1, data & 0x02);   // stop_2
168   set_led_status(space->machine(), 2, data & 0x04);   // stop_3
169   set_led_status(space->machine(), 3, data & 0x08);   // stop
168   set_led_status(machine(), 0, data & 0x01);   // stop_1
169   set_led_status(machine(), 1, data & 0x02);   // stop_2
170   set_led_status(machine(), 2, data & 0x04);   // stop_3
171   set_led_status(machine(), 3, data & 0x08);   // stop
170172   // data & 0x10?
171173
172   state->m_out[2] = data;
173   show_out(state->m_out);
174   m_out[2] = data;
175   show_out(m_out);
174176}
175177
176static WRITE8_HANDLER( spoker_magic_w )
178WRITE8_MEMBER(spoker_state::spoker_magic_w)
177179{
178   spoker_state *state = space->machine().driver_data<spoker_state>();
179180
180   state->m_igs_magic[offset] = data;
181   m_igs_magic[offset] = data;
181182
182183   if (offset == 0)
183184      return;
184185
185   switch(state->m_igs_magic[0])
186   switch(m_igs_magic[0])
186187   {
187188      case 0x01:
188189         break;
189190
190191      default:
191192//          popmessage("magic %x <- %04x",igs_magic[0],data);
192         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0], data);
193         logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0], data);
193194   }
194195}
195196
196static READ8_HANDLER( spoker_magic_r )
197READ8_MEMBER(spoker_state::spoker_magic_r)
197198{
198   spoker_state *state = space->machine().driver_data<spoker_state>();
199199
200   switch(state->m_igs_magic[0])
200   switch(m_igs_magic[0])
201201   {
202202      case 0x00:
203         if ( !(state->m_igs_magic[1] & 0x01) )   return input_port_read(space->machine(), "DSW1");
204         if ( !(state->m_igs_magic[1] & 0x02) )   return input_port_read(space->machine(), "DSW2");
205         if ( !(state->m_igs_magic[1] & 0x04) )   return input_port_read(space->machine(), "DSW3");
206         if ( !(state->m_igs_magic[1] & 0x08) )   return input_port_read(space->machine(), "DSW4");
207         if ( !(state->m_igs_magic[1] & 0x10) )   return input_port_read(space->machine(), "DSW5");
208         logerror("%06x: warning, reading dsw with igs_magic[1] = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[1]);
203         if ( !(m_igs_magic[1] & 0x01) )   return input_port_read(machine(), "DSW1");
204         if ( !(m_igs_magic[1] & 0x02) )   return input_port_read(machine(), "DSW2");
205         if ( !(m_igs_magic[1] & 0x04) )   return input_port_read(machine(), "DSW3");
206         if ( !(m_igs_magic[1] & 0x08) )   return input_port_read(machine(), "DSW4");
207         if ( !(m_igs_magic[1] & 0x10) )   return input_port_read(machine(), "DSW5");
208         logerror("%06x: warning, reading dsw with igs_magic[1] = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[1]);
209209         break;
210210
211211      default:
212         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space->device()), state->m_igs_magic[0]);
212         logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(&space.device()), m_igs_magic[0]);
213213   }
214214
215215   return 0;
r14845r14846
229229   AM_RANGE( 0x2000, 0x23ff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split1_w ) AM_BASE_GENERIC( paletteram )
230230   AM_RANGE( 0x2400, 0x27ff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split2_w ) AM_BASE_GENERIC( paletteram2 )
231231
232   AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE_LEGACY(bg_tile_w ) AM_BASE(m_bg_tile_ram )
232   AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(bg_tile_w ) AM_BASE(m_bg_tile_ram )
233233
234   AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
234   AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
235235
236236   /* TODO: ppi #1 */
237   AM_RANGE( 0x6480, 0x6480 ) AM_WRITE_LEGACY(spoker_nmi_and_coins_w )
237   AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(spoker_nmi_and_coins_w )
238238   AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
239239   AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
240240
241241   /* TODO: ppi #2 */
242242   AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
243   AM_RANGE( 0x6491, 0x6491 ) AM_WRITE_LEGACY(spoker_video_and_leds_w )
244   AM_RANGE( 0x6492, 0x6492 ) AM_WRITE_LEGACY(spoker_leds_w )
243   AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(spoker_video_and_leds_w )
244   AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(spoker_leds_w )
245245
246246   AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
247247
r14845r14846
249249
250250   AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
251251
252   AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE_LEGACY(spoker_magic_r, spoker_magic_w )   // DSW1-5
252   AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(spoker_magic_r, spoker_magic_w )   // DSW1-5
253253
254   AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
254   AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
255255ADDRESS_MAP_END
256256
257257static ADDRESS_MAP_START( 3super8_portmap, AS_IO, 8, spoker_state )
r14845r14846
260260   AM_RANGE( 0x2000, 0x27ff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split1_w ) AM_BASE_GENERIC( paletteram )
261261   AM_RANGE( 0x2800, 0x2fff ) AM_RAM_WRITE_LEGACY(paletteram_xBBBBBGGGGGRRRRR_split2_w ) AM_BASE_GENERIC( paletteram2 )
262262
263   AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE_LEGACY(bg_tile_w ) AM_BASE(m_bg_tile_ram )
263   AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(bg_tile_w ) AM_BASE(m_bg_tile_ram )
264264
265265   AM_RANGE( 0x4000, 0x4000 ) AM_READ_PORT( "DSW1" )
266266   AM_RANGE( 0x4001, 0x4001 ) AM_READ_PORT( "DSW2" )
r14845r14846
270270
271271//  AM_RANGE( 0x4000, 0x40ff ) AM_WRITENOP
272272
273   AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE_LEGACY(fg_tile_w )  AM_BASE(m_fg_tile_ram )
273   AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w )  AM_BASE(m_fg_tile_ram )
274274
275275   AM_RANGE( 0x6480, 0x6480 ) AM_READ_PORT( "IN0" )
276276   AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "IN1" )
277277   AM_RANGE( 0x6491, 0x6491 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
278278   AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "IN2" )
279   AM_RANGE( 0x64b0, 0x64b0 ) AM_WRITE_LEGACY(spoker_leds_w )
279   AM_RANGE( 0x64b0, 0x64b0 ) AM_WRITE(spoker_leds_w )
280280   AM_RANGE( 0x64c0, 0x64c0 ) AM_READNOP //irq ack?
281281
282   AM_RANGE( 0x64f0, 0x64f0 ) AM_WRITE_LEGACY(spoker_nmi_and_coins_w )
282   AM_RANGE( 0x64f0, 0x64f0 ) AM_WRITE(spoker_nmi_and_coins_w )
283283
284   AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE_LEGACY(fg_color_w ) AM_BASE(m_fg_color_ram )
284   AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_BASE(m_fg_color_ram )
285285ADDRESS_MAP_END
286286
287287
src/mame/drivers/zr107.c
r14845r14846
189189   int m_ccu_vctl;
190190   UINT32 *m_workram;
191191   UINT32 *m_sharc_dataram;
192   DECLARE_WRITE32_MEMBER(paletteram32_w);
193   DECLARE_READ8_MEMBER(sysreg_r);
194   DECLARE_WRITE8_MEMBER(sysreg_w);
195   DECLARE_READ32_MEMBER(ccu_r);
196   DECLARE_WRITE32_MEMBER(ccu_w);
197   DECLARE_WRITE32_MEMBER(jetwave_palette_w);
198   DECLARE_READ32_MEMBER(dsp_dataram_r);
199   DECLARE_WRITE32_MEMBER(dsp_dataram_w);
192200};
193201
194202
r14845r14846
223231
224232/*****************************************************************************/
225233
226static WRITE32_HANDLER( paletteram32_w )
234WRITE32_MEMBER(zr107_state::paletteram32_w)
227235{
228   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
229   data = space->machine().generic.paletteram.u32[offset];
230   palette_set_color_rgb(space->machine(), (offset * 2) + 0, pal5bit(data >> 26), pal5bit(data >> 21), pal5bit(data >> 16));
231   palette_set_color_rgb(space->machine(), (offset * 2) + 1, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
236   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
237   data = machine().generic.paletteram.u32[offset];
238   palette_set_color_rgb(machine(), (offset * 2) + 0, pal5bit(data >> 26), pal5bit(data >> 21), pal5bit(data >> 16));
239   palette_set_color_rgb(machine(), (offset * 2) + 1, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
232240}
233241
234242#define NUM_LAYERS   2
r14845r14846
274282
275283/******************************************************************/
276284
277static READ8_HANDLER( sysreg_r )
285READ8_MEMBER(zr107_state::sysreg_r)
278286{
279287   UINT32 r = 0;
280288   static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3", "IN4" };
r14845r14846
286294      case 2:   /* I/O port 2 */
287295      case 3:   /* System Port 0 */
288296      case 4:   /* System Port 1 */
289         r = input_port_read(space->machine(), portnames[offset]);
297         r = input_port_read(machine(), portnames[offset]);
290298         break;
291299
292300      case 5:   /* Parallel data port */
r14845r14846
295303   return r;
296304}
297305
298static WRITE8_HANDLER( sysreg_w )
306WRITE8_MEMBER(zr107_state::sysreg_w)
299307{
300   zr107_state *state = space->machine().driver_data<zr107_state>();
301308   switch (offset)
302309   {
303310      case 0:   /* LED Register 0 */
304         state->m_led_reg0 = data;
311         m_led_reg0 = data;
305312         break;
306313
307314      case 1:   /* LED Register 1 */
308         state->m_led_reg1 = data;
315         m_led_reg1 = data;
309316         break;
310317
311318      case 2: /* Parallel data register */
r14845r14846
323330                0x02 = EEPCLK
324331                0x01 = EEPDI
325332            */
326         input_port_write(space->machine(), "EEPROMOUT", data & 0x07, 0xff);
327         cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
333         input_port_write(machine(), "EEPROMOUT", data & 0x07, 0xff);
334         cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
328335         mame_printf_debug("System register 0 = %02X\n", data);
329336         break;
330337
r14845r14846
340347                0x01 = ADDSCLK (ADC SCLK)
341348            */
342349         if (data & 0x80)   /* CG Board 1 IRQ Ack */
343            cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
350            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
344351         if (data & 0x40)   /* CG Board 0 IRQ Ack */
345            cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
352            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
346353         set_cgboard_id((data >> 4) & 3);
347         input_port_write(space->machine(), "OUT4", data, 0xff);
354         input_port_write(machine(), "OUT4", data, 0xff);
348355         mame_printf_debug("System register 1 = %02X\n", data);
349356         break;
350357
r14845r14846
353360                0x01 = AFE
354361            */
355362         if (data & 0x01)
356            watchdog_reset(space->machine());
363            watchdog_reset(machine());
357364         break;
358365
359366   }
360367}
361368
362static READ32_HANDLER( ccu_r )
369READ32_MEMBER(zr107_state::ccu_r)
363370{
364   zr107_state *state = space->machine().driver_data<zr107_state>();
365371   UINT32 r = 0;
366372   switch (offset)
367373   {
r14845r14846
370376         // Midnight Run polls the vertical counter in vblank
371377         if (ACCESSING_BITS_24_31)
372378         {
373            state->m_ccu_vcth ^= 0xff;
374            r |= state->m_ccu_vcth << 24;
379            m_ccu_vcth ^= 0xff;
380            r |= m_ccu_vcth << 24;
375381         }
376382         if (ACCESSING_BITS_8_15)
377383         {
378            state->m_ccu_vctl++;
379            state->m_ccu_vctl &= 0x1ff;
380            r |= (state->m_ccu_vctl >> 2) << 8;
384            m_ccu_vctl++;
385            m_ccu_vctl &= 0x1ff;
386            r |= (m_ccu_vctl >> 2) << 8;
381387         }
382388      }
383389   }
r14845r14846
385391   return r;
386392}
387393
388static WRITE32_HANDLER( ccu_w )
394WRITE32_MEMBER(zr107_state::ccu_w)
389395{
390
391396}
392397
393398/******************************************************************/
r14845r14846
406411   AM_RANGE(0x00000000, 0x000fffff) AM_RAM   AM_BASE(m_workram)   /* Work RAM */
407412   AM_RANGE(0x74000000, 0x74003fff) AM_DEVREADWRITE_LEGACY("k056832", k056832_ram_long_r, k056832_ram_long_w)
408413   AM_RANGE(0x74020000, 0x7402003f) AM_DEVREADWRITE_LEGACY("k056832", k056832_long_r, k056832_long_w)
409   AM_RANGE(0x74060000, 0x7406003f) AM_READWRITE_LEGACY(ccu_r, ccu_w)
410   AM_RANGE(0x74080000, 0x74081fff) AM_RAM_WRITE_LEGACY(paletteram32_w) AM_BASE_GENERIC(paletteram)
414   AM_RANGE(0x74060000, 0x7406003f) AM_READWRITE(ccu_r, ccu_w)
415   AM_RANGE(0x74080000, 0x74081fff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
411416   AM_RANGE(0x740a0000, 0x740a3fff) AM_DEVREAD_LEGACY("k056832", k056832_rom_long_r)
412417   AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE_LEGACY(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc)      /* 21N 21K 23N 23K */
413418   AM_RANGE(0x78010000, 0x7801ffff) AM_WRITE_LEGACY(cgboard_dsp_shared_w_ppc)
414419   AM_RANGE(0x78040000, 0x7804000f) AM_READWRITE_LEGACY(K001006_0_r, K001006_0_w)
415420   AM_RANGE(0x780c0000, 0x780c0007) AM_READWRITE_LEGACY(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc)
416   AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8_LEGACY(sysreg_r, sysreg_w, 0xffffffff)
421   AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff)
417422   AM_RANGE(0x7e008000, 0x7e009fff) AM_DEVREADWRITE8_LEGACY("k056230", k056230_r, k056230_w, 0xffffffff)            /* LANC registers */
418423   AM_RANGE(0x7e00a000, 0x7e00bfff) AM_DEVREADWRITE_LEGACY("k056230", lanc_ram_r, lanc_ram_w)      /* LANC Buffer RAM (27E) */
419424   AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
r14845r14846
423428ADDRESS_MAP_END
424429
425430
426static WRITE32_HANDLER( jetwave_palette_w )
431WRITE32_MEMBER(zr107_state::jetwave_palette_w)
427432{
428   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
429   data = space->machine().generic.paletteram.u32[offset];
430   palette_set_color_rgb(space->machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
433   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
434   data = machine().generic.paletteram.u32[offset];
435   palette_set_color_rgb(machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
431436}
432437
433438static ADDRESS_MAP_START( jetwave_map, AS_PROGRAM, 32, zr107_state )
434439   AM_RANGE(0x00000000, 0x000fffff) AM_MIRROR(0x80000000) AM_RAM      /* Work RAM */
435440   AM_RANGE(0x74000000, 0x740000ff) AM_MIRROR(0x80000000) AM_DEVREADWRITE_LEGACY("k001604", k001604_reg_r, k001604_reg_w)
436   AM_RANGE(0x74010000, 0x7401ffff) AM_MIRROR(0x80000000) AM_RAM_WRITE_LEGACY(jetwave_palette_w) AM_BASE_GENERIC(paletteram)
441   AM_RANGE(0x74010000, 0x7401ffff) AM_MIRROR(0x80000000) AM_RAM_WRITE(jetwave_palette_w) AM_BASE_GENERIC(paletteram)
437442   AM_RANGE(0x74020000, 0x7403ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE_LEGACY("k001604", k001604_tile_r, k001604_tile_w)
438443   AM_RANGE(0x74040000, 0x7407ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE_LEGACY("k001604", k001604_char_r, k001604_char_w)
439444   AM_RANGE(0x78000000, 0x7800ffff) AM_MIRROR(0x80000000) AM_READWRITE_LEGACY(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc)      /* 21N 21K 23N 23K */
r14845r14846
441446   AM_RANGE(0x78040000, 0x7804000f) AM_MIRROR(0x80000000) AM_READWRITE_LEGACY(K001006_0_r, K001006_0_w)
442447   AM_RANGE(0x78080000, 0x7808000f) AM_MIRROR(0x80000000) AM_READWRITE_LEGACY(K001006_1_r, K001006_1_w)
443448   AM_RANGE(0x780c0000, 0x780c0007) AM_MIRROR(0x80000000) AM_READWRITE_LEGACY(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc)
444   AM_RANGE(0x7e000000, 0x7e003fff) AM_MIRROR(0x80000000) AM_READWRITE8_LEGACY(sysreg_r, sysreg_w, 0xffffffff)
449   AM_RANGE(0x7e000000, 0x7e003fff) AM_MIRROR(0x80000000) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff)
445450   AM_RANGE(0x7e008000, 0x7e009fff) AM_MIRROR(0x80000000) AM_DEVREADWRITE8_LEGACY("k056230", k056230_r, k056230_w, 0xffffffff)            /* LANC registers */
446451   AM_RANGE(0x7e00a000, 0x7e00bfff) AM_MIRROR(0x80000000) AM_DEVREADWRITE_LEGACY("k056230", lanc_ram_r, lanc_ram_w)   /* LANC Buffer RAM (27E) */
447452   AM_RANGE(0x7e00c000, 0x7e00c007) AM_MIRROR(0x80000000) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
r14845r14846
473478/*****************************************************************************/
474479
475480
476static READ32_HANDLER( dsp_dataram_r )
481READ32_MEMBER(zr107_state::dsp_dataram_r)
477482{
478   zr107_state *state = space->machine().driver_data<zr107_state>();
479   return state->m_sharc_dataram[offset] & 0xffff;
483   return m_sharc_dataram[offset] & 0xffff;
480484}
481485
482static WRITE32_HANDLER( dsp_dataram_w )
486WRITE32_MEMBER(zr107_state::dsp_dataram_w)
483487{
484   zr107_state *state = space->machine().driver_data<zr107_state>();
485   state->m_sharc_dataram[offset] = data;
488   m_sharc_dataram[offset] = data;
486489}
487490
488491static ADDRESS_MAP_START( sharc_map, AS_DATA, 32, zr107_state )
489492   AM_RANGE(0x400000, 0x41ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
490   AM_RANGE(0x500000, 0x5fffff) AM_READWRITE_LEGACY(dsp_dataram_r, dsp_dataram_w)
493   AM_RANGE(0x500000, 0x5fffff) AM_READWRITE(dsp_dataram_r, dsp_dataram_w)
491494   AM_RANGE(0x600000, 0x6fffff) AM_READWRITE_LEGACY(K001005_r, K001005_w)
492495   AM_RANGE(0x700000, 0x7000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
493496ADDRESS_MAP_END
src/mame/drivers/dominob.c
r14845r14846
8080   /* input-related */
8181   //UINT8 m_paddle_select;
8282   //UINT8 m_paddle_value;
83   DECLARE_WRITE8_MEMBER(dominob_d008_w);
84   DECLARE_READ8_MEMBER(dominob_unk_port02_r);
8385};
8486
8587static VIDEO_START( dominob )
r14845r14846
159161}
160162
161163
162static WRITE8_HANDLER( dominob_d008_w )
164WRITE8_MEMBER(dominob_state::dominob_d008_w)
163165{
164166   /* is there a purpose on this ? always set to 0x00 (read from 0xc47b in RAM) */
165167}
r14845r14846
170172
171173   AM_RANGE(0xd000, 0xd001) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
172174   AM_RANGE(0xd001, 0xd001) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
173   AM_RANGE(0xd008, 0xd008) AM_WRITE_LEGACY(dominob_d008_w)
175   AM_RANGE(0xd008, 0xd008) AM_WRITE(dominob_d008_w)
174176   AM_RANGE(0xd00c, 0xd00c) AM_READ_PORT("IN0")
175177   AM_RANGE(0xd010, 0xd010) AM_READ_PORT("IN1") AM_WRITENOP
176178   AM_RANGE(0xd018, 0xd018) AM_READ_PORT("IN2") AM_WRITENOP
r14845r14846
185187ADDRESS_MAP_END
186188
187189/* I don't know if this has a purpose - also read in 'arkatayt' but not handled */
188static READ8_HANDLER( dominob_unk_port02_r )
190READ8_MEMBER(dominob_state::dominob_unk_port02_r)
189191{
190192   return 0xff;
191193}
192194
193195static ADDRESS_MAP_START( portmap, AS_IO, 8, dominob_state )
194196   ADDRESS_MAP_GLOBAL_MASK(0xff)
195   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(dominob_unk_port02_r)
197   AM_RANGE(0x02, 0x02) AM_READ(dominob_unk_port02_r)
196198ADDRESS_MAP_END
197199
198200
src/mame/drivers/sbrkout.c
r14845r14846
5050   UINT8 m_sync2_value;
5151   UINT8 m_pot_mask[2];
5252   UINT8 m_pot_trigger[2];
53   DECLARE_WRITE8_MEMBER(irq_ack_w);
54   DECLARE_READ8_MEMBER(switches_r);
55   DECLARE_WRITE8_MEMBER(pot_mask1_w);
56   DECLARE_WRITE8_MEMBER(pot_mask2_w);
57   DECLARE_WRITE8_MEMBER(start_1_led_w);
58   DECLARE_WRITE8_MEMBER(start_2_led_w);
59   DECLARE_WRITE8_MEMBER(serve_led_w);
60   DECLARE_WRITE8_MEMBER(coincount_w);
61   DECLARE_READ8_MEMBER(sync_r);
62   DECLARE_READ8_MEMBER(sync2_r);
63   DECLARE_WRITE8_MEMBER(sbrkout_videoram_w);
5364};
5465
5566
r14845r14846
142153}
143154
144155
145static WRITE8_HANDLER( irq_ack_w )
156WRITE8_MEMBER(sbrkout_state::irq_ack_w)
146157{
147   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
158   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
148159}
149160
150161
r14845r14846
155166 *
156167 *************************************/
157168
158static READ8_HANDLER( switches_r )
169READ8_MEMBER(sbrkout_state::switches_r)
159170{
160   sbrkout_state *state = space->machine().driver_data<sbrkout_state>();
161171   UINT8 result = 0xff;
162172
163173   /* DIP switches are selected by ADR0+ADR1 if ADR3 == 0 */
164174   if ((offset & 0x0b) == 0x00)
165      result &= (input_port_read(space->machine(), "DIPS") << 6) | 0x3f;
175      result &= (input_port_read(machine(), "DIPS") << 6) | 0x3f;
166176   if ((offset & 0x0b) == 0x01)
167      result &= (input_port_read(space->machine(), "DIPS") << 4) | 0x3f;
177      result &= (input_port_read(machine(), "DIPS") << 4) | 0x3f;
168178   if ((offset & 0x0b) == 0x02)
169      result &= (input_port_read(space->machine(), "DIPS") << 0) | 0x3f;
179      result &= (input_port_read(machine(), "DIPS") << 0) | 0x3f;
170180   if ((offset & 0x0b) == 0x03)
171      result &= (input_port_read(space->machine(), "DIPS") << 2) | 0x3f;
181      result &= (input_port_read(machine(), "DIPS") << 2) | 0x3f;
172182
173183   /* other switches are selected by ADR0+ADR1+ADR2 if ADR4 == 0 */
174184   if ((offset & 0x17) == 0x00)
175      result &= (input_port_read(space->machine(), "SELECT") << 7) | 0x7f;
185      result &= (input_port_read(machine(), "SELECT") << 7) | 0x7f;
176186   if ((offset & 0x17) == 0x04)
177      result &= ((state->m_pot_trigger[0] & ~state->m_pot_mask[0]) << 7) | 0x7f;
187      result &= ((m_pot_trigger[0] & ~m_pot_mask[0]) << 7) | 0x7f;
178188   if ((offset & 0x17) == 0x05)
179      result &= ((state->m_pot_trigger[1] & ~state->m_pot_mask[1]) << 7) | 0x7f;
189      result &= ((m_pot_trigger[1] & ~m_pot_mask[1]) << 7) | 0x7f;
180190   if ((offset & 0x17) == 0x06)
181      result &= input_port_read(space->machine(), "SERVE");
191      result &= input_port_read(machine(), "SERVE");
182192   if ((offset & 0x17) == 0x07)
183      result &= (input_port_read(space->machine(), "SELECT") << 6) | 0x7f;
193      result &= (input_port_read(machine(), "SELECT") << 6) | 0x7f;
184194
185195   return result;
186196}
r14845r14846
204214}
205215
206216
207static WRITE8_HANDLER( pot_mask1_w )
217WRITE8_MEMBER(sbrkout_state::pot_mask1_w)
208218{
209   sbrkout_state *state = space->machine().driver_data<sbrkout_state>();
210   state->m_pot_mask[0] = ~offset & 1;
211   state->m_pot_trigger[0] = 0;
212   update_nmi_state(space->machine());
219   m_pot_mask[0] = ~offset & 1;
220   m_pot_trigger[0] = 0;
221   update_nmi_state(machine());
213222}
214223
215224
216static WRITE8_HANDLER( pot_mask2_w )
225WRITE8_MEMBER(sbrkout_state::pot_mask2_w)
217226{
218   sbrkout_state *state = space->machine().driver_data<sbrkout_state>();
219   state->m_pot_mask[1] = ~offset & 1;
220   state->m_pot_trigger[1] = 0;
221   update_nmi_state(space->machine());
227   m_pot_mask[1] = ~offset & 1;
228   m_pot_trigger[1] = 0;
229   update_nmi_state(machine());
222230}
223231
224232
r14845r14846
235243    reversed for the Serve LED, which has a NOT on the signal.
236244*/
237245
238static WRITE8_HANDLER( start_1_led_w )
246WRITE8_MEMBER(sbrkout_state::start_1_led_w)
239247{
240248   output_set_led_value(0, offset & 1);
241249}
242250
243251
244static WRITE8_HANDLER( start_2_led_w )
252WRITE8_MEMBER(sbrkout_state::start_2_led_w)
245253{
246254   output_set_led_value(1, offset & 1);
247255}
248256
249257
250static WRITE8_HANDLER( serve_led_w )
258WRITE8_MEMBER(sbrkout_state::serve_led_w)
251259{
252260   output_set_led_value(0, ~offset & 1);
253261}
254262
255263
256static WRITE8_HANDLER( coincount_w )
264WRITE8_MEMBER(sbrkout_state::coincount_w)
257265{
258   coin_counter_w(space->machine(), 0, offset & 1);
266   coin_counter_w(machine(), 0, offset & 1);
259267}
260268
261269
r14845r14846
266274 *
267275 *************************************/
268276
269static READ8_HANDLER( sync_r )
277READ8_MEMBER(sbrkout_state::sync_r)
270278{
271   sbrkout_state *state = space->machine().driver_data<sbrkout_state>();
272   int hpos = space->machine().primary_screen->hpos();
273   state->m_sync2_value = (hpos >= 128 && hpos <= space->machine().primary_screen->visible_area().max_x);
274   return space->machine().primary_screen->vpos();
279   int hpos = machine().primary_screen->hpos();
280   m_sync2_value = (hpos >= 128 && hpos <= machine().primary_screen->visible_area().max_x);
281   return machine().primary_screen->vpos();
275282}
276283
277284
278static READ8_HANDLER( sync2_r )
285READ8_MEMBER(sbrkout_state::sync2_r)
279286{
280   sbrkout_state *state = space->machine().driver_data<sbrkout_state>();
281   return (state->m_sync2_value << 7) | 0x7f;
287   return (m_sync2_value << 7) | 0x7f;
282288}
283289
284290
r14845r14846
305311}
306312
307313
308static WRITE8_HANDLER( sbrkout_videoram_w )
314WRITE8_MEMBER(sbrkout_state::sbrkout_videoram_w)
309315{
310   sbrkout_state *state = space->machine().driver_data<sbrkout_state>();
311   UINT8 *videoram = state->m_videoram;
316   UINT8 *videoram = m_videoram;
312317   videoram[offset] = data;
313   state->m_bg_tilemap->mark_tile_dirty(offset);
318   m_bg_tilemap->mark_tile_dirty(offset);
314319}
315320
316321
r14845r14846
352357static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sbrkout_state )
353358   ADDRESS_MAP_GLOBAL_MASK(0x3fff)
354359   AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x380) AM_RAMBANK("bank1")
355   AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE_LEGACY(sbrkout_videoram_w) AM_BASE(m_videoram)
356   AM_RANGE(0x0800, 0x083f) AM_READ_LEGACY(switches_r)
360   AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(sbrkout_videoram_w) AM_BASE(m_videoram)
361   AM_RANGE(0x0800, 0x083f) AM_READ(switches_r)
357362   AM_RANGE(0x0840, 0x0840) AM_MIRROR(0x003f) AM_READ_PORT("COIN")
358363   AM_RANGE(0x0880, 0x0880) AM_MIRROR(0x003f) AM_READ_PORT("START")
359364   AM_RANGE(0x08c0, 0x08c0) AM_MIRROR(0x003f) AM_READ_PORT("SERVICE")
360   AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ_LEGACY(sync_r)
361   AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE_LEGACY(serve_led_w)
362   AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE_LEGACY(start_1_led_w)
363   AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE_LEGACY(start_2_led_w)
364   AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE_LEGACY(pot_mask1_w)
365   AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE_LEGACY(pot_mask2_w)
366   AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE_LEGACY(coincount_w)
365   AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ(sync_r)
366   AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE(serve_led_w)
367   AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE(start_1_led_w)
368   AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE(start_2_led_w)
369   AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE(pot_mask1_w)
370   AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE(pot_mask2_w)
371   AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE(coincount_w)
367372   AM_RANGE(0x0c80, 0x0c80) AM_MIRROR(0x007f) AM_WRITE_LEGACY(watchdog_reset_w)
368   AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE_LEGACY(irq_ack_w)
369   AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ_LEGACY(sync2_r)
373   AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE(irq_ack_w)
374   AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ(sync2_r)
370375   AM_RANGE(0x2800, 0x3fff) AM_ROM
371376ADDRESS_MAP_END
372377
src/mame/drivers/bwidow.c
r14845r14846
231231      : driver_device(mconfig, type, tag) { }
232232
233233   int m_lastdata;
234   DECLARE_READ8_MEMBER(spacduel_IN3_r);
235   DECLARE_WRITE8_MEMBER(bwidow_misc_w);
236   DECLARE_WRITE8_MEMBER(irq_ack_w);
234237};
235238
236239
r14845r14846
263266
264267*/
265268
266static READ8_HANDLER( spacduel_IN3_r )
269READ8_MEMBER(bwidow_state::spacduel_IN3_r)
267270{
268271   int res;
269272   int res1;
270273   int res2;
271274   int res3;
272275
273   res1 = input_port_read(space->machine(), "IN3");
274   res2 = input_port_read(space->machine(), "IN4");
275   res3 = input_port_read_safe(space->machine(), "DSW2", 0);
276   res1 = input_port_read(machine(), "IN3");
277   res2 = input_port_read(machine(), "IN4");
278   res3 = input_port_read_safe(machine(), "DSW2", 0);
276279   res = 0x00;
277280
278281   switch (offset & 0x07)
r14845r14846
326329 *
327330 *************************************/
328331
329static WRITE8_HANDLER( bwidow_misc_w )
332WRITE8_MEMBER(bwidow_state::bwidow_misc_w)
330333{
331   bwidow_state *state = space->machine().driver_data<bwidow_state>();
332334   /*
333335        0x10 = p1 led
334336        0x20 = p2 led
r14845r14846
336338        0x02 = coin counter 2
337339    */
338340
339   if (data == state->m_lastdata) return;
340   set_led_status(space->machine(), 0,~data & 0x10);
341   set_led_status(space->machine(), 1,~data & 0x20);
342   coin_counter_w(space->machine(), 0, data & 0x01);
343   coin_counter_w(space->machine(), 1, data & 0x02);
344   state->m_lastdata = data;
341   if (data == m_lastdata) return;
342   set_led_status(machine(), 0,~data & 0x10);
343   set_led_status(machine(), 1,~data & 0x20);
344   coin_counter_w(machine(), 0, data & 0x01);
345   coin_counter_w(machine(), 1, data & 0x02);
346   m_lastdata = data;
345347}
346348
347349/*************************************
r14845r14846
350352 *
351353 *************************************/
352354
353static WRITE8_HANDLER( irq_ack_w )
355WRITE8_MEMBER(bwidow_state::irq_ack_w)
354356{
355   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
357   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
356358}
357359
358360
r14845r14846
372374   AM_RANGE(0x7800, 0x7800) AM_READ_PORT("IN0")
373375   AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN3")
374376   AM_RANGE(0x8800, 0x8800) AM_READ_PORT("IN4")
375   AM_RANGE(0x8800, 0x8800) AM_WRITE_LEGACY(bwidow_misc_w) /* coin counters, leds */
377   AM_RANGE(0x8800, 0x8800) AM_WRITE(bwidow_misc_w) /* coin counters, leds */
376378   AM_RANGE(0x8840, 0x8840) AM_WRITE_LEGACY(avgdvg_go_w)
377379   AM_RANGE(0x8880, 0x8880) AM_WRITE_LEGACY(avgdvg_reset_w)
378   AM_RANGE(0x88c0, 0x88c0) AM_WRITE_LEGACY(irq_ack_w) /* interrupt acknowledge */
380   AM_RANGE(0x88c0, 0x88c0) AM_WRITE(irq_ack_w) /* interrupt acknowledge */
379381   AM_RANGE(0x8900, 0x8900) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
380382   AM_RANGE(0x8940, 0x897f) AM_DEVWRITE("earom", atari_vg_earom_device, write)
381383   AM_RANGE(0x8980, 0x89ed) AM_WRITENOP /* watchdog clear */
r14845r14846
386388static ADDRESS_MAP_START( spacduel_map, AS_PROGRAM, 8, bwidow_state )
387389   AM_RANGE(0x0000, 0x03ff) AM_RAM
388390   AM_RANGE(0x0800, 0x0800) AM_READ_PORT("IN0")
389   AM_RANGE(0x0900, 0x0907) AM_READ_LEGACY(spacduel_IN3_r)   /* IN1 */
391   AM_RANGE(0x0900, 0x0907) AM_READ(spacduel_IN3_r)   /* IN1 */
390392   AM_RANGE(0x0905, 0x0906) AM_WRITENOP /* ignore? */
391393   AM_RANGE(0x0a00, 0x0a00) AM_DEVREAD("earom", atari_vg_earom_device, read)
392394//  AM_RANGE(0x0c00, 0x0c00) AM_WRITE_LEGACY(coin_counter_w) /* coin out */
393395   AM_RANGE(0x0c80, 0x0c80) AM_WRITE_LEGACY(avgdvg_go_w)
394396   AM_RANGE(0x0d00, 0x0d00) AM_WRITENOP /* watchdog clear */
395397   AM_RANGE(0x0d80, 0x0d80) AM_WRITE_LEGACY(avgdvg_reset_w)
396   AM_RANGE(0x0e00, 0x0e00) AM_WRITE_LEGACY(irq_ack_w) /* interrupt acknowledge */
398   AM_RANGE(0x0e00, 0x0e00) AM_WRITE(irq_ack_w) /* interrupt acknowledge */
397399   AM_RANGE(0x0e80, 0x0e80) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
398400   AM_RANGE(0x0f00, 0x0f3f) AM_DEVWRITE("earom", atari_vg_earom_device, write)
399401   AM_RANGE(0x1000, 0x100f) AM_DEVREADWRITE_LEGACY("pokey1", pokey_r, pokey_w)
src/mame/drivers/re900.c
r14845r14846
9595   UINT8 m_ledant;
9696   UINT8 m_player;
9797   UINT8 m_stat_a;
98   DECLARE_READ8_MEMBER(rom_r);
99   DECLARE_WRITE8_MEMBER(cpu_port_0_w);
100   DECLARE_WRITE8_MEMBER(re900_watchdog_reset_w);
98101};
99102
100103
r14845r14846
168171   return retval;
169172}
170173
171static READ8_HANDLER (rom_r)
174READ8_MEMBER(re900_state::rom_r)
172175{
173   re900_state *state = space->machine().driver_data<re900_state>();
174   return state->m_rom[offset];
176   return m_rom[offset];
175177}
176178
177179
r14845r14846
205207   }
206208}
207209
208static WRITE8_HANDLER (cpu_port_0_w)
210WRITE8_MEMBER(re900_state::cpu_port_0_w)
209211{
210212//  output_set_lamp_value(7,1 ^ ( (data >> 4) & 1)); /* Cont. Sal */
211213//  output_set_lamp_value(8,1 ^ ( (data >> 5) & 1)); /* Cont. Ent */
212214}
213215
214static WRITE8_HANDLER(re900_watchdog_reset_w)
216WRITE8_MEMBER(re900_state::re900_watchdog_reset_w)
215217{
216218   //watchdog_reset_w(space,0,0); /* To do! */
217219}
r14845r14846
226228ADDRESS_MAP_END
227229
228230static ADDRESS_MAP_START( mem_io, AS_IO, 8, re900_state )
229   AM_RANGE(0x0000, 0xbfff) AM_READ_LEGACY(rom_r)
231   AM_RANGE(0x0000, 0xbfff) AM_READ(rom_r)
230232   AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("nvram")
231233   AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("tms9128", tms9928a_device, vram_write)
232234   AM_RANGE(0xe001, 0xe001) AM_DEVWRITE("tms9128", tms9928a_device, register_write)
233235   AM_RANGE(0xe800, 0xe801) AM_DEVWRITE_LEGACY("ay_re900", ay8910_address_data_w)
234236   AM_RANGE(0xe802, 0xe802) AM_DEVREAD_LEGACY("ay_re900", ay8910_r)
235   AM_RANGE(0xe000, 0xefff) AM_WRITE_LEGACY(re900_watchdog_reset_w)
236   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_WRITE_LEGACY(cpu_port_0_w)
237   AM_RANGE(0xe000, 0xefff) AM_WRITE(re900_watchdog_reset_w)
238   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_WRITE(cpu_port_0_w)
237239   AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_NOP
238240   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_NOP
239241ADDRESS_MAP_END
src/mame/drivers/jackpool.c
r14845r14846
3030   UINT16 *m_vram;
3131   UINT8 m_map_vreg;
3232   UINT16 *m_io;
33   DECLARE_READ16_MEMBER(jackpool_ff_r);
34   DECLARE_READ16_MEMBER(jackpool_io_r);
35   DECLARE_WRITE16_MEMBER(jackpool_io_w);
3336};
3437
3538
r14845r14846
8386}
8487
8588/*Communication ram*/
86static READ16_HANDLER( jackpool_ff_r )
89READ16_MEMBER(jackpool_state::jackpool_ff_r)
8790{
8891   return 0xffff;
8992}
9093
91static READ16_HANDLER( jackpool_io_r )
94READ16_MEMBER(jackpool_state::jackpool_io_r)
9295{
93   jackpool_state *state = space->machine().driver_data<jackpool_state>();
9496   switch(offset*2)
9597   {
96      case 0x00: return input_port_read(space->machine(),"COIN1");
97      case 0x04: return input_port_read(space->machine(),"UNK1");
98      case 0x06: return input_port_read(space->machine(),"UNK2");
99      case 0x08: return input_port_read(space->machine(),"SERVICE1");
100      case 0x0a: return input_port_read(space->machine(),"SERVICE2");//probably not a button, remote?
101      case 0x0c: return input_port_read(space->machine(),"PAYOUT");
102      case 0x0e: return input_port_read(space->machine(),"START2");
103      case 0x10: return input_port_read(space->machine(),"HOLD3");
104      case 0x12: return input_port_read(space->machine(),"HOLD4");
105      case 0x14: return input_port_read(space->machine(),"HOLD2");
106      case 0x16: return input_port_read(space->machine(),"HOLD1");
107      case 0x18: return input_port_read(space->machine(),"HOLD5");
108      case 0x1a: return input_port_read(space->machine(),"START1");
109      case 0x1c: return input_port_read(space->machine(),"BET");
98      case 0x00: return input_port_read(machine(),"COIN1");
99      case 0x04: return input_port_read(machine(),"UNK1");
100      case 0x06: return input_port_read(machine(),"UNK2");
101      case 0x08: return input_port_read(machine(),"SERVICE1");
102      case 0x0a: return input_port_read(machine(),"SERVICE2");//probably not a button, remote?
103      case 0x0c: return input_port_read(machine(),"PAYOUT");
104      case 0x0e: return input_port_read(machine(),"START2");
105      case 0x10: return input_port_read(machine(),"HOLD3");
106      case 0x12: return input_port_read(machine(),"HOLD4");
107      case 0x14: return input_port_read(machine(),"HOLD2");
108      case 0x16: return input_port_read(machine(),"HOLD1");
109      case 0x18: return input_port_read(machine(),"HOLD5");
110      case 0x1a: return input_port_read(machine(),"START1");
111      case 0x1c: return input_port_read(machine(),"BET");
110112      case 0x1e: return 0xff; //ticket motor
111113      case 0x20: return 0xff; //hopper motor
112       case 0x2c: return space->machine().device<eeprom_device>("eeprom")->read_bit();
113       case 0x2e: return space->machine().device<eeprom_device>("eeprom")->read_bit();
114       case 0x2c: return machine().device<eeprom_device>("eeprom")->read_bit();
115       case 0x2e: return machine().device<eeprom_device>("eeprom")->read_bit();
114116//      default: printf("R %02x\n",offset*2); break;
115117   }
116118
117119//  printf("R %02x\n",offset*2);
118   return state->m_io[offset];
120   return m_io[offset];
119121}
120122
121static WRITE16_HANDLER( jackpool_io_w )
123WRITE16_MEMBER(jackpool_state::jackpool_io_w)
122124{
123   jackpool_state *state = space->machine().driver_data<jackpool_state>();
124   COMBINE_DATA(&state->m_io[offset]);
125   COMBINE_DATA(&m_io[offset]);
125126
126127   switch(offset*2)
127128   {
r14845r14846
137138      case 0x46: /* ---- ---x coin counter */break;
138139      case 0x4a: /* ---- ---x Ticket motor */break;
139140      case 0x4c: /* ---- ---x Hopper motor */break;
140      case 0x4e: state->m_map_vreg = data & 1;        break;
141      case 0x50: space->machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break;
142      case 0x52: space->machine().device<eeprom_device>("eeprom")->set_clock_line((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break;
143      case 0x54: space->machine().device<eeprom_device>("eeprom")->write_bit(data & 1); break;
144//      case 0x5a: space->machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break;
145//      case 0x5c: space->machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break;
141      case 0x4e: m_map_vreg = data & 1;        break;
142      case 0x50: machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break;
143      case 0x52: machine().device<eeprom_device>("eeprom")->set_clock_line((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break;
144      case 0x54: machine().device<eeprom_device>("eeprom")->write_bit(data & 1); break;
145//      case 0x5a: machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break;
146//      case 0x5c: machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break;
146147      case 0x60: break;
147148//      default: printf("[%02x] <- %02x W\n",offset*2,data);      break;
148149   }
r14845r14846
151152   if(offset*2 == 0x54)
152153   {
153154      printf("Write bit %02x\n",data);
154      space->machine().device<eeprom_device>("eeprom")->write_bit(data & 1);
155      machine().device<eeprom_device>("eeprom")->write_bit(data & 1);
155156   }
156157   if(offset*2 == 0x52)
157158   {
158159      printf("Clock bit %02x\n",data);
159      space->machine().device<eeprom_device>("eeprom")->set_clock_line((data & 1) ? ASSERT_LINE : CLEAR_LINE );
160      machine().device<eeprom_device>("eeprom")->set_clock_line((data & 1) ? ASSERT_LINE : CLEAR_LINE );
160161   }
161162   if(offset*2 == 0x50)
162163   {
163164      printf("chip select bit %02x\n",data);
164      space->machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE );
165      machine().device<eeprom_device>("eeprom")->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE );
165166   }
166167   #endif
167168}
r14845r14846
174175   AM_RANGE(0x348000, 0x34ffff) AM_RAM //<- vram banks 2 & 3?
175176
176177   AM_RANGE(0x360000, 0x3603ff) AM_RAM_WRITE_LEGACY(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
177   AM_RANGE(0x380000, 0x380061) AM_READWRITE_LEGACY(jackpool_io_r,jackpool_io_w) AM_BASE(m_io)//AM_READ_LEGACY(jackpool_io_r)
178   AM_RANGE(0x380000, 0x380061) AM_READWRITE(jackpool_io_r,jackpool_io_w) AM_BASE(m_io)//AM_READ(jackpool_io_r)
178179
179   AM_RANGE(0x800000, 0x80000f) AM_READ_LEGACY(jackpool_ff_r) AM_WRITENOP //UART
180   AM_RANGE(0x800000, 0x80000f) AM_READ(jackpool_ff_r) AM_WRITENOP //UART
180181   AM_RANGE(0xa00000, 0xa00001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
181182ADDRESS_MAP_END
182183
src/mame/drivers/nmg5.c
r14845r14846
254254   /* devices */
255255   device_t *m_maincpu;
256256   device_t *m_soundcpu;
257   DECLARE_WRITE16_MEMBER(fg_videoram_w);
258   DECLARE_WRITE16_MEMBER(bg_videoram_w);
259   DECLARE_WRITE16_MEMBER(nmg5_soundlatch_w);
260   DECLARE_READ16_MEMBER(prot_r);
261   DECLARE_WRITE16_MEMBER(prot_w);
262   DECLARE_WRITE16_MEMBER(gfx_bank_w);
263   DECLARE_WRITE16_MEMBER(priority_reg_w);
257264};
258265
259266
260267
261static WRITE16_HANDLER( fg_videoram_w )
268WRITE16_MEMBER(nmg5_state::fg_videoram_w)
262269{
263   nmg5_state *state = space->machine().driver_data<nmg5_state>();
264   COMBINE_DATA(&state->m_fg_videoram[offset]);
265   state->m_fg_tilemap->mark_tile_dirty(offset);
270   COMBINE_DATA(&m_fg_videoram[offset]);
271   m_fg_tilemap->mark_tile_dirty(offset);
266272}
267273
268static WRITE16_HANDLER( bg_videoram_w )
274WRITE16_MEMBER(nmg5_state::bg_videoram_w)
269275{
270   nmg5_state *state = space->machine().driver_data<nmg5_state>();
271   COMBINE_DATA(&state->m_bg_videoram[offset]);
272   state->m_bg_tilemap->mark_tile_dirty(offset);
276   COMBINE_DATA(&m_bg_videoram[offset]);
277   m_bg_tilemap->mark_tile_dirty(offset);
273278}
274279
275static WRITE16_HANDLER( nmg5_soundlatch_w )
280WRITE16_MEMBER(nmg5_state::nmg5_soundlatch_w)
276281{
277   nmg5_state *state = space->machine().driver_data<nmg5_state>();
278282
279283   if (ACCESSING_BITS_0_7)
280284   {
281285      soundlatch_w(space, 0, data & 0xff);
282      device_set_input_line(state->m_soundcpu, INPUT_LINE_NMI, PULSE_LINE);
286      device_set_input_line(m_soundcpu, INPUT_LINE_NMI, PULSE_LINE);
283287   }
284288}
285289
286static READ16_HANDLER( prot_r )
290READ16_MEMBER(nmg5_state::prot_r)
287291{
288   nmg5_state *state = space->machine().driver_data<nmg5_state>();
289   return state->m_prot_val | state->m_input_data;
292   return m_prot_val | m_input_data;
290293}
291294
292static WRITE16_HANDLER( prot_w )
295WRITE16_MEMBER(nmg5_state::prot_w)
293296{
294   nmg5_state *state = space->machine().driver_data<nmg5_state>();
295   state->m_input_data = data & 0x0f;
297   m_input_data = data & 0x0f;
296298}
297299
298static WRITE16_HANDLER( gfx_bank_w )
300WRITE16_MEMBER(nmg5_state::gfx_bank_w)
299301{
300   nmg5_state *state = space->machine().driver_data<nmg5_state>();
301302
302   if (state->m_gfx_bank != (data & 3))
303   if (m_gfx_bank != (data & 3))
303304   {
304      state->m_gfx_bank = data & 3;
305      space->machine().tilemap().mark_all_dirty();
305      m_gfx_bank = data & 3;
306      machine().tilemap().mark_all_dirty();
306307   }
307308}
308309
309static WRITE16_HANDLER( priority_reg_w )
310WRITE16_MEMBER(nmg5_state::priority_reg_w)
310311{
311   nmg5_state *state = space->machine().driver_data<nmg5_state>();
312312
313   state->m_priority_reg = data & 7;
313   m_priority_reg = data & 7;
314314
315   if (state->m_priority_reg == 4 || state->m_priority_reg == 5 || state->m_priority_reg == 6)
316      popmessage("unknown priority_reg value = %d\n", state->m_priority_reg);
315   if (m_priority_reg == 4 || m_priority_reg == 5 || m_priority_reg == 6)
316      popmessage("unknown priority_reg value = %d\n", m_priority_reg);
317317}
318318
319319static WRITE8_DEVICE_HANDLER( oki_banking_w )
r14845r14846
332332   AM_RANGE(0x120000, 0x12ffff) AM_RAM
333333   AM_RANGE(0x140000, 0x1407ff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
334334   AM_RANGE(0x160000, 0x1607ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
335   AM_RANGE(0x180000, 0x180001) AM_WRITE_LEGACY(nmg5_soundlatch_w)
335   AM_RANGE(0x180000, 0x180001) AM_WRITE(nmg5_soundlatch_w)
336336   AM_RANGE(0x180002, 0x180003) AM_WRITENOP
337   AM_RANGE(0x180004, 0x180005) AM_READWRITE_LEGACY(prot_r, prot_w)
338   AM_RANGE(0x180006, 0x180007) AM_WRITE_LEGACY(gfx_bank_w)
337   AM_RANGE(0x180004, 0x180005) AM_READWRITE(prot_r, prot_w)
338   AM_RANGE(0x180006, 0x180007) AM_WRITE(gfx_bank_w)
339339   AM_RANGE(0x180008, 0x180009) AM_READ_PORT("DSW")
340340   AM_RANGE(0x18000a, 0x18000b) AM_READ_PORT("SYSTEM")
341341   AM_RANGE(0x18000c, 0x18000d) AM_READ_PORT("INPUTS")
342   AM_RANGE(0x18000e, 0x18000f) AM_WRITE_LEGACY(priority_reg_w)
342   AM_RANGE(0x18000e, 0x18000f) AM_WRITE(priority_reg_w)
343343   AM_RANGE(0x300002, 0x300009) AM_WRITEONLY AM_BASE(m_scroll_ram)
344344   AM_RANGE(0x30000a, 0x30000f) AM_WRITENOP
345   AM_RANGE(0x320000, 0x321fff) AM_RAM_WRITE_LEGACY(bg_videoram_w) AM_BASE(m_bg_videoram)
346   AM_RANGE(0x322000, 0x323fff) AM_RAM_WRITE_LEGACY(fg_videoram_w) AM_BASE(m_fg_videoram)
345   AM_RANGE(0x320000, 0x321fff) AM_RAM_WRITE(bg_videoram_w) AM_BASE(m_bg_videoram)
346   AM_RANGE(0x322000, 0x323fff) AM_RAM_WRITE(fg_videoram_w) AM_BASE(m_fg_videoram)
347347   AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(m_bitmap)
348348ADDRESS_MAP_END
349349
r14845r14846
352352   AM_RANGE(0x200000, 0x20ffff) AM_RAM
353353   AM_RANGE(0x440000, 0x4407ff) AM_RAM_WRITE_LEGACY(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
354354   AM_RANGE(0x460000, 0x4607ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
355   AM_RANGE(0x480000, 0x480001) AM_WRITE_LEGACY(nmg5_soundlatch_w)
355   AM_RANGE(0x480000, 0x480001) AM_WRITE(nmg5_soundlatch_w)
356356   AM_RANGE(0x480002, 0x480003) AM_WRITENOP
357   AM_RANGE(0x480004, 0x480005) AM_READWRITE_LEGACY(prot_r, prot_w)
358   AM_RANGE(0x480006, 0x480007) AM_WRITE_LEGACY(gfx_bank_w)
357   AM_RANGE(0x480004, 0x480005) AM_READWRITE(prot_r, prot_w)
358   AM_RANGE(0x480006, 0x480007) AM_WRITE(gfx_bank_w)
359359   AM_RANGE(0x480008, 0x480009) AM_READ_PORT("DSW")
360360   AM_RANGE(0x48000a, 0x48000b) AM_READ_PORT("SYSTEM")
361361   AM_RANGE(0x48000c, 0x48000d) AM_READ_PORT("INPUTS")
362   AM_RANGE(0x48000e, 0x48000f) AM_WRITE_LEGACY(priority_reg_w)
362   AM_RANGE(0x48000e, 0x48000f) AM_WRITE(priority_reg_w)
363363   AM_RANGE(0x500002, 0x500009) AM_WRITEONLY AM_BASE(m_scroll_ram)
364   AM_RANGE(0x520000, 0x521fff) AM_RAM_WRITE_LEGACY(bg_videoram_w) AM_BASE(m_bg_videoram)
365   AM_RANGE(0x522000, 0x523fff) AM_RAM_WRITE_LEGACY(fg_videoram_w) AM_BASE(m_fg_videoram)
364   AM_RANGE(0x520000, 0x521fff) AM_RAM_WRITE(bg_videoram_w) AM_BASE(m_bg_videoram)
365   AM_RANGE(0x522000, 0x523fff) AM_RAM_WRITE(fg_videoram_w) AM_BASE(m_fg_videoram)
366366   AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(m_bitmap)
367367ADDRESS_MAP_END
368368
src/mame/drivers/wink.c
r14845r14846
2727   tilemap_t *m_bg_tilemap;
2828   UINT8 m_sound_flag;
2929   UINT8 m_tile_bank;
30   DECLARE_WRITE8_MEMBER(bgram_w);
31   DECLARE_WRITE8_MEMBER(player_mux_w);
32   DECLARE_WRITE8_MEMBER(tile_banking_w);
33   DECLARE_WRITE8_MEMBER(wink_coin_counter_w);
34   DECLARE_READ8_MEMBER(analog_port_r);
35   DECLARE_READ8_MEMBER(player_inputs_r);
36   DECLARE_WRITE8_MEMBER(sound_irq_w);
37   DECLARE_READ8_MEMBER(prot_r);
38   DECLARE_WRITE8_MEMBER(prot_w);
3039};
3140
3241
r14845r14846
5968   return 0;
6069}
6170
62static WRITE8_HANDLER( bgram_w )
71WRITE8_MEMBER(wink_state::bgram_w)
6372{
64   wink_state *state = space->machine().driver_data<wink_state>();
65   UINT8 *videoram = state->m_videoram;
73   UINT8 *videoram = m_videoram;
6674   videoram[offset] = data;
67   state->m_bg_tilemap->mark_tile_dirty(offset);
75   m_bg_tilemap->mark_tile_dirty(offset);
6876}
6977
70static WRITE8_HANDLER( player_mux_w )
78WRITE8_MEMBER(wink_state::player_mux_w)
7179{
7280   //player_mux = data & 1;
7381   //no mux / cocktail mode in the real pcb? strange...
7482}
7583
76static WRITE8_HANDLER( tile_banking_w )
84WRITE8_MEMBER(wink_state::tile_banking_w)
7785{
78   wink_state *state = space->machine().driver_data<wink_state>();
79   state->m_tile_bank = data & 1;
80   state->m_bg_tilemap->mark_all_dirty();
86   m_tile_bank = data & 1;
87   m_bg_tilemap->mark_all_dirty();
8188}
8289
83static WRITE8_HANDLER( wink_coin_counter_w )
90WRITE8_MEMBER(wink_state::wink_coin_counter_w)
8491{
85   coin_counter_w(space->machine(), offset,data & 1);
92   coin_counter_w(machine(), offset,data & 1);
8693}
8794
88static READ8_HANDLER( analog_port_r )
95READ8_MEMBER(wink_state::analog_port_r)
8996{
90   return input_port_read(space->machine(), /* player_mux ? "DIAL2" : */ "DIAL1");
97   return input_port_read(machine(), /* player_mux ? "DIAL2" : */ "DIAL1");
9198}
9299
93static READ8_HANDLER( player_inputs_r )
100READ8_MEMBER(wink_state::player_inputs_r)
94101{
95   return input_port_read(space->machine(), /* player_mux ? "INPUTS2" : */ "INPUTS1");
102   return input_port_read(machine(), /* player_mux ? "INPUTS2" : */ "INPUTS1");
96103}
97104
98static WRITE8_HANDLER( sound_irq_w )
105WRITE8_MEMBER(wink_state::sound_irq_w)
99106{
100   cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
107   cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
101108   //sync with sound cpu (but it still loses some soundlatches...)
102   //space->machine().scheduler().synchronize();
109   //machine().scheduler().synchronize();
103110}
104111
105112static ADDRESS_MAP_START( wink_map, AS_PROGRAM, 8, wink_state )
106113   AM_RANGE(0x0000, 0x7fff) AM_ROM
107114   AM_RANGE(0x8000, 0x87ff) AM_RAM
108115   AM_RANGE(0x9000, 0x97ff) AM_RAM   AM_SHARE("nvram")
109   AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE_LEGACY(bgram_w) AM_BASE(m_videoram)
116   AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(bgram_w) AM_BASE(m_videoram)
110117ADDRESS_MAP_END
111118
112119
113static READ8_HANDLER( prot_r )
120READ8_MEMBER(wink_state::prot_r)
114121{
115122   //take a0-a7 and do some math using the variable created from the upper address-lines,
116123   //put the result onto the databus.
r14845r14846
130137   return 0x20; //hack to pass the jump calculated using this value
131138}
132139
133static WRITE8_HANDLER( prot_w )
140WRITE8_MEMBER(wink_state::prot_w)
134141{
135142   //take a9-a15 and stuff them in a variable for later use.
136143}
r14845r14846
139146   ADDRESS_MAP_GLOBAL_MASK(0xff)
140147   AM_RANGE(0x00, 0x1f) AM_RAM_WRITE_LEGACY(paletteram_xxxxBBBBRRRRGGGG_le_w) AM_BASE_GENERIC(paletteram) //0x10-0x1f is likely to be something else
141148//  AM_RANGE(0x20, 0x20) AM_WRITENOP                //??? seems unused..
142   AM_RANGE(0x21, 0x21) AM_WRITE_LEGACY(player_mux_w)      //??? no mux on the pcb.
143   AM_RANGE(0x22, 0x22) AM_WRITE_LEGACY(tile_banking_w)
149   AM_RANGE(0x21, 0x21) AM_WRITE(player_mux_w)      //??? no mux on the pcb.
150   AM_RANGE(0x22, 0x22) AM_WRITE(tile_banking_w)
144151//  AM_RANGE(0x23, 0x23) AM_WRITENOP                //?
145152//  AM_RANGE(0x24, 0x24) AM_WRITENOP                //cab Knocker like in q-bert!
146   AM_RANGE(0x25, 0x27) AM_WRITE_LEGACY(wink_coin_counter_w)
153   AM_RANGE(0x25, 0x27) AM_WRITE(wink_coin_counter_w)
147154   AM_RANGE(0x40, 0x40) AM_WRITE_LEGACY(soundlatch_w)
148   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(sound_irq_w)
149   AM_RANGE(0x80, 0x80) AM_READ_LEGACY(analog_port_r)
150   AM_RANGE(0xa0, 0xa0) AM_READ_LEGACY(player_inputs_r)
155   AM_RANGE(0x60, 0x60) AM_WRITE(sound_irq_w)
156   AM_RANGE(0x80, 0x80) AM_READ(analog_port_r)
157   AM_RANGE(0xa0, 0xa0) AM_READ(player_inputs_r)
151158   AM_RANGE(0xa4, 0xa4) AM_READ_PORT("DSW1")   //dipswitch bank2
152159   AM_RANGE(0xa8, 0xa8) AM_READ_PORT("DSW2")   //dipswitch bank1
153160//  AM_RANGE(0xac, 0xac) AM_WRITENOP            //protection - loads video xor unit (written only once at startup)
154161   AM_RANGE(0xb0, 0xb0) AM_READ_PORT("DSW3")   //unused inputs
155162   AM_RANGE(0xb4, 0xb4) AM_READ_PORT("DSW4")   //dipswitch bank3
156   AM_RANGE(0xc0, 0xdf) AM_WRITE_LEGACY(prot_w)      //load load protection-buffer from upper address bus
163   AM_RANGE(0xc0, 0xdf) AM_WRITE(prot_w)      //load load protection-buffer from upper address bus
157164   AM_RANGE(0xc3, 0xc3) AM_READNOP            //watchdog?
158   AM_RANGE(0xe0, 0xff) AM_READ_LEGACY(prot_r)      //load math unit from buffer & lower address-bus
165   AM_RANGE(0xe0, 0xff) AM_READ(prot_r)      //load math unit from buffer & lower address-bus
159166ADDRESS_MAP_END
160167
161168static ADDRESS_MAP_START( wink_sound_map, AS_PROGRAM, 8, wink_state )
src/mame/drivers/corona.c
r14845r14846
331331   UINT8 m_lamp;
332332   UINT8 m_lamp_old;
333333   int m_input_selector;
334   DECLARE_WRITE8_MEMBER(blitter_y_w);
335   DECLARE_WRITE8_MEMBER(blitter_unk_w);
336   DECLARE_WRITE8_MEMBER(blitter_x_w);
337   DECLARE_WRITE8_MEMBER(blitter_aux_w);
338   DECLARE_READ8_MEMBER(blitter_status_r);
339   DECLARE_WRITE8_MEMBER(blitter_trig_wdht_w);
340   DECLARE_WRITE8_MEMBER(sound_latch_w);
341   DECLARE_READ8_MEMBER(sound_latch_r);
342   DECLARE_WRITE8_MEMBER(ball_w);
343   DECLARE_READ8_MEMBER(mux_port_r);
344   DECLARE_WRITE8_MEMBER(mux_port_w);
345   DECLARE_WRITE8_MEMBER(wc_meters_w);
346   void blitter_execute(int x, int y, int color, int width, int flag);
334347};
335348
336349
r14845r14846
365378   }
366379}
367380
368static WRITE8_HANDLER( blitter_y_w )
381WRITE8_MEMBER(corona_state::blitter_y_w)
369382{
370   corona_state *state = space->machine().driver_data<corona_state>();
371   state->m_blitter_y_reg = data;
383   m_blitter_y_reg = data;
372384}
373385
374static WRITE8_HANDLER( blitter_unk_w )
386WRITE8_MEMBER(corona_state::blitter_unk_w)
375387{
376   corona_state *state = space->machine().driver_data<corona_state>();
377   state->m_blitter_unk_reg = data;
388   m_blitter_unk_reg = data;
378389}
379390
380static WRITE8_HANDLER( blitter_x_w )
391WRITE8_MEMBER(corona_state::blitter_x_w)
381392{
382   corona_state *state = space->machine().driver_data<corona_state>();
383   state->m_blitter_x_reg = data;
393   m_blitter_x_reg = data;
384394}
385395
386static WRITE8_HANDLER( blitter_aux_w )
396WRITE8_MEMBER(corona_state::blitter_aux_w)
387397{
388   corona_state *state = space->machine().driver_data<corona_state>();
389   state->m_blitter_aux_reg = data;
398   m_blitter_aux_reg = data;
390399}
391400
392static READ8_HANDLER( blitter_status_r )
401READ8_MEMBER(corona_state::blitter_status_r)
393402{
394403/* code checks bit 6 and/or bit 7 */
395   //return space->machine().rand() & 0xc0;
404   //return machine().rand() & 0xc0;
396405   /*
397406        x--- ---- blitter busy
398407        -x-- ---- vblank
399408    */
400409
401   return 0x80 | ((space->machine().primary_screen->vblank() & 1) << 6);
410   return 0x80 | ((machine().primary_screen->vblank() & 1) << 6);
402411}
403412
404static void blitter_execute(corona_state *state, int x, int y, int color, int width, int flag)
413void corona_state::blitter_execute(int x, int y, int color, int width, int flag)
405414{
406415   int i;
407416   int xdir = (flag & 0x10)    ? -1 : 1;
r14845r14846
419428
420429      for(yp = 0; yp < 0x100; yp++)
421430         for(xp = 0; xp < 0x100; xp++)
422            state->m_videobuf[(yp & 0x1ff) * 512 + (xp & 0x1ff)] = color;
431            m_videobuf[(yp & 0x1ff) * 512 + (xp & 0x1ff)] = color;
423432   }
424433   else /* line shape */
425434   {
r14845r14846
427436
428437      for(i = 0; i < width; i++)
429438      {
430         state->m_videobuf[(y & 0x1ff) * 512 + (x & 0x1ff)] = color;
439         m_videobuf[(y & 0x1ff) * 512 + (x & 0x1ff)] = color;
431440
432441         if(flag & 0x40) { x+=xdir; }
433442         if(flag & 0x80) { y+=ydir; }
r14845r14846
435444   }
436445}
437446
438static WRITE8_HANDLER( blitter_trig_wdht_w)
447WRITE8_MEMBER(corona_state::blitter_trig_wdht_w)
439448{
440   corona_state *state = space->machine().driver_data<corona_state>();
441   blitter_execute(state, state->m_blitter_x_reg, 0x100 - state->m_blitter_y_reg, state->m_blitter_aux_reg & 0xf, data, state->m_blitter_aux_reg & 0xf0);
449   blitter_execute(m_blitter_x_reg, 0x100 - m_blitter_y_reg, m_blitter_aux_reg & 0xf, data, m_blitter_aux_reg & 0xf0);
442450}
443451
444452static VIDEO_START(winner)
r14845r14846
476484*           Read & Write Handlers          *
477485*******************************************/
478486
479static WRITE8_HANDLER( sound_latch_w )
487WRITE8_MEMBER(corona_state::sound_latch_w)
480488{
481489   soundlatch_w(space, 0, data & 0xff);
482   cputag_set_input_line(space->machine(), "soundcpu", 0, ASSERT_LINE);
490   cputag_set_input_line(machine(), "soundcpu", 0, ASSERT_LINE);
483491}
484492
485static READ8_HANDLER( sound_latch_r )
493READ8_MEMBER(corona_state::sound_latch_r)
486494{
487   cputag_set_input_line(space->machine(), "soundcpu", 0, CLEAR_LINE);
495   cputag_set_input_line(machine(), "soundcpu", 0, CLEAR_LINE);
488496   return soundlatch_r(space, 0);
489497}
490498
491499
492static WRITE8_HANDLER( ball_w )
500WRITE8_MEMBER(corona_state::ball_w)
493501{
494   corona_state *state = space->machine().driver_data<corona_state>();
495   state->m_lamp = data;
502   m_lamp = data;
496503
497504   output_set_lamp_value(data, 1);
498   output_set_lamp_value(state->m_lamp_old, 0);
499   state->m_lamp_old = state->m_lamp;
505   output_set_lamp_value(m_lamp_old, 0);
506   m_lamp_old = m_lamp;
500507}
501508
502509
503510/********  Multiplexed Inputs  ********/
504511
505512
506static READ8_HANDLER( mux_port_r )
513READ8_MEMBER(corona_state::mux_port_r)
507514{
508   corona_state *state = space->machine().driver_data<corona_state>();
509   switch( state->m_input_selector )
515   switch( m_input_selector )
510516   {
511      case 0x01: return input_port_read(space->machine(), "IN0-1");
512      case 0x02: return input_port_read(space->machine(), "IN0-2");
513      case 0x04: return input_port_read(space->machine(), "IN0-3");
514      case 0x08: return input_port_read(space->machine(), "IN0-4");
515      case 0x10: return input_port_read(space->machine(), "IN0-5");
516      case 0x20: return input_port_read(space->machine(), "IN0-6");
517      case 0x01: return input_port_read(machine(), "IN0-1");
518      case 0x02: return input_port_read(machine(), "IN0-2");
519      case 0x04: return input_port_read(machine(), "IN0-3");
520      case 0x08: return input_port_read(machine(), "IN0-4");
521      case 0x10: return input_port_read(machine(), "IN0-5");
522      case 0x20: return input_port_read(machine(), "IN0-6");
517523   }
518524
519525   return 0xff;
520526}
521527
522static WRITE8_HANDLER( mux_port_w )
528WRITE8_MEMBER(corona_state::mux_port_w)
523529{
524   corona_state *state = space->machine().driver_data<corona_state>();
525530/*  - bits -
526531    7654 3210
527532    --xx xxxx   Input selector.
r14845r14846
531536   Data is written inverted.
532537
533538*/
534   state->m_input_selector = (data ^ 0xff) & 0x3f;   /* Input Selector,  */
539   m_input_selector = (data ^ 0xff) & 0x3f;   /* Input Selector,  */
535540
536   coin_counter_w(space->machine(), 0, (data ^ 0xff) & 0x40);   /* Credits In (mechanical meters) */
537   coin_counter_w(space->machine(), 1, (data ^ 0xff) & 0x80);   /* Credits Out (mechanical meters) */
541   coin_counter_w(machine(), 0, (data ^ 0xff) & 0x40);   /* Credits In (mechanical meters) */
542   coin_counter_w(machine(), 1, (data ^ 0xff) & 0x80);   /* Credits Out (mechanical meters) */
538543
539//  logerror("muxsel: %02x \n", state->m_input_selector);
544//  logerror("muxsel: %02x \n", m_input_selector);
540545}
541546
542static WRITE8_HANDLER( wc_meters_w )
547WRITE8_MEMBER(corona_state::wc_meters_w)
543548{
544549/*  - bits -
545550    7654 3210
r14845r14846
552557   Data is written inverted.
553558
554559*/
555   coin_counter_w(space->machine(), 0, (data ^ 0xff) & 0x01);   /* Credits In */
556   coin_counter_w(space->machine(), 1, (data ^ 0xff) & 0x02);   /* Credits In (through Coin 3) */
557   coin_counter_w(space->machine(), 2, (data ^ 0xff) & 0x04);   /* Credits Out */
560   coin_counter_w(machine(), 0, (data ^ 0xff) & 0x01);   /* Credits In */
561   coin_counter_w(machine(), 1, (data ^ 0xff) & 0x02);   /* Credits In (through Coin 3) */
562   coin_counter_w(machine(), 2, (data ^ 0xff) & 0x04);   /* Credits Out */
558563
559564//  popmessage("meters: %02x", (data ^ 0xff));
560565}
r14845r14846
605610
606611static ADDRESS_MAP_START( winner81_cpu_io_map, AS_IO, 8, corona_state )
607612   ADDRESS_MAP_GLOBAL_MASK(0xff)
608   AM_RANGE(0x70, 0x70) AM_WRITE_LEGACY(blitter_x_w)
609   AM_RANGE(0x71, 0x71) AM_WRITE_LEGACY(blitter_unk_w)
610   AM_RANGE(0x72, 0x72) AM_WRITE_LEGACY(blitter_trig_wdht_w)
611   AM_RANGE(0x74, 0x74) AM_WRITE_LEGACY(blitter_y_w)
612   AM_RANGE(0x75, 0x75) AM_READ_LEGACY(blitter_status_r)
613   AM_RANGE(0x76, 0x76) AM_WRITE_LEGACY(blitter_aux_w)
613   AM_RANGE(0x70, 0x70) AM_WRITE(blitter_x_w)
614   AM_RANGE(0x71, 0x71) AM_WRITE(blitter_unk_w)
615   AM_RANGE(0x72, 0x72) AM_WRITE(blitter_trig_wdht_w)
616   AM_RANGE(0x74, 0x74) AM_WRITE(blitter_y_w)
617   AM_RANGE(0x75, 0x75) AM_READ(blitter_status_r)
618   AM_RANGE(0x76, 0x76) AM_WRITE(blitter_aux_w)
614619
615620   AM_RANGE(0xd8, 0xd8) AM_WRITENOP         /* dunno, but is writing 0's very often */
616   AM_RANGE(0xdf, 0xdf) AM_WRITE_LEGACY(sound_latch_w)
621   AM_RANGE(0xdf, 0xdf) AM_WRITE(sound_latch_w)
617622
618623   AM_RANGE(0xe8, 0xe8) AM_READ_PORT("IN0")   /* credits for players A, B, C, D */
619624   AM_RANGE(0xe9, 0xe9) AM_READ_PORT("IN3")
r14845r14846
622627   AM_RANGE(0xec, 0xec) AM_READ_PORT("IN4")
623628   AM_RANGE(0xed, 0xed) AM_READ_PORT("DSW1")   /* DIP switches bank 1 */
624629   AM_RANGE(0xee, 0xee) AM_READ_PORT("DSW2")
625   AM_RANGE(0xef, 0xef) AM_WRITE_LEGACY(wc_meters_w)   /* meters: coin1 = bit0, coin2 = bit1, coinout = bit2 */
630   AM_RANGE(0xef, 0xef) AM_WRITE(wc_meters_w)   /* meters: coin1 = bit0, coin2 = bit1, coinout = bit2 */
626631ADDRESS_MAP_END
627632
628633static ADDRESS_MAP_START(  winner81_sound_map, AS_PROGRAM, 8, corona_state )
r14845r14846
632637
633638static ADDRESS_MAP_START(  winner81_sound_cpu_io_map, AS_IO, 8, corona_state )
634639   ADDRESS_MAP_GLOBAL_MASK(0xff)
635   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(sound_latch_r)
640   AM_RANGE(0x00, 0x00) AM_READ(sound_latch_r)
636641   AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
637642ADDRESS_MAP_END
638643
r14845r14846
662667
663668static ADDRESS_MAP_START( winner82_cpu_io_map, AS_IO, 8, corona_state )
664669   ADDRESS_MAP_GLOBAL_MASK(0xff)
665   AM_RANGE(0xf0, 0xf0) AM_WRITE_LEGACY(blitter_x_w)
666   AM_RANGE(0xf1, 0xf1) AM_WRITE_LEGACY(blitter_y_w)
667   AM_RANGE(0xf2, 0xf2) AM_WRITE_LEGACY(blitter_trig_wdht_w)
668   AM_RANGE(0xf3, 0xf3) AM_WRITE_LEGACY(blitter_aux_w)
669   AM_RANGE(0xf4, 0xf4) AM_WRITE_LEGACY(blitter_unk_w)
670   AM_RANGE(0xf5, 0xf5) AM_READ_LEGACY(blitter_status_r)
670   AM_RANGE(0xf0, 0xf0) AM_WRITE(blitter_x_w)
671   AM_RANGE(0xf1, 0xf1) AM_WRITE(blitter_y_w)
672   AM_RANGE(0xf2, 0xf2) AM_WRITE(blitter_trig_wdht_w)
673   AM_RANGE(0xf3, 0xf3) AM_WRITE(blitter_aux_w)
674   AM_RANGE(0xf4, 0xf4) AM_WRITE(blitter_unk_w)
675   AM_RANGE(0xf5, 0xf5) AM_READ(blitter_status_r)
671676
672677   AM_RANGE(0xf8, 0xf8) AM_READ_PORT("DSW1")   /* coinage DIP SW */
673678   AM_RANGE(0xf9, 0xf9) AM_READ_PORT("IN0")   /* controls for players A & B */
674679   AM_RANGE(0xfa, 0xfa) AM_READ_PORT("IN1")   /* credits for players A, B, C, D */
675680   AM_RANGE(0xfb, 0xfb) AM_READ_PORT("IN3")   /* single credits for players A, B, C, D, + fix bits 3, 4, 5, 6 in meters */
676   AM_RANGE(0xfc, 0xfc) AM_WRITE_LEGACY(wc_meters_w)
681   AM_RANGE(0xfc, 0xfc) AM_WRITE(wc_meters_w)
677682   AM_RANGE(0xfd, 0xfd) AM_READ_PORT("IN2")   /* controls for players C & D */
678   AM_RANGE(0xfe, 0xfe) AM_WRITE_LEGACY(sound_latch_w)
683   AM_RANGE(0xfe, 0xfe) AM_WRITE(sound_latch_w)
679684   AM_RANGE(0xff, 0xff) AM_READ_PORT("DSW2")   /* no idea */
680685ADDRESS_MAP_END
681686
r14845r14846
686691
687692static ADDRESS_MAP_START( winner82_sound_cpu_io_map, AS_IO, 8, corona_state )
688693   ADDRESS_MAP_GLOBAL_MASK(0xff)
689   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(sound_latch_r)
694   AM_RANGE(0x00, 0x00) AM_READ(sound_latch_r)
690695   AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
691696   AM_RANGE(0x02, 0x03) AM_WRITENOP   /* socket for another ay, inited but never played */
692697ADDRESS_MAP_END
r14845r14846
726731
727732static ADDRESS_MAP_START( re800_cpu_io_map, AS_IO, 8, corona_state )
728733   ADDRESS_MAP_GLOBAL_MASK(0xff)
729   AM_RANGE(0xf0, 0xf0) AM_WRITE_LEGACY(blitter_x_w)
730   AM_RANGE(0xf1, 0xf1) AM_WRITE_LEGACY(blitter_y_w)
731   AM_RANGE(0xf2, 0xf2) AM_WRITE_LEGACY(blitter_trig_wdht_w)
732   AM_RANGE(0xf3, 0xf3) AM_WRITE_LEGACY(blitter_aux_w)
733   AM_RANGE(0xf4, 0xf4) AM_WRITE_LEGACY(blitter_unk_w)
734   AM_RANGE(0xf5, 0xf5) AM_READ_LEGACY(blitter_status_r)
734   AM_RANGE(0xf0, 0xf0) AM_WRITE(blitter_x_w)
735   AM_RANGE(0xf1, 0xf1) AM_WRITE(blitter_y_w)
736   AM_RANGE(0xf2, 0xf2) AM_WRITE(blitter_trig_wdht_w)
737   AM_RANGE(0xf3, 0xf3) AM_WRITE(blitter_aux_w)
738   AM_RANGE(0xf4, 0xf4) AM_WRITE(blitter_unk_w)
739   AM_RANGE(0xf5, 0xf5) AM_READ(blitter_status_r)
735740   AM_RANGE(0xf8, 0xf8) AM_READ_PORT("IN1")
736741   AM_RANGE(0xf9, 0xf9) AM_READ_PORT("DSW1")
737   AM_RANGE(0xfc, 0xfc) AM_WRITE_LEGACY(mux_port_w)
738   AM_RANGE(0xfd, 0xfd) AM_READ_LEGACY(mux_port_r)
739   AM_RANGE(0xfe, 0xfe) AM_WRITE_LEGACY(sound_latch_w)
740   AM_RANGE(0xff, 0xff) AM_WRITE_LEGACY(ball_w)
742   AM_RANGE(0xfc, 0xfc) AM_WRITE(mux_port_w)
743   AM_RANGE(0xfd, 0xfd) AM_READ(mux_port_r)
744   AM_RANGE(0xfe, 0xfe) AM_WRITE(sound_latch_w)
745   AM_RANGE(0xff, 0xff) AM_WRITE(ball_w)
741746ADDRESS_MAP_END
742747
743748static ADDRESS_MAP_START( re800_sound_map, AS_PROGRAM, 8, corona_state )
r14845r14846
747752
748753static ADDRESS_MAP_START( re800_sound_cpu_io_map, AS_IO, 8, corona_state )
749754   ADDRESS_MAP_GLOBAL_MASK(0xff)
750   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(sound_latch_r)
755   AM_RANGE(0x00, 0x00) AM_READ(sound_latch_r)
751756   AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
752757ADDRESS_MAP_END
753758
r14845r14846
785790
786791static ADDRESS_MAP_START( luckyrlt_cpu_io_map, AS_IO, 8, corona_state )
787792   ADDRESS_MAP_GLOBAL_MASK(0xff)
788   AM_RANGE(0xf0, 0xf0) AM_WRITE_LEGACY(blitter_x_w)
789   AM_RANGE(0xf1, 0xf1) AM_WRITE_LEGACY(blitter_y_w)
790   AM_RANGE(0xf2, 0xf2) AM_WRITE_LEGACY(blitter_trig_wdht_w)
791   AM_RANGE(0xf3, 0xf3) AM_WRITE_LEGACY(blitter_aux_w)
792   AM_RANGE(0xf4, 0xf4) AM_WRITE_LEGACY(blitter_unk_w)
793   AM_RANGE(0xf5, 0xf5) AM_READ_LEGACY(blitter_status_r)
793   AM_RANGE(0xf0, 0xf0) AM_WRITE(blitter_x_w)
794   AM_RANGE(0xf1, 0xf1) AM_WRITE(blitter_y_w)
795   AM_RANGE(0xf2, 0xf2) AM_WRITE(blitter_trig_wdht_w)
796   AM_RANGE(0xf3, 0xf3) AM_WRITE(blitter_aux_w)
797   AM_RANGE(0xf4, 0xf4) AM_WRITE(blitter_unk_w)
798   AM_RANGE(0xf5, 0xf5) AM_READ(blitter_status_r)
794799
795800   AM_RANGE(0xf8, 0xf8) AM_READ_PORT("DSW2")
796   AM_RANGE(0xf9, 0xf9) AM_WRITE_LEGACY(ball_w)
801   AM_RANGE(0xf9, 0xf9) AM_WRITE(ball_w)
797802   AM_RANGE(0xfa, 0xfa) AM_READ_PORT("DSW1")
798   AM_RANGE(0xfc, 0xfc) AM_WRITE_LEGACY(mux_port_w)
799   AM_RANGE(0xfd, 0xfd) AM_READ_LEGACY(mux_port_r)
800   AM_RANGE(0xfe, 0xfe) AM_WRITE_LEGACY(sound_latch_w)
803   AM_RANGE(0xfc, 0xfc) AM_WRITE(mux_port_w)
804   AM_RANGE(0xfd, 0xfd) AM_READ(mux_port_r)
805   AM_RANGE(0xfe, 0xfe) AM_WRITE(sound_latch_w)
801806ADDRESS_MAP_END
802807
803808static ADDRESS_MAP_START( luckyrlt_sound_map, AS_PROGRAM, 8, corona_state )
r14845r14846
807812
808813static ADDRESS_MAP_START( luckyrlt_sound_cpu_io_map, AS_IO, 8, corona_state )
809814   ADDRESS_MAP_GLOBAL_MASK(0xff)
810   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(sound_latch_r)
815   AM_RANGE(0x00, 0x00) AM_READ(sound_latch_r)
811816   AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
812817ADDRESS_MAP_END
813818
src/mame/drivers/safarir.c
r14845r14846
6767   UINT8 m_port_last;
6868   UINT8 m_port_last2;
6969   samples_device *m_samples;
70   DECLARE_WRITE8_MEMBER(ram_w);
71   DECLARE_READ8_MEMBER(ram_r);
72   DECLARE_WRITE8_MEMBER(ram_bank_w);
73   DECLARE_WRITE8_MEMBER(safarir_audio_w);
7074};
7175
7276
r14845r14846
7680 *
7781 *************************************/
7882
79static WRITE8_HANDLER( ram_w )
83WRITE8_MEMBER(safarir_state::ram_w)
8084{
81   safarir_state *state = space->machine().driver_data<safarir_state>();
8285
83   if (state->m_ram_bank)
84      state->m_ram_2[offset] = data;
86   if (m_ram_bank)
87      m_ram_2[offset] = data;
8588   else
86      state->m_ram_1[offset] = data;
89      m_ram_1[offset] = data;
8790
88   ((offset & 0x0400) ? state->m_bg_tilemap : state->m_fg_tilemap)->mark_tile_dirty(offset & 0x03ff);
91   ((offset & 0x0400) ? m_bg_tilemap : m_fg_tilemap)->mark_tile_dirty(offset & 0x03ff);
8992}
9093
9194
92static READ8_HANDLER( ram_r )
95READ8_MEMBER(safarir_state::ram_r)
9396{
94   safarir_state *state = space->machine().driver_data<safarir_state>();
9597
96   return state->m_ram_bank ? state->m_ram_2[offset] : state->m_ram_1[offset];
98   return m_ram_bank ? m_ram_2[offset] : m_ram_1[offset];
9799}
98100
99101
100static WRITE8_HANDLER( ram_bank_w )
102WRITE8_MEMBER(safarir_state::ram_bank_w)
101103{
102   safarir_state *state = space->machine().driver_data<safarir_state>();
103104
104   state->m_ram_bank = data & 0x01;
105   m_ram_bank = data & 0x01;
105106
106   space->machine().tilemap().mark_all_dirty();
107   machine().tilemap().mark_all_dirty();
107108}
108109
109110
r14845r14846
147148{
148149   int color;
149150   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
150   UINT8 code = ram_r(space,tile_index | 0x400);
151   safarir_state *state = machine.driver_data<safarir_state>();
152   UINT8 code = state->ram_r(*space,tile_index | 0x400);
151153
152154   if (code & 0x80)
153155      color = 6;   /* yellow */
r14845r14846
169171{
170172   int color, flags;
171173   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
174   safarir_state *state = machine.driver_data<safarir_state>();
175   UINT8 code = state->ram_r(*space,tile_index);
172176
173   UINT8 code = ram_r(space,tile_index);
174
175177   if (code & 0x80)
176178      color = 7;   /* white */
177179   else
r14845r14846
232234#define CHANNEL_SOUND6      5
233235
234236
235static WRITE8_HANDLER( safarir_audio_w )
237WRITE8_MEMBER(safarir_state::safarir_audio_w)
236238{
237   safarir_state *state = space->machine().driver_data<safarir_state>();
238   samples_device *samples = state->m_samples;
239   UINT8 rising_bits = data & ~state->m_port_last;
239   samples_device *samples = m_samples;
240   UINT8 rising_bits = data & ~m_port_last;
240241
241242   if (rising_bits == 0x12) samples->start(CHANNEL_SOUND1, SAMPLE_SOUND1_1);
242243   if (rising_bits == 0x02) samples->start(CHANNEL_SOUND1, SAMPLE_SOUND1_2);
r14845r14846
249250
250251   if (data == 0x13)
251252   {
252      if ((rising_bits == 0x13 && state->m_port_last != 0x04) || (rising_bits == 0x01 && state->m_port_last == 0x12))
253      if ((rising_bits == 0x13 && m_port_last != 0x04) || (rising_bits == 0x01 && m_port_last == 0x12))
253254      {
254255         samples->start(CHANNEL_SOUND4, SAMPLE_SOUND7);
255256      }
256      else if (rising_bits == 0x03 && state->m_port_last2 == 0x15 && !samples->playing(CHANNEL_SOUND4))
257      else if (rising_bits == 0x03 && m_port_last2 == 0x15 && !samples->playing(CHANNEL_SOUND4))
257258      {
258259         samples->start(CHANNEL_SOUND4, SAMPLE_SOUND4_1);
259260      }
260261   }
261   if (data == 0x53 && state->m_port_last == 0x55) samples->start(CHANNEL_SOUND4, SAMPLE_SOUND4_2);
262   if (data == 0x53 && m_port_last == 0x55) samples->start(CHANNEL_SOUND4, SAMPLE_SOUND4_2);
262263
263264   if (data == 0x1f && rising_bits == 0x1f) samples->start(CHANNEL_SOUND5, SAMPLE_SOUND5_1);
264265   if (data == 0x14 && (rising_bits == 0x14 || rising_bits == 0x04)) samples->start(CHANNEL_SOUND5, SAMPLE_SOUND5_2);
r14845r14846
266267   if (data == 0x07 && rising_bits == 0x07 && !samples->playing(CHANNEL_SOUND6))
267268      samples->start(CHANNEL_SOUND6, SAMPLE_SOUND8);
268269
269   state->m_port_last2 = state->m_port_last;
270   state->m_port_last = data;
270   m_port_last2 = m_port_last;
271   m_port_last = data;
271272}
272273
273274
r14845r14846
338339
339340static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, safarir_state )
340341   AM_RANGE(0x0000, 0x17ff) AM_ROM
341   AM_RANGE(0x2000, 0x27ff) AM_READWRITE_LEGACY(ram_r, ram_w) AM_SIZE(m_ram_size)
342   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_READNOP AM_WRITE_LEGACY(ram_bank_w)
342   AM_RANGE(0x2000, 0x27ff) AM_READWRITE(ram_r, ram_w) AM_SIZE(m_ram_size)
343   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_READNOP AM_WRITE(ram_bank_w)
343344   AM_RANGE(0x2c00, 0x2cff) AM_MIRROR(0x03ff) AM_READNOP AM_WRITEONLY AM_BASE(m_bg_scroll)
344   AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(safarir_audio_w)   /* goes to SN76477 */
345   AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0x03ff) AM_WRITE(safarir_audio_w)   /* goes to SN76477 */
345346   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_WRITENOP   /* cleared at the beginning */
346347   AM_RANGE(0x3800, 0x38ff) AM_MIRROR(0x03ff) AM_READ_PORT("INPUTS") AM_WRITENOP
347348   AM_RANGE(0x3c00, 0x3cff) AM_MIRROR(0x03ff) AM_READ_PORT("DSW") AM_WRITENOP
src/mame/drivers/pzletime.c
r14845r14846
4040
4141   /* misc */
4242   int            m_ticket;
43   DECLARE_WRITE16_MEMBER(mid_videoram_w);
44   DECLARE_WRITE16_MEMBER(txt_videoram_w);
45   DECLARE_WRITE16_MEMBER(ticket_w);
46   DECLARE_WRITE16_MEMBER(video_regs_w);
4347};
4448
4549
r14845r14846
134138   return 0;
135139}
136140
137static WRITE16_HANDLER( mid_videoram_w )
141WRITE16_MEMBER(pzletime_state::mid_videoram_w)
138142{
139   pzletime_state *state = space->machine().driver_data<pzletime_state>();
140   COMBINE_DATA(&state->m_mid_videoram[offset]);
141   state->m_mid_tilemap->mark_tile_dirty(offset);
143   COMBINE_DATA(&m_mid_videoram[offset]);
144   m_mid_tilemap->mark_tile_dirty(offset);
142145}
143146
144static WRITE16_HANDLER( txt_videoram_w )
147WRITE16_MEMBER(pzletime_state::txt_videoram_w)
145148{
146   pzletime_state *state = space->machine().driver_data<pzletime_state>();
147   COMBINE_DATA(&state->m_txt_videoram[offset]);
148   state->m_txt_tilemap->mark_tile_dirty(offset);
149   COMBINE_DATA(&m_txt_videoram[offset]);
150   m_txt_tilemap->mark_tile_dirty(offset);
149151}
150152
151153static WRITE16_DEVICE_HANDLER( eeprom_w )
r14845r14846
159161   }
160162}
161163
162static WRITE16_HANDLER( ticket_w )
164WRITE16_MEMBER(pzletime_state::ticket_w)
163165{
164   pzletime_state *state = space->machine().driver_data<pzletime_state>();
165166
166167   if (ACCESSING_BITS_0_7)
167      state->m_ticket = data & 1;
168      m_ticket = data & 1;
168169}
169170
170static WRITE16_HANDLER( video_regs_w )
171WRITE16_MEMBER(pzletime_state::video_regs_w)
171172{
172   pzletime_state *state = space->machine().driver_data<pzletime_state>();
173173   int i;
174174
175   COMBINE_DATA(&state->m_video_regs[offset]);
175   COMBINE_DATA(&m_video_regs[offset]);
176176
177177   if (offset == 0)
178178   {
179      if (state->m_video_regs[0] > 0)
179      if (m_video_regs[0] > 0)
180180      {
181181         for (i = 0; i < 0x300; i++)
182182         {
183            palette_set_pen_contrast(space->machine(), i, (double)0x8000/(double)state->m_video_regs[0]);
183            palette_set_pen_contrast(machine(), i, (double)0x8000/(double)m_video_regs[0]);
184184         }
185185      }
186186   }
187187   else if (offset == 1)
188188   {
189      if (state->m_video_regs[1] > 0)
189      if (m_video_regs[1] > 0)
190190      {
191191         for (i = 0x300; i < 32768 + 0x300; i++)
192192         {
193            palette_set_pen_contrast(space->machine(), i, (double)0x8000/(double)state->m_video_regs[1]);
193            palette_set_pen_contrast(machine(), i, (double)0x8000/(double)m_video_regs[1]);
194194         }
195195      }
196196   }
r14845r14846
209209
210210static ADDRESS_MAP_START( pzletime_map, AS_PROGRAM, 16, pzletime_state )
211211   AM_RANGE(0x000000, 0x3fffff) AM_ROM
212   AM_RANGE(0x700000, 0x700005) AM_RAM_WRITE_LEGACY(video_regs_w) AM_BASE(m_video_regs)
212   AM_RANGE(0x700000, 0x700005) AM_RAM_WRITE(video_regs_w) AM_BASE(m_video_regs)
213213   AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
214214   AM_RANGE(0x900000, 0x9005ff) AM_RAM_WRITE_LEGACY(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
215215   AM_RANGE(0xa00000, 0xa00007) AM_RAM AM_BASE(m_tilemap_regs)
216216   AM_RANGE(0xb00000, 0xb3ffff) AM_RAM AM_BASE(m_bg_videoram)
217   AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE_LEGACY(mid_videoram_w) AM_BASE(m_mid_videoram)
218   AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE_LEGACY(txt_videoram_w) AM_BASE(m_txt_videoram)
217   AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(mid_videoram_w) AM_BASE(m_mid_videoram)
218   AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE(txt_videoram_w) AM_BASE(m_txt_videoram)
219219   AM_RANGE(0xd00000, 0xd01fff) AM_RAM AM_BASE(m_spriteram)
220220   AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("INPUT") AM_DEVWRITE_LEGACY("eeprom", eeprom_w)
221   AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(ticket_w)
221   AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("SYSTEM") AM_WRITE(ticket_w)
222222   AM_RANGE(0xe00004, 0xe00005) AM_DEVWRITE_LEGACY("oki", oki_bank_w)
223223   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM
224224ADDRESS_MAP_END
src/mame/drivers/uapce.c
r14845r14846
106106      : driver_device(mconfig, type, tag) { }
107107
108108   UINT8 m_jamma_if_control_latch;
109   DECLARE_WRITE8_MEMBER(jamma_if_control_latch_w);
110   DECLARE_READ8_MEMBER(jamma_if_control_latch_r);
111   DECLARE_READ8_MEMBER(jamma_if_read_dsw);
109112};
110113
111114#define UAPCE_SOUND_EN   NODE_10
r14845r14846
118121DISCRETE_SOUND_END
119122
120123
121static WRITE8_HANDLER( jamma_if_control_latch_w )
124WRITE8_MEMBER(uapce_state::jamma_if_control_latch_w)
122125{
123   uapce_state *state = space->machine().driver_data<uapce_state>();
124   UINT8 diff = data ^ state->m_jamma_if_control_latch;
125   state->m_jamma_if_control_latch = data;
126   UINT8 diff = data ^ m_jamma_if_control_latch;
127   m_jamma_if_control_latch = data;
126128
127129/*  D7 : Controls relay which connects the PCE R-AUDIO output to the common audio path.
128130    (1= Relay closed, 0= Relay open) */
129   space->machine().sound().system_enable( (data >> 7) & 1 );
131   machine().sound().system_enable( (data >> 7) & 1 );
130132
131133/* D6 : Output to JAMMA connector KEY pin. Connected to /RESET on the PCE backplane connector.
132134    (1= /RESET not asserted, 0= /RESET asserted) */
133135
134136   if ( diff & 0x40 )
135137   {
136      cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_RESET, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
138      cputag_set_input_line(machine(), "maincpu", INPUT_LINE_RESET, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
137139   }
138140
139141/* D5 : Connected to a TIP31 which may control the coin meter:
r14845r14846
143145
144146   Pin 'z' is a normally ground connection, but on this board it is isolated from ground.
145147   The wiring harness also has the corresponding wire separate from the others. */
146   coin_counter_w(space->machine(), 0, BIT(data,5));
148   coin_counter_w(machine(), 0, BIT(data,5));
147149
148150/* D4 : Connects the START1 switch input from the JAMMA connector to the
149151    "RUN" key input of the control pad multiplexer.
r14845r14846
153155      752 Hz (D-3) square wave to be output on the common audio path.
154156      (1= Tone output ON, 0= Tone output OFF) */
155157
156   discrete_sound_w(space->machine().device("discrete"), UAPCE_SOUND_EN, BIT(data,3));
158   discrete_sound_w(machine().device("discrete"), UAPCE_SOUND_EN, BIT(data,3));
157159
158160/* D2 : Not latched, though software writes to this bit like it is. */
159161
r14845r14846
162164/* D0 : Not latched. */
163165}
164166
165static READ8_HANDLER( jamma_if_control_latch_r )
167READ8_MEMBER(uapce_state::jamma_if_control_latch_r)
166168{
167   uapce_state *state = space->machine().driver_data<uapce_state>();
168   return state->m_jamma_if_control_latch & 0x08;
169   return m_jamma_if_control_latch & 0x08;
169170}
170171
171static READ8_HANDLER( jamma_if_read_dsw )
172READ8_MEMBER(uapce_state::jamma_if_read_dsw)
172173{
173174   UINT8 dsw_val;
174175
175   dsw_val = input_port_read(space->machine(),  "DSW" );
176   dsw_val = input_port_read(machine(),  "DSW" );
176177
177178   if ( BIT( offset, 7 ) == 0 )
178179   {
r14845r14846
233234static ADDRESS_MAP_START( z80_map, AS_PROGRAM, 8, uapce_state )
234235   AM_RANGE( 0x0000, 0x07FF) AM_ROM
235236   AM_RANGE( 0x0800, 0x0FFF) AM_RAM
236   AM_RANGE( 0x1000, 0x17FF) AM_WRITE_LEGACY(jamma_if_control_latch_w )
237   AM_RANGE( 0x1800, 0x1FFF) AM_READ_LEGACY(jamma_if_read_dsw )
237   AM_RANGE( 0x1000, 0x17FF) AM_WRITE(jamma_if_control_latch_w )
238   AM_RANGE( 0x1800, 0x1FFF) AM_READ(jamma_if_read_dsw )
238239   AM_RANGE( 0x2000, 0x27FF) AM_READ_PORT( "COIN" )
239   AM_RANGE( 0x2800, 0x2FFF) AM_READ_LEGACY(jamma_if_control_latch_r )
240   AM_RANGE( 0x2800, 0x2FFF) AM_READ(jamma_if_control_latch_r )
240241ADDRESS_MAP_END
241242
242243
src/mame/drivers/aristmk5.c
r14845r14846
7474   emu_timer *m_mk5_VSYNC_timer;
7575   UINT8 m_ext_latch;
7676   UINT8 m_flyback;
77   DECLARE_WRITE32_MEMBER(Ns5w48);
78   DECLARE_READ32_MEMBER(Ns5x58);
79   DECLARE_READ32_MEMBER(mk5_ioc_r);
80   DECLARE_WRITE32_MEMBER(mk5_ioc_w);
81   DECLARE_READ32_MEMBER(Ns5r50);
82   DECLARE_WRITE32_MEMBER(sram_banksel_w);
7783};
7884
7985
r14845r14846
8490   state->m_mk5_VSYNC_timer->adjust(attotime::never);
8591}
8692
87static WRITE32_HANDLER(Ns5w48)
93WRITE32_MEMBER(aristmk5_state::Ns5w48)
8894{
8995
90
9196    /*
9297    There is one writeable register which is written with the Ns5w48 strobe. It contains four bits which are
9398    taken from bits 16 to 19 of the word being written. The register is cleared whenever the chip is reset. The
r14845r14846
122127    ROM:03400968                 TST     R1, #8          ; test vsync
123128    */
124129
125    aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
130
126131   ioc_regs[IRQ_STATUS_A] &= ~0x08;
127132
128133   /*          bit 1              bit 0 */
129134   if((data &~(0x02)) && (data & (0x01))) // external video crystal is enabled. 25 mhz
130135    {
131           state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure but see above
136           m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure but see above
132137    }
133138    if((data &~(0x02)) && (data &~(0x01))) // video clock is enabled. 24 mhz
134139    {
135           state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
140           m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
136141    }
137142    if((data & (0x02)) && (data &~(0x01))) // video clock is enabled. 36 mhz
138143    {
139           state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
144           m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
140145    }
141146    if((data &(0x02)) && (data &(0x01))) // video clock is enabled. 24 mhz
142147    {
143           state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
148           m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
144149    }
145150}
146151
r14845r14846
152157
153158}
154159
155static READ32_HANDLER(Ns5x58)
160READ32_MEMBER(aristmk5_state::Ns5x58)
156161{
157162    /*
158163        1953.125 Hz for the operating system timer interrupt
r14845r14846
172177                  `-------'                `-------------'
173178    */
174179
175   aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
180
176181   // reset 2KHz timer
177    state->m_mk5_2KHz_timer->adjust(attotime::from_hz(1953.125));
182    m_mk5_2KHz_timer->adjust(attotime::from_hz(1953.125));
178183    ioc_regs[IRQ_STATUS_A] &= ~0x01;
179    cputag_set_input_line(space->machine(), "maincpu", ARM_IRQ_LINE, CLEAR_LINE);
184    cputag_set_input_line(machine(), "maincpu", ARM_IRQ_LINE, CLEAR_LINE);
180185   return 0xffffffff;
181186}
182187
183188/* same as plain AA but with the I2C unconnected */
184static READ32_HANDLER( mk5_ioc_r )
189READ32_MEMBER(aristmk5_state::mk5_ioc_r)
185190{
186   aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
187191   UINT32 ioc_addr;
188192
189193   ioc_addr = offset*4;
r14845r14846
194198   {
195199      int vert_pos;
196200
197      vert_pos = space->machine().primary_screen->vpos();
198      state->m_flyback = (vert_pos <= vidc_regs[VIDC_VDSR] || vert_pos >= vidc_regs[VIDC_VDER]) ? 0x80 : 0x00;
201      vert_pos = machine().primary_screen->vpos();
202      m_flyback = (vert_pos <= vidc_regs[VIDC_VDSR] || vert_pos >= vidc_regs[VIDC_VDER]) ? 0x80 : 0x00;
199203
200      //i2c_data = (i2cmem_sda_read(space->machine().device("i2cmem")) & 1);
204      //i2c_data = (i2cmem_sda_read(machine().device("i2cmem")) & 1);
201205
202      return (state->m_flyback) | (ioc_regs[CONTROL] & 0x7c) | (1<<1) | 1;
206      return (m_flyback) | (ioc_regs[CONTROL] & 0x7c) | (1<<1) | 1;
203207   }
204208
205   return archimedes_ioc_r(space,offset,mem_mask);
209   return archimedes_ioc_r(&space,offset,mem_mask);
206210}
207211
208static WRITE32_HANDLER( mk5_ioc_w )
212WRITE32_MEMBER(aristmk5_state::mk5_ioc_w)
209213{
210   aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
211214   UINT32 ioc_addr;
212215
213216   ioc_addr = offset*4;
214217   ioc_addr >>= 16;
215218   ioc_addr &= 0x37;
216219
217   if(!state->m_ext_latch)
220   if(!m_ext_latch)
218221   {
219222      if(((ioc_addr == 0x20) || (ioc_addr == 0x30)) && (offset & 0x1f) == 0)
220223      {
r14845r14846
222225         return;
223226      }
224227      else
225         archimedes_ioc_w(space,offset,data,mem_mask);
228         archimedes_ioc_w(&space,offset,data,mem_mask);
226229   }
227230}
228231
229static READ32_HANDLER( Ns5r50 )
232READ32_MEMBER(aristmk5_state::Ns5r50)
230233{
231234   return 0xf5; // checked inside the CPU check, unknown meaning
232235}
233236
234static WRITE32_HANDLER( sram_banksel_w )
237WRITE32_MEMBER(aristmk5_state::sram_banksel_w)
235238{
236239    /*
237240
r14845r14846
245248    checked against the other to verify that the stored data is correct.
246249    Each chip is mapped to the same address, and the chip selected depends on the bank
247250    select register. Access is mutually exclusive, increasing security with only one chip
248    visible in the CPU address space at a time. If the CPU crashes and overwrites
251    visible in the CPU address &space at a time. If the CPU crashes and overwrites
249252    memory only one of the three devices can be corrupted. On reset the bank select
250253    register selects bank 0, which does not exist. The SRAMs are at banks 1,2,3.
251254    Each of the SRAM chips may be powered from a separate battery, further reducing
r14845r14846
286289
287290         4 pages of 32k for each sram chip.
288291    */
289    memory_set_bank(space->machine(),"sram_bank", (data & 0xc0) >> 6);
290    memory_set_bank(space->machine(),"sram_bank_nz", (data & 0xc0) >> 6);
292    memory_set_bank(machine(),"sram_bank", (data & 0xc0) >> 6);
293    memory_set_bank(machine(),"sram_bank_nz", (data & 0xc0) >> 6);
291294}
292295
293296/* U.S games have no dram emulator enabled */
r14845r14846
296299   AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE_LEGACY(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */
297300
298301   /* MK-5 overrides */
299   AM_RANGE(0x03010420, 0x03010423) AM_WRITE_LEGACY(sram_banksel_w) // SRAM bank select write
302   AM_RANGE(0x03010420, 0x03010423) AM_WRITE(sram_banksel_w) // SRAM bank select write
300303
301304//  AM_RANGE(0x0301049c, 0x0301051f) AM_DEVREADWRITE_LEGACY("eeprom", eeprom_r, eeprom_w) // eeprom ???
302305
r14845r14846
305308   AM_RANGE(0x03220000, 0x0323ffff) AM_RAMBANK("sram_bank") //AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3
306309
307310   // bank5 slow
308   AM_RANGE(0x03250048, 0x0325004b) AM_WRITE_LEGACY(Ns5w48) //IOEB control register
309   AM_RANGE(0x03250050, 0x03250053) AM_READ_LEGACY(Ns5r50)  //IOEB ID register
310   AM_RANGE(0x03250058, 0x0325005b) AM_READ_LEGACY(Ns5x58)  //IOEB interrupt Latch
311   AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(Ns5w48) //IOEB control register
312   AM_RANGE(0x03250050, 0x03250053) AM_READ(Ns5r50)  //IOEB ID register
313   AM_RANGE(0x03250058, 0x0325005b) AM_READ(Ns5x58)  //IOEB interrupt Latch
311314
312   AM_RANGE(0x03000000, 0x0331ffff) AM_READWRITE_LEGACY(mk5_ioc_r, mk5_ioc_w)
315   AM_RANGE(0x03000000, 0x0331ffff) AM_READWRITE(mk5_ioc_r, mk5_ioc_w)
313316   AM_RANGE(0x03320000, 0x0333ffff) AM_RAMBANK("sram_bank_nz") // AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3 NZ
314317   AM_RANGE(0x03400000, 0x035fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE_LEGACY(archimedes_vidc_w)
315318   AM_RANGE(0x03600000, 0x037fffff) AM_READWRITE_LEGACY(archimedes_memc_r, archimedes_memc_w)
r14845r14846
322325   AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE_LEGACY(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */
323326
324327   /* MK-5 overrides */
325   AM_RANGE(0x03010420, 0x03010423) AM_WRITE_LEGACY(sram_banksel_w) // SRAM bank select write
328   AM_RANGE(0x03010420, 0x03010423) AM_WRITE(sram_banksel_w) // SRAM bank select write
326329
327330//  AM_RANGE(0x0301049c, 0x0301051f) AM_DEVREADWRITE_LEGACY("eeprom", eeprom_r, eeprom_w) // eeprom ???
328331
r14845r14846
331334   AM_RANGE(0x03220000, 0x0323ffff) AM_RAMBANK("sram_bank") //AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3
332335
333336   // bank5 slow
334   AM_RANGE(0x03250048, 0x0325004b) AM_WRITE_LEGACY(Ns5w48) //IOEB control register
335   AM_RANGE(0x03250050, 0x03250053) AM_READ_LEGACY(Ns5r50)  //IOEB ID register
336   AM_RANGE(0x03250058, 0x0325005b) AM_READ_LEGACY(Ns5x58)  //IOEB interrupt Latch
337   AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(Ns5w48) //IOEB control register
338   AM_RANGE(0x03250050, 0x03250053) AM_READ(Ns5r50)  //IOEB ID register
339   AM_RANGE(0x03250058, 0x0325005b) AM_READ(Ns5x58)  //IOEB interrupt Latch
337340
338341
339   AM_RANGE(0x03000000, 0x0331ffff) AM_READWRITE_LEGACY(mk5_ioc_r, mk5_ioc_w)
342   AM_RANGE(0x03000000, 0x0331ffff) AM_READWRITE(mk5_ioc_r, mk5_ioc_w)
340343   AM_RANGE(0x03320000, 0x0333ffff) AM_RAMBANK("sram_bank_nz") // AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3 NZ
341344   AM_RANGE(0x03400000, 0x035fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE_LEGACY(archimedes_vidc_w)
342345   AM_RANGE(0x03600000, 0x037fffff) AM_READWRITE_LEGACY(archimedes_memc_r, archimedes_memc_w)
src/mame/drivers/tmspoker.c
r14845r14846
222222
223223   UINT8 *m_videoram;
224224   tilemap_t *m_bg_tilemap;
225   DECLARE_WRITE8_MEMBER(tmspoker_videoram_w);
226   //DECLARE_WRITE8_MEMBER(debug_w);
227   DECLARE_READ8_MEMBER(unk_r);
225228};
226229
227230
r14845r14846
229232*     Video Hardware     *
230233*************************/
231234
232static WRITE8_HANDLER( tmspoker_videoram_w )
235WRITE8_MEMBER(tmspoker_state::tmspoker_videoram_w)
233236{
234   tmspoker_state *state = space->machine().driver_data<tmspoker_state>();
235   state->m_videoram[offset] = data;
236   state->m_bg_tilemap->mark_tile_dirty(offset);
237   m_videoram[offset] = data;
238   m_bg_tilemap->mark_tile_dirty(offset);
237239}
238240
239241
r14845r14846
273275*  Read / Write Handlers  *
274276**************************/
275277
276//static WRITE8_HANDLER( debug_w )
278//WRITE8_MEMBER(tmspoker_state::debug_w)
277279//{
278280//  popmessage("written : %02X", data);
279281//}
r14845r14846
314316   AM_RANGE(0x0000, 0x0fff) AM_ROMBANK("bank1")
315317   AM_RANGE(0x2800, 0x2800) AM_DEVWRITE("crtc", mc6845_device, address_w)
316318   AM_RANGE(0x2801, 0x2801) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
317   AM_RANGE(0x3000, 0x33ff) AM_WRITE_LEGACY(tmspoker_videoram_w) AM_BASE(m_videoram)
319   AM_RANGE(0x3000, 0x33ff) AM_WRITE(tmspoker_videoram_w) AM_BASE(m_videoram)
318320   AM_RANGE(0x3800, 0x3fff) AM_RAM //NVRAM?
319321   AM_RANGE(0x2000, 0x20ff) AM_RAM //color RAM?
320322ADDRESS_MAP_END
321323
322324
323static READ8_HANDLER(unk_r)
325READ8_MEMBER(tmspoker_state::unk_r)
324326{
325327   printf("%x\n",offset);
326   return 0;//0xff;//mame_rand(space->machine);
328   return 0;//0xff;//mame_rand(machine);
327329}
328330
329331static ADDRESS_MAP_START( tmspoker_cru_map, AS_IO, 8, tmspoker_state )
330   AM_RANGE(0x0000, 0xffff) AM_READ_LEGACY(unk_r)
332   AM_RANGE(0x0000, 0xffff) AM_READ(unk_r)
331333ADDRESS_MAP_END
332334
333335/* I/O byte R/W
src/mame/drivers/darkhors.c
r14845r14846
8383   UINT32 *m_spriteram;
8484
8585   required_device<cpu_device> m_maincpu;
86   DECLARE_WRITE32_MEMBER(darkhors_tmapram_w);
87   DECLARE_WRITE32_MEMBER(darkhors_tmapram2_w);
88   DECLARE_WRITE32_MEMBER(paletteram32_xBBBBBGGGGGRRRRR_dword_w);
89   DECLARE_WRITE32_MEMBER(darkhors_input_sel_w);
90   DECLARE_READ32_MEMBER(darkhors_input_sel_r);
91   DECLARE_WRITE32_MEMBER(darkhors_unk1_w);
92   DECLARE_WRITE32_MEMBER(jclub2_tileram_w);
8693};
8794
8895
r14845r14846
116123   SET_TILE_INFO(0, tile/2, (color & 0x200) ? (color & 0x1ff) : ((color & 0x0ff) * 4) , 0);
117124}
118125
119static WRITE32_HANDLER( darkhors_tmapram_w )
126WRITE32_MEMBER(darkhors_state::darkhors_tmapram_w)
120127{
121   darkhors_state *state = space->machine().driver_data<darkhors_state>();
122   COMBINE_DATA(&state->m_tmapram[offset]);
123   state->m_tmap->mark_tile_dirty(offset);
128   COMBINE_DATA(&m_tmapram[offset]);
129   m_tmap->mark_tile_dirty(offset);
124130}
125static WRITE32_HANDLER( darkhors_tmapram2_w )
131WRITE32_MEMBER(darkhors_state::darkhors_tmapram2_w)
126132{
127   darkhors_state *state = space->machine().driver_data<darkhors_state>();
128   COMBINE_DATA(&state->m_tmapram2[offset]);
129   state->m_tmap2->mark_tile_dirty(offset);
133   COMBINE_DATA(&m_tmapram2[offset]);
134   m_tmap2->mark_tile_dirty(offset);
130135}
131136
132137static void draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect)
r14845r14846
263268   }
264269}
265270
266static WRITE32_HANDLER( paletteram32_xBBBBBGGGGGRRRRR_dword_w )
271WRITE32_MEMBER(darkhors_state::paletteram32_xBBBBBGGGGGRRRRR_dword_w)
267272{
268273   if (ACCESSING_BITS_16_31)   paletteram16_xBBBBBGGGGGRRRRR_word_w(space, offset*2, data >> 16, mem_mask >> 16);
269274   if (ACCESSING_BITS_0_15)   paletteram16_xBBBBBGGGGGRRRRR_word_w(space, offset*2+1, data, mem_mask);
270275}
271276
272static WRITE32_HANDLER( darkhors_input_sel_w )
277WRITE32_MEMBER(darkhors_state::darkhors_input_sel_w)
273278{
274   darkhors_state *state = space->machine().driver_data<darkhors_state>();
275   COMBINE_DATA(&state->m_input_sel);
279   COMBINE_DATA(&m_input_sel);
276280//  if (ACCESSING_BITS_16_31)    popmessage("%04X",data >> 16);
277281}
278282
r14845r14846
292296   }
293297}
294298
295static READ32_HANDLER( darkhors_input_sel_r )
299READ32_MEMBER(darkhors_state::darkhors_input_sel_r)
296300{
297   darkhors_state *state = space->machine().driver_data<darkhors_state>();
298301   // from bit mask to bit number
299   int bit_p1 = mask_to_bit((state->m_input_sel & 0x00ff0000) >> 16);
300   int bit_p2 = mask_to_bit((state->m_input_sel & 0xff000000) >> 24);
302   int bit_p1 = mask_to_bit((m_input_sel & 0x00ff0000) >> 16);
303   int bit_p2 = mask_to_bit((m_input_sel & 0xff000000) >> 24);
301304   static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7" };
302305
303   return   (input_port_read(space->machine(), portnames[bit_p1]) & 0x00ffffff) |
304         (input_port_read(space->machine(), portnames[bit_p2]) & 0xff000000) ;
306   return   (input_port_read(machine(), portnames[bit_p1]) & 0x00ffffff) |
307         (input_port_read(machine(), portnames[bit_p2]) & 0xff000000) ;
305308}
306309
307static WRITE32_HANDLER( darkhors_unk1_w )
310WRITE32_MEMBER(darkhors_state::darkhors_unk1_w)
308311{
309312   // 0x1000 lockout
310313//  if (ACCESSING_BITS_16_31)    popmessage("%04X",data >> 16);
r14845r14846
315318   AM_RANGE(0x400000, 0x41ffff) AM_RAM
316319
317320   AM_RANGE(0x490040, 0x490043) AM_DEVWRITE_LEGACY("eeprom", darkhors_eeprom_w)
318   AM_RANGE(0x4e0080, 0x4e0083) AM_READ_PORT("4e0080") AM_WRITE_LEGACY(darkhors_unk1_w)
321   AM_RANGE(0x4e0080, 0x4e0083) AM_READ_PORT("4e0080") AM_WRITE(darkhors_unk1_w)
319322
320323   AM_RANGE(0x580000, 0x580003) AM_READ_PORT("580000")
321324   AM_RANGE(0x580004, 0x580007) AM_READ_PORT("580004")
322   AM_RANGE(0x580008, 0x58000b) AM_READ_LEGACY(darkhors_input_sel_r)
323   AM_RANGE(0x58000c, 0x58000f) AM_WRITE_LEGACY(darkhors_input_sel_w)
325   AM_RANGE(0x580008, 0x58000b) AM_READ(darkhors_input_sel_r)
326   AM_RANGE(0x58000c, 0x58000f) AM_WRITE(darkhors_input_sel_w)
324327   AM_RANGE(0x580084, 0x580087) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0xff000000)
325328   AM_RANGE(0x580200, 0x580203) AM_READNOP
326329   AM_RANGE(0x580400, 0x580403) AM_READ_PORT("580400")
327330   AM_RANGE(0x580420, 0x580423) AM_READ_PORT("580420")
328331
329332   AM_RANGE(0x800000, 0x86bfff) AM_RAM
330   AM_RANGE(0x86c000, 0x86ffff) AM_RAM_WRITE_LEGACY(darkhors_tmapram_w) AM_BASE(m_tmapram)
331   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE_LEGACY(darkhors_tmapram2_w) AM_BASE(m_tmapram2)
333   AM_RANGE(0x86c000, 0x86ffff) AM_RAM_WRITE(darkhors_tmapram_w) AM_BASE(m_tmapram)
334   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE(darkhors_tmapram2_w) AM_BASE(m_tmapram2)
332335   AM_RANGE(0x874000, 0x87dfff) AM_RAM
333336   AM_RANGE(0x87e000, 0x87ffff) AM_RAM AM_BASE(m_spriteram)
334   AM_RANGE(0x880000, 0x89ffff) AM_WRITE_LEGACY(paletteram32_xBBBBBGGGGGRRRRR_dword_w) AM_BASE_GENERIC(paletteram)
337   AM_RANGE(0x880000, 0x89ffff) AM_WRITE(paletteram32_xBBBBBGGGGGRRRRR_dword_w) AM_BASE_GENERIC(paletteram)
335338   AM_RANGE(0x8a0000, 0x8bffff) AM_WRITEONLY   // this should still be palette ram!
336339   AM_RANGE(0x8c0120, 0x8c012f) AM_WRITEONLY AM_BASE(m_tmapscroll)
337340   AM_RANGE(0x8c0130, 0x8c013f) AM_WRITEONLY AM_BASE(m_tmapscroll2)
338341ADDRESS_MAP_END
339342
340343
341static WRITE32_HANDLER( jclub2_tileram_w )
344WRITE32_MEMBER(darkhors_state::jclub2_tileram_w)
342345{
343   darkhors_state *state = space->machine().driver_data<darkhors_state>();
344   COMBINE_DATA(&state->m_jclub2_tileram[offset]);
345   gfx_element_mark_dirty(space->machine().gfx[state->m_jclub2_gfx_index], offset/(256/4));
346   COMBINE_DATA(&m_jclub2_tileram[offset]);
347   gfx_element_mark_dirty(machine().gfx[m_jclub2_gfx_index], offset/(256/4));
346348
347349}
348350
r14845r14846
351353   AM_RANGE(0x400000, 0x41ffff) AM_RAM
352354
353355   AM_RANGE(0x490040, 0x490043) AM_DEVWRITE_LEGACY("eeprom", darkhors_eeprom_w)
354   AM_RANGE(0x4e0080, 0x4e0083) AM_READ_PORT("4e0080") AM_WRITE_LEGACY(darkhors_unk1_w)
356   AM_RANGE(0x4e0080, 0x4e0083) AM_READ_PORT("4e0080") AM_WRITE(darkhors_unk1_w)
355357
356358   AM_RANGE(0x580000, 0x580003) AM_READ_PORT("580000")
357359   AM_RANGE(0x580004, 0x580007) AM_READ_PORT("580004")
358   AM_RANGE(0x580008, 0x58000b) AM_READ_LEGACY(darkhors_input_sel_r)
359   AM_RANGE(0x58000c, 0x58000f) AM_WRITE_LEGACY(darkhors_input_sel_w)
360   AM_RANGE(0x580008, 0x58000b) AM_READ(darkhors_input_sel_r)
361   AM_RANGE(0x58000c, 0x58000f) AM_WRITE(darkhors_input_sel_w)
360362   AM_RANGE(0x580200, 0x580203) AM_READNOP
361363   AM_RANGE(0x580400, 0x580403) AM_READ_PORT("580400")
362364   AM_RANGE(0x580420, 0x580423) AM_READ_PORT("580420")
363365
364366   AM_RANGE(0x800000, 0x87ffff) AM_RAM AM_BASE(m_spriteram)
365367
366   AM_RANGE(0x880000, 0x89ffff) AM_WRITE_LEGACY(paletteram32_xBBBBBGGGGGRRRRR_dword_w) AM_BASE_GENERIC(paletteram)
368   AM_RANGE(0x880000, 0x89ffff) AM_WRITE(paletteram32_xBBBBBGGGGGRRRRR_dword_w) AM_BASE_GENERIC(paletteram)
367369   AM_RANGE(0x8a0000, 0x8bffff) AM_WRITEONLY   // this should still be palette ram!
368370
369371   AM_RANGE(0x8C0000, 0x8C01ff) AM_RAM
370372   AM_RANGE(0x8E0000, 0x8E01ff) AM_RAM
371373
372   AM_RANGE(0x900000, 0x90ffff) AM_RAM_WRITE_LEGACY(jclub2_tileram_w) AM_BASE(m_jclub2_tileram) // tile data gets decompressed here by main cpu?
374   AM_RANGE(0x900000, 0x90ffff) AM_RAM_WRITE(jclub2_tileram_w) AM_BASE(m_jclub2_tileram) // tile data gets decompressed here by main cpu?
373375ADDRESS_MAP_END
374376
375377
src/mame/drivers/mirax.c
r14845r14846
8383   UINT8 m_nmi_mask;
8484   UINT8 *m_videoram;
8585   UINT8 *m_colorram;
86   DECLARE_WRITE8_MEMBER(audio_w);
87   DECLARE_READ8_MEMBER(unk_r);
88   DECLARE_WRITE8_MEMBER(nmi_mask_w);
89   DECLARE_WRITE8_MEMBER(mirax_sound_cmd_w);
90   DECLARE_WRITE8_MEMBER(coin_lockout_w);
8691};
8792
8893
r14845r14846
177182   state->m_nAyCtrl = 0x00;
178183}
179184
180static WRITE8_HANDLER(audio_w)
185WRITE8_MEMBER(mirax_state::audio_w)
181186{
182   mirax_state *state = space->machine().driver_data<mirax_state>();
183187
184   state->m_nAyCtrl=offset;
188   m_nAyCtrl=offset;
185189}
186190
187191static WRITE8_DEVICE_HANDLER(ay_sel)
r14845r14846
194198   }
195199}
196200
197static READ8_HANDLER( unk_r )
201READ8_MEMBER(mirax_state::unk_r)
198202{
199203   return 0xff;
200204}
201205
202static WRITE8_HANDLER( nmi_mask_w )
206WRITE8_MEMBER(mirax_state::nmi_mask_w)
203207{
204   mirax_state *state = space->machine().driver_data<mirax_state>();
205   state->m_nmi_mask = data & 1;
208   m_nmi_mask = data & 1;
206209   if(data & 0xfe)
207210      printf("Warning: %02x written at $f501\n",data);
208211}
209212
210static WRITE8_HANDLER( mirax_sound_cmd_w )
213WRITE8_MEMBER(mirax_state::mirax_sound_cmd_w)
211214{
212215   soundlatch_w(space, 0, data & 0xff);
213   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
216   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
214217}
215218
216219/* might be coin counter instead */
217static WRITE8_HANDLER( coin_lockout_w )
220WRITE8_MEMBER(mirax_state::coin_lockout_w)
218221{
219   coin_lockout_w(space->machine(), 0,data & 1);
220   coin_lockout_w(space->machine(), 1,data & 1);
222   coin_lockout_w(space, 0,data & 1);
223   coin_lockout_w(space, 1,data & 1);
221224}
222225
223226static ADDRESS_MAP_START( mirax_main_map, AS_PROGRAM, 8, mirax_state )
r14845r14846
229232   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("P1")
230233   AM_RANGE(0xf100, 0xf100) AM_READ_PORT("P2")
231234   AM_RANGE(0xf200, 0xf200) AM_READ_PORT("DSW1")
232   AM_RANGE(0xf300, 0xf300) AM_READ_LEGACY(unk_r) //watchdog? value is always read then discarded
235   AM_RANGE(0xf300, 0xf300) AM_READ(unk_r) //watchdog? value is always read then discarded
233236   AM_RANGE(0xf400, 0xf400) AM_READ_PORT("DSW2")
234   AM_RANGE(0xf500, 0xf500) AM_WRITE_LEGACY(coin_lockout_w)
235   AM_RANGE(0xf501, 0xf501) AM_WRITE_LEGACY(nmi_mask_w)
237   AM_RANGE(0xf500, 0xf500) AM_WRITE(coin_lockout_w)
238   AM_RANGE(0xf501, 0xf501) AM_WRITE(nmi_mask_w)
236239//  AM_RANGE(0xf506, 0xf506)
237240//  AM_RANGE(0xf507, 0xf507)
238   AM_RANGE(0xf800, 0xf800) AM_WRITE_LEGACY(mirax_sound_cmd_w)
241   AM_RANGE(0xf800, 0xf800) AM_WRITE(mirax_sound_cmd_w)
239242//  AM_RANGE(0xf900, 0xf900) //sound cmd mirror? ack?
240243ADDRESS_MAP_END
241244
r14845r14846
252255   AM_RANGE(0xe401, 0xe401) AM_WRITENOP
253256   AM_RANGE(0xe403, 0xe403) AM_DEVWRITE_LEGACY("ay2", ay_sel) //2nd ay ?
254257
255   AM_RANGE(0xf900, 0xf9ff) AM_WRITE_LEGACY(audio_w)
258   AM_RANGE(0xf900, 0xf9ff) AM_WRITE(audio_w)
256259ADDRESS_MAP_END
257260
258261static const gfx_layout layout16 =
src/mame/drivers/cardline.c
r14845r14846
3333   UINT8 *m_videoram;
3434   UINT8 *m_colorram;
3535   int m_var;
36   DECLARE_WRITE8_MEMBER(vram_w);
37   DECLARE_WRITE8_MEMBER(attr_w);
38   DECLARE_WRITE8_MEMBER(video_w);
39   DECLARE_READ8_MEMBER(unk_r);
40   DECLARE_WRITE8_MEMBER(lamps_w);
3641};
3742
3843
r14845r14846
7075   return 0;
7176}
7277
73static WRITE8_HANDLER(vram_w)
78WRITE8_MEMBER(cardline_state::vram_w)
7479{
75   cardline_state *state = space->machine().driver_data<cardline_state>();
76   offset+=0x1000*((state->m_video&2)>>1);
77   state->m_videoram[offset]=data;
80   offset+=0x1000*((m_video&2)>>1);
81   m_videoram[offset]=data;
7882}
7983
80static WRITE8_HANDLER(attr_w)
84WRITE8_MEMBER(cardline_state::attr_w)
8185{
82   cardline_state *state = space->machine().driver_data<cardline_state>();
83   offset+=0x1000*((state->m_video&2)>>1);
84   state->m_colorram[offset]=data;
86   offset+=0x1000*((m_video&2)>>1);
87   m_colorram[offset]=data;
8588}
8689
87static WRITE8_HANDLER(video_w)
90WRITE8_MEMBER(cardline_state::video_w)
8891{
89   cardline_state *state = space->machine().driver_data<cardline_state>();
90   state->m_video=data;
92   m_video=data;
9193}
9294
93static READ8_HANDLER(unk_r)
95READ8_MEMBER(cardline_state::unk_r)
9496{
95   cardline_state *state = space->machine().driver_data<cardline_state>();
96   state->m_var^=0x10;
97   //printf("var %d\n",state->m_var);
98   return state->m_var;
97   m_var^=0x10;
98   //printf("var %d\n",m_var);
99   return m_var;
99100}
100101
101static WRITE8_HANDLER(lamps_w)
102WRITE8_MEMBER(cardline_state::lamps_w)
102103{
103104   /* button lamps 1-8 (collect, card 1-5, bet, start) */
104105   output_set_lamp_value(5,(data >> 0) & 1);
r14845r14846
120121   AM_RANGE(0x2003, 0x2003) AM_READ_PORT("IN0")
121122   AM_RANGE(0x2005, 0x2005) AM_READ_PORT("IN1")
122123   AM_RANGE(0x2006, 0x2006) AM_READ_PORT("DSW")
123   AM_RANGE(0x2007, 0x2007) AM_WRITE_LEGACY(lamps_w)
124   AM_RANGE(0x2007, 0x2007) AM_WRITE(lamps_w)
124125   AM_RANGE(0x2008, 0x2008) AM_NOP
125126   AM_RANGE(0x2080, 0x213f) AM_NOP
126127   AM_RANGE(0x2400, 0x2400) AM_DEVREADWRITE("oki", okim6295_device, read, write)
r14845r14846
128129   AM_RANGE(0x2840, 0x2840) AM_NOP
129130   AM_RANGE(0x2880, 0x2880) AM_NOP
130131   AM_RANGE(0x3003, 0x3003) AM_NOP
131   AM_RANGE(0xc000, 0xdfff) AM_WRITE_LEGACY(vram_w) AM_BASE(m_videoram)
132   AM_RANGE(0xe000, 0xffff) AM_WRITE_LEGACY(attr_w) AM_BASE(m_colorram)
132   AM_RANGE(0xc000, 0xdfff) AM_WRITE(vram_w) AM_BASE(m_videoram)
133   AM_RANGE(0xe000, 0xffff) AM_WRITE(attr_w) AM_BASE(m_colorram)
133134   /* Ports */
134   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE_LEGACY(unk_r, video_w)
135   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE(unk_r, video_w)
135136ADDRESS_MAP_END
136137
137138
src/mame/drivers/omegrace.c
r14845r14846
229229   omegrace_state(const machine_config &mconfig, device_type type, const char *tag)
230230      : driver_device(mconfig, type, tag) { }
231231
232   DECLARE_READ8_MEMBER(omegrace_vg_go_r);
233   DECLARE_READ8_MEMBER(omegrace_spinner1_r);
234   DECLARE_WRITE8_MEMBER(omegrace_leds_w);
235   DECLARE_WRITE8_MEMBER(omegrace_soundlatch_w);
232236};
233237
234238
r14845r14846
253257 *
254258 *************************************/
255259
256static READ8_HANDLER( omegrace_vg_go_r )
260READ8_MEMBER(omegrace_state::omegrace_vg_go_r)
257261{
258   avgdvg_go_w(space,0,0);
262   avgdvg_go_w(&space,0,0);
259263   return 0;
260264}
261265
r14845r14846
291295};
292296
293297
294static READ8_HANDLER( omegrace_spinner1_r )
298READ8_MEMBER(omegrace_state::omegrace_spinner1_r)
295299{
296   return (spinnerTable[input_port_read(space->machine(), "SPIN0") & 0x3f]);
300   return (spinnerTable[input_port_read(machine(), "SPIN0") & 0x3f]);
297301}
298302
299303
r14845r14846
304308 *
305309 *************************************/
306310
307static WRITE8_HANDLER( omegrace_leds_w )
311WRITE8_MEMBER(omegrace_state::omegrace_leds_w)
308312{
309313   /* bits 0 and 1 are coin counters */
310   coin_counter_w(space->machine(), 0,data & 0x01);
311   coin_counter_w(space->machine(), 1,data & 0x02);
314   coin_counter_w(machine(), 0,data & 0x01);
315   coin_counter_w(machine(), 1,data & 0x02);
312316
313317   /* bits 2 to 5 are the start leds (4 and 5 cocktail only) */
314   set_led_status(space->machine(), 0,~data & 0x04);
315   set_led_status(space->machine(), 1,~data & 0x08);
316   set_led_status(space->machine(), 2,~data & 0x10);
317   set_led_status(space->machine(), 3,~data & 0x20);
318   set_led_status(machine(), 0,~data & 0x04);
319   set_led_status(machine(), 1,~data & 0x08);
320   set_led_status(machine(), 2,~data & 0x10);
321   set_led_status(machine(), 3,~data & 0x20);
318322
319323   /* bit 6 flips screen (not supported) */
320324}
321325
322326
323static WRITE8_HANDLER( omegrace_soundlatch_w )
327WRITE8_MEMBER(omegrace_state::omegrace_soundlatch_w)
324328{
325329   soundlatch_w (space, offset, data);
326   cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
330   cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
327331}
328332
329333
r14845r14846
345349
346350static ADDRESS_MAP_START( port_map, AS_IO, 8, omegrace_state )
347351   ADDRESS_MAP_GLOBAL_MASK(0xff)
348   AM_RANGE(0x08, 0x08) AM_READ_LEGACY(omegrace_vg_go_r)
352   AM_RANGE(0x08, 0x08) AM_READ(omegrace_vg_go_r)
349353   AM_RANGE(0x09, 0x09) AM_READ_LEGACY(watchdog_reset_r)
350354   AM_RANGE(0x0a, 0x0a) AM_WRITE_LEGACY(avgdvg_reset_w)
351355   AM_RANGE(0x0b, 0x0b) AM_READ_PORT("AVGDVG")            /* vg_halt */
r14845r14846
353357   AM_RANGE(0x17, 0x17) AM_READ_PORT("DSW2")            /* DIP SW C6 */
354358   AM_RANGE(0x11, 0x11) AM_READ_PORT("IN0")            /* Player 1 input */
355359   AM_RANGE(0x12, 0x12) AM_READ_PORT("IN1")            /* Player 2 input */
356   AM_RANGE(0x13, 0x13) AM_WRITE_LEGACY(omegrace_leds_w)         /* coin counters, leds, flip screen */
357   AM_RANGE(0x14, 0x14) AM_WRITE_LEGACY(omegrace_soundlatch_w)   /* Sound command */
358   AM_RANGE(0x15, 0x15) AM_READ_LEGACY(omegrace_spinner1_r)      /* 1st controller */
360   AM_RANGE(0x13, 0x13) AM_WRITE(omegrace_leds_w)         /* coin counters, leds, flip screen */
361   AM_RANGE(0x14, 0x14) AM_WRITE(omegrace_soundlatch_w)   /* Sound command */
362   AM_RANGE(0x15, 0x15) AM_READ(omegrace_spinner1_r)      /* 1st controller */
359363   AM_RANGE(0x16, 0x16) AM_READ_PORT("SPIN1")            /* 2nd controller (cocktail) */
360364ADDRESS_MAP_END
361365
src/mame/drivers/dlair.c
r14845r14846
9999   optional_device<phillips_22vp932_device> m_22vp932;
100100   UINT8 m_last_misc;
101101   UINT8 m_laserdisc_data;
102   DECLARE_WRITE8_MEMBER(misc_w);
103   DECLARE_WRITE8_MEMBER(dleuro_misc_w);
104   DECLARE_WRITE8_MEMBER(led_den1_w);
105   DECLARE_WRITE8_MEMBER(led_den2_w);
106   DECLARE_READ8_MEMBER(laserdisc_r);
107   DECLARE_WRITE8_MEMBER(laserdisc_w);
102108};
103109
104110
r14845r14846
285291 *
286292 *************************************/
287293
288static WRITE8_HANDLER( misc_w )
294WRITE8_MEMBER(dlair_state::misc_w)
289295{
290   dlair_state *state = space->machine().driver_data<dlair_state>();
291296   /*
292297        D0-D3 = B0-B3
293298           D4 = coin counter
r14845r14846
295300           D6 = ENTER
296301           D7 = INT/EXT
297302    */
298   UINT8 diff = data ^ state->m_last_misc;
299   state->m_last_misc = data;
303   UINT8 diff = data ^ m_last_misc;
304   m_last_misc = data;
300305
301   coin_counter_w(space->machine(), 0, (~data >> 4) & 1);
306   coin_counter_w(machine(), 0, (~data >> 4) & 1);
302307
303308   /* on bit 5 going low, push the data out to the laserdisc player */
304309   if ((diff & 0x20) && !(data & 0x20))
305      state->laserdisc_data_w(state->m_laserdisc_data);
310      laserdisc_data_w(m_laserdisc_data);
306311
307312   /* on bit 6 going low, we need to signal enter */
308   state->laserdisc_enter_w((data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
313   laserdisc_enter_w((data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
309314}
310315
311316
312static WRITE8_HANDLER( dleuro_misc_w )
317WRITE8_MEMBER(dlair_state::dleuro_misc_w)
313318{
314   dlair_state *state = space->machine().driver_data<dlair_state>();
315319   /*
316320           D0 = CHAR GEN ON+
317321           D1 = KILL VIDEO+
r14845r14846
322326           D6 = ENTER
323327           D7 = INT/EXT
324328    */
325   UINT8 diff = data ^ state->m_last_misc;
326   state->m_last_misc = data;
329   UINT8 diff = data ^ m_last_misc;
330   m_last_misc = data;
327331
328   coin_counter_w(space->machine(), 1, (~data >> 3) & 1);
329   coin_counter_w(space->machine(), 0, (~data >> 4) & 1);
332   coin_counter_w(machine(), 1, (~data >> 3) & 1);
333   coin_counter_w(machine(), 0, (~data >> 4) & 1);
330334
331335   /* on bit 5 going low, push the data out to the laserdisc player */
332336   if ((diff & 0x20) && !(data & 0x20))
333      state->laserdisc_data_w(state->m_laserdisc_data);
337      laserdisc_data_w(m_laserdisc_data);
334338
335339   /* on bit 6 going low, we need to signal enter */
336   state->laserdisc_enter_w((data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
340   laserdisc_enter_w((data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
337341}
338342
339343
340static WRITE8_HANDLER( led_den1_w )
344WRITE8_MEMBER(dlair_state::led_den1_w)
341345{
342346   output_set_digit_value(0 + (offset & 7), led_map[data & 0x0f]);
343347}
344348
345349
346static WRITE8_HANDLER( led_den2_w )
350WRITE8_MEMBER(dlair_state::led_den2_w)
347351{
348352   output_set_digit_value(8 + (offset & 7), led_map[data & 0x0f]);
349353}
r14845r14846
370374}
371375
372376
373static READ8_HANDLER( laserdisc_r )
377READ8_MEMBER(dlair_state::laserdisc_r)
374378{
375   dlair_state *state = space->machine().driver_data<dlair_state>();
376   UINT8 result = state->laserdisc_data_r();
379   UINT8 result = laserdisc_data_r();
377380   mame_printf_debug("laserdisc_r = %02X\n", result);
378381   return result;
379382}
380383
381384
382static WRITE8_HANDLER( laserdisc_w )
385WRITE8_MEMBER(dlair_state::laserdisc_w)
383386{
384   dlair_state *state = space->machine().driver_data<dlair_state>();
385   state->m_laserdisc_data = data;
387   m_laserdisc_data = data;
386388}
387389
388390
r14845r14846
400402   AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fc7) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
401403   AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x1fc7) AM_READ_PORT("CONTROLS")
402404   AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x1fc7) AM_READ_PORT("SERVICE")
403   AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x1fc7) AM_READ_LEGACY(laserdisc_r)
405   AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x1fc7) AM_READ(laserdisc_r)
404406   AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fc7) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
405   AM_RANGE(0xe008, 0xe008) AM_MIRROR(0x1fc7) AM_WRITE_LEGACY(misc_w)
407   AM_RANGE(0xe008, 0xe008) AM_MIRROR(0x1fc7) AM_WRITE(misc_w)
406408   AM_RANGE(0xe010, 0xe010) AM_MIRROR(0x1fc7) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
407   AM_RANGE(0xe020, 0xe020) AM_MIRROR(0x1fc7) AM_WRITE_LEGACY(laserdisc_w)
408   AM_RANGE(0xe030, 0xe037) AM_MIRROR(0x1fc0) AM_WRITE_LEGACY(led_den2_w)
409   AM_RANGE(0xe038, 0xe03f) AM_MIRROR(0x1fc0) AM_WRITE_LEGACY(led_den1_w)
409   AM_RANGE(0xe020, 0xe020) AM_MIRROR(0x1fc7) AM_WRITE(laserdisc_w)
410   AM_RANGE(0xe030, 0xe037) AM_MIRROR(0x1fc0) AM_WRITE(led_den2_w)
411   AM_RANGE(0xe038, 0xe03f) AM_MIRROR(0x1fc0) AM_WRITE(led_den1_w)
410412ADDRESS_MAP_END
411413
412414
r14845r14846
424426   AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x1800) AM_RAM AM_BASE(m_videoram)
425427   AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1f47) // WT LED 1
426428   AM_RANGE(0xe008, 0xe008) AM_MIRROR(0x1f47) // WT LED 2
427   AM_RANGE(0xe010, 0xe010) AM_MIRROR(0x1f47) AM_WRITE_LEGACY(led_den1_w)         // WT EXT LED 1
428   AM_RANGE(0xe018, 0xe018) AM_MIRROR(0x1f47) AM_WRITE_LEGACY(led_den2_w)         // WT EXT LED 2
429   AM_RANGE(0xe020, 0xe020) AM_MIRROR(0x1f47) AM_WRITE_LEGACY(laserdisc_w)      // DISC WT
430   AM_RANGE(0xe028, 0xe028) AM_MIRROR(0x1f47) AM_WRITE_LEGACY(dleuro_misc_w)      // WT MISC
429   AM_RANGE(0xe010, 0xe010) AM_MIRROR(0x1f47) AM_WRITE(led_den1_w)         // WT EXT LED 1
430   AM_RANGE(0xe018, 0xe018) AM_MIRROR(0x1f47) AM_WRITE(led_den2_w)         // WT EXT LED 2
431   AM_RANGE(0xe020, 0xe020) AM_MIRROR(0x1f47) AM_WRITE(laserdisc_w)      // DISC WT
432   AM_RANGE(0xe028, 0xe028) AM_MIRROR(0x1f47) AM_WRITE(dleuro_misc_w)      // WT MISC
431433   AM_RANGE(0xe030, 0xe030) AM_MIRROR(0x1f47) AM_WRITE_LEGACY(watchdog_reset_w)   // CLR WDOG
432434   AM_RANGE(0xe080, 0xe080) AM_MIRROR(0x1f47) AM_READ_PORT("P1")         // CP A
433435   AM_RANGE(0xe088, 0xe088) AM_MIRROR(0x1f47) AM_READ_PORT("SYSTEM")      // CP B
434436   AM_RANGE(0xe090, 0xe090) AM_MIRROR(0x1f47) AM_READ_PORT("DSW1")         // OPT SW A
435437   AM_RANGE(0xe098, 0xe098) AM_MIRROR(0x1f47) AM_READ_PORT("DSW2")         // OPT SW B
436   AM_RANGE(0xe0a0, 0xe0a0) AM_MIRROR(0x1f47) AM_READ_LEGACY(laserdisc_r)         // RD DISC DATA
438   AM_RANGE(0xe0a0, 0xe0a0) AM_MIRROR(0x1f47) AM_READ(laserdisc_r)         // RD DISC DATA
437439ADDRESS_MAP_END
438440
439441
src/mame/drivers/jollyjgr.c
r14845r14846
125125   UINT8      m_bitmap_disable;
126126   UINT8      m_tilemap_bank;
127127   UINT8      m_pri;
128   DECLARE_WRITE8_MEMBER(jollyjgr_videoram_w);
129   DECLARE_WRITE8_MEMBER(jollyjgr_attrram_w);
130   DECLARE_WRITE8_MEMBER(jollyjgr_misc_w);
131   DECLARE_WRITE8_MEMBER(jollyjgr_coin_lookout_w);
128132};
129133
130134
r14845r14846
134138 *
135139 *************************************/
136140
137static WRITE8_HANDLER( jollyjgr_videoram_w )
141WRITE8_MEMBER(jollyjgr_state::jollyjgr_videoram_w)
138142{
139   jollyjgr_state *state = space->machine().driver_data<jollyjgr_state>();
140   state->m_videoram[offset] = data;
141   state->m_bg_tilemap->mark_tile_dirty(offset);
143   m_videoram[offset] = data;
144   m_bg_tilemap->mark_tile_dirty(offset);
142145}
143146
144static WRITE8_HANDLER( jollyjgr_attrram_w )
147WRITE8_MEMBER(jollyjgr_state::jollyjgr_attrram_w)
145148{
146   jollyjgr_state *state = space->machine().driver_data<jollyjgr_state>();
147149
148150   if (offset & 1)
149151   {
r14845r14846
151153      int i;
152154
153155      for (i = offset >> 1; i < 0x0400; i += 32)
154         state->m_bg_tilemap->mark_tile_dirty(i);
156         m_bg_tilemap->mark_tile_dirty(i);
155157   }
156158   else
157159   {
158      state->m_bg_tilemap->set_scrolly(offset >> 1, data);
160      m_bg_tilemap->set_scrolly(offset >> 1, data);
159161   }
160162
161   state->m_colorram[offset] = data;
163   m_colorram[offset] = data;
162164}
163165
164static WRITE8_HANDLER( jollyjgr_misc_w )
166WRITE8_MEMBER(jollyjgr_state::jollyjgr_misc_w)
165167{
166   jollyjgr_state *state = space->machine().driver_data<jollyjgr_state>();
167168
168169   // they could be swapped, because it always set "data & 3"
169   state->m_flip_x = data & 1;
170   state->m_flip_y = data & 2;
170   m_flip_x = data & 1;
171   m_flip_y = data & 2;
171172
172173   // same for these two (used by Frog & Spiders)
173   state->m_bitmap_disable = data & 0x40;
174   state->m_tilemap_bank = data & 0x20;
174   m_bitmap_disable = data & 0x40;
175   m_tilemap_bank = data & 0x20;
175176
176   state->m_pri = data & 4;
177   m_pri = data & 4;
177178
178   state->m_bg_tilemap->set_flip((state->m_flip_x ? TILEMAP_FLIPX : 0) | (state->m_flip_y ? TILEMAP_FLIPY : 0));
179   m_bg_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) | (m_flip_y ? TILEMAP_FLIPY : 0));
179180
180   state->m_nmi_enable = data & 0x80;
181   m_nmi_enable = data & 0x80;
181182}
182183
183static WRITE8_HANDLER( jollyjgr_coin_lookout_w )
184WRITE8_MEMBER(jollyjgr_state::jollyjgr_coin_lookout_w)
184185{
185   coin_lockout_global_w(space->machine(), data & 1);
186   coin_lockout_global_w(machine(), data & 1);
186187
187188   /* bits 4, 5, 6 and 7 are used too */
188189}
r14845r14846
200201   AM_RANGE(0x8ff9, 0x8ff9) AM_READ_PORT("INPUTS")
201202   AM_RANGE(0x8ff8, 0x8ff8) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
202203   AM_RANGE(0x8ffa, 0x8ffa) AM_READ_PORT("SYSTEM") AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
203   AM_RANGE(0x8ffc, 0x8ffc) AM_WRITE_LEGACY(jollyjgr_misc_w)
204   AM_RANGE(0x8ffd, 0x8ffd) AM_WRITE_LEGACY(jollyjgr_coin_lookout_w)
204   AM_RANGE(0x8ffc, 0x8ffc) AM_WRITE(jollyjgr_misc_w)
205   AM_RANGE(0x8ffd, 0x8ffd) AM_WRITE(jollyjgr_coin_lookout_w)
205206   AM_RANGE(0x8fff, 0x8fff) AM_READ_PORT("DSW2")
206   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE_LEGACY(jollyjgr_videoram_w) AM_BASE(m_videoram)
207   AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE_LEGACY(jollyjgr_attrram_w) AM_BASE(m_colorram)
207   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(jollyjgr_videoram_w) AM_BASE(m_videoram)
208   AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE(jollyjgr_attrram_w) AM_BASE(m_colorram)
208209   AM_RANGE(0x9840, 0x987f) AM_RAM AM_BASE(m_spriteram)
209210   AM_RANGE(0x9880, 0x9bff) AM_RAM
210211   AM_RANGE(0xa000, 0xffff) AM_RAM AM_BASE(m_bitmap)
r14845r14846
217218   AM_RANGE(0x8ff9, 0x8ff9) AM_READ_PORT("INPUTS")
218219   AM_RANGE(0x8ff8, 0x8ff8) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
219220   AM_RANGE(0x8ffa, 0x8ffa) AM_READ_PORT("SYSTEM") AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
220   AM_RANGE(0x8ffc, 0x8ffc) AM_WRITE_LEGACY(jollyjgr_misc_w)
221   AM_RANGE(0x8ffd, 0x8ffd) AM_WRITE_LEGACY(jollyjgr_coin_lookout_w)
221   AM_RANGE(0x8ffc, 0x8ffc) AM_WRITE(jollyjgr_misc_w)
222   AM_RANGE(0x8ffd, 0x8ffd) AM_WRITE(jollyjgr_coin_lookout_w)
222223   AM_RANGE(0x8fff, 0x8fff) AM_READ_PORT("DSW2")
223   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE_LEGACY(jollyjgr_videoram_w) AM_BASE(m_videoram)
224   AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE_LEGACY(jollyjgr_attrram_w) AM_BASE(m_colorram)
224   AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(jollyjgr_videoram_w) AM_BASE(m_videoram)
225   AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE(jollyjgr_attrram_w) AM_BASE(m_colorram)
225226   AM_RANGE(0x9840, 0x987f) AM_RAM AM_BASE(m_spriteram)
226227   AM_RANGE(0x9880, 0x989f) AM_RAM // ?
227228   AM_RANGE(0x98a0, 0x98af) AM_RAM AM_BASE(m_bulletram)
src/mame/drivers/ssfindo.c
r14845r14846
229229   emu_timer *m_PS7500timer0;
230230   emu_timer *m_PS7500timer1;
231231   int m_iocr_hack;
232   DECLARE_WRITE32_MEMBER(FIFO_w);
233   DECLARE_READ32_MEMBER(PS7500_IO_r);
234   DECLARE_WRITE32_MEMBER(PS7500_IO_w);
235   DECLARE_READ32_MEMBER(io_r);
236   DECLARE_WRITE32_MEMBER(io_w);
237   DECLARE_WRITE32_MEMBER(debug_w);
238   DECLARE_READ32_MEMBER(ff4_r);
239   DECLARE_READ32_MEMBER(SIMPLEIO_r);
240   DECLARE_READ32_MEMBER(randomized_r);
241   DECLARE_READ32_MEMBER(tetfight_unk_r);
242   DECLARE_WRITE32_MEMBER(tetfight_unk_w);
232243};
233244
234245
r14845r14846
262273   return 0;
263274}
264275
265static WRITE32_HANDLER(FIFO_w)
276WRITE32_MEMBER(ssfindo_state::FIFO_w)
266277{
267   ssfindo_state *state = space->machine().driver_data<ssfindo_state>();
268   state->m_PS7500_FIFO[data>>28]=data;
278   m_PS7500_FIFO[data>>28]=data;
269279
270280   if(!(data>>28))
271281   {
272      palette_set_color_rgb(space->machine(), state->m_PS7500_FIFO[1]&0xff, data&0xff,(data>>8)&0xff,(data>>16)&0xff);
273      state->m_PS7500_FIFO[1]++; //autoinc
282      palette_set_color_rgb(machine(), m_PS7500_FIFO[1]&0xff, data&0xff,(data>>8)&0xff,(data>>16)&0xff);
283      m_PS7500_FIFO[1]++; //autoinc
274284   }
275285}
276286static TIMER_CALLBACK( PS7500_Timer0_callback )
r14845r14846
354364}
355365
356366
357static READ32_HANDLER(PS7500_IO_r)
367READ32_MEMBER(ssfindo_state::PS7500_IO_r)
358368{
359   ssfindo_state *state = space->machine().driver_data<ssfindo_state>();
360369   switch(offset)
361370   {
362371      case MSECR:
363         return space->machine().rand();
372         return machine().rand();
364373
365374      case IOLINES: //TODO: eeprom  24c01
366375#if 0
367      mame_printf_debug("IOLINESR %i @%x\n", offset, cpu_get_pc(&space->device()));
376      mame_printf_debug("IOLINESR %i @%x\n", offset, cpu_get_pc(&space.device()));
368377#endif
369378
370      if(state->m_flashType == 1)
379      if(m_flashType == 1)
371380         return 0;
372381      else
373         return space->machine().rand();
382         return machine().rand();
374383
375384      case IRQSTA:
376         return (state->m_PS7500_IO[offset] & (~2)) | 0x80;
385         return (m_PS7500_IO[offset] & (~2)) | 0x80;
377386
378387      case IRQRQA:
379         return (state->m_PS7500_IO[IRQSTA] & state->m_PS7500_IO[IRQMSKA]) | 0x80;
388         return (m_PS7500_IO[IRQSTA] & m_PS7500_IO[IRQMSKA]) | 0x80;
380389
381390      case IOCR: //TODO: nINT1, OD[n] p.81
382         if (ssfindo_speedup) ssfindo_speedup(space);
391         if (ssfindo_speedup) ssfindo_speedup(&space);
383392
384         if( state->m_iocr_hack)
393         if( m_iocr_hack)
385394         {
386            return (input_port_read(space->machine(), "PS7500") & 0x80) | 0x34 | (space->machine().rand()&3); //eeprom read ?
395            return (input_port_read(machine(), "PS7500") & 0x80) | 0x34 | (machine().rand()&3); //eeprom read ?
387396         }
388397
389         return (input_port_read(space->machine(), "PS7500") & 0x80) | 0x37;
398         return (input_port_read(machine(), "PS7500") & 0x80) | 0x37;
390399
391400      case VIDCR:
392         return (state->m_PS7500_IO[offset] | 0x50) & 0xfffffff0;
401         return (m_PS7500_IO[offset] | 0x50) & 0xfffffff0;
393402
394403      case T1low:
395404      case T0low:
r14845r14846
400409      case VIDSTART:
401410      case VIDINITA: //TODO: bits 29 ("equal") and 30 (last bit)  p.105
402411
403         return state->m_PS7500_IO[offset];
412         return m_PS7500_IO[offset];
404413
405414
406415   }
407   return space->machine().rand();//state->m_PS7500_IO[offset];
416   return machine().rand();//m_PS7500_IO[offset];
408417}
409418
410static WRITE32_HANDLER(PS7500_IO_w)
419WRITE32_MEMBER(ssfindo_state::PS7500_IO_w)
411420{
412   ssfindo_state *state = space->machine().driver_data<ssfindo_state>();
413   UINT32 temp=state->m_PS7500_IO[offset];
421   UINT32 temp=m_PS7500_IO[offset];
414422
415423   COMBINE_DATA(&temp);
416424
417425   switch(offset)
418426   {
419427      case IOLINES: //TODO: eeprom  24c01
420         state->m_PS7500_IO[offset]=data;
428         m_PS7500_IO[offset]=data;
421429            if(data&0xc0)
422               state->m_adrLatch=0;
430               m_adrLatch=0;
423431
424         if(cpu_get_pc(&space->device()) == 0xbac0 && state->m_flashType == 1)
432         if(cpu_get_pc(&space.device()) == 0xbac0 && m_flashType == 1)
425433         {
426            state->m_flashN=data&1;
434            m_flashN=data&1;
427435         }
428436
429437#if 0
430            logerror("IOLINESW %i = %x  @%x\n",offset,data,cpu_get_pc(&space->device()));
438            logerror("IOLINESW %i = %x  @%x\n",offset,data,cpu_get_pc(&space.device()));
431439#endif
432440         break;
433441
434442      case IRQRQA:
435         state->m_PS7500_IO[IRQSTA]&=~temp;
443         m_PS7500_IO[IRQSTA]&=~temp;
436444      break;
437445
438446      case IRQMSKA:
439         state->m_PS7500_IO[IRQMSKA]=(temp&(~2))|0x80;
447         m_PS7500_IO[IRQMSKA]=(temp&(~2))|0x80;
440448      break;
441449
442450      case T1GO:
443            PS7500_startTimer1(space->machine());
451            PS7500_startTimer1(machine());
444452         break;
445453
446454      case T0GO:
447         PS7500_startTimer0(space->machine());
455         PS7500_startTimer0(machine());
448456      break;
449457
450458      case VIDEND:
451459      case VIDSTART:
452         COMBINE_DATA(&state->m_PS7500_IO[offset]);
453         state->m_PS7500_IO[offset]&=0xfffffff0; // qword align
460         COMBINE_DATA(&m_PS7500_IO[offset]);
461         m_PS7500_IO[offset]&=0xfffffff0; // qword align
454462      break;
455463
456464      case IOCR:
r14845r14846
466474      case T0high:
467475      case VIDCR:
468476      case VIDINITA: //TODO: bit 30 (last bit) p.105
469               COMBINE_DATA(&state->m_PS7500_IO[offset]);
477               COMBINE_DATA(&m_PS7500_IO[offset]);
470478      break;
471479
472480
r14845r14846
474482   }
475483}
476484
477static READ32_HANDLER(io_r)
485READ32_MEMBER(ssfindo_state::io_r)
478486{
479   ssfindo_state *state = space->machine().driver_data<ssfindo_state>();
480   UINT16 *FLASH = (UINT16 *)space->machine().region("user2")->base(); //16 bit - WORD access
487   UINT16 *FLASH = (UINT16 *)machine().region("user2")->base(); //16 bit - WORD access
481488
482   int adr=state->m_flashAdr*0x200+(state->m_flashOffset);
489   int adr=m_flashAdr*0x200+(m_flashOffset);
483490
484491
485   switch(state->m_flashType)
492   switch(m_flashType)
486493   {
487494      case 0:
488         if(state->m_PS7500_IO[IOLINES]&1) //bit 0 of IOLINES  = flash select ( 5/6 or 3/2 )
495         if(m_PS7500_IO[IOLINES]&1) //bit 0 of IOLINES  = flash select ( 5/6 or 3/2 )
489496            adr+=0x400000;
490497      break;
491498
492499      case 1:
493         adr+=0x400000*state->m_flashN;
500         adr+=0x400000*m_flashN;
494501      break;
495502   }
496503
497504   if(adr<0x400000*2)
498505   {
499      state->m_flashOffset++;
506      m_flashOffset++;
500507      return FLASH[adr];
501508   }
502509   return 0;
503510}
504511
505static WRITE32_HANDLER(io_w)
512WRITE32_MEMBER(ssfindo_state::io_w)
506513{
507   ssfindo_state *state = space->machine().driver_data<ssfindo_state>();
508514   UINT32 temp = 0;
509515   COMBINE_DATA(&temp);
510516
511517#if 0
512   logerror("[io_w] = %x @%x [latch=%x]\n",data,cpu_get_pc(&space->device()),state->m_adrLatch);
518   logerror("[io_w] = %x @%x [latch=%x]\n",data,cpu_get_pc(&space.device()),m_adrLatch);
513519#endif
514520
515   if(state->m_adrLatch==1)
516      state->m_flashAdr=(temp>>16)&0xff;
517   if(state->m_adrLatch==2)
521   if(m_adrLatch==1)
522      m_flashAdr=(temp>>16)&0xff;
523   if(m_adrLatch==2)
518524   {
519      state->m_flashAdr|=(temp>>16)&0xff00;
520      state->m_flashOffset=0;
525      m_flashAdr|=(temp>>16)&0xff00;
526      m_flashOffset=0;
521527   }
522   state->m_adrLatch=(state->m_adrLatch+1)%3;
528   m_adrLatch=(m_adrLatch+1)%3;
523529}
524530
525static WRITE32_HANDLER(debug_w)
531WRITE32_MEMBER(ssfindo_state::debug_w)
526532{
527533#if 0
528534   mame_printf_debug("%c",data&0xff); //debug texts - malloc (ie "64 KBytes allocated, elapsed : 378 KBytes, free : 2231 KBytes")
529535#endif
530536}
531537
532static READ32_HANDLER(ff4_r)
538READ32_MEMBER(ssfindo_state::ff4_r)
533539{
534   return space->machine().rand()&0x20;
540   return machine().rand()&0x20;
535541}
536542
537static READ32_HANDLER(SIMPLEIO_r)
543READ32_MEMBER(ssfindo_state::SIMPLEIO_r)
538544{
539   return space->machine().rand()&1;
545   return machine().rand()&1;
540546}
541547
542static READ32_HANDLER(randomized_r)
548READ32_MEMBER(ssfindo_state::randomized_r)
543549{
544   return space->machine().rand();
550   return machine().rand();
545551}
546552
547553static ADDRESS_MAP_START( ssfindo_map, AS_PROGRAM, 32, ssfindo_state )
548554   AM_RANGE(0x00000000, 0x000fffff) AM_ROM AM_REGION("user1", 0)
549   AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE_LEGACY(PS7500_IO_r,PS7500_IO_w)
555   AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE(PS7500_IO_r,PS7500_IO_w)
550556   AM_RANGE(0x03012e60, 0x03012e67) AM_NOP
551   AM_RANGE(0x03012fe0, 0x03012fe3) AM_WRITE_LEGACY(debug_w)
557   AM_RANGE(0x03012fe0, 0x03012fe3) AM_WRITE(debug_w)
552558   AM_RANGE(0x03012ff0, 0x03012ff3) AM_NOP
553   AM_RANGE(0x03012ff4, 0x03012ff7) AM_WRITENOP AM_READ_LEGACY(ff4_r) //status flag ?
559   AM_RANGE(0x03012ff4, 0x03012ff7) AM_WRITENOP AM_READ(ff4_r) //status flag ?
554560   AM_RANGE(0x03012ff8, 0x03012fff) AM_NOP
555561   AM_RANGE(0x03240000, 0x03240003) AM_READ_PORT("IN0") AM_WRITENOP
556562   AM_RANGE(0x03241000, 0x03241003) AM_READ_PORT("IN1") AM_WRITENOP
557   AM_RANGE(0x03242000, 0x03242003) AM_READ_LEGACY(io_r) AM_WRITE_LEGACY(io_w)
563   AM_RANGE(0x03242000, 0x03242003) AM_READ(io_r) AM_WRITE(io_w)
558564   AM_RANGE(0x03243000, 0x03243003) AM_READ_PORT("DSW") AM_WRITENOP
559   AM_RANGE(0x0324f000, 0x0324f003) AM_READ_LEGACY(SIMPLEIO_r)
565   AM_RANGE(0x0324f000, 0x0324f003) AM_READ(SIMPLEIO_r)
560566   AM_RANGE(0x03245000, 0x03245003) AM_WRITENOP /* sound ? */
561   AM_RANGE(0x03400000, 0x03400003) AM_WRITE_LEGACY(FIFO_w)
567   AM_RANGE(0x03400000, 0x03400003) AM_WRITE(FIFO_w)
562568   AM_RANGE(0x10000000, 0x11ffffff) AM_RAM AM_BASE(m_vram)
563569ADDRESS_MAP_END
564570
565571static ADDRESS_MAP_START( ppcar_map, AS_PROGRAM, 32, ssfindo_state )
566572   AM_RANGE(0x00000000, 0x000fffff) AM_ROM AM_REGION("user1", 0)
567   AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE_LEGACY(PS7500_IO_r,PS7500_IO_w)
568   AM_RANGE(0x03012b00, 0x03012bff) AM_READ_LEGACY(randomized_r) AM_WRITENOP
573   AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE(PS7500_IO_r,PS7500_IO_w)
574   AM_RANGE(0x03012b00, 0x03012bff) AM_READ(randomized_r) AM_WRITENOP
569575   AM_RANGE(0x03012e60, 0x03012e67) AM_WRITENOP
570576   AM_RANGE(0x03012ff8, 0x03012ffb) AM_READ_PORT("IN0") AM_WRITENOP
571577   AM_RANGE(0x032c0000, 0x032c0003) AM_READ_PORT("IN1") AM_WRITENOP
572578   AM_RANGE(0x03340000, 0x03340007) AM_WRITENOP
573579   AM_RANGE(0x03341000, 0x0334101f) AM_WRITENOP
574   AM_RANGE(0x033c0000, 0x033c0003) AM_READ_LEGACY(io_r) AM_WRITE_LEGACY(io_w)
575   AM_RANGE(0x03400000, 0x03400003) AM_WRITE_LEGACY(FIFO_w)
580   AM_RANGE(0x033c0000, 0x033c0003) AM_READ(io_r) AM_WRITE(io_w)
581   AM_RANGE(0x03400000, 0x03400003) AM_WRITE(FIFO_w)
576582   AM_RANGE(0x08000000, 0x08ffffff) AM_RAM
577583   AM_RANGE(0x10000000, 0x10ffffff) AM_RAM AM_BASE(m_vram)
578584ADDRESS_MAP_END
579585
580static READ32_HANDLER(tetfight_unk_r)
586READ32_MEMBER(ssfindo_state::tetfight_unk_r)
581587{
582588   //sound status ?
583   return space->machine().rand();
589   return machine().rand();
584590}
585591
586static WRITE32_HANDLER(tetfight_unk_w)
592WRITE32_MEMBER(ssfindo_state::tetfight_unk_w)
587593{
588594   //sound latch ?
589595}
590596
591597static ADDRESS_MAP_START( tetfight_map, AS_PROGRAM, 32, ssfindo_state )
592598   AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_REGION("user1", 0)
593   AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE_LEGACY(PS7500_IO_r,PS7500_IO_w)
594   AM_RANGE(0x03400000, 0x03400003) AM_WRITE_LEGACY(FIFO_w)
599   AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE(PS7500_IO_r,PS7500_IO_w)
600   AM_RANGE(0x03400000, 0x03400003) AM_WRITE(FIFO_w)
595601   AM_RANGE(0x03240000, 0x03240003) AM_READ_PORT("DSW")
596602   AM_RANGE(0x03240004, 0x03240007) AM_READ_PORT("IN0")
597603   AM_RANGE(0x03240008, 0x0324000b) AM_READ_PORT("DSW2")
598   AM_RANGE(0x03240020, 0x03240023) AM_READWRITE_LEGACY(tetfight_unk_r, tetfight_unk_w)
604   AM_RANGE(0x03240020, 0x03240023) AM_READWRITE(tetfight_unk_r, tetfight_unk_w)
599605   AM_RANGE(0x10000000, 0x14ffffff) AM_RAM AM_BASE(m_vram)
600606ADDRESS_MAP_END
601607
src/mame/drivers/peplus.c
r14845r14846
206206   UINT64 m_last_coin_out;
207207   UINT8 m_coin_out_state;
208208   int m_sda_dir;
209   DECLARE_WRITE8_MEMBER(peplus_bgcolor_w);
210   DECLARE_WRITE8_MEMBER(peplus_crtc_display_w);
211   DECLARE_WRITE8_MEMBER(peplus_io_w);
212   DECLARE_WRITE8_MEMBER(peplus_duart_w);
213   DECLARE_WRITE8_MEMBER(peplus_cmos_w);
214   DECLARE_WRITE8_MEMBER(peplus_s3000_w);
215   DECLARE_WRITE8_MEMBER(peplus_s5000_w);
216   DECLARE_WRITE8_MEMBER(peplus_s7000_w);
217   DECLARE_WRITE8_MEMBER(peplus_sb000_w);
218   DECLARE_WRITE8_MEMBER(peplus_sd000_w);
219   DECLARE_WRITE8_MEMBER(peplus_sf000_w);
220   DECLARE_WRITE8_MEMBER(peplus_output_bank_a_w);
221   DECLARE_WRITE8_MEMBER(peplus_output_bank_b_w);
222   DECLARE_WRITE8_MEMBER(peplus_output_bank_c_w);
223   DECLARE_READ8_MEMBER(peplus_io_r);
224   DECLARE_READ8_MEMBER(peplus_duart_r);
225   DECLARE_READ8_MEMBER(peplus_cmos_r);
226   DECLARE_READ8_MEMBER(peplus_s3000_r);
227   DECLARE_READ8_MEMBER(peplus_s5000_r);
228   DECLARE_READ8_MEMBER(peplus_s7000_r);
229   DECLARE_READ8_MEMBER(peplus_sb000_r);
230   DECLARE_READ8_MEMBER(peplus_sd000_r);
231   DECLARE_READ8_MEMBER(peplus_sf000_r);
232   DECLARE_READ8_MEMBER(peplus_bgcolor_r);
233   DECLARE_READ8_MEMBER(peplus_dropdoor_r);
234   DECLARE_READ8_MEMBER(peplus_watchdog_r);
209235};
210236
211237
r14845r14846
265291* Write Handlers *
266292******************/
267293
268static WRITE8_HANDLER( peplus_bgcolor_w )
294WRITE8_MEMBER(peplus_state::peplus_bgcolor_w)
269295{
270296   int i;
271297
272   for (i = 0; i < space->machine().total_colors(); i++)
298   for (i = 0; i < machine().total_colors(); i++)
273299   {
274300      int bit0, bit1, bit2, r, g, b;
275301
r14845r14846
291317      bit2 = 0;
292318      b = 0x21 * bit2 + 0x47 * bit1 + 0x97 * bit0;
293319
294      palette_set_color(space->machine(), (15 + (i*16)), MAKE_RGB(r, g, b));
320      palette_set_color(machine(), (15 + (i*16)), MAKE_RGB(r, g, b));
295321   }
296322}
297323
r14845r14846
333359   handle_lightpen(device);
334360}
335361
336static WRITE8_HANDLER( peplus_crtc_display_w )
362WRITE8_MEMBER(peplus_state::peplus_crtc_display_w)
337363{
338   peplus_state *state = space->machine().driver_data<peplus_state>();
339   UINT8 *videoram = state->m_videoram;
340   videoram[state->m_vid_address] = data;
341   state->m_palette_ram[state->m_vid_address] = state->m_io_port[1];
342   state->m_palette_ram2[state->m_vid_address] = state->m_io_port[3];
364   UINT8 *videoram = m_videoram;
365   videoram[m_vid_address] = data;
366   m_palette_ram[m_vid_address] = m_io_port[1];
367   m_palette_ram2[m_vid_address] = m_io_port[3];
343368
344   state->m_bg_tilemap->mark_tile_dirty(state->m_vid_address);
369   m_bg_tilemap->mark_tile_dirty(m_vid_address);
345370
346371   /* An access here triggers a device read !*/
347   space->machine().device<mc6845_device>("crtc")->register_r(*space, 0);
372   machine().device<mc6845_device>("crtc")->register_r(*&space, 0);
348373}
349374
350static WRITE8_HANDLER( peplus_io_w )
375WRITE8_MEMBER(peplus_state::peplus_io_w)
351376{
352   peplus_state *state = space->machine().driver_data<peplus_state>();
353   state->m_io_port[offset] = data;
377   m_io_port[offset] = data;
354378}
355379
356static WRITE8_HANDLER( peplus_duart_w )
380WRITE8_MEMBER(peplus_state::peplus_duart_w)
357381{
358382   // Used for Slot Accounting System Communication
359383}
360384
361static WRITE8_HANDLER( peplus_cmos_w )
385WRITE8_MEMBER(peplus_state::peplus_cmos_w)
362386{
363   peplus_state *state = space->machine().driver_data<peplus_state>();
364387   char bank_name[6];
365388
366389   /* Test for Wingboard PAL Trigger Condition */
367   if (offset == 0x1fff && state->m_wingboard && data < 5)
390   if (offset == 0x1fff && m_wingboard && data < 5)
368391   {
369392      sprintf(bank_name, "user%d", data + 1);
370      peplus_load_superdata(space->machine(), bank_name);
393      peplus_load_superdata(machine(), bank_name);
371394   }
372395
373   state->m_cmos_ram[offset] = data;
396   m_cmos_ram[offset] = data;
374397}
375398
376static WRITE8_HANDLER( peplus_s3000_w )
399WRITE8_MEMBER(peplus_state::peplus_s3000_w)
377400{
378   peplus_state *state = space->machine().driver_data<peplus_state>();
379   state->m_s3000_ram[offset] = data;
401   m_s3000_ram[offset] = data;
380402}
381403
382static WRITE8_HANDLER( peplus_s5000_w )
404WRITE8_MEMBER(peplus_state::peplus_s5000_w)
383405{
384   peplus_state *state = space->machine().driver_data<peplus_state>();
385   state->m_s5000_ram[offset] = data;
406   m_s5000_ram[offset] = data;
386407}
387408
388static WRITE8_HANDLER( peplus_s7000_w )
409WRITE8_MEMBER(peplus_state::peplus_s7000_w)
389410{
390   peplus_state *state = space->machine().driver_data<peplus_state>();
391   state->m_s7000_ram[offset] = data;
411   m_s7000_ram[offset] = data;
392412}
393413
394static WRITE8_HANDLER( peplus_sb000_w )
414WRITE8_MEMBER(peplus_state::peplus_sb000_w)
395415{
396   peplus_state *state = space->machine().driver_data<peplus_state>();
397   state->m_sb000_ram[offset] = data;
416   m_sb000_ram[offset] = data;
398417}
399418
400static WRITE8_HANDLER( peplus_sd000_w )
419WRITE8_MEMBER(peplus_state::peplus_sd000_w)
401420{
402   peplus_state *state = space->machine().driver_data<peplus_state>();
403   state->m_sd000_ram[offset] = data;
421   m_sd000_ram[offset] = data;
404422}
405423
406static WRITE8_HANDLER( peplus_sf000_w )
424WRITE8_MEMBER(peplus_state::peplus_sf000_w)
407425{
408   peplus_state *state = space->machine().driver_data<peplus_state>();
409   state->m_sf000_ram[offset] = data;
426   m_sf000_ram[offset] = data;
410427}
411428
412static WRITE8_HANDLER( peplus_output_bank_a_w )
429WRITE8_MEMBER(peplus_state::peplus_output_bank_a_w)
413430{
414   peplus_state *state = space->machine().driver_data<peplus_state>();
415431   output_set_value("pe_bnka0",(data >> 0) & 1); /* Coin Lockout */
416432   output_set_value("pe_bnka1",(data >> 1) & 1); /* Diverter */
417433   output_set_value("pe_bnka2",(data >> 2) & 1); /* Bell */
r14845r14846
421437   output_set_value("pe_bnka6",(data >> 6) & 1); /* specific to a kind of machine */
422438   output_set_value("pe_bnka7",(data >> 7) & 1); /* specific to a kind of machine */
423439
424    state->m_coin_out_state = 0;
440    m_coin_out_state = 0;
425441    if(((data >> 4) & 1) || ((data >> 5) & 1))
426        state->m_coin_out_state = 3;
442        m_coin_out_state = 3;
427443}
428444
429static WRITE8_HANDLER( peplus_output_bank_b_w )
445WRITE8_MEMBER(peplus_state::peplus_output_bank_b_w)
430446{
431447   output_set_value("pe_bnkb0",(data >> 0) & 1); /* specific to a kind of machine */
432448   output_set_value("pe_bnkb1",(data >> 1) & 1); /* Deal Spin Start */
r14845r14846
438454   output_set_value("pe_bnkb7",(data >> 7) & 1); /* specific to a kind of machine */
439455}
440456
441static WRITE8_HANDLER( peplus_output_bank_c_w )
457WRITE8_MEMBER(peplus_state::peplus_output_bank_c_w)
442458{
443459   output_set_value("pe_bnkc0",(data >> 0) & 1); /* Coin In Meter */
444460   output_set_value("pe_bnkc1",(data >> 1) & 1); /* Coin Out Meter */
r14845r14846
463479* Read Handlers *
464480****************/
465481
466static READ8_HANDLER( peplus_io_r )
482READ8_MEMBER(peplus_state::peplus_io_r)
467483{
468   peplus_state *state = space->machine().driver_data<peplus_state>();
469    return state->m_io_port[offset];
484    return m_io_port[offset];
470485}
471486
472static READ8_HANDLER( peplus_duart_r )
487READ8_MEMBER(peplus_state::peplus_duart_r)
473488{
474489   // Used for Slot Accounting System Communication
475490   return 0x00;
476491}
477492
478static READ8_HANDLER( peplus_cmos_r )
493READ8_MEMBER(peplus_state::peplus_cmos_r)
479494{
480   peplus_state *state = space->machine().driver_data<peplus_state>();
481   return state->m_cmos_ram[offset];
495   return m_cmos_ram[offset];
482496}
483497
484static READ8_HANDLER( peplus_s3000_r )
498READ8_MEMBER(peplus_state::peplus_s3000_r)
485499{
486   peplus_state *state = space->machine().driver_data<peplus_state>();
487   return state->m_s3000_ram[offset];
500   return m_s3000_ram[offset];
488501}
489502
490static READ8_HANDLER( peplus_s5000_r )
503READ8_MEMBER(peplus_state::peplus_s5000_r)
491504{
492   peplus_state *state = space->machine().driver_data<peplus_state>();
493   return state->m_s5000_ram[offset];
505   return m_s5000_ram[offset];
494506}
495507
496static READ8_HANDLER( peplus_s7000_r )
508READ8_MEMBER(peplus_state::peplus_s7000_r)
497509{
498   peplus_state *state = space->machine().driver_data<peplus_state>();
499   return state->m_s7000_ram[offset];
510   return m_s7000_ram[offset];
500511}
501512
502static READ8_HANDLER( peplus_sb000_r )
513READ8_MEMBER(peplus_state::peplus_sb000_r)
503514{
504   peplus_state *state = space->machine().driver_data<peplus_state>();
505   return state->m_sb000_ram[offset];
515   return m_sb000_ram[offset];
506516}
507517
508static READ8_HANDLER( peplus_sd000_r )
518READ8_MEMBER(peplus_state::peplus_sd000_r)
509519{
510   peplus_state *state = space->machine().driver_data<peplus_state>();
511   return state->m_sd000_ram[offset];
520   return m_sd000_ram[offset];
512521}
513522
514static READ8_HANDLER( peplus_sf000_r )
523READ8_MEMBER(peplus_state::peplus_sf000_r)
515524{
516   peplus_state *state = space->machine().driver_data<peplus_state>();
517   return state->m_sf000_ram[offset];
525   return m_sf000_ram[offset];
518526}
519527
520528/* Last Color in Every Palette is bgcolor */
521static READ8_HANDLER( peplus_bgcolor_r )
529READ8_MEMBER(peplus_state::peplus_bgcolor_r)
522530{
523   return palette_get_color(space->machine(), 15); // Return bgcolor from First Palette
531   return palette_get_color(machine(), 15); // Return bgcolor from First Palette
524532}
525533
526static READ8_HANDLER( peplus_dropdoor_r )
534READ8_MEMBER(peplus_state::peplus_dropdoor_r)
527535{
528536   return 0x00; // Drop Door 0x00=Closed 0x02=Open
529537}
530538
531static READ8_HANDLER( peplus_watchdog_r )
539READ8_MEMBER(peplus_state::peplus_watchdog_r)
532540{
533541   return 0x00; // Watchdog
534542}
r14845r14846
736744
737745static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state )
738746   // Battery-backed RAM (0x1000-0x01fff Extended RAM for Superboards Only)
739   AM_RANGE(0x0000, 0x1fff) AM_READWRITE_LEGACY(peplus_cmos_r, peplus_cmos_w) AM_SHARE("cmos")
747   AM_RANGE(0x0000, 0x1fff) AM_READWRITE(peplus_cmos_r, peplus_cmos_w) AM_SHARE("cmos")
740748
741749   // CRT Controller
742750   AM_RANGE(0x2008, 0x2008) AM_DEVWRITE_LEGACY("crtc", peplus_crtc_mode_w)
743751   AM_RANGE(0x2080, 0x2080) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w)
744752   AM_RANGE(0x2081, 0x2081) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
745   AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE_LEGACY(peplus_crtc_display_w)
753   AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(peplus_crtc_display_w)
746754
747755    // Superboard Data
748   AM_RANGE(0x3000, 0x3fff) AM_READWRITE_LEGACY(peplus_s3000_r, peplus_s3000_w) AM_BASE(m_s3000_ram)
756   AM_RANGE(0x3000, 0x3fff) AM_READWRITE(peplus_s3000_r, peplus_s3000_w) AM_BASE(m_s3000_ram)
749757
750758   // Sound and Dipswitches
751759   AM_RANGE(0x4000, 0x4000) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
752760   AM_RANGE(0x4004, 0x4004) AM_READ_PORT("SW1")/* likely ay8910 input port, not direct */ AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
753761
754762    // Superboard Data
755   AM_RANGE(0x5000, 0x5fff) AM_READWRITE_LEGACY(peplus_s5000_r, peplus_s5000_w) AM_BASE(m_s5000_ram)
763   AM_RANGE(0x5000, 0x5fff) AM_READWRITE(peplus_s5000_r, peplus_s5000_w) AM_BASE(m_s5000_ram)
756764
757765   // Background Color Latch
758   AM_RANGE(0x6000, 0x6000) AM_READ_LEGACY(peplus_bgcolor_r) AM_WRITE_LEGACY(peplus_bgcolor_w)
766   AM_RANGE(0x6000, 0x6000) AM_READ(peplus_bgcolor_r) AM_WRITE(peplus_bgcolor_w)
759767
760768    // Bogus Location for Video RAM
761769   AM_RANGE(0x06001, 0x06400) AM_RAM AM_BASE(m_videoram)
762770
763771    // Superboard Data
764   AM_RANGE(0x7000, 0x7fff) AM_READWRITE_LEGACY(peplus_s7000_r, peplus_s7000_w) AM_BASE(m_s7000_ram)
772   AM_RANGE(0x7000, 0x7fff) AM_READWRITE(peplus_s7000_r, peplus_s7000_w) AM_BASE(m_s7000_ram)
765773
766774   // Input Bank A, Output Bank C
767   AM_RANGE(0x8000, 0x8000) AM_DEVREAD_LEGACY("i2cmem",peplus_input_bank_a_r) AM_WRITE_LEGACY(peplus_output_bank_c_w)
775   AM_RANGE(0x8000, 0x8000) AM_DEVREAD_LEGACY("i2cmem",peplus_input_bank_a_r) AM_WRITE(peplus_output_bank_c_w)
768776
769777   // Drop Door, I2C EEPROM Writes
770   AM_RANGE(0x9000, 0x9000) AM_READ_LEGACY(peplus_dropdoor_r) AM_DEVWRITE_LEGACY("i2cmem",i2c_nvram_w)
778   AM_RANGE(0x9000, 0x9000) AM_READ(peplus_dropdoor_r) AM_DEVWRITE_LEGACY("i2cmem",i2c_nvram_w)
771779
772780   // Input Banks B & C, Output Bank B
773   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0") AM_WRITE_LEGACY(peplus_output_bank_b_w)
781   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0") AM_WRITE(peplus_output_bank_b_w)
774782
775783    // Superboard Data
776   AM_RANGE(0xb000, 0xbfff) AM_READWRITE_LEGACY(peplus_sb000_r, peplus_sb000_w) AM_BASE(m_sb000_ram)
784   AM_RANGE(0xb000, 0xbfff) AM_READWRITE(peplus_sb000_r, peplus_sb000_w) AM_BASE(m_sb000_ram)
777785
778786   // Output Bank A
779   AM_RANGE(0xc000, 0xc000) AM_READ_LEGACY(peplus_watchdog_r) AM_WRITE_LEGACY(peplus_output_bank_a_w)
787   AM_RANGE(0xc000, 0xc000) AM_READ(peplus_watchdog_r) AM_WRITE(peplus_output_bank_a_w)
780788
781789    // Superboard Data
782   AM_RANGE(0xd000, 0xdfff) AM_READWRITE_LEGACY(peplus_sd000_r, peplus_sd000_w) AM_BASE(m_sd000_ram)
790   AM_RANGE(0xd000, 0xdfff) AM_READWRITE(peplus_sd000_r, peplus_sd000_w) AM_BASE(m_sd000_ram)
783791
784792   // DUART
785   AM_RANGE(0xe000, 0xe00f) AM_READWRITE_LEGACY(peplus_duart_r, peplus_duart_w)
793   AM_RANGE(0xe000, 0xe00f) AM_READWRITE(peplus_duart_r, peplus_duart_w)
786794
787795    // Superboard Data
788   AM_RANGE(0xf000, 0xffff) AM_READWRITE_LEGACY(peplus_sf000_r, peplus_sf000_w) AM_BASE(m_sf000_ram)
796   AM_RANGE(0xf000, 0xffff) AM_READWRITE(peplus_sf000_r, peplus_sf000_w) AM_BASE(m_sf000_ram)
789797
790798   /* Ports start here */
791   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ_LEGACY(peplus_io_r) AM_WRITE_LEGACY(peplus_io_w) AM_BASE(m_io_port)
799   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(peplus_io_r) AM_WRITE(peplus_io_w) AM_BASE(m_io_port)
792800ADDRESS_MAP_END
793801
794802
src/mame/drivers/ddayjlc.c
r14845r14846
8282
8383   /* devices */
8484   device_t *m_audiocpu;
85   DECLARE_WRITE8_MEMBER(prot_w);
86   DECLARE_WRITE8_MEMBER(char_bank_w);
87   DECLARE_WRITE8_MEMBER(ddayjlc_bgram_w);
88   DECLARE_WRITE8_MEMBER(ddayjlc_videoram_w);
89   DECLARE_WRITE8_MEMBER(sound_nmi_w);
90   DECLARE_WRITE8_MEMBER(main_nmi_w);
91   DECLARE_WRITE8_MEMBER(bg0_w);
92   DECLARE_WRITE8_MEMBER(bg1_w);
93   DECLARE_WRITE8_MEMBER(bg2_w);
94   DECLARE_WRITE8_MEMBER(sound_w);
95   DECLARE_WRITE8_MEMBER(i8257_CH0_w);
96   DECLARE_WRITE8_MEMBER(i8257_LMSR_w);
8597};
8698
8799
r14845r14846
134146   return prot_data[state->m_prot_addr];
135147}
136148
137static WRITE8_HANDLER( prot_w )
149WRITE8_MEMBER(ddayjlc_state::prot_w)
138150{
139   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
140   state->m_prot_addr = (state->m_prot_addr & (~(1 << offset))) | ((data & 1) << offset);
151   m_prot_addr = (m_prot_addr & (~(1 << offset))) | ((data & 1) << offset);
141152}
142153
143static WRITE8_HANDLER( char_bank_w )
154WRITE8_MEMBER(ddayjlc_state::char_bank_w)
144155{
145   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
146   state->m_char_bank = data;
156   m_char_bank = data;
147157}
148158
149static WRITE8_HANDLER( ddayjlc_bgram_w )
159WRITE8_MEMBER(ddayjlc_state::ddayjlc_bgram_w)
150160{
151   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
152161
153162   if (!offset)
154      state->m_bg_tilemap->set_scrollx(0, data + 8);
163      m_bg_tilemap->set_scrollx(0, data + 8);
155164
156   state->m_bgram[offset] = data;
157   state->m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
165   m_bgram[offset] = data;
166   m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
158167}
159168
160static WRITE8_HANDLER( ddayjlc_videoram_w )
169WRITE8_MEMBER(ddayjlc_state::ddayjlc_videoram_w)
161170{
162   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
163   state->m_videoram[offset] = data;
171   m_videoram[offset] = data;
164172}
165173
166174
167static WRITE8_HANDLER(sound_nmi_w)
175WRITE8_MEMBER(ddayjlc_state::sound_nmi_w)
168176{
169   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
170   state->m_sound_nmi_enable = data;
177   m_sound_nmi_enable = data;
171178}
172179
173static WRITE8_HANDLER(main_nmi_w)
180WRITE8_MEMBER(ddayjlc_state::main_nmi_w)
174181{
175   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
176   state->m_main_nmi_enable = data;
182   m_main_nmi_enable = data;
177183}
178184
179static WRITE8_HANDLER( bg0_w )
185WRITE8_MEMBER(ddayjlc_state::bg0_w)
180186{
181   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
182   state->m_bgadr = (state->m_bgadr & 0xfe) | (data & 1);
187   m_bgadr = (m_bgadr & 0xfe) | (data & 1);
183188}
184189
185static WRITE8_HANDLER( bg1_w )
190WRITE8_MEMBER(ddayjlc_state::bg1_w)
186191{
187   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
188   state->m_bgadr = (state->m_bgadr & 0xfd) | ((data & 1) << 1);
192   m_bgadr = (m_bgadr & 0xfd) | ((data & 1) << 1);
189193}
190194
191static WRITE8_HANDLER( bg2_w )
195WRITE8_MEMBER(ddayjlc_state::bg2_w)
192196{
193   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
194197
195   state->m_bgadr = (state->m_bgadr & 0xfb) | ((data & 1) << 2);
196   if (state->m_bgadr > 2)
197      state->m_bgadr = 0;
198   m_bgadr = (m_bgadr & 0xfb) | ((data & 1) << 2);
199   if (m_bgadr > 2)
200      m_bgadr = 0;
198201
199   memory_set_bank(space->machine(), "bank1", state->m_bgadr);
202   memory_set_bank(machine(), "bank1", m_bgadr);
200203}
201204
202static WRITE8_HANDLER( sound_w )
205WRITE8_MEMBER(ddayjlc_state::sound_w)
203206{
204   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
205207
206208   soundlatch_w(space, offset, data);
207   device_set_input_line_and_vector(state->m_audiocpu, 0, HOLD_LINE, 0xff);
209   device_set_input_line_and_vector(m_audiocpu, 0, HOLD_LINE, 0xff);
208210}
209211
210static WRITE8_HANDLER( i8257_CH0_w )
212WRITE8_MEMBER(ddayjlc_state::i8257_CH0_w)
211213{
212   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
213214
214   state->m_e00x_d[offset][state->m_e00x_l[offset]] = data;
215   state->m_e00x_l[offset] ^= 1;
215   m_e00x_d[offset][m_e00x_l[offset]] = data;
216   m_e00x_l[offset] ^= 1;
216217}
217218
218static WRITE8_HANDLER( i8257_LMSR_w )
219WRITE8_MEMBER(ddayjlc_state::i8257_LMSR_w)
219220{
220   ddayjlc_state *state = space->machine().driver_data<ddayjlc_state>();
221221
222222   if (!data)
223223   {
224      INT32 src = state->m_e00x_d[0][1] * 256 + state->m_e00x_d[0][0];
225      INT32 dst = state->m_e00x_d[2][1] * 256 + state->m_e00x_d[2][0];
226      INT32 size = (state->m_e00x_d[1][1] * 256 + state->m_e00x_d[1][0]) & 0x3ff;
224      INT32 src = m_e00x_d[0][1] * 256 + m_e00x_d[0][0];
225      INT32 dst = m_e00x_d[2][1] * 256 + m_e00x_d[2][0];
226      INT32 size = (m_e00x_d[1][1] * 256 + m_e00x_d[1][0]) & 0x3ff;
227227      INT32 i;
228228
229229      size++; //??
230230
231231      for(i = 0; i < size; i++)
232232      {
233         space->write_byte(dst++, space->read_byte(src++));
233         space.write_byte(dst++, space.read_byte(src++));
234234      }
235235
236      state->m_e00x_l[0] = 0;
237      state->m_e00x_l[1] = 0;
238      state->m_e00x_l[2] = 0;
239      state->m_e00x_l[3] = 0;
236      m_e00x_l[0] = 0;
237      m_e00x_l[1] = 0;
238      m_e00x_l[2] = 0;
239      m_e00x_l[3] = 0;
240240   }
241241}
242242
r14845r14846
244244   AM_RANGE(0x0000, 0x7fff) AM_ROM
245245   AM_RANGE(0x8000, 0x8fff) AM_RAM AM_BASE(m_mainram)
246246   AM_RANGE(0x9000, 0x93ff) AM_RAM AM_BASE(m_spriteram)
247   AM_RANGE(0x9400, 0x97ff) AM_RAM_WRITE_LEGACY(ddayjlc_videoram_w) AM_BASE(m_videoram)
248   AM_RANGE(0x9800, 0x9fff) AM_RAM_WRITE_LEGACY(ddayjlc_bgram_w) AM_BASE(m_bgram) /* 9800-981f - videoregs */
247   AM_RANGE(0x9400, 0x97ff) AM_RAM_WRITE(ddayjlc_videoram_w) AM_BASE(m_videoram)
248   AM_RANGE(0x9800, 0x9fff) AM_RAM_WRITE(ddayjlc_bgram_w) AM_BASE(m_bgram) /* 9800-981f - videoregs */
249249   AM_RANGE(0xa000, 0xdfff) AM_ROMBANK("bank1") AM_WRITENOP
250   AM_RANGE(0xe000, 0xe003) AM_WRITE_LEGACY(i8257_CH0_w)
250   AM_RANGE(0xe000, 0xe003) AM_WRITE(i8257_CH0_w)
251251   AM_RANGE(0xe008, 0xe008) AM_WRITENOP
252   AM_RANGE(0xf000, 0xf000) AM_WRITE_LEGACY(sound_w)
252   AM_RANGE(0xf000, 0xf000) AM_WRITE(sound_w)
253253   AM_RANGE(0xf100, 0xf100) AM_WRITENOP
254   AM_RANGE(0xf080, 0xf080) AM_WRITE_LEGACY(char_bank_w)
254   AM_RANGE(0xf080, 0xf080) AM_WRITE(char_bank_w)
255255   AM_RANGE(0xf081, 0xf081) AM_WRITENOP
256   AM_RANGE(0xf083, 0xf083) AM_WRITE_LEGACY(i8257_LMSR_w)
257   AM_RANGE(0xf084, 0xf084) AM_WRITE_LEGACY(bg0_w)
258   AM_RANGE(0xf085, 0xf085) AM_WRITE_LEGACY(bg1_w)
259   AM_RANGE(0xf086, 0xf086) AM_WRITE_LEGACY(bg2_w)
260   AM_RANGE(0xf101, 0xf101) AM_WRITE_LEGACY(main_nmi_w)
261   AM_RANGE(0xf102, 0xf105) AM_WRITE_LEGACY(prot_w)
256   AM_RANGE(0xf083, 0xf083) AM_WRITE(i8257_LMSR_w)
257   AM_RANGE(0xf084, 0xf084) AM_WRITE(bg0_w)
258   AM_RANGE(0xf085, 0xf085) AM_WRITE(bg1_w)
259   AM_RANGE(0xf086, 0xf086) AM_WRITE(bg2_w)
260   AM_RANGE(0xf101, 0xf101) AM_WRITE(main_nmi_w)
261   AM_RANGE(0xf102, 0xf105) AM_WRITE(prot_w)
262262   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("INPUTS")
263263   AM_RANGE(0xf100, 0xf100) AM_READ_PORT("SYSTEM")
264264   AM_RANGE(0xf180, 0xf180) AM_READ_PORT("DSW1")
r14845r14846
273273   AM_RANGE(0x4000, 0x4000) AM_DEVWRITE_LEGACY("ay1", ay8910_address_w)
274274   AM_RANGE(0x5000, 0x5000) AM_DEVREADWRITE_LEGACY("ay2", ay8910_r, ay8910_data_w)
275275   AM_RANGE(0x6000, 0x6000) AM_DEVWRITE_LEGACY("ay2", ay8910_address_w)
276   AM_RANGE(0x7000, 0x7000) AM_WRITE_LEGACY(sound_nmi_w)
276   AM_RANGE(0x7000, 0x7000) AM_WRITE(sound_nmi_w)
277277ADDRESS_MAP_END
278278
279279static INPUT_PORTS_START( ddayjlc )
src/mame/drivers/dorachan.c
r14845r14846
3030
3131   /* devices */
3232   device_t *m_main_cpu;
33   DECLARE_WRITE8_MEMBER(dorachan_ctrl_w);
3334};
3435
3536
r14845r14846
120121}
121122
122123
123static WRITE8_HANDLER(dorachan_ctrl_w)
124WRITE8_MEMBER(dorachan_state::dorachan_ctrl_w)
124125{
125   dorachan_state *state = space->machine().driver_data<dorachan_state>();
126   state->m_flip_screen = (data >> 6) & 0x01;
126   m_flip_screen = (data >> 6) & 0x01;
127127}
128128
129129
r14845r14846
167167   ADDRESS_MAP_GLOBAL_MASK(0xff)
168168   AM_RANGE(0x01, 0x01) AM_WRITENOP
169169   AM_RANGE(0x02, 0x02) AM_WRITENOP
170   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(dorachan_ctrl_w)
170   AM_RANGE(0x03, 0x03) AM_WRITE(dorachan_ctrl_w)
171171ADDRESS_MAP_END
172172
173173
src/mame/drivers/quantum.c
r14845r14846
5757   quantum_state(const machine_config &mconfig, device_type type, const char *tag)
5858      : driver_device(mconfig, type, tag) { }
5959
60   DECLARE_READ16_MEMBER(trackball_r);
61   DECLARE_WRITE16_MEMBER(led_w);
6062};
6163
6264
r14845r14846
7072 *
7173 *************************************/
7274
73static READ16_HANDLER( trackball_r )
75READ16_MEMBER(quantum_state::trackball_r)
7476{
75   return (input_port_read(space->machine(), "TRACKY") << 4) | input_port_read(space->machine(), "TRACKX");
77   return (input_port_read(machine(), "TRACKY") << 4) | input_port_read(machine(), "TRACKX");
7678}
7779
7880
r14845r14846
9597 *
9698 *************************************/
9799
98static WRITE16_HANDLER( led_w )
100WRITE16_MEMBER(quantum_state::led_w)
99101{
100102   if (ACCESSING_BITS_0_7)
101103   {
102104      /* bits 0 and 1 are coin counters */
103      coin_counter_w(space->machine(), 0, data & 2);
104      coin_counter_w(space->machine(), 1, data & 1);
105      coin_counter_w(machine(), 0, data & 2);
106      coin_counter_w(machine(), 1, data & 1);
105107
106108      /* bit 3 = select second trackball for cocktail mode? */
107109
108110      /* bits 4 and 5 are LED controls */
109      set_led_status(space->machine(), 0, data & 0x10);
110      set_led_status(space->machine(), 1, data & 0x20);
111      set_led_status(machine(), 0, data & 0x10);
112      set_led_status(machine(), 1, data & 0x20);
111113
112114      /* bits 6 and 7 flip screen */
113115      avg_set_flip_x (data & 0x40);
r14845r14846
130132   AM_RANGE(0x840000, 0x84001f) AM_DEVREADWRITE8_LEGACY("pokey1", pokey_r, pokey_w, 0x00ff)
131133   AM_RANGE(0x840020, 0x84003f) AM_DEVREADWRITE8_LEGACY("pokey2", pokey_r, pokey_w, 0x00ff)
132134   AM_RANGE(0x900000, 0x9001ff) AM_RAM AM_SHARE("nvram")
133   AM_RANGE(0x940000, 0x940001) AM_READ_LEGACY(trackball_r) /* trackball */
135   AM_RANGE(0x940000, 0x940001) AM_READ(trackball_r) /* trackball */
134136   AM_RANGE(0x948000, 0x948001) AM_READ_PORT("SYSTEM")
135137   AM_RANGE(0x950000, 0x95001f) AM_WRITEONLY AM_BASE_LEGACY((UINT16**)&avgdvg_colorram)
136   AM_RANGE(0x958000, 0x958001) AM_WRITE_LEGACY(led_w)
138   AM_RANGE(0x958000, 0x958001) AM_WRITE(led_w)
137139   AM_RANGE(0x960000, 0x960001) AM_WRITENOP
138140   AM_RANGE(0x968000, 0x968001) AM_WRITE_LEGACY(avgdvg_reset_word_w)
139141    AM_RANGE(0x970000, 0x970001) AM_WRITE_LEGACY(avgdvg_go_word_w)
src/mame/drivers/quizpun2.c
r14845r14846
9999   UINT8 *m_fg_ram;
100100   tilemap_t *m_bg_tmap;
101101   tilemap_t *m_fg_tmap;
102   DECLARE_WRITE8_MEMBER(bg_ram_w);
103   DECLARE_WRITE8_MEMBER(fg_ram_w);
104   DECLARE_READ8_MEMBER(quizpun2_protection_r);
105   DECLARE_WRITE8_MEMBER(quizpun2_protection_w);
106   DECLARE_WRITE8_MEMBER(quizpun2_rombank_w);
107   DECLARE_WRITE8_MEMBER(quizpun2_irq_ack);
108   DECLARE_WRITE8_MEMBER(quizpun2_soundlatch_w);
102109};
103110
104111
r14845r14846
123130   SET_TILE_INFO(1, code, color & 0x0f, 0);
124131}
125132
126static WRITE8_HANDLER( bg_ram_w )
133WRITE8_MEMBER(quizpun2_state::bg_ram_w)
127134{
128   quizpun2_state *state = space->machine().driver_data<quizpun2_state>();
129   state->m_bg_ram[offset] = data;
130   state->m_bg_tmap->mark_tile_dirty(offset/2);
135   m_bg_ram[offset] = data;
136   m_bg_tmap->mark_tile_dirty(offset/2);
131137}
132138
133static WRITE8_HANDLER( fg_ram_w )
139WRITE8_MEMBER(quizpun2_state::fg_ram_w)
134140{
135   quizpun2_state *state = space->machine().driver_data<quizpun2_state>();
136   state->m_fg_ram[offset] = data;
137   state->m_fg_tmap->mark_tile_dirty(offset/4);
141   m_fg_ram[offset] = data;
142   m_fg_tmap->mark_tile_dirty(offset/4);
138143}
139144
140145static VIDEO_START(quizpun2)
r14845r14846
206211   );
207212}
208213
209static READ8_HANDLER( quizpun2_protection_r )
214READ8_MEMBER(quizpun2_state::quizpun2_protection_r)
210215{
211   quizpun2_state *state = space->machine().driver_data<quizpun2_state>();
212   struct prot_t &prot = state->m_prot;
216   struct prot_t &prot = m_prot;
213217   UINT8 ret;
214218
215219   switch ( prot.state )
r14845r14846
236240               break;
237241
238242            default:
239               log_protection(space, "unknown address");
243               log_protection(&space, "unknown address");
240244               ret = 0x2e59 >> ((prot.addr & 1) ? 0 : 8);   // return the address of: XOR A, RET
241245         }
242246         break;
243247
244248      case STATE_EEPROM_R:      // EEPROM read
245249      {
246         UINT8 *eeprom = space->machine().region("eeprom")->base();
250         UINT8 *eeprom = machine().region("eeprom")->base();
247251         ret = eeprom[prot.addr];
248252         break;
249253      }
250254
251255      default:
252         log_protection(space, "unknown read");
256         log_protection(&space, "unknown read");
253257         ret = 0x00;
254258   }
255259
256260#if VERBOSE_PROTECTION_LOG
257   log_protection(space, "info READ");
261   log_protection(&space, "info READ");
258262#endif
259263
260264   prot.addr++;
r14845r14846
262266   return ret;
263267}
264268
265static WRITE8_HANDLER( quizpun2_protection_w )
269WRITE8_MEMBER(quizpun2_state::quizpun2_protection_w)
266270{
267   quizpun2_state *state = space->machine().driver_data<quizpun2_state>();
268   struct prot_t &prot = state->m_prot;
271   struct prot_t &prot = m_prot;
269272
270273   switch ( prot.state )
271274   {
272275      case STATE_EEPROM_W:
273276      {
274         UINT8 *eeprom = space->machine().region("eeprom")->base();
277         UINT8 *eeprom = machine().region("eeprom")->base();
275278         eeprom[prot.addr] = data;
276279         prot.addr++;
277280         if ((prot.addr % 8) == 0)
r14845r14846
300303                  prot.addr = 0;
301304               }
302305               else
303                  log_protection(space, "unknown command");
306                  log_protection(&space, "unknown command");
304307            }
305308            else if (prot.cmd >= 0x00 && prot.cmd <= 0x0f )
306309            {
r14845r14846
315318            else
316319            {
317320               prot.state = STATE_IDLE;
318               log_protection(space, "unknown command");
321               log_protection(&space, "unknown command");
319322            }
320323         }
321324         else
r14845r14846
327330   }
328331
329332#if VERBOSE_PROTECTION_LOG
330   log_protection(space, "info WRITE");
333   log_protection(&space, "info WRITE");
331334#endif
332335}
333336
r14845r14846
336339                            Memory Maps - Main CPU
337340***************************************************************************/
338341
339static WRITE8_HANDLER( quizpun2_rombank_w )
342WRITE8_MEMBER(quizpun2_state::quizpun2_rombank_w)
340343{
341   UINT8 *ROM = space->machine().region("maincpu")->base();
342   memory_set_bankptr(space->machine(),  "bank1", &ROM[ 0x10000 + 0x2000 * (data & 0x1f) ] );
344   UINT8 *ROM = machine().region("maincpu")->base();
345   memory_set_bankptr(machine(),  "bank1", &ROM[ 0x10000 + 0x2000 * (data & 0x1f) ] );
343346}
344347
345static WRITE8_HANDLER( quizpun2_irq_ack )
348WRITE8_MEMBER(quizpun2_state::quizpun2_irq_ack)
346349{
347   cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
350   cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
348351}
349352
350static WRITE8_HANDLER( quizpun2_soundlatch_w )
353WRITE8_MEMBER(quizpun2_state::quizpun2_soundlatch_w)
351354{
352355   soundlatch_w(space, 0, data);
353   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
356   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
354357}
355358
356359static ADDRESS_MAP_START( quizpun2_map, AS_PROGRAM, 8, quizpun2_state )
357360   AM_RANGE( 0x0000, 0x7fff ) AM_ROM
358361   AM_RANGE( 0x8000, 0x9fff ) AM_ROMBANK("bank1")
359362
360   AM_RANGE( 0xa000, 0xbfff ) AM_RAM_WRITE_LEGACY(fg_ram_w ) AM_BASE(m_fg_ram )   // 4 * 800
361   AM_RANGE( 0xc000, 0xc7ff ) AM_RAM_WRITE_LEGACY(bg_ram_w ) AM_BASE(m_bg_ram )   // 4 * 400
363   AM_RANGE( 0xa000, 0xbfff ) AM_RAM_WRITE(fg_ram_w ) AM_BASE(m_fg_ram )   // 4 * 800
364   AM_RANGE( 0xc000, 0xc7ff ) AM_RAM_WRITE(bg_ram_w ) AM_BASE(m_bg_ram )   // 4 * 400
362365   AM_RANGE( 0xc800, 0xcfff ) AM_RAM                              //
363366
364367   AM_RANGE( 0xd000, 0xd3ff ) AM_RAM_WRITE_LEGACY(paletteram_xRRRRRGGGGGBBBBB_le_w )  AM_BASE_GENERIC( paletteram )
r14845r14846
367370
368371static ADDRESS_MAP_START( quizpun2_io_map, AS_IO, 8, quizpun2_state )
369372   ADDRESS_MAP_GLOBAL_MASK(0xff)
370   AM_RANGE( 0x40, 0x40 ) AM_WRITE_LEGACY(quizpun2_irq_ack )
371   AM_RANGE( 0x50, 0x50 ) AM_WRITE_LEGACY(quizpun2_soundlatch_w )
372   AM_RANGE( 0x60, 0x60 ) AM_WRITE_LEGACY(quizpun2_rombank_w )
373   AM_RANGE( 0x40, 0x40 ) AM_WRITE(quizpun2_irq_ack )
374   AM_RANGE( 0x50, 0x50 ) AM_WRITE(quizpun2_soundlatch_w )
375   AM_RANGE( 0x60, 0x60 ) AM_WRITE(quizpun2_rombank_w )
373376   AM_RANGE( 0x80, 0x80 ) AM_READ_PORT( "DSW" )
374377   AM_RANGE( 0x90, 0x90 ) AM_READ_PORT( "IN0" )
375378   AM_RANGE( 0xa0, 0xa0 ) AM_READ_PORT( "IN1" )
376   AM_RANGE( 0xe0, 0xe0 ) AM_READWRITE_LEGACY(quizpun2_protection_r, quizpun2_protection_w )
379   AM_RANGE( 0xe0, 0xe0 ) AM_READWRITE(quizpun2_protection_r, quizpun2_protection_w )
377380ADDRESS_MAP_END
378381
379382
src/mame/drivers/egghunt.c
r14845r14846
6666   UINT8 *   m_atram;
6767   UINT8     m_bgram[0x1000];
6868   UINT8     m_spram[0x1000];
69   DECLARE_READ8_MEMBER(egghunt_bgram_r);
70   DECLARE_WRITE8_MEMBER(egghunt_bgram_w);
71   DECLARE_WRITE8_MEMBER(egghunt_atram_w);
72   DECLARE_WRITE8_MEMBER(egghunt_gfx_banking_w);
73   DECLARE_WRITE8_MEMBER(egghunt_vidram_bank_w);
74   DECLARE_WRITE8_MEMBER(egghunt_soundlatch_w);
6975};
7076
7177
r14845r14846
127133   SET_TILE_INFO(0, code, colour, 0);
128134}
129135
130static READ8_HANDLER( egghunt_bgram_r )
136READ8_MEMBER(egghunt_state::egghunt_bgram_r)
131137{
132   egghunt_state *state = space->machine().driver_data<egghunt_state>();
133   if (state->m_vidram_bank)
138   if (m_vidram_bank)
134139   {
135      return state->m_spram[offset];
140      return m_spram[offset];
136141   }
137142   else
138143   {
139      return state->m_bgram[offset];
144      return m_bgram[offset];
140145   }
141146}
142147
143static WRITE8_HANDLER( egghunt_bgram_w )
148WRITE8_MEMBER(egghunt_state::egghunt_bgram_w)
144149{
145   egghunt_state *state = space->machine().driver_data<egghunt_state>();
146   if (state->m_vidram_bank)
150   if (m_vidram_bank)
147151   {
148      state->m_spram[offset] = data;
152      m_spram[offset] = data;
149153   }
150154   else
151155   {
152      state->m_bgram[offset] = data;
153      state->m_bg_tilemap->mark_tile_dirty(offset / 2);
156      m_bgram[offset] = data;
157      m_bg_tilemap->mark_tile_dirty(offset / 2);
154158   }
155159}
156160
157static WRITE8_HANDLER( egghunt_atram_w )
161WRITE8_MEMBER(egghunt_state::egghunt_atram_w)
158162{
159   egghunt_state *state = space->machine().driver_data<egghunt_state>();
160   state->m_atram[offset] = data;
161   state->m_bg_tilemap->mark_tile_dirty(offset);
163   m_atram[offset] = data;
164   m_bg_tilemap->mark_tile_dirty(offset);
162165}
163166
164167
r14845r14846
180183   return 0;
181184}
182185
183static WRITE8_HANDLER( egghunt_gfx_banking_w )
186WRITE8_MEMBER(egghunt_state::egghunt_gfx_banking_w)
184187{
185   egghunt_state *state = space->machine().driver_data<egghunt_state>();
186188   // data & 0x03 is used for tile banking
187189   // data & 0x30 is used for sprites banking
188   state->m_gfx_banking = data & 0x33;
190   m_gfx_banking = data & 0x33;
189191
190   state->m_bg_tilemap->mark_all_dirty();
192   m_bg_tilemap->mark_all_dirty();
191193}
192194
193static WRITE8_HANDLER( egghunt_vidram_bank_w )
195WRITE8_MEMBER(egghunt_state::egghunt_vidram_bank_w)
194196{
195   egghunt_state *state = space->machine().driver_data<egghunt_state>();
196   state->m_vidram_bank = data & 1;
197   m_vidram_bank = data & 1;
197198}
198199
199static WRITE8_HANDLER( egghunt_soundlatch_w )
200WRITE8_MEMBER(egghunt_state::egghunt_soundlatch_w)
200201{
201   egghunt_state *state = space->machine().driver_data<egghunt_state>();
202202   soundlatch_w(space, 0, data);
203   device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
203   device_set_input_line(m_audiocpu, 0, HOLD_LINE);
204204}
205205
206206static READ8_DEVICE_HANDLER( egghunt_okibanking_r )
r14845r14846
220220static ADDRESS_MAP_START( egghunt_map, AS_PROGRAM, 8, egghunt_state )
221221   AM_RANGE(0x0000, 0x7fff) AM_ROM
222222   AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE_LEGACY(paletteram_xRRRRRGGGGGBBBBB_le_w) AM_BASE_GENERIC(paletteram)
223   AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE_LEGACY(egghunt_atram_w) AM_BASE(m_atram)
224   AM_RANGE(0xd000, 0xdfff) AM_READWRITE_LEGACY(egghunt_bgram_r, egghunt_bgram_w)
223   AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(egghunt_atram_w) AM_BASE(m_atram)
224   AM_RANGE(0xd000, 0xdfff) AM_READWRITE(egghunt_bgram_r, egghunt_bgram_w)
225225   AM_RANGE(0xe000, 0xffff) AM_RAM
226226ADDRESS_MAP_END
227227
228228
229229static ADDRESS_MAP_START( io_map, AS_IO, 8, egghunt_state )
230230   ADDRESS_MAP_GLOBAL_MASK(0xff)
231   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(egghunt_vidram_bank_w)
232   AM_RANGE(0x01, 0x01) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(egghunt_gfx_banking_w)
231   AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW1") AM_WRITE(egghunt_vidram_bank_w)
232   AM_RANGE(0x01, 0x01) AM_READ_PORT("SYSTEM") AM_WRITE(egghunt_gfx_banking_w)
233233   AM_RANGE(0x02, 0x02) AM_READ_PORT("P1")
234   AM_RANGE(0x03, 0x03) AM_READ_PORT("P2") AM_WRITE_LEGACY(egghunt_soundlatch_w)
234   AM_RANGE(0x03, 0x03) AM_READ_PORT("P2") AM_WRITE(egghunt_soundlatch_w)
235235   AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW2")
236236   AM_RANGE(0x06, 0x06) AM_READ_PORT("UNK") AM_WRITENOP
237237   AM_RANGE(0x07, 0x07) AM_WRITENOP
src/mame/drivers/splus.c
r14845r14846
8484   INT16 m_stepper_pos[5];
8585   UINT8 m_stop_pos[5];
8686
87   DECLARE_WRITE8_MEMBER(splus_io_w);
88   DECLARE_WRITE8_MEMBER(splus_load_pulse_w);
89   DECLARE_WRITE8_MEMBER(splus_serial_w);
90   DECLARE_WRITE8_MEMBER(splus_7seg_w);
91   DECLARE_WRITE8_MEMBER(splus_duart_w);
92   DECLARE_READ8_MEMBER(splus_serial_r);
93   DECLARE_READ8_MEMBER(splus_m_reel_ram_r);
94   DECLARE_READ8_MEMBER(splus_io_r);
95   DECLARE_READ8_MEMBER(splus_duart_r);
96   DECLARE_READ8_MEMBER(splus_watchdog_r);
97   DECLARE_READ8_MEMBER(splus_registers_r);
8798};
8899
89100/* Static Variables */
r14845r14846
120131* Write Handlers *
121132******************/
122133
123static WRITE8_HANDLER( splus_io_w )
134WRITE8_MEMBER(splus_state::splus_io_w)
124135{
125   splus_state *state = space->machine().driver_data<splus_state>();
126136
127137    // P1.0 = Reel 1 Controller
128138    // P1.1 = Reel 2 Controller
r14845r14846
138148    if (offset == 1 && ((data & 0x1f) != 0x00)) {
139149
140150        // Unknown Bit 7
141        state->m_p1_unknown = (~data & 0x80);
151        m_p1_unknown = (~data & 0x80);
142152
143153        // Stepper Motor Engaged
144        if (((state->m_bank40 >> 0) & 1) == 0x01) {
154        if (((m_bank40 >> 0) & 1) == 0x01) {
145155            // Reel Controllers Only
146            state->m_p1_reels = (data & 0x1f);
156            m_p1_reels = (data & 0x1f);
147157
148158            // Loop through Reel Controllers
149159            for (x = 0; x < 5; x++) {
150160                // Test Reel Controller
151                if (((state->m_p1_reels >> x) & 1) == 0x01) {
161                if (((m_p1_reels >> x) & 1) == 0x01) {
152162                    // Forward Direction
153                    if (((state->m_bank10 >> 5) & 1) == 0x01) {
154                        state->m_stepper_pos[x]++;
155                        if (state->m_stepper_pos[x] == MAX_STEPPER)
156                            state->m_stepper_pos[x] = 0;
163                    if (((m_bank10 >> 5) & 1) == 0x01) {
164                        m_stepper_pos[x]++;
165                        if (m_stepper_pos[x] == MAX_STEPPER)
166                            m_stepper_pos[x] = 0;
157167                    } else {
158                        state->m_stepper_pos[x]--;
159                        if (state->m_stepper_pos[x] < 0)
160                            state->m_stepper_pos[x] = MAX_STEPPER - 1;
168                        m_stepper_pos[x]--;
169                        if (m_stepper_pos[x] < 0)
170                            m_stepper_pos[x] = MAX_STEPPER - 1;
161171                    }
162               state->m_stop_pos[x] = (int)(state->m_stepper_pos[x] / STEPPER_DIVISOR);
172               m_stop_pos[x] = (int)(m_stepper_pos[x] / STEPPER_DIVISOR);
163173            }
164174            }
165175        }
166176#if DEBUG_OUTPUT
167177        if ((data & 0x1f) == 0x01)
168         mame_printf_info("Steppers %02X-%02X-%02X-%02X-%02X Motor=%02X Dir=%02X reels=%02X unk=%02X\n", state->m_stop_pos[0],state->m_stop_pos[1],state->m_stop_pos[2],state->m_stop_pos[3],state->m_stop_pos[4],((state->m_bank40 >> 0) & 1),((state->m_bank10 >> 5) & 1),(data & 0x1f), state->m_p1_unknown);
178         mame_printf_info("Steppers %02X-%02X-%02X-%02X-%02X Motor=%02X Dir=%02X reels=%02X unk=%02X\n", m_stop_pos[0],m_stop_pos[1],m_stop_pos[2],m_stop_pos[3],m_stop_pos[4],((m_bank40 >> 0) & 1),((m_bank10 >> 5) & 1),(data & 0x1f), m_p1_unknown);
169179#endif
170180   }
171181
172   state->m_io_port[offset] = data;
182   m_io_port[offset] = data;
173183}
174184
175static WRITE8_HANDLER( splus_load_pulse_w )
185WRITE8_MEMBER(splus_state::splus_load_pulse_w)
176186{
177//  splus_state *state = space->machine().driver_data<splus_state>();
178187
179188//  UINT8 out = 0;
180//    out = ((~state->m_io_port[1] & 0xf0)>>4); // Output Bank
189//    out = ((~m_io_port[1] & 0xf0)>>4); // Output Bank
181190}
182191
183static WRITE8_HANDLER( splus_serial_w )
192WRITE8_MEMBER(splus_state::splus_serial_w)
184193{
185   splus_state *state = space->machine().driver_data<splus_state>();
186194
187195    UINT8 out = 0;
188    out = ((~state->m_io_port[1] & 0xe0)>>5); // Output Bank
196    out = ((~m_io_port[1] & 0xe0)>>5); // Output Bank
189197
190198   switch (out)
191199   {
192200      case 0x00: // Bank 10
193            if (((state->m_bank10 >> 0) & 1) != ((data >> 0) & 1)) {
201            if (((m_bank10 >> 0) & 1) != ((data >> 0) & 1)) {
194202#if DEBUG_OUTPUT
195203                mame_printf_info("Coin Drop Meter =%02X\n",(data >> 0) & 1);
196204#endif
197205            }
198            if (((state->m_bank10 >> 1) & 1) != ((data >> 1) & 1)) {
206            if (((m_bank10 >> 1) & 1) != ((data >> 1) & 1)) {
199207#if DEBUG_OUTPUT
200208                mame_printf_info("Coin Out Meter =%02X\n",(data >> 1) & 1);
201209#endif
202210            }
203            if (((state->m_bank10 >> 2) & 1) != ((data >> 2) & 1)) {
211            if (((m_bank10 >> 2) & 1) != ((data >> 2) & 1)) {
204212#if DEBUG_OUTPUT
205213                mame_printf_info("Coin In Meter =%02X\n",(data >> 2) & 1);
206214#endif
207215            }
208            if (((state->m_bank10 >> 3) & 1) != ((data >> 3) & 1)) {
216            if (((m_bank10 >> 3) & 1) != ((data >> 3) & 1)) {
209217                //mame_printf_info("B Switch for SDS =%02X\n",(data >> 3) & 1);
210218            }
211            if (((state->m_bank10 >> 4) & 1) != ((data >> 4) & 1)) {
219            if (((m_bank10 >> 4) & 1) != ((data >> 4) & 1)) {
212220#if DEBUG_OUTPUT
213221                mame_printf_info("Hopper Drive 2 =%02X\n",(data >> 4) & 1);
214222#endif
215223            }
216            if (((state->m_bank10 >> 5) & 1) != ((data >> 5) & 1)) {
224            if (((m_bank10 >> 5) & 1) != ((data >> 5) & 1)) {
217225#if DEBUG_OUTPUT
218226                mame_printf_info("Stepper Motor Direction =%02X\n",(data >> 5) & 1);
219227#endif
220228            }
221            if (((state->m_bank10 >> 6) & 1) != ((data >> 6) & 1)) {
229            if (((m_bank10 >> 6) & 1) != ((data >> 6) & 1)) {
222230#if DEBUG_OUTPUT
223231                mame_printf_info("Mechanical Bell =%02X\n",(data >> 6) & 1);
224232#endif
225233            }
226            if (((state->m_bank10 >> 7) & 1) != ((data >> 7) & 1)) {
234            if (((m_bank10 >> 7) & 1) != ((data >> 7) & 1)) {
227235#if DEBUG_OUTPUT
228236                mame_printf_info("Cancelled Credits Meter =%02X\n",(data >> 7) & 1);
229237#endif
230238            }
231            state->m_bank10 = data;
239            m_bank10 = data;
232240
233241           output_set_value("s_bnk10",(data >> 0) & 1); // Coin Drop Meter
234242           output_set_value("s_bnk11",(data >> 1) & 1); // Coin Out Meter
r14845r14846
240248           output_set_value("s_bnk17",(data >> 7) & 1); // Cancelled Credits Meter
241249         break;
242250      case 0x01: // Bank 20
243            if (((state->m_bank20 >> 5) & 1) != ((data >> 5) & 1)) {
251            if (((m_bank20 >> 5) & 1) != ((data >> 5) & 1)) {
244252#if DEBUG_OUTPUT
245253                mame_printf_info("Games Played Meter =%02X\n",(data >> 5) & 1);
246254#endif
247255            }
248            if (((state->m_bank20 >> 6) & 1) != ((data >> 6) & 1)) {
256            if (((m_bank20 >> 6) & 1) != ((data >> 6) & 1)) {
249257#if DEBUG_OUTPUT
250258                mame_printf_info("Bill Acceptor Enable =%02X\n",(data >> 6) & 1);
251259#endif
252260            }
253            if (((state->m_bank20 >> 7) & 1) != ((data >> 7) & 1)) {
261            if (((m_bank20 >> 7) & 1) != ((data >> 7) & 1)) {
254262#if DEBUG_OUTPUT
255263                mame_printf_info("Jackpots Meter =%02X\n",(data >> 7) & 1);
256264#endif
257265            }
258            state->m_bank20 = data;
266            m_bank20 = data;
259267
260268           output_set_value("s_bnk20",(data >> 0) & 1); // Payline Lamp 3
261269           output_set_value("s_bnk21",(data >> 1) & 1); // Payline Lamp 4
r14845r14846
267275           output_set_value("s_bnk27",(data >> 7) & 1); // Jackpots Meter
268276         break;
269277      case 0x02: // Bank 30
270            if (((state->m_bank30 >> 2) & 1) != ((data >> 2) & 1)) {
278            if (((m_bank30 >> 2) & 1) != ((data >> 2) & 1)) {
271279#if DEBUG_OUTPUT
272280                mame_printf_info("Handle Release =%02X\n",(data >> 2) & 1);
273281#endif
274282            }
275            if (((state->m_bank30 >> 3) & 1) != ((data >> 3) & 1)) {
283            if (((m_bank30 >> 3) & 1) != ((data >> 3) & 1)) {
276284#if DEBUG_OUTPUT
277285                mame_printf_info("Diverter =%02X\n",(data >> 3) & 1);
278286#endif
279287            }
280            if (((state->m_bank30 >> 4) & 1) != ((data >> 4) & 1)) {
288            if (((m_bank30 >> 4) & 1) != ((data >> 4) & 1)) {
281289#if DEBUG_OUTPUT
282290                mame_printf_info("Coin Lockout =%02X\n",(data >> 4) & 1);
283291#endif
284292            }
285            if (((state->m_bank30 >> 5) & 1) != ((data >> 5) & 1)) {
293            if (((m_bank30 >> 5) & 1) != ((data >> 5) & 1)) {
286294#if DEBUG_OUTPUT
287295                mame_printf_info("Hopper Drive 1 =%02X\n",(data >> 5) & 1);
288296#endif
289297            }
290            state->m_bank30 = data;
298            m_bank30 = data;
291299
292300           output_set_value("s_bnk30",(data >> 0) & 1); // Change Candle Lamp Bottom
293301           output_set_value("s_bnk31",(data >> 1) & 1); // Change Candle Lamp Top
r14845r14846
299307           output_set_value("s_bnk37",(data >> 7) & 1); // Payline Lamp 2
300308            break;
301309      case 0x04: // Bank 40
302            if (((state->m_bank40 >> 0) & 1) != ((data >> 0) & 1)) {
310            if (((m_bank40 >> 0) & 1) != ((data >> 0) & 1)) {
303311#if DEBUG_OUTPUT
304312                mame_printf_info("Stepper Motor Power Supply =%02X\n",(data >> 0) & 1);
305313#endif
306314            }
307            if (((state->m_bank40 >> 3) & 1) != ((data >> 3) & 1)) {
315            if (((m_bank40 >> 3) & 1) != ((data >> 3) & 1)) {
308316#if DEBUG_OUTPUT
309317                mame_printf_info("Jackpot/Hand Pay Lamp =%02X\n",(data >> 3) & 1);
310318#endif
311319            }
312            state->m_bank40 = data;
320            m_bank40 = data;
313321
314322           output_set_value("s_bnk40",(data >> 0) & 1); // Stepper Motor Power Supply
315323           output_set_value("s_bnk41",(data >> 1) & 1); // Insert Coin Lamp
r14845r14846
323331   }
324332}
325333
326static WRITE8_HANDLER( splus_7seg_w )
334WRITE8_MEMBER(splus_state::splus_7seg_w)
327335{
328   splus_state *state = space->machine().driver_data<splus_state>();
329336
330337    static const UINT8 ls48_map[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 };
331338
r14845r14846
335342    seg = ((~data & 0xf0)>>4); // Segment Number
336343    val = (~data & 0x0f); // Digit Value
337344
338    // Need to add ~state->m_io_port[1]-1 to seg value
339    if (seg < 0x0a && (state->m_io_port[1] & 0xe0) == 0xe0)
345    // Need to add ~m_io_port[1]-1 to seg value
346    if (seg < 0x0a && (m_io_port[1] & 0xe0) == 0xe0)
340347        output_set_digit_value(seg, ls48_map[val]);
341348}
342349
343static WRITE8_HANDLER( splus_duart_w )
350WRITE8_MEMBER(splus_state::splus_duart_w)
344351{
345352   // Used for Slot Accounting System Communication
346353}
r14845r14846
357364* Read Handlers *
358365****************/
359366
360static READ8_HANDLER( splus_serial_r )
367READ8_MEMBER(splus_state::splus_serial_r)
361368{
362   splus_state *state = space->machine().driver_data<splus_state>();
363369
364370    UINT8 coin_out = 0x00;
365371    UINT8 coin_optics = 0x00;
366372    UINT8 door_optics = 0x00;
367    UINT32 curr_cycles = space->machine().firstcpu->total_cycles();
373    UINT32 curr_cycles = machine().firstcpu->total_cycles();
368374
369375    UINT8 in = 0x00;
370376    UINT8 val = 0x00;
371    in = ((~state->m_io_port[1] & 0xe0)>>5); // Input Bank
377    in = ((~m_io_port[1] & 0xe0)>>5); // Input Bank
372378
373379   switch (in)
374380   {
r14845r14846
385391         break;
386392      case 0x01: // Bank 10
387393            // Test for Coin-In
388           if ((input_port_read_safe(space->machine(),"SENSOR",0x00) & 0x01) == 0x01 && state->m_coin_state == 0) {
389              state->m_coin_state = 1; // Start Coin Cycle
390              state->m_last_cycles = space->machine().firstcpu->total_cycles();
394           if ((input_port_read_safe(machine(),"SENSOR",0x00) & 0x01) == 0x01 && m_coin_state == 0) {
395              m_coin_state = 1; // Start Coin Cycle
396              m_last_cycles = machine().firstcpu->total_cycles();
391397#if DEBUG_OUTPUT
392                mame_printf_info("coin=%02X\n", state->m_coin_state);
398                mame_printf_info("coin=%02X\n", m_coin_state);
393399#endif
394400           } else {
395401              /* Process Next Coin Optic State */
396              if (curr_cycles - state->m_last_cycles > 10000 && state->m_coin_state != 0) {
397                 state->m_coin_state++;
398                 if (state->m_coin_state > 5)
399                    state->m_coin_state = 0;
400                 state->m_last_cycles = space->machine().firstcpu->total_cycles();
402              if (curr_cycles - m_last_cycles > 10000 && m_coin_state != 0) {
403                 m_coin_state++;
404                 if (m_coin_state > 5)
405                    m_coin_state = 0;
406                 m_last_cycles = machine().firstcpu->total_cycles();
401407#if DEBUG_OUTPUT
402                    mame_printf_info("coin=%02X\n", state->m_coin_state);
408                    mame_printf_info("coin=%02X\n", m_coin_state);
403409#endif
404410              }
405411           }
406412
407413            // Set Coin State
408           switch (state->m_coin_state)
414           switch (m_coin_state)
409415           {
410416              case 0x00: // No Coin
411417                 coin_optics = 0x00;
r14845r14846
428434           }
429435
430436            // Determine Door Optics
431            if ((input_port_read_safe(space->machine(),"I10",0x08) & 0x08) == 0x08)
437            if ((input_port_read_safe(machine(),"I10",0x08) & 0x08) == 0x08)
432438                door_optics = 0x08;
433439            else
434                door_optics = (((state->m_bank20 >> 4) & 1) << 3); // Use Door Optics Transmitter
440                door_optics = (((m_bank20 >> 4) & 1) << 3); // Use Door Optics Transmitter
435441
436442            // Test if Hopper 1 and Hopper 2 Motors On
437            if (((state->m_bank10 >> 4) & 1) || ((state->m_bank30 >> 5) & 1)) {
438                if (state->m_coin_out_state == 0)
439                    state->m_coin_out_state = 3;
443            if (((m_bank10 >> 4) & 1) || ((m_bank30 >> 5) & 1)) {
444                if (m_coin_out_state == 0)
445                    m_coin_out_state = 3;
440446            } else {
441                state->m_coin_out_state = 0;
447                m_coin_out_state = 0;
442448            }
443449
444450            // Process Coin Out
445           if (curr_cycles - state->m_last_coin_out > 700000 && state->m_coin_out_state != 0) {
446              if (state->m_coin_out_state != 2) {
447                    state->m_coin_out_state = 2; // Coin-Out Off
451           if (curr_cycles - m_last_coin_out > 700000 && m_coin_out_state != 0) {
452              if (m_coin_out_state != 2) {
453                    m_coin_out_state = 2; // Coin-Out Off
448454                } else {
449                    state->m_coin_out_state = 3; // Coin-Out On
455                    m_coin_out_state = 3; // Coin-Out On
450456                }
451457
452              state->m_last_coin_out = space->machine().firstcpu->total_cycles();
458              m_last_coin_out = machine().firstcpu->total_cycles();
453459           }
454460
455461            // Set Coin Out State
456            switch (state->m_coin_out_state)
462            switch (m_coin_out_state)
457463            {
458464                case 0x00: // No Coin-Out
459465                   coin_out = 0x00;
r14845r14846
473479            val = val | door_optics; // Door Optics Receiver
474480            val = val | coin_out; // Hopper Coin OutR
475481            val = val | 0x00; // Hopper Full
476            val = val | (input_port_read_safe(space->machine(),"I10",0x40) & 0x40); // Handle/Spin Button
477            val = val | (input_port_read_safe(space->machine(),"I10",0x80) & 0x80); // Jackpot Reset Key
482            val = val | (input_port_read_safe(machine(),"I10",0x40) & 0x40); // Handle/Spin Button
483            val = val | (input_port_read_safe(machine(),"I10",0x80) & 0x80); // Jackpot Reset Key
478484         break;
479485      case 0x02: // Bank 20
480            val = val | (input_port_read_safe(space->machine(),"I20",0x01) & 0x01); // Bet One Credit
481            val = val | (input_port_read_safe(space->machine(),"I20",0x02) & 0x02); // Play Max Credits
482            val = val | (input_port_read_safe(space->machine(),"I20",0x04) & 0x04); // Cash Out
483            val = val | (input_port_read_safe(space->machine(),"I20",0x08) & 0x08); // Change Request
486            val = val | (input_port_read_safe(machine(),"I20",0x01) & 0x01); // Bet One Credit
487            val = val | (input_port_read_safe(machine(),"I20",0x02) & 0x02); // Play Max Credits
488            val = val | (input_port_read_safe(machine(),"I20",0x04) & 0x04); // Cash Out
489            val = val | (input_port_read_safe(machine(),"I20",0x08) & 0x08); // Change Request
484490            val = val | 0x00; // Reel Mechanism
485            val = val | (input_port_read_safe(space->machine(),"I20",0x20) & 0x20); // Self Test Button
491            val = val | (input_port_read_safe(machine(),"I20",0x20) & 0x20); // Self Test Button
486492            val = val | 0x40; // Card Cage
487493            val = val | 0x80; // Bill Acceptor
488494         break;
489495      case 0x04: // Bank 30
490496            // Reserved
491            val = val | (input_port_read_safe(space->machine(),"I30",0x02) & 0x02); // Drop Door
497            val = val | (input_port_read_safe(machine(),"I30",0x02) & 0x02); // Drop Door
492498            // Jackpot to Credit Key
493499            // Reserved
494500            // Reserved
r14845r14846
500506   return val;
501507}
502508
503static READ8_HANDLER( splus_m_reel_ram_r )
509READ8_MEMBER(splus_state::splus_m_reel_ram_r)
504510{
505   splus_state *state = space->machine().driver_data<splus_state>();
506   return state->m_reel_ram[offset];
511   return m_reel_ram[offset];
507512}
508513
509static READ8_HANDLER( splus_io_r )
514READ8_MEMBER(splus_state::splus_io_r)
510515{
511   splus_state *state = space->machine().driver_data<splus_state>();
512516
513517    if (offset == 3)
514        return state->m_io_port[offset] & 0xf3; // Ignore Int0 and Int1, or machine will loop forever waiting
518        return m_io_port[offset] & 0xf3; // Ignore Int0 and Int1, or machine will loop forever waiting
515519    else
516       return state->m_io_port[offset];
520       return m_io_port[offset];
517521}
518522
519static READ8_HANDLER( splus_duart_r )
523READ8_MEMBER(splus_state::splus_duart_r)
520524{
521525   // Used for Slot Accounting System Communication
522526   return 0x00;
523527}
524528
525static READ8_HANDLER( splus_watchdog_r )
529READ8_MEMBER(splus_state::splus_watchdog_r)
526530{
527531   return 0x00; // Watchdog
528532}
529533
530static READ8_HANDLER( splus_registers_r )
534READ8_MEMBER(splus_state::splus_registers_r)
531535{
532536   return 0xff; // Reset Registers in Real Time Clock
533537}
r14845r14846
587591
588592static ADDRESS_MAP_START( splus_iomap, AS_IO, 8, splus_state )
589593   // Serial I/O
590    AM_RANGE(0x0000, 0x0000) AM_READ_LEGACY(splus_serial_r) AM_WRITE_LEGACY(splus_serial_w)
594    AM_RANGE(0x0000, 0x0000) AM_READ(splus_serial_r) AM_WRITE(splus_serial_w)
591595
592596    // Battery-backed RAM (Lower 4K) 0x1500-0x16ff eeprom staging area
593597   AM_RANGE(0x1000, 0x1fff) AM_RAM AM_SHARE("cmosl")
594598
595599    // Watchdog, 7-segment Display
596    AM_RANGE(0x2000, 0x2000) AM_READWRITE_LEGACY(splus_watchdog_r, splus_7seg_w)
600    AM_RANGE(0x2000, 0x2000) AM_READWRITE(splus_watchdog_r, splus_7seg_w)
597601
598602    // DUART
599    AM_RANGE(0x3000, 0x300f) AM_READWRITE_LEGACY(splus_duart_r, splus_duart_w)
603    AM_RANGE(0x3000, 0x300f) AM_READWRITE(splus_duart_r, splus_duart_w)
600604
601605   // Dip Switches, Sound
602606   AM_RANGE(0x4000, 0x4000) AM_READ_PORT("SW1") AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
r14845r14846
606610    AM_RANGE(0x5000, 0x5000) AM_DEVREAD_LEGACY("i2cmem", splus_reel_optics_r) AM_DEVWRITE_LEGACY("i2cmem", i2c_nvram_w)
607611
608612   // Reset Registers in Realtime Clock, Serial I/O Load Pulse
609   AM_RANGE(0x6000, 0x6000) AM_READWRITE_LEGACY(splus_registers_r, splus_load_pulse_w)
613   AM_RANGE(0x6000, 0x6000) AM_READWRITE(splus_registers_r, splus_load_pulse_w)
610614
611615    // Battery-backed RAM (Upper 4K)
612616   AM_RANGE(0x7000, 0x7fff) AM_RAM AM_SHARE("cmosh")
613617
614618    // SSxxxx Reel Chip
615    AM_RANGE(0x8000, 0x9fff) AM_READ_LEGACY(splus_m_reel_ram_r) AM_BASE(m_reel_ram)
619    AM_RANGE(0x8000, 0x9fff) AM_READ(splus_m_reel_ram_r) AM_BASE(m_reel_ram)
616620
617621   // Ports start here
618   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ_LEGACY(splus_io_r) AM_WRITE_LEGACY(splus_io_w) AM_BASE(m_io_port)
622   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(splus_io_r) AM_WRITE(splus_io_w) AM_BASE(m_io_port)
619623ADDRESS_MAP_END
620624
621625/*************************
src/mame/drivers/gpworld.c
r14845r14846
6060   UINT8* m_sprite_RAM;
6161   UINT8* m_palette_RAM;
6262   required_device<pioneer_ldv1000_device> m_laserdisc;
63   DECLARE_READ8_MEMBER(ldp_read);
64   DECLARE_READ8_MEMBER(pedal_in);
65   DECLARE_WRITE8_MEMBER(ldp_write);
66   DECLARE_WRITE8_MEMBER(misc_io_write);
67   DECLARE_WRITE8_MEMBER(brake_gas_write);
68   DECLARE_WRITE8_MEMBER(palette_write);
6369};
6470
6571
r14845r14846
230236
231237/* MEMORY HANDLERS */
232238/* READS */
233static READ8_HANDLER( ldp_read )
239READ8_MEMBER(gpworld_state::ldp_read)
234240{
235   gpworld_state *state = space->machine().driver_data<gpworld_state>();
236   return state->m_ldp_read_latch;
241   return m_ldp_read_latch;
237242}
238243
239static READ8_HANDLER( pedal_in )
244READ8_MEMBER(gpworld_state::pedal_in)
240245{
241   gpworld_state *state = space->machine().driver_data<gpworld_state>();
242   if (state->m_brake_gas)
243      return   input_port_read(space->machine(), "INACCEL");
246   if (m_brake_gas)
247      return   input_port_read(machine(), "INACCEL");
244248
245   return   input_port_read(space->machine(), "INBRAKE");
249   return   input_port_read(machine(), "INBRAKE");
246250
247251}
248252
249253/* WRITES */
250static WRITE8_HANDLER( ldp_write )
254WRITE8_MEMBER(gpworld_state::ldp_write)
251255{
252   gpworld_state *state = space->machine().driver_data<gpworld_state>();
253   state->m_ldp_write_latch = data;
256   m_ldp_write_latch = data;
254257}
255258
256static WRITE8_HANDLER( misc_io_write )
259WRITE8_MEMBER(gpworld_state::misc_io_write)
257260{
258   gpworld_state *state = space->machine().driver_data<gpworld_state>();
259   state->m_start_lamp = (data & 0x04) >> 1;
260   state->m_nmi_enable = (data & 0x40) >> 6;
261   m_start_lamp = (data & 0x04) >> 1;
262   m_nmi_enable = (data & 0x40) >> 6;
261263   /*  dunno      = (data & 0x80) >> 7; */ //coin counter???
262264
263   logerror("NMI : %x (0x%x)\n", state->m_nmi_enable, data);
265   logerror("NMI : %x (0x%x)\n", m_nmi_enable, data);
264266}
265267
266static WRITE8_HANDLER( brake_gas_write )
268WRITE8_MEMBER(gpworld_state::brake_gas_write)
267269{
268   gpworld_state *state = space->machine().driver_data<gpworld_state>();
269   state->m_brake_gas = data & 0x01;
270   m_brake_gas = data & 0x01;
270271}
271272
272static WRITE8_HANDLER( palette_write )
273WRITE8_MEMBER(gpworld_state::palette_write)
273274{
274   gpworld_state *state = space->machine().driver_data<gpworld_state>();
275275   /* This is all just a (bad) guess */
276276   int pal_index, r, g, b, a;
277277
278   state->m_palette_RAM[offset] = data;
278   m_palette_RAM[offset] = data;
279279
280280   /* "Round down" to the nearest palette entry */
281281   pal_index = offset & 0xffe;
282282
283   g = (state->m_palette_RAM[pal_index]   & 0xf0) << 0;
284   b = (state->m_palette_RAM[pal_index]   & 0x0f) << 4;
285   r = (state->m_palette_RAM[pal_index+1] & 0x0f) << 4;
286   a = (state->m_palette_RAM[pal_index+1] & 0x80) ? 0 : 255;   /* guess */
283   g = (m_palette_RAM[pal_index]   & 0xf0) << 0;
284   b = (m_palette_RAM[pal_index]   & 0x0f) << 4;
285   r = (m_palette_RAM[pal_index+1] & 0x0f) << 4;
286   a = (m_palette_RAM[pal_index+1] & 0x80) ? 0 : 255;   /* guess */
287287
288288   /* logerror("PAL WRITE index : %x  rgb : %d %d %d (real %x) at %x\n", pal_index, r,g,b, data, offset); */
289289
290   palette_set_color(space->machine(), (pal_index & 0xffe) >> 1, MAKE_ARGB(a, r, g, b));
290   palette_set_color(machine(), (pal_index & 0xffe) >> 1, MAKE_ARGB(a, r, g, b));
291291}
292292
293293/* PROGRAM MAP */
294294static ADDRESS_MAP_START( mainmem, AS_PROGRAM, 8, gpworld_state )
295295   AM_RANGE(0x0000,0xbfff) AM_ROM
296296   AM_RANGE(0xc000,0xc7ff) AM_RAM AM_BASE(m_sprite_RAM)
297   AM_RANGE(0xc800,0xcfff) AM_WRITE_LEGACY(palette_write) AM_BASE(m_palette_RAM)   /* The memory test reads at 0xc800 */
297   AM_RANGE(0xc800,0xcfff) AM_WRITE(palette_write) AM_BASE(m_palette_RAM)   /* The memory test reads at 0xc800 */
298298   AM_RANGE(0xd000,0xd7ff) AM_RAM AM_BASE(m_tile_RAM)
299   AM_RANGE(0xd800,0xd800) AM_READWRITE_LEGACY(ldp_read,ldp_write)
299   AM_RANGE(0xd800,0xd800) AM_READWRITE(ldp_read,ldp_write)
300300/*  AM_RANGE(0xd801,0xd801) AM_READ_LEGACY(???) */
301301   AM_RANGE(0xda00,0xda00) AM_READ_PORT("INWHEEL")   //8255 here....
302302/*  AM_RANGE(0xda01,0xda01) AM_WRITE_LEGACY(???) */               /* These inputs are interesting - there are writes and reads all over these addr's */
303   AM_RANGE(0xda02,0xda02) AM_WRITE_LEGACY(brake_gas_write)            /*bit 0 select gas/brake input */
304   AM_RANGE(0xda20,0xda20) AM_READ_LEGACY(pedal_in)
303   AM_RANGE(0xda02,0xda02) AM_WRITE(brake_gas_write)            /*bit 0 select gas/brake input */
304   AM_RANGE(0xda20,0xda20) AM_READ(pedal_in)
305305
306306   AM_RANGE(0xe000,0xffff) AM_RAM                        /* Potentially not all work RAM? */
307307ADDRESS_MAP_END
r14845r14846
310310/* I/O MAP */
311311static ADDRESS_MAP_START( mainport, AS_IO, 8, gpworld_state )
312312   ADDRESS_MAP_GLOBAL_MASK(0xff)
313   AM_RANGE(0x01,0x01) AM_WRITE_LEGACY(misc_io_write)
313   AM_RANGE(0x01,0x01) AM_WRITE(misc_io_write)
314314   AM_RANGE(0x80,0x80) AM_READ_PORT("IN0")
315315   AM_RANGE(0x81,0x81) AM_READ_PORT("IN1")
316316   AM_RANGE(0x82,0x82) AM_READ_PORT("DSW1")
src/mame/drivers/mw18w.c
r14845r14846
2525   mw18w_state(const machine_config &mconfig, device_type type, const char *tag)
2626      : driver_device(mconfig, type, tag) { }
2727
28   DECLARE_WRITE8_MEMBER(mw18w_sound0_w);
29   DECLARE_WRITE8_MEMBER(mw18w_sound1_w);
30   DECLARE_WRITE8_MEMBER(mw18w_lamps_w);
31   DECLARE_WRITE8_MEMBER(mw18w_led_display_w);
32   DECLARE_WRITE8_MEMBER(mw18w_irq0_clear_w);
2833};
2934
3035
31static WRITE8_HANDLER( mw18w_sound0_w )
36WRITE8_MEMBER(mw18w_state::mw18w_sound0_w)
3237{
3338   // sound write (airhorn, brake, crash) plus motor speed for backdrop, and coin counter
34   coin_counter_w(space->machine(), 0, data&1);
39   coin_counter_w(machine(), 0, data&1);
3540}
3641
37static WRITE8_HANDLER( mw18w_sound1_w )
42WRITE8_MEMBER(mw18w_state::mw18w_sound1_w)
3843{
3944   // sound write (bell, engine) plus lamp dim control for backdrop lamp
4045   ;
4146}
4247
43static WRITE8_HANDLER( mw18w_lamps_w )
48WRITE8_MEMBER(mw18w_state::mw18w_lamps_w)
4449{
4550   ;
4651}
4752
48static WRITE8_HANDLER( mw18w_led_display_w )
53WRITE8_MEMBER(mw18w_state::mw18w_led_display_w)
4954{
5055   // d0-3: 7448 (BCD to LED segment)
5156   const UINT8 ls48_map[16] =
r14845r14846
5661   output_set_digit_value(data>>4, ls48_map[data&0xf]);
5762}
5863
59static WRITE8_HANDLER( mw18w_irq0_clear_w )
64WRITE8_MEMBER(mw18w_state::mw18w_irq0_clear_w)
6065{
61   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
66   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
6267}
6368
6469static CUSTOM_INPUT( mw18w_sensors_r )
r14845r14846
7984static ADDRESS_MAP_START( mw18w_portmap, AS_IO, 8, mw18w_state )
8085   ADDRESS_MAP_UNMAP_HIGH
8186   ADDRESS_MAP_GLOBAL_MASK(0xff)
82   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE_LEGACY(mw18w_sound0_w)
83   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE_LEGACY(mw18w_sound1_w)
84   AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_WRITE_LEGACY(mw18w_lamps_w)
85   AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW") AM_WRITE_LEGACY(mw18w_led_display_w)
87   AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE(mw18w_sound0_w)
88   AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE(mw18w_sound1_w)
89   AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_WRITE(mw18w_lamps_w)
90   AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW") AM_WRITE(mw18w_led_display_w)
8691   AM_RANGE(0x04, 0x04) AM_READ_PORT("IN4")
8792   AM_RANGE(0x06, 0x06) AM_WRITE_LEGACY(watchdog_reset_w)
88   AM_RANGE(0x07, 0x07) AM_WRITE_LEGACY(mw18w_irq0_clear_w)
93   AM_RANGE(0x07, 0x07) AM_WRITE(mw18w_irq0_clear_w)
8994ADDRESS_MAP_END
9095
9196static const UINT32 mw18w_controller_table[] =
src/mame/drivers/jokrwild.c
r14845r14846
106106   UINT8 *m_videoram;
107107   UINT8 *m_colorram;
108108   tilemap_t *m_bg_tilemap;
109   DECLARE_WRITE8_MEMBER(jokrwild_videoram_w);
110   DECLARE_WRITE8_MEMBER(jokrwild_colorram_w);
111   DECLARE_READ8_MEMBER(rng_r);
109112};
110113
111114
r14845r14846
114117*************************/
115118
116119
117static WRITE8_HANDLER( jokrwild_videoram_w )
120WRITE8_MEMBER(jokrwild_state::jokrwild_videoram_w)
118121{
119   jokrwild_state *state = space->machine().driver_data<jokrwild_state>();
120   state->m_videoram[offset] = data;
121   state->m_bg_tilemap->mark_tile_dirty(offset);
122   m_videoram[offset] = data;
123   m_bg_tilemap->mark_tile_dirty(offset);
122124}
123125
124126
125static WRITE8_HANDLER( jokrwild_colorram_w )
127WRITE8_MEMBER(jokrwild_state::jokrwild_colorram_w)
126128{
127   jokrwild_state *state = space->machine().driver_data<jokrwild_state>();
128   state->m_colorram[offset] = data;
129   state->m_bg_tilemap->mark_tile_dirty(offset);
129   m_colorram[offset] = data;
130   m_bg_tilemap->mark_tile_dirty(offset);
130131}
131132
132133
r14845r14846
176177*    Read/Write  Handlers    *
177178*****************************/
178179
179static READ8_HANDLER( rng_r )
180READ8_MEMBER(jokrwild_state::rng_r)
180181{
181   if(cpu_get_pc(&space->device()) == 0xab32)
182   if(cpu_get_pc(&space.device()) == 0xab32)
182183      return (offset == 0) ? 0x9e : 0x27;
183184
184   if(cpu_get_pc(&space->device()) == 0xab3a)
185   if(cpu_get_pc(&space.device()) == 0xab3a)
185186      return (offset == 2) ? 0x49 : 0x92;
186187
187   return space->machine().rand() & 0xff;
188   return machine().rand() & 0xff;
188189}
189190
190191/*************************
r14845r14846
192193*************************/
193194
194195static ADDRESS_MAP_START( jokrwild_map, AS_PROGRAM, 8, jokrwild_state )
195   AM_RANGE(0x0000, 0x03ff) AM_RAM_WRITE_LEGACY(jokrwild_videoram_w) AM_BASE(m_videoram)
196   AM_RANGE(0x0000, 0x03ff) AM_RAM_WRITE(jokrwild_videoram_w) AM_BASE(m_videoram)
196197   AM_RANGE(0x0400, 0x07ff) AM_RAM //FIXME: backup RAM
197   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE_LEGACY(jokrwild_colorram_w) AM_BASE(m_colorram)
198   AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(jokrwild_colorram_w) AM_BASE(m_colorram)
198199   AM_RANGE(0x2400, 0x27ff) AM_RAM //stack RAM
199200   AM_RANGE(0x4004, 0x4007) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
200201   AM_RANGE(0x4008, 0x400b) AM_DEVREADWRITE("pia1", pia6821_device, read, write) //optical sensor is here
r14845r14846
202203   AM_RANGE(0x6000, 0x6000) AM_DEVWRITE("crtc", mc6845_device, address_w)
203204   AM_RANGE(0x6001, 0x6001) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
204205   AM_RANGE(0x6100, 0x6100) AM_READ_PORT("SW1")
205   AM_RANGE(0x6200, 0x6203) AM_READ_LEGACY(rng_r)//another PIA?
206   AM_RANGE(0x6200, 0x6203) AM_READ(rng_r)//another PIA?
206207   AM_RANGE(0x6300, 0x6300) AM_READ_PORT("SW2")
207208   AM_RANGE(0x8000, 0xffff) AM_ROM
208209ADDRESS_MAP_END
src/mame/drivers/ecoinf3.c
r14845r14846
88public:
99   ecoinf3_state(const machine_config &mconfig, device_type type, const char *tag)
1010      : driver_device(mconfig, type, tag) { }
11   DECLARE_WRITE8_MEMBER(py_port58_out_w);
1112};
1213
13static WRITE8_HANDLER( py_port58_out_w )
14WRITE8_MEMBER(ecoinf3_state::py_port58_out_w)
1415{
1516   // Watchdog?
1617}
r14845r14846
2324static ADDRESS_MAP_START( pyramid_portmap, AS_IO, 8, ecoinf3_state )
2425   ADDRESS_MAP_GLOBAL_MASK(0xff)
2526
26   AM_RANGE(0x58, 0x58) AM_WRITE_LEGACY(py_port58_out_w)
27   AM_RANGE(0x58, 0x58) AM_WRITE(py_port58_out_w)
2728ADDRESS_MAP_END
2829
2930/*
src/mame/drivers/imolagp.c
r14845r14846
113113   UINT8  m_videoram[3][0x4000];
114114
115115   required_device<cpu_device> m_maincpu;
116   DECLARE_WRITE8_MEMBER(transmit_data_w);
117   DECLARE_READ8_MEMBER(trigger_slave_nmi_r);
118   DECLARE_READ8_MEMBER(receive_data_r);
119   DECLARE_WRITE8_MEMBER(imola_ledram_w);
120   DECLARE_READ8_MEMBER(steerlatch_r);
121   DECLARE_WRITE8_MEMBER(screenram_w);
122   DECLARE_READ8_MEMBER(imola_slave_port05r);
123   DECLARE_READ8_MEMBER(imola_slave_port06r);
124   DECLARE_READ8_MEMBER(imola_slave_port81r);
125   DECLARE_READ8_MEMBER(imola_slave_port82r);
126   DECLARE_WRITE8_MEMBER(vreg_control_w);
127   DECLARE_WRITE8_MEMBER(vreg_data_w);
116128};
117129
118130
119131#ifdef HLE_COM
120132
121static WRITE8_HANDLER( transmit_data_w )
133WRITE8_MEMBER(imolagp_state::transmit_data_w)
122134{
123   imolagp_state *state = space->machine().driver_data<imolagp_state>();
124   state->m_mComData[state->m_mComCount++] = data;
135   m_mComData[m_mComCount++] = data;
125136}
126137
127static READ8_HANDLER( trigger_slave_nmi_r )
138READ8_MEMBER(imolagp_state::trigger_slave_nmi_r)
128139{
129140   return 0;
130141}
131142
132static READ8_HANDLER( receive_data_r )
143READ8_MEMBER(imolagp_state::receive_data_r)
133144{
134145   return 0;
135146}
r14845r14846
138149/* the master cpu transmits data to the slave CPU one word at a time using a rapid sequence of triggered NMIs
139150 * the slave cpu pauses as it enters its irq, awaiting this burst of data
140151 */
141static WRITE8_HANDLER( transmit_data_w )
152WRITE8_MEMBER(imolagp_state::transmit_data_w)
142153{
143   imolagp_state *state = space->machine().driver_data<imolagp_state>();
144   state->m_mLatchedData[offset] = data;
154   m_mLatchedData[offset] = data;
145155}
146static READ8_HANDLER( trigger_slave_nmi_r )
156READ8_MEMBER(imolagp_state::trigger_slave_nmi_r)
147157{
148   imolagp_state *state = space->machine().driver_data<imolagp_state>();
149   device_set_input_line(state->m_slave, INPUT_LINE_NMI, PULSE_LINE);
158   device_set_input_line(m_slave, INPUT_LINE_NMI, PULSE_LINE);
150159   return 0;
151160}
152161
153static READ8_HANDLER( receive_data_r )
162READ8_MEMBER(imolagp_state::receive_data_r)
154163{
155   imolagp_state *state = space->machine().driver_data<imolagp_state>();
156   return state->m_mLatchedData[offset];
164   return m_mLatchedData[offset];
157165}
158166#endif
159167
r14845r14846
229237   return 0;
230238}
231239
232static WRITE8_HANDLER( imola_ledram_w )
240WRITE8_MEMBER(imolagp_state::imola_ledram_w)
233241{
234242   data &= 0xf;
235243
r14845r14846
276284   }
277285}
278286
279static READ8_HANDLER( steerlatch_r )
287READ8_MEMBER(imolagp_state::steerlatch_r)
280288{
281   imolagp_state *state = space->machine().driver_data<imolagp_state>();
282   return state->m_steerlatch;
289   return m_steerlatch;
283290}
284291
285static WRITE8_HANDLER( screenram_w )
292WRITE8_MEMBER(imolagp_state::screenram_w)
286293{ /* ?! */
287   imolagp_state *state = space->machine().driver_data<imolagp_state>();
288   switch (state->m_draw_mode)
294   switch (m_draw_mode)
289295   {
290296   case 0x82:
291297   case 0x81:
292298   case 0x05:
293      state->m_videoram[1][offset] = data;
299      m_videoram[1][offset] = data;
294300      break;
295301   case 0x06:
296      state->m_videoram[0][offset] = data;
302      m_videoram[0][offset] = data;
297303      break;
298304   default:
299305      break;
300306   }
301307}
302308
303static READ8_HANDLER( imola_slave_port05r )
309READ8_MEMBER(imolagp_state::imola_slave_port05r)
304310{
305   imolagp_state *state = space->machine().driver_data<imolagp_state>();
306   memcpy(state->m_videoram[2], state->m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */
307   state->m_draw_mode = 0x05;
311   memcpy(m_videoram[2], m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */
312   m_draw_mode = 0x05;
308313   return 0;
309314}
310315
311static READ8_HANDLER( imola_slave_port06r )
316READ8_MEMBER(imolagp_state::imola_slave_port06r)
312317{
313   imolagp_state *state = space->machine().driver_data<imolagp_state>();
314   state->m_draw_mode = 0x06;
318   m_draw_mode = 0x06;
315319   return 0;
316320}
317321
318static READ8_HANDLER( imola_slave_port81r )
322READ8_MEMBER(imolagp_state::imola_slave_port81r)
319323{
320   imolagp_state *state = space->machine().driver_data<imolagp_state>();
321   state->m_draw_mode = 0x81;
322   memcpy(state->m_videoram[2], state->m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */
324   m_draw_mode = 0x81;
325   memcpy(m_videoram[2], m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */
323326   return 0;
324327}
325328
326static READ8_HANDLER( imola_slave_port82r )
329READ8_MEMBER(imolagp_state::imola_slave_port82r)
327330{
328   imolagp_state *state = space->machine().driver_data<imolagp_state>();
329   state->m_draw_mode = 0x82;
331   m_draw_mode = 0x82;
330332   return 0;
331333}
332334
333static WRITE8_HANDLER( vreg_control_w )
335WRITE8_MEMBER(imolagp_state::vreg_control_w)
334336{
335   imolagp_state *state = space->machine().driver_data<imolagp_state>();
336   state->m_control = data;
337   m_control = data;
337338}
338339
339static WRITE8_HANDLER( vreg_data_w )
340WRITE8_MEMBER(imolagp_state::vreg_data_w)
340341{
341   imolagp_state *state = space->machine().driver_data<imolagp_state>();
342   switch (state->m_control)
342   switch (m_control)
343343   {
344344   case 0x0e:
345      state->m_scroll = data;
345      m_scroll = data;
346346      break;
347347   case 0x07: /* always 0xff? */
348348   case 0x0f: /* 0xff or 0x00 */
349349   default:
350      logerror("vreg[0x%02x]:=0x%02x\n", state->m_control, data);
350      logerror("vreg[0x%02x]:=0x%02x\n", m_control, data);
351351      break;
352352   }
353353}
354354
355355static ADDRESS_MAP_START( readport_master, AS_IO, 8, imolagp_state )
356356   ADDRESS_MAP_GLOBAL_MASK(0xff)
357   AM_RANGE(0x00, 0x00) AM_READ_LEGACY(trigger_slave_nmi_r)
357   AM_RANGE(0x00, 0x00) AM_READ(trigger_slave_nmi_r)
358358ADDRESS_MAP_END
359359
360360static ADDRESS_MAP_START( imolagp_master, AS_PROGRAM, 8, imolagp_state )
361361   AM_RANGE(0x0000, 0x1fff) AM_ROM
362362   AM_RANGE(0x2000, 0x23ff) AM_RAM
363363   AM_RANGE(0x2800, 0x2800) AM_READ_PORT("2800")   /* gas */
364   AM_RANGE(0x2802, 0x2802) AM_READ_LEGACY(steerlatch_r) AM_WRITENOP
364   AM_RANGE(0x2802, 0x2802) AM_READ(steerlatch_r) AM_WRITENOP
365365   /*  AM_RANGE(0x2803, 0x2803) ? */
366   AM_RANGE(0x3000, 0x3000) AM_WRITE_LEGACY(vreg_control_w)
366   AM_RANGE(0x3000, 0x3000) AM_WRITE(vreg_control_w)
367367   AM_RANGE(0x37f0, 0x37f0) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
368368   /*  AM_RANGE(0x37f7, 0x37f7) ? */
369   AM_RANGE(0x3800, 0x3800) AM_WRITE_LEGACY(vreg_data_w)
369   AM_RANGE(0x3800, 0x3800) AM_WRITE(vreg_data_w)
370370   AM_RANGE(0x3810, 0x3810) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
371371   AM_RANGE(0x4000, 0x4000) AM_READ_PORT("DSWA")   /* DSWA */
372   AM_RANGE(0x5000, 0x50ff) AM_WRITE_LEGACY(imola_ledram_w)
373   AM_RANGE(0x47ff, 0x4800) AM_WRITE_LEGACY(transmit_data_w)
372   AM_RANGE(0x5000, 0x50ff) AM_WRITE(imola_ledram_w)
373   AM_RANGE(0x47ff, 0x4800) AM_WRITE(transmit_data_w)
374374   AM_RANGE(0x6000, 0x6000) AM_READ_PORT("DSWB")   /* DSWB */
375375ADDRESS_MAP_END
376376
377377static ADDRESS_MAP_START( readport_slave, AS_IO, 8, imolagp_state )
378378   ADDRESS_MAP_GLOBAL_MASK(0xff)
379   AM_RANGE(0x05,0x05) AM_READ_LEGACY(imola_slave_port05r)
380   AM_RANGE(0x06,0x06) AM_READ_LEGACY(imola_slave_port06r)
381   AM_RANGE(0x81,0x81) AM_READ_LEGACY(imola_slave_port81r)
382   AM_RANGE(0x82,0x82) AM_READ_LEGACY(imola_slave_port82r)
379   AM_RANGE(0x05,0x05) AM_READ(imola_slave_port05r)
380   AM_RANGE(0x06,0x06) AM_READ(imola_slave_port06r)
381   AM_RANGE(0x81,0x81) AM_READ(imola_slave_port81r)
382   AM_RANGE(0x82,0x82) AM_READ(imola_slave_port82r)
383383ADDRESS_MAP_END
384384
385385static ADDRESS_MAP_START( imolagp_slave, AS_PROGRAM, 8, imolagp_state )
r14845r14846
388388   AM_RANGE(0x1000, 0x13ff) AM_ROM
389389   AM_RANGE(0x1c00, 0x3fff) AM_ROM
390390   AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(m_slave_workram)
391   AM_RANGE(0x9fff, 0xa000) AM_READ_LEGACY(receive_data_r)
392   AM_RANGE(0xc000, 0xffff) AM_WRITE_LEGACY(screenram_w)
391   AM_RANGE(0x9fff, 0xa000) AM_READ(receive_data_r)
392   AM_RANGE(0xc000, 0xffff) AM_WRITE(screenram_w)
393393ADDRESS_MAP_END
394394
395395
src/mame/drivers/poker72.c
r14845r14846
2424   UINT8 *m_vram;
2525   UINT8 *m_pal;
2626   UINT8 m_tile_bank;
27   DECLARE_WRITE8_MEMBER(poker72_paletteram_w);
28   DECLARE_WRITE8_MEMBER(output_w);
29   DECLARE_WRITE8_MEMBER(tile_bank_w);
2730};
2831
2932
r14845r14846
5861   return 0;
5962}
6063
61static WRITE8_HANDLER( poker72_paletteram_w )
64WRITE8_MEMBER(poker72_state::poker72_paletteram_w)
6265{
63   poker72_state *state = space->machine().driver_data<poker72_state>();
6466   int r,g,b;
65   state->m_pal[offset] = data;
67   m_pal[offset] = data;
6668
67   r = state->m_pal[(offset & 0x3ff)+0x000] & 0x3f;
68   g = state->m_pal[(offset & 0x3ff)+0x400] & 0x3f;
69   b = state->m_pal[(offset & 0x3ff)+0x800] & 0x3f;
69   r = m_pal[(offset & 0x3ff)+0x000] & 0x3f;
70   g = m_pal[(offset & 0x3ff)+0x400] & 0x3f;
71   b = m_pal[(offset & 0x3ff)+0x800] & 0x3f;
7072
71   palette_set_color_rgb( space->machine(), offset & 0x3ff, pal6bit(r), pal6bit(g), pal6bit(b));
73   palette_set_color_rgb( machine(), offset & 0x3ff, pal6bit(r), pal6bit(g), pal6bit(b));
7274}
7375
74static WRITE8_HANDLER( output_w )
76WRITE8_MEMBER(poker72_state::output_w)
7577{
76   UINT8 *ROM = space->machine().region("maincpu")->base();
78   UINT8 *ROM = machine().region("maincpu")->base();
7779
7880   printf("%02x\n",data);
7981
8082/*  if((data & 0xc) == 0xc)
81        memory_set_bankptr(space->machine(), "bank1", &ROM[0x10000]);
83        memory_set_bankptr(machine(), "bank1", &ROM[0x10000]);
8284    else*/
8385   if(data & 8)
84      memory_set_bankptr(space->machine(), "bank1", &ROM[0x08000]);
86      memory_set_bankptr(machine(), "bank1", &ROM[0x08000]);
8587   else
86      memory_set_bankptr(space->machine(), "bank1", &ROM[0x00000]);
88      memory_set_bankptr(machine(), "bank1", &ROM[0x00000]);
8789}
8890
89static WRITE8_HANDLER( tile_bank_w )
91WRITE8_MEMBER(poker72_state::tile_bank_w)
9092{
91   poker72_state *state = space->machine().driver_data<poker72_state>();
92   state->m_tile_bank = (data & 4) >> 2;
93   m_tile_bank = (data & 4) >> 2;
9394}
9495
9596static ADDRESS_MAP_START( poker72_map, AS_PROGRAM, 8, poker72_state )
9697   AM_RANGE(0x0000, 0xbfff) AM_ROMBANK("bank1")
9798   AM_RANGE(0xc000, 0xdfff) AM_RAM //work ram
9899   AM_RANGE(0xe000, 0xefff) AM_RAM AM_BASE(m_vram)
99   AM_RANGE(0xf000, 0xfbff) AM_RAM_WRITE_LEGACY(poker72_paletteram_w) AM_BASE(m_pal)
100   AM_RANGE(0xf000, 0xfbff) AM_RAM_WRITE(poker72_paletteram_w) AM_BASE(m_pal)
100101   AM_RANGE(0xfc00, 0xfdff) AM_RAM //???
101102   AM_RANGE(0xfe08, 0xfe08) AM_READ_PORT("IN0")
102103   AM_RANGE(0xfe09, 0xfe09) AM_READ_PORT("IN1")
r14845r14846
106107   AM_RANGE(0xfe0e, 0xfe0e) AM_READ_PORT("IN5")
107108
108109   AM_RANGE(0xfe17, 0xfe17) AM_READNOP //irq ack
109   AM_RANGE(0xfe20, 0xfe20) AM_WRITE_LEGACY(output_w) //output, irq enable?
110   AM_RANGE(0xfe22, 0xfe22) AM_WRITE_LEGACY(tile_bank_w)
110   AM_RANGE(0xfe20, 0xfe20) AM_WRITE(output_w) //output, irq enable?
111   AM_RANGE(0xfe22, 0xfe22) AM_WRITE(tile_bank_w)
111112   AM_RANGE(0xfe40, 0xfe40) AM_DEVREADWRITE_LEGACY("ay", ay8910_r, ay8910_data_w)
112113   AM_RANGE(0xfe60, 0xfe60) AM_DEVWRITE_LEGACY("ay", ay8910_address_w)
113114ADDRESS_MAP_END
src/mame/drivers/umipoker.c
r14845r14846
3838   tilemap_t *m_tilemap_3;
3939   UINT8 *m_z80_wram;
4040   int m_umipoker_scrolly[4];
41   DECLARE_READ8_MEMBER(z80_rom_readback_r);
42   DECLARE_READ8_MEMBER(z80_shared_ram_r);
43   DECLARE_WRITE8_MEMBER(z80_shared_ram_w);
44   DECLARE_WRITE16_MEMBER(umipoker_irq_ack_w);
45   DECLARE_WRITE16_MEMBER(umipoker_scrolly_0_w);
46   DECLARE_WRITE16_MEMBER(umipoker_scrolly_1_w);
47   DECLARE_WRITE16_MEMBER(umipoker_scrolly_2_w);
48   DECLARE_WRITE16_MEMBER(umipoker_scrolly_3_w);
49   DECLARE_WRITE16_MEMBER(umipoker_vram_0_w);
50   DECLARE_WRITE16_MEMBER(umipoker_vram_1_w);
51   DECLARE_WRITE16_MEMBER(umipoker_vram_2_w);
52   DECLARE_WRITE16_MEMBER(umipoker_vram_3_w);
53   DECLARE_WRITE16_MEMBER(lamps_w);
54   DECLARE_WRITE16_MEMBER(umi_counters_w);
55   DECLARE_WRITE16_MEMBER(saiyu_counters_w);
4156};
4257
4358static TILE_GET_INFO( get_tile_info_0 )
r14845r14846
127142   return 0;
128143}
129144
130static READ8_HANDLER( z80_rom_readback_r )
145READ8_MEMBER(umipoker_state::z80_rom_readback_r)
131146{
132   UINT8 *ROM = space->machine().region("audiocpu")->base();
147   UINT8 *ROM = machine().region("audiocpu")->base();
133148
134149   return ROM[offset];
135150}
136151
137static READ8_HANDLER( z80_shared_ram_r )
152READ8_MEMBER(umipoker_state::z80_shared_ram_r)
138153{
139   umipoker_state *state = space->machine().driver_data<umipoker_state>();
140154
141   space->machine().scheduler().synchronize(); // force resync
155   machine().scheduler().synchronize(); // force resync
142156
143   return state->m_z80_wram[offset];
157   return m_z80_wram[offset];
144158}
145159
146static WRITE8_HANDLER( z80_shared_ram_w )
160WRITE8_MEMBER(umipoker_state::z80_shared_ram_w)
147161{
148   umipoker_state *state = space->machine().driver_data<umipoker_state>();
149162
150   space->machine().scheduler().synchronize(); // force resync
163   machine().scheduler().synchronize(); // force resync
151164
152   state->m_z80_wram[offset] = data;
165   m_z80_wram[offset] = data;
153166}
154167
155static WRITE16_HANDLER( umipoker_irq_ack_w )
168WRITE16_MEMBER(umipoker_state::umipoker_irq_ack_w)
156169{
157   cputag_set_input_line(space->machine(), "maincpu", 6, CLEAR_LINE);
170   cputag_set_input_line(machine(), "maincpu", 6, CLEAR_LINE);
158171
159172   /* shouldn't happen */
160173   if(data)
161174      popmessage("%04x IRQ ACK, contact MAMEdev",data);
162175}
163176
164static WRITE16_HANDLER( umipoker_scrolly_0_w ) { umipoker_state *state = space->machine().driver_data<umipoker_state>(); COMBINE_DATA(&state->m_umipoker_scrolly[0]); }
165static WRITE16_HANDLER( umipoker_scrolly_1_w ) { umipoker_state *state = space->machine().driver_data<umipoker_state>(); COMBINE_DATA(&state->m_umipoker_scrolly[1]); }
166static WRITE16_HANDLER( umipoker_scrolly_2_w ) { umipoker_state *state = space->machine().driver_data<umipoker_state>(); COMBINE_DATA(&state->m_umipoker_scrolly[2]); }
167static WRITE16_HANDLER( umipoker_scrolly_3_w ) { umipoker_state *state = space->machine().driver_data<umipoker_state>(); COMBINE_DATA(&state->m_umipoker_scrolly[3]); }
177WRITE16_MEMBER(umipoker_state::umipoker_scrolly_0_w){ COMBINE_DATA(&m_umipoker_scrolly[0]); }
178WRITE16_MEMBER(umipoker_state::umipoker_scrolly_1_w){ COMBINE_DATA(&m_umipoker_scrolly[1]); }
179WRITE16_MEMBER(umipoker_state::umipoker_scrolly_2_w){ COMBINE_DATA(&m_umipoker_scrolly[2]); }
180WRITE16_MEMBER(umipoker_state::umipoker_scrolly_3_w){ COMBINE_DATA(&m_umipoker_scrolly[3]); }
168181
169static WRITE16_HANDLER( umipoker_vram_0_w )
182WRITE16_MEMBER(umipoker_state::umipoker_vram_0_w)
170183{
171   umipoker_state *state = space->machine().driver_data<umipoker_state>();
172184
173   COMBINE_DATA(&state->m_vram_0[offset]);
174   state->m_tilemap_0->mark_tile_dirty(offset >> 1);
185   COMBINE_DATA(&m_vram_0[offset]);
186   m_tilemap_0->mark_tile_dirty(offset >> 1);
175187}
176188
177static WRITE16_HANDLER( umipoker_vram_1_w )
189WRITE16_MEMBER(umipoker_state::umipoker_vram_1_w)
178190{
179   umipoker_state *state = space->machine().driver_data<umipoker_state>();
180191
181   COMBINE_DATA(&state->m_vram_1[offset]);
182   state->m_tilemap_1->mark_tile_dirty(offset >> 1);
192   COMBINE_DATA(&m_vram_1[offset]);
193   m_tilemap_1->mark_tile_dirty(offset >> 1);
183194}
184195
185196
186static WRITE16_HANDLER( umipoker_vram_2_w )
197WRITE16_MEMBER(umipoker_state::umipoker_vram_2_w)
187198{
188   umipoker_state *state = space->machine().driver_data<umipoker_state>();
189199
190   COMBINE_DATA(&state->m_vram_2[offset]);
191   state->m_tilemap_2->mark_tile_dirty(offset >> 1);
200   COMBINE_DATA(&m_vram_2[offset]);
201   m_tilemap_2->mark_tile_dirty(offset >> 1);
192202}
193203
194static WRITE16_HANDLER( umipoker_vram_3_w )
204WRITE16_MEMBER(umipoker_state::umipoker_vram_3_w)
195205{
196   umipoker_state *state = space->machine().driver_data<umipoker_state>();
197206
198   COMBINE_DATA(&state->m_vram_3[offset]);
199   state->m_tilemap_3->mark_tile_dirty(offset >> 1);
207   COMBINE_DATA(&m_vram_3[offset]);
208   m_tilemap_3->mark_tile_dirty(offset >> 1);
200209}
201210
202static WRITE16_HANDLER( lamps_w )
211WRITE16_MEMBER(umipoker_state::lamps_w)
203212{
204213/*
205214  Umipoker buttons layout:
r14845r14846
248257   output_set_lamp_value(5, (data >> 13) & 1);      /* Lamp 5 - START */
249258}
250259
251static WRITE16_HANDLER( umi_counters_w )
260WRITE16_MEMBER(umipoker_state::umi_counters_w)
252261{/*
253262  0x0000 - Normal State (lamps off).
254263  0x0001 - Payout pulse.
r14845r14846
264273  xxxx xxxx x--x xxx-  Unknown / Not used.
265274
266275*/
267   coin_counter_w(space->machine(), 0, data & 0x20);   /* COIN 1 */
268   coin_counter_w(space->machine(), 1, data & 0x40);   /* COIN 2 */
269   coin_counter_w(space->machine(), 2, data & 0x01);   /* PAYOUT */
276   coin_counter_w(machine(), 0, data & 0x20);   /* COIN 1 */
277   coin_counter_w(machine(), 1, data & 0x40);   /* COIN 2 */
278   coin_counter_w(machine(), 2, data & 0x01);   /* PAYOUT */
270279}
271280
272static WRITE16_HANDLER( saiyu_counters_w )
281WRITE16_MEMBER(umipoker_state::saiyu_counters_w)
273282{
274283/*
275284  0x0000 - Normal State (lamps off).
r14845r14846
286295  x--x xxx- xxxx xxxx  Unknown / Not used.
287296
288297*/
289   coin_counter_w(space->machine(), 0, data & 0x2000);   /* COIN 1 */
290   coin_counter_w(space->machine(), 1, data & 0x4000);   /* COIN 2 */
291   coin_counter_w(space->machine(), 2, data & 0x0100);   /* PAYOUT */
298   coin_counter_w(machine(), 0, data & 0x2000);   /* COIN 1 */
299   coin_counter_w(machine(), 1, data & 0x4000);   /* COIN 2 */
300   coin_counter_w(machine(), 2, data & 0x0100);   /* PAYOUT */
292301}
293302
294303
r14845r14846
297306   AM_RANGE(0x000000, 0x03ffff) AM_ROM
298307   AM_RANGE(0x400000, 0x403fff) AM_RAM AM_SHARE("nvram")
299308   AM_RANGE(0x600000, 0x6007ff) AM_RAM_WRITE_LEGACY(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)   // Palette
300   AM_RANGE(0x800000, 0x801fff) AM_RAM_WRITE_LEGACY(umipoker_vram_0_w) AM_BASE(m_vram_0)
301   AM_RANGE(0x802000, 0x803fff) AM_RAM_WRITE_LEGACY(umipoker_vram_1_w) AM_BASE(m_vram_1)
302   AM_RANGE(0x804000, 0x805fff) AM_RAM_WRITE_LEGACY(umipoker_vram_2_w) AM_BASE(m_vram_2)
303   AM_RANGE(0x806000, 0x807fff) AM_RAM_WRITE_LEGACY(umipoker_vram_3_w) AM_BASE(m_vram_3)
304   AM_RANGE(0xc00000, 0xc0ffff) AM_READ8_LEGACY(z80_rom_readback_r,0x00ff)
305   AM_RANGE(0xc1f000, 0xc1ffff) AM_READWRITE8_LEGACY(z80_shared_ram_r,z80_shared_ram_w,0x00ff)
309   AM_RANGE(0x800000, 0x801fff) AM_RAM_WRITE(umipoker_vram_0_w) AM_BASE(m_vram_0)
310   AM_RANGE(0x802000, 0x803fff) AM_RAM_WRITE(umipoker_vram_1_w) AM_BASE(m_vram_1)
311   AM_RANGE(0x804000, 0x805fff) AM_RAM_WRITE(umipoker_vram_2_w) AM_BASE(m_vram_2)
312   AM_RANGE(0x806000, 0x807fff) AM_RAM_WRITE(umipoker_vram_3_w) AM_BASE(m_vram_3)
313   AM_RANGE(0xc00000, 0xc0ffff) AM_READ8(z80_rom_readback_r,0x00ff)
314   AM_RANGE(0xc1f000, 0xc1ffff) AM_READWRITE8(z80_shared_ram_r,z80_shared_ram_w,0x00ff)
306315   AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("IN0")
307316   AM_RANGE(0xe00004, 0xe00005) AM_READ_PORT("IN1") // unused?
308317   AM_RANGE(0xe00008, 0xe00009) AM_READ_PORT("IN2")
309//  AM_RANGE(0xe0000c, 0xe0000d) AM_WRITE_LEGACY(lamps_w) -----> lamps only for saiyukip.
318//  AM_RANGE(0xe0000c, 0xe0000d) AM_WRITE(lamps_w) -----> lamps only for saiyukip.
310319//  AM_RANGE(0xe00010, 0xe00011) AM_WRITE_LEGACY(counters_w) --> coin counters for both games.
311320   AM_RANGE(0xe00014, 0xe00015) AM_READ_PORT("DSW1-2")
312321   AM_RANGE(0xe00018, 0xe00019) AM_READ_PORT("DSW3-4")
313   AM_RANGE(0xe00020, 0xe00021) AM_WRITE_LEGACY(umipoker_scrolly_0_w)
314   AM_RANGE(0xe00022, 0xe00023) AM_WRITE_LEGACY(umipoker_irq_ack_w)
315   AM_RANGE(0xe00026, 0xe00027) AM_WRITE_LEGACY(umipoker_scrolly_2_w)
316   AM_RANGE(0xe0002a, 0xe0002b) AM_WRITE_LEGACY(umipoker_scrolly_1_w)
322   AM_RANGE(0xe00020, 0xe00021) AM_WRITE(umipoker_scrolly_0_w)
323   AM_RANGE(0xe00022, 0xe00023) AM_WRITE(umipoker_irq_ack_w)
324   AM_RANGE(0xe00026, 0xe00027) AM_WRITE(umipoker_scrolly_2_w)
325   AM_RANGE(0xe0002a, 0xe0002b) AM_WRITE(umipoker_scrolly_1_w)
317326   AM_RANGE(0xe0002c, 0xe0002d) AM_WRITENOP // unknown meaning, bit 0 goes from 0 -> 1 on IRQ service routine
318   AM_RANGE(0xe0002e, 0xe0002f) AM_WRITE_LEGACY(umipoker_scrolly_3_w)
327   AM_RANGE(0xe0002e, 0xe0002f) AM_WRITE(umipoker_scrolly_3_w)
319328ADDRESS_MAP_END
320329
321330static ADDRESS_MAP_START( umipoker_audio_map, AS_PROGRAM, 8, umipoker_state )
322331   AM_RANGE(0x0000, 0x7fff) AM_ROM
323   AM_RANGE(0xf800, 0xffff) AM_READWRITE_LEGACY(z80_shared_ram_r,z80_shared_ram_w) AM_BASE(m_z80_wram)
332   AM_RANGE(0xf800, 0xffff) AM_READWRITE(z80_shared_ram_r,z80_shared_ram_w) AM_BASE(m_z80_wram)
324333ADDRESS_MAP_END
325334
326335static ADDRESS_MAP_START( umipoker_audio_io_map, AS_IO, 8, umipoker_state )
r14845r14846
734743
735744static DRIVER_INIT( umipoker )
736745{
737   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe00010, 0xe00011, FUNC(umi_counters_w) );
746   umipoker_state *state = machine.driver_data<umipoker_state>();
747   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe00010, 0xe00011, write16_delegate(FUNC(umipoker_state::umi_counters_w), state));
738748}
739749
740750static DRIVER_INIT( saiyukip )
741751{
742   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe00010, 0xe00011, FUNC(saiyu_counters_w) );
743   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe0000c, 0xe0000d, FUNC(lamps_w) );
752   umipoker_state *state = machine.driver_data<umipoker_state>();
753   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe00010, 0xe00011, write16_delegate(FUNC(umipoker_state::saiyu_counters_w), state));
754   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe0000c, 0xe0000d, write16_delegate(FUNC(umipoker_state::lamps_w), state));
744755}
745756
746757
src/mame/drivers/wldarrow.c
r14845r14846
3535   UINT8 *m_videoram_1;
3636   UINT8 *m_videoram_2;
3737   size_t m_videoram_size;
38   DECLARE_WRITE8_MEMBER(lights_1_w);
39   DECLARE_WRITE8_MEMBER(lights_2_w);
40   DECLARE_WRITE8_MEMBER(counter_w);
3841};
3942
4043
r14845r14846
110113 *
111114 *************************************/
112115
113static WRITE8_HANDLER( lights_1_w )
116WRITE8_MEMBER(wldarrow_state::lights_1_w)
114117{
115118   /* not sure how it is hooked up */
116119}
117120
118121
119static WRITE8_HANDLER( lights_2_w )
122WRITE8_MEMBER(wldarrow_state::lights_2_w)
120123{
121124   /* not sure how it is hooked up */
122125}
123126
124127
125static WRITE8_HANDLER( counter_w )
128WRITE8_MEMBER(wldarrow_state::counter_w)
126129{
127   coin_counter_w(space->machine(), 0, data);
130   coin_counter_w(machine(), 0, data);
128131}
129132
130133
r14845r14846
179182   AM_RANGE(0x8000, 0x9fff) AM_RAM AM_BASE(m_videoram_2)
180183   AM_RANGE(0xcd00, 0xcdff) AM_RAM AM_SHARE("nvram")
181184   AM_RANGE(0xf000, 0xf000) AM_READ_PORT("BITSW") AM_DEVWRITE_LEGACY("dac", wldarrow_dac_1_w)
182   AM_RANGE(0xf004, 0xf004) AM_READ_PORT("IN1") AM_WRITE_LEGACY(lights_1_w)
183   AM_RANGE(0xf006, 0xf006) AM_READ_PORT("IN2") AM_WRITE_LEGACY(lights_2_w)
184   AM_RANGE(0xf008, 0xf008) AM_WRITE_LEGACY(counter_w)
185   AM_RANGE(0xf004, 0xf004) AM_READ_PORT("IN1") AM_WRITE(lights_1_w)
186   AM_RANGE(0xf006, 0xf006) AM_READ_PORT("IN2") AM_WRITE(lights_2_w)
187   AM_RANGE(0xf008, 0xf008) AM_WRITE(counter_w)
185188   AM_RANGE(0xf00f, 0xf00f) AM_DEVWRITE_LEGACY("dac", wldarrow_dac_2_w)
186189   AM_RANGE(0xf0f0, 0xf0f0) AM_DEVWRITE_LEGACY("dac", wldarrow_dac_3_w)
187190   AM_RANGE(0xf0ff, 0xf0ff) AM_DEVWRITE_LEGACY("dac", wldarrow_dac_4_w)
src/mame/drivers/hotblock.c
r14845r14846
6060
6161   /* memory */
6262   UINT8    m_pal[0x10000];
63   DECLARE_READ8_MEMBER(hotblock_video_read);
64   DECLARE_READ8_MEMBER(hotblock_port4_r);
65   DECLARE_WRITE8_MEMBER(hotblock_port4_w);
66   DECLARE_WRITE8_MEMBER(hotblock_port0_w);
67   DECLARE_WRITE8_MEMBER(hotblock_video_write);
6368};
6469
6570
6671
67static READ8_HANDLER( hotblock_video_read )
72READ8_MEMBER(hotblock_state::hotblock_video_read)
6873{
69   hotblock_state *state = space->machine().driver_data<hotblock_state>();
7074   /* right?, anything else?? */
71   if (state->m_port0 & 0x20) // port 0 = a8 e8 -- palette
75   if (m_port0 & 0x20) // port 0 = a8 e8 -- palette
7276   {
73      return state->m_pal[offset];
77      return m_pal[offset];
7478   }
7579   else // port 0 = 88 c8
7680   {
77      return state->m_vram[offset];
81      return m_vram[offset];
7882   }
7983}
8084
8185/* port 4 is some kind of eeprom / storage .. used to store the scores */
82static READ8_HANDLER( hotblock_port4_r )
86READ8_MEMBER(hotblock_state::hotblock_port4_r)
8387{
8488//  mame_printf_debug("port4_r\n");
8589   return 0x00;
8690}
8791
8892
89static WRITE8_HANDLER( hotblock_port4_w )
93WRITE8_MEMBER(hotblock_state::hotblock_port4_w)
9094{
91//  mame_printf_debug("port4_w: pc = %06x : data %04x\n", cpu_get_pc(&space->device()), data);
92//  popmessage("port4_w: pc = %06x : data %04x", cpu_get_pc(&space->device()), data);
93   hotblock_state *state = space->machine().driver_data<hotblock_state>();
94   state->m_port4 = data;
95//  mame_printf_debug("port4_w: pc = %06x : data %04x\n", cpu_get_pc(&space.device()), data);
96//  popmessage("port4_w: pc = %06x : data %04x", cpu_get_pc(&space.device()), data);
97
98   m_port4 = data;
9599}
96100
97101
98102
99static WRITE8_HANDLER( hotblock_port0_w )
103WRITE8_MEMBER(hotblock_state::hotblock_port0_w)
100104{
101//  popmessage("port4_w: pc = %06x : data %04x", cpu_get_pc(&space->device()), data);
102   hotblock_state *state = space->machine().driver_data<hotblock_state>();
103   state->m_port0 = data;
105//  popmessage("port4_w: pc = %06x : data %04x", cpu_get_pc(&space.device()), data);
106
107   m_port0 = data;
104108}
105109
106static WRITE8_HANDLER( hotblock_video_write )
110WRITE8_MEMBER(hotblock_state::hotblock_video_write)
107111{
108   hotblock_state *state = space->machine().driver_data<hotblock_state>();
109112   /* right?, anything else?? */
110   if (state->m_port0 & 0x20) // port 0 = a8 e8 -- palette
113   if (m_port0 & 0x20) // port 0 = a8 e8 -- palette
111114   {
112      state->m_pal[offset] = data;
115      m_pal[offset] = data;
113116   }
114117   else // port 0 = 88 c8
115118   {
116      state->m_vram[offset] = data;
119      m_vram[offset] = data;
117120   }
118121}
119122
120123static ADDRESS_MAP_START( hotblock_map, AS_PROGRAM, 8, hotblock_state )
121124   AM_RANGE(0x00000, 0x0ffff) AM_RAM
122   AM_RANGE(0x10000, 0x1ffff) AM_READWRITE_LEGACY(hotblock_video_read, hotblock_video_write) AM_BASE(m_vram)
125   AM_RANGE(0x10000, 0x1ffff) AM_READWRITE(hotblock_video_read, hotblock_video_write) AM_BASE(m_vram)
123126   AM_RANGE(0x20000, 0xfffff) AM_ROM
124127ADDRESS_MAP_END
125128
126129static ADDRESS_MAP_START( hotblock_io, AS_IO, 8, hotblock_state )
127   AM_RANGE(0x0000, 0x0000) AM_WRITE_LEGACY(hotblock_port0_w)
128   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(hotblock_port4_r, hotblock_port4_w)
130   AM_RANGE(0x0000, 0x0000) AM_WRITE(hotblock_port0_w)
131   AM_RANGE(0x0004, 0x0004) AM_READWRITE(hotblock_port4_r, hotblock_port4_w)
129132   AM_RANGE(0x8000, 0x8001) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w)
130133   AM_RANGE(0x8001, 0x8001) AM_DEVREAD_LEGACY("aysnd", ay8910_r)
131134ADDRESS_MAP_END
src/mame/drivers/nwk-tr.c
r14845r14846
240240   int m_lanc2_ram_w;
241241   UINT8 *m_lanc2_ram;
242242   UINT32 *m_sharc_dataram;
243   DECLARE_WRITE32_MEMBER(paletteram32_w);
244   DECLARE_READ32_MEMBER(sysreg_r);
245   DECLARE_WRITE32_MEMBER(sysreg_w);
246   DECLARE_READ32_MEMBER(lanc1_r);
247   DECLARE_WRITE32_MEMBER(lanc1_w);
248   DECLARE_READ32_MEMBER(lanc2_r);
249   DECLARE_WRITE32_MEMBER(lanc2_w);
250   DECLARE_READ32_MEMBER(dsp_dataram_r);
251   DECLARE_WRITE32_MEMBER(dsp_dataram_w);
243252};
244253
245254
246255
247256
248257
249static WRITE32_HANDLER( paletteram32_w )
258WRITE32_MEMBER(nwktr_state::paletteram32_w)
250259{
251   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
252   data = space->machine().generic.paletteram.u32[offset];
253   palette_set_color_rgb(space->machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
260   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
261   data = machine().generic.paletteram.u32[offset];
262   palette_set_color_rgb(machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
254263}
255264
256265static void voodoo_vblank_0(device_t *device, int param)
r14845r14846
278287
279288/*****************************************************************************/
280289
281static READ32_HANDLER( sysreg_r )
290READ32_MEMBER(nwktr_state::sysreg_r)
282291{
283   device_t *adc12138 = space->machine().device("adc12138");
292   device_t *adc12138 = machine().device("adc12138");
284293   UINT32 r = 0;
285294   if (offset == 0)
286295   {
287296      if (ACCESSING_BITS_24_31)
288297      {
289         r |= input_port_read(space->machine(), "IN0") << 24;
298         r |= input_port_read(machine(), "IN0") << 24;
290299      }
291300      if (ACCESSING_BITS_16_23)
292301      {
293         r |= input_port_read(space->machine(), "IN1") << 16;
302         r |= input_port_read(machine(), "IN1") << 16;
294303      }
295304      if (ACCESSING_BITS_8_15)
296305      {
297         r |= input_port_read(space->machine(), "IN2") << 8;
306         r |= input_port_read(machine(), "IN2") << 8;
298307      }
299308      if (ACCESSING_BITS_0_7)
300309      {
r14845r14846
305314   {
306315      if (ACCESSING_BITS_24_31)
307316      {
308         r |= input_port_read(space->machine(), "DSW") << 24;
317         r |= input_port_read(machine(), "DSW") << 24;
309318      }
310319   }
311320   return r;
312321}
313322
314static WRITE32_HANDLER( sysreg_w )
323WRITE32_MEMBER(nwktr_state::sysreg_w)
315324{
316   nwktr_state *state = space->machine().driver_data<nwktr_state>();
317   device_t *adc12138 = space->machine().device("adc12138");
325   device_t *adc12138 = machine().device("adc12138");
318326   if( offset == 0 )
319327   {
320328      if (ACCESSING_BITS_24_31)
321329      {
322         state->m_led_reg0 = (data >> 24) & 0xff;
330         m_led_reg0 = (data >> 24) & 0xff;
323331      }
324332      if (ACCESSING_BITS_16_23)
325333      {
326         state->m_led_reg1 = (data >> 16) & 0xff;
334         m_led_reg1 = (data >> 16) & 0xff;
327335      }
328336      return;
329337   }
r14845r14846
345353      {
346354         if (data & 0x80)   // CG Board 1 IRQ Ack
347355         {
348            //cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
356            //cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
349357         }
350358         if (data & 0x40)   // CG Board 0 IRQ Ack
351359         {
352            //cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
360            //cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
353361         }
354362      }
355363      return;
r14845r14846
366374   state->m_lanc2_ram = auto_alloc_array(machine, UINT8, 0x8000);
367375}
368376
369static READ32_HANDLER( lanc1_r )
377READ32_MEMBER(nwktr_state::lanc1_r)
370378{
371   nwktr_state *state = space->machine().driver_data<nwktr_state>();
372379   switch (offset)
373380   {
374381      case 0x40/4:
375382      {
376383         UINT32 r = 0;
377384
378         r |= (state->m_fpga_uploaded) ? (1 << 6) : 0;
385         r |= (m_fpga_uploaded) ? (1 << 6) : 0;
379386         r |= 1 << 5;
380387
381388         return (r) << 24;
r14845r14846
383390
384391      default:
385392      {
386         //printf("lanc1_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space->device()));
393         //printf("lanc1_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space.device()));
387394         return 0xffffffff;
388395      }
389396   }
390397}
391398
392static WRITE32_HANDLER( lanc1_w )
399WRITE32_MEMBER(nwktr_state::lanc1_w)
393400{
394   //printf("lanc1_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space->device()));
401   //printf("lanc1_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space.device()));
395402}
396403
397static READ32_HANDLER( lanc2_r )
404READ32_MEMBER(nwktr_state::lanc2_r)
398405{
399   nwktr_state *state = space->machine().driver_data<nwktr_state>();
400406   UINT32 r = 0;
401407
402408   if (offset == 0)
403409   {
404410      if (ACCESSING_BITS_0_7)
405411      {
406         r |= state->m_lanc2_ram[state->m_lanc2_ram_r & 0x7fff];
407         state->m_lanc2_ram_r++;
412         r |= m_lanc2_ram[m_lanc2_ram_r & 0x7fff];
413         m_lanc2_ram_r++;
408414      }
409415      else
410416      {
r14845r14846
420426      }
421427   }
422428
423   //printf("lanc2_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space->device()));
429   //printf("lanc2_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space.device()));
424430
425431   return r;
426432}
427433
428static WRITE32_HANDLER( lanc2_w )
434WRITE32_MEMBER(nwktr_state::lanc2_w)
429435{
430   nwktr_state *state = space->machine().driver_data<nwktr_state>();
431436   if (offset == 0)
432437   {
433438      if (ACCESSING_BITS_24_31)
r14845r14846
443448               ((value << 5) & 0x40) |
444449               ((value << 7) & 0x80);
445450
446         state->m_fpga_uploaded = 1;
451         m_fpga_uploaded = 1;
447452
448         //printf("lanc2_fpga_w: %02X at %08X\n", value, cpu_get_pc(&space->device()));
453         //printf("lanc2_fpga_w: %02X at %08X\n", value, cpu_get_pc(&space.device()));
449454      }
450455      else if (ACCESSING_BITS_0_7)
451456      {
452         state->m_lanc2_ram[state->m_lanc2_ram_w & 0x7fff] = data & 0xff;
453         state->m_lanc2_ram_w++;
457         m_lanc2_ram[m_lanc2_ram_w & 0x7fff] = data & 0xff;
458         m_lanc2_ram_w++;
454459      }
455460      else
456461      {
457         //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space->device()));
462         //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space.device()));
458463      }
459464   }
460465   if (offset == 4)
461466   {
462      if (mame_stricmp(space->machine().system().name, "thrilld") == 0)
467      if (mame_stricmp(machine().system().name, "thrilld") == 0)
463468      {
464         state->m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731;
465         state->m_work_ram[(0x3ffed0/4) + 1] = 0x33202020;
466         state->m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a;
467         state->m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878;
469         m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731;
470         m_work_ram[(0x3ffed0/4) + 1] = 0x33202020;
471         m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a;
472         m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878;
468473
469         state->m_work_ram[(0x3fff40/4) + 0] = 0x47433731;
470         state->m_work_ram[(0x3fff40/4) + 1] = 0x33000000;
471         state->m_work_ram[(0x3fff40/4) + 2] = 0x19994a41;
472         state->m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1;
474         m_work_ram[(0x3fff40/4) + 0] = 0x47433731;
475         m_work_ram[(0x3fff40/4) + 1] = 0x33000000;
476         m_work_ram[(0x3fff40/4) + 2] = 0x19994a41;
477         m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1;
473478      }
474479   }
475480
476   //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space->device()));
481   //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space.device()));
477482}
478483
479484/*****************************************************************************/
r14845r14846
491496static ADDRESS_MAP_START( nwktr_map, AS_PROGRAM, 32, nwktr_state )
492497   AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(m_work_ram)      /* Work RAM */
493498   AM_RANGE(0x74000000, 0x740000ff) AM_DEVREADWRITE_LEGACY("k001604", k001604_reg_r, k001604_reg_w)
494   AM_RANGE(0x74010000, 0x74017fff) AM_RAM_WRITE_LEGACY(paletteram32_w) AM_BASE_GENERIC(paletteram)
499   AM_RANGE(0x74010000, 0x74017fff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
495500   AM_RANGE(0x74020000, 0x7403ffff) AM_DEVREADWRITE_LEGACY("k001604", k001604_tile_r, k001604_tile_w)
496501   AM_RANGE(0x74040000, 0x7407ffff) AM_DEVREADWRITE_LEGACY("k001604", k001604_char_r, k001604_char_w)
497502   AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE_LEGACY(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc)
498503   AM_RANGE(0x780c0000, 0x780c0003) AM_READWRITE_LEGACY(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc)
499   AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ_LEGACY(sysreg_r)
500   AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE_LEGACY(sysreg_w)
504   AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ(sysreg_r)
505   AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE(sysreg_w)
501506   AM_RANGE(0x7d020000, 0x7d021fff) AM_DEVREADWRITE8_LEGACY("m48t58", timekeeper_r, timekeeper_w, 0xffffffff)   /* M48T58Y RTC/NVRAM */
502507   AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
503508   AM_RANGE(0x7d030000, 0x7d030007) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
504509   AM_RANGE(0x7d030008, 0x7d03000f) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
505   AM_RANGE(0x7d040000, 0x7d04ffff) AM_READWRITE_LEGACY(lanc1_r, lanc1_w)
506   AM_RANGE(0x7d050000, 0x7d05ffff) AM_READWRITE_LEGACY(lanc2_r, lanc2_w)
510   AM_RANGE(0x7d040000, 0x7d04ffff) AM_READWRITE(lanc1_r, lanc1_w)
511   AM_RANGE(0x7d050000, 0x7d05ffff) AM_READWRITE(lanc2_r, lanc2_w)
507512   AM_RANGE(0x7e000000, 0x7e7fffff) AM_ROM AM_REGION("user2", 0)   /* Data ROM */
508513   AM_RANGE(0x7f000000, 0x7f1fffff) AM_ROM AM_SHARE("share2")
509514   AM_RANGE(0x7fe00000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2")   /* Program ROM */
r14845r14846
522527/*****************************************************************************/
523528
524529
525static READ32_HANDLER( dsp_dataram_r )
530READ32_MEMBER(nwktr_state::dsp_dataram_r)
526531{
527   nwktr_state *state = space->machine().driver_data<nwktr_state>();
528   return state->m_sharc_dataram[offset] & 0xffff;
532   return m_sharc_dataram[offset] & 0xffff;
529533}
530534
531static WRITE32_HANDLER( dsp_dataram_w )
535WRITE32_MEMBER(nwktr_state::dsp_dataram_w)
532536{
533   nwktr_state *state = space->machine().driver_data<nwktr_state>();
534   state->m_sharc_dataram[offset] = data;
537   m_sharc_dataram[offset] = data;
535538}
536539
537540static ADDRESS_MAP_START( sharc_map, AS_DATA, 32, nwktr_state )
538541   AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
539   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE_LEGACY(dsp_dataram_r, dsp_dataram_w)
542   AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram_r, dsp_dataram_w)
540543   AM_RANGE(0x1400000, 0x14fffff) AM_RAM
541544   AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo", nwk_voodoo_0_r, nwk_voodoo_0_w)
542545   AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
src/mame/drivers/jpmsys5.c
r14845r14846
6969   UINT8 m_a2_acia_dcd;
7070   UINT8 m_a2_data_out;
7171   UINT8 m_a2_data_in;
72   DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
73   DECLARE_READ16_MEMBER(sys5_tms34061_r);
74   DECLARE_WRITE16_MEMBER(ramdac_w);
75   DECLARE_WRITE16_MEMBER(rombank_w);
76   DECLARE_READ16_MEMBER(coins_r);
77   DECLARE_WRITE16_MEMBER(coins_w);
78   DECLARE_READ16_MEMBER(unk_r);
79   DECLARE_WRITE16_MEMBER(mux_w);
80   DECLARE_READ16_MEMBER(mux_r);
7281};
7382
7483
r14845r14846
110119   tms_interrupt   /* Interrupt gen callback */
111120};
112121
113static WRITE16_HANDLER( sys5_tms34061_w )
122WRITE16_MEMBER(jpmsys5_state::sys5_tms34061_w)
114123{
115124   int func = (offset >> 19) & 3;
116125   int row = (offset >> 7) & 0x1ff;
r14845r14846
127136   }
128137
129138   if (ACCESSING_BITS_8_15)
130      tms34061_w(space, col, row, func, data >> 8);
139      tms34061_w(&space, col, row, func, data >> 8);
131140
132141   if (ACCESSING_BITS_0_7)
133      tms34061_w(space, col | 1, row, func, data & 0xff);
142      tms34061_w(&space, col | 1, row, func, data & 0xff);
134143}
135144
136static READ16_HANDLER( sys5_tms34061_r )
145READ16_MEMBER(jpmsys5_state::sys5_tms34061_r)
137146{
138147   UINT16 data = 0;
139148   int func = (offset >> 19) & 3;
r14845r14846
151160   }
152161
153162   if (ACCESSING_BITS_8_15)
154      data |= tms34061_r(space, col, row, func) << 8;
163      data |= tms34061_r(&space, col, row, func) << 8;
155164
156165   if (ACCESSING_BITS_0_7)
157      data |= tms34061_r(space, col | 1, row, func);
166      data |= tms34061_r(&space, col | 1, row, func);
158167
159168   return data;
160169}
161170
162static WRITE16_HANDLER( ramdac_w )
171WRITE16_MEMBER(jpmsys5_state::ramdac_w)
163172{
164   jpmsys5_state *state = space->machine().driver_data<jpmsys5_state>();
165173   if (offset == 0)
166174   {
167      state->m_pal_addr = data;
168      state->m_pal_idx = 0;
175      m_pal_addr = data;
176      m_pal_idx = 0;
169177   }
170178   else if (offset == 1)
171179   {
172      state->m_palette[state->m_pal_addr][state->m_pal_idx] = data;
180      m_palette[m_pal_addr][m_pal_idx] = data;
173181
174      if (++state->m_pal_idx == 3)
182      if (++m_pal_idx == 3)
175183      {
176184         /* Update the MAME palette */
177         palette_set_color_rgb(space->machine(), state->m_pal_addr, pal6bit(state->m_palette[state->m_pal_addr][0]), pal6bit(state->m_palette[state->m_pal_addr][1]), pal6bit(state->m_palette[state->m_pal_addr][2]));
178         state->m_pal_addr++;
179         state->m_pal_idx = 0;
185         palette_set_color_rgb(machine(), m_pal_addr, pal6bit(m_palette[m_pal_addr][0]), pal6bit(m_palette[m_pal_addr][1]), pal6bit(m_palette[m_pal_addr][2]));
186         m_pal_addr++;
187         m_pal_idx = 0;
180188      }
181189   }
182190   else
r14845r14846
238246 *
239247 ****************************************/
240248
241static WRITE16_HANDLER( rombank_w )
249WRITE16_MEMBER(jpmsys5_state::rombank_w)
242250{
243   UINT8 *rom = space->machine().region("maincpu")->base();
251   UINT8 *rom = machine().region("maincpu")->base();
244252   data &= 0x1f;
245   memory_set_bankptr(space->machine(), "bank1", &rom[0x20000 + 0x20000 * data]);
253   memory_set_bankptr(machine(), "bank1", &rom[0x20000 + 0x20000 * data]);
246254}
247255
248static READ16_HANDLER( coins_r )
256READ16_MEMBER(jpmsys5_state::coins_r)
249257{
250258   if (offset == 2)
251      return input_port_read(space->machine(), "COINS") << 8;
259      return input_port_read(machine(), "COINS") << 8;
252260   else
253261      return 0xffff;
254262}
255263
256static WRITE16_HANDLER( coins_w )
264WRITE16_MEMBER(jpmsys5_state::coins_w)
257265{
258266   /* TODO */
259267}
260268
261static READ16_HANDLER( unk_r )
269READ16_MEMBER(jpmsys5_state::unk_r)
262270{
263271   return 0xffff;
264272}
265273
266static WRITE16_HANDLER( mux_w )
274WRITE16_MEMBER(jpmsys5_state::mux_w)
267275{
268   jpmsys5_state *state = space->machine().driver_data<jpmsys5_state>();
269   state->m_muxram[offset]=data;
276   m_muxram[offset]=data;
270277}
271278
272static READ16_HANDLER( mux_r )
279READ16_MEMBER(jpmsys5_state::mux_r)
273280{
274281   if (offset == 0x81/2)
275      return input_port_read(space->machine(), "DSW");
282      return input_port_read(machine(), "DSW");
276283
277284   return 0xffff;
278285}
r14845r14846
310317
311318static ADDRESS_MAP_START( 68000_map, AS_PROGRAM, 16, jpmsys5_state )
312319   AM_RANGE(0x000000, 0x01ffff) AM_ROM
313   AM_RANGE(0x01fffe, 0x01ffff) AM_WRITE_LEGACY(rombank_w)
320   AM_RANGE(0x01fffe, 0x01ffff) AM_WRITE(rombank_w)
314321   AM_RANGE(0x020000, 0x03ffff) AM_ROMBANK("bank1")
315322   AM_RANGE(0x040000, 0x043fff) AM_RAM AM_SHARE("nvram")
316323   AM_RANGE(0x046000, 0x046001) AM_WRITENOP
r14845r14846
323330   AM_RANGE(0x046066, 0x046067) AM_WRITENOP
324331   AM_RANGE(0x046080, 0x046081) AM_DEVREADWRITE8("acia6850_1", acia6850_device, status_read, control_write, 0xff)
325332   AM_RANGE(0x046082, 0x046083) AM_DEVREADWRITE8("acia6850_1", acia6850_device, data_read, data_write, 0xff)
326   AM_RANGE(0x046084, 0x046085) AM_READ_LEGACY(unk_r) // PIA?
327   AM_RANGE(0x046088, 0x046089) AM_READ_LEGACY(unk_r) // PIA?
333   AM_RANGE(0x046084, 0x046085) AM_READ(unk_r) // PIA?
334   AM_RANGE(0x046088, 0x046089) AM_READ(unk_r) // PIA?
328335   AM_RANGE(0x04608c, 0x04608d) AM_DEVREADWRITE8("acia6850_2", acia6850_device, status_read, control_write, 0xff)
329336   AM_RANGE(0x04608e, 0x04608f) AM_DEVREADWRITE8("acia6850_2", acia6850_device, data_read, data_write, 0xff)
330337   AM_RANGE(0x0460a0, 0x0460a3) AM_DEVWRITE8_LEGACY("ym2413", ym2413_w, 0x00ff)
331338   AM_RANGE(0x0460c0, 0x0460c1) AM_WRITENOP
332   AM_RANGE(0x0460e0, 0x0460e5) AM_WRITE_LEGACY(ramdac_w)
333   AM_RANGE(0x048000, 0x04801f) AM_READWRITE_LEGACY(coins_r, coins_w)
334   AM_RANGE(0x04c000, 0x04c0ff) AM_READ_LEGACY(mux_r) AM_WRITE_LEGACY(mux_w)
339   AM_RANGE(0x0460e0, 0x0460e5) AM_WRITE(ramdac_w)
340   AM_RANGE(0x048000, 0x04801f) AM_READWRITE(coins_r, coins_w)
341   AM_RANGE(0x04c000, 0x04c0ff) AM_READ(mux_r) AM_WRITE(mux_w)
335342   AM_RANGE(0x04c100, 0x04c105) AM_DEVREADWRITE_LEGACY("upd7759", jpm_upd7759_r, jpm_upd7759_w)
336   AM_RANGE(0x800000, 0xcfffff) AM_READWRITE_LEGACY(sys5_tms34061_r, sys5_tms34061_w)
343   AM_RANGE(0x800000, 0xcfffff) AM_READWRITE(sys5_tms34061_r, sys5_tms34061_w)
337344ADDRESS_MAP_END
338345
339346
r14845r14846
694701
695702static ADDRESS_MAP_START( 68000_awp_map, AS_PROGRAM, 16, jpmsys5_state )
696703   AM_RANGE(0x000000, 0x01ffff) AM_ROM
697   AM_RANGE(0x01fffe, 0x01ffff) AM_WRITE_LEGACY(rombank_w)
704   AM_RANGE(0x01fffe, 0x01ffff) AM_WRITE(rombank_w)
698705   AM_RANGE(0x020000, 0x03ffff) AM_ROMBANK("bank1")
699706   AM_RANGE(0x040000, 0x043fff) AM_RAM AM_SHARE("nvram")
700707   AM_RANGE(0x046000, 0x046001) AM_WRITENOP
r14845r14846
707714   AM_RANGE(0x046066, 0x046067) AM_WRITENOP
708715   AM_RANGE(0x046080, 0x046081) AM_DEVREADWRITE8("acia6850_1", acia6850_device, status_read, control_write, 0xff)
709716   AM_RANGE(0x046082, 0x046083) AM_DEVREADWRITE8("acia6850_1", acia6850_device, data_read, data_write, 0xff)
710   AM_RANGE(0x046084, 0x046085) AM_READ_LEGACY(unk_r) // PIA?
711   AM_RANGE(0x046088, 0x046089) AM_READ_LEGACY(unk_r) // PIA?
717   AM_RANGE(0x046084, 0x046085) AM_READ(unk_r) // PIA?
718   AM_RANGE(0x046088, 0x046089) AM_READ(unk_r) // PIA?
712719   AM_RANGE(0x04608c, 0x04608d) AM_DEVREADWRITE8("acia6850_2", acia6850_device, status_read, control_write, 0xff)
713720   AM_RANGE(0x04608e, 0x04608f) AM_DEVREADWRITE8("acia6850_2", acia6850_device, data_read, data_write, 0xff)
714721   AM_RANGE(0x0460a0, 0x0460a3) AM_DEVWRITE8_LEGACY("ym2413", ym2413_w, 0x00ff)
715722   AM_RANGE(0x0460c0, 0x0460c1) AM_WRITENOP
716   AM_RANGE(0x048000, 0x04801f) AM_READWRITE_LEGACY(coins_r, coins_w)
717   AM_RANGE(0x04c000, 0x04c0ff) AM_READ_LEGACY(mux_r) AM_WRITE_LEGACY(mux_w)
723   AM_RANGE(0x048000, 0x04801f) AM_READWRITE(coins_r, coins_w)
724   AM_RANGE(0x04c000, 0x04c0ff) AM_READ(mux_r) AM_WRITE(mux_w)
718725   AM_RANGE(0x04c100, 0x04c105) AM_DEVREADWRITE_LEGACY("upd7759", jpm_upd7759_r, jpm_upd7759_w)
719726ADDRESS_MAP_END
720727
src/mame/drivers/igs011.c
r14845r14846
108108   blitter_t m_blitter;
109109
110110   required_device<cpu_device> m_maincpu;
111   DECLARE_WRITE16_MEMBER(igs011_priority_w);
112   DECLARE_READ16_MEMBER(igs011_layers_r);
113   DECLARE_WRITE16_MEMBER(igs011_layers_w);
114   DECLARE_WRITE16_MEMBER(igs011_palette);
115   DECLARE_WRITE16_MEMBER(igs011_blit_x_w);
116   DECLARE_WRITE16_MEMBER(igs011_blit_y_w);
117   DECLARE_WRITE16_MEMBER(igs011_blit_gfx_lo_w);
118   DECLARE_WRITE16_MEMBER(igs011_blit_gfx_hi_w);
119   DECLARE_WRITE16_MEMBER(igs011_blit_w_w);
120   DECLARE_WRITE16_MEMBER(igs011_blit_h_w);
121   DECLARE_WRITE16_MEMBER(igs011_blit_depth_w);
122   DECLARE_WRITE16_MEMBER(igs011_blit_pen_w);
123   DECLARE_WRITE16_MEMBER(igs011_blit_flags_w);
124   DECLARE_WRITE16_MEMBER(igs_dips_w);
125   DECLARE_READ16_MEMBER(igs_3_dips_r);
126   DECLARE_READ16_MEMBER(igs_4_dips_r);
127   DECLARE_READ16_MEMBER(igs_5_dips_r);
128   DECLARE_WRITE16_MEMBER(igs011_prot1_w);
129   DECLARE_READ16_MEMBER(igs011_prot1_r);
130   DECLARE_WRITE16_MEMBER(igs011_prot_addr_w);
131   DECLARE_READ16_MEMBER(igs011_prot_fake_r);
132   DECLARE_WRITE16_MEMBER(igs011_prot2_reset_w);
133   DECLARE_READ16_MEMBER(igs011_prot2_reset_r);
134   DECLARE_WRITE16_MEMBER(igs011_prot2_inc_w);
135   DECLARE_WRITE16_MEMBER(igs011_prot2_dec_w);
136   DECLARE_WRITE16_MEMBER(drgnwrld_igs011_prot2_swap_w);
137   DECLARE_WRITE16_MEMBER(lhb_igs011_prot2_swap_w);
138   DECLARE_WRITE16_MEMBER(wlcc_igs011_prot2_swap_w);
139   DECLARE_WRITE16_MEMBER(vbowl_igs011_prot2_swap_w);
140   DECLARE_READ16_MEMBER(drgnwrldv21_igs011_prot2_r);
141   DECLARE_READ16_MEMBER(drgnwrldv20j_igs011_prot2_r);
142   DECLARE_READ16_MEMBER(lhb_igs011_prot2_r);
143   DECLARE_READ16_MEMBER(dbc_igs011_prot2_r);
144   DECLARE_READ16_MEMBER(ryukobou_igs011_prot2_r);
145   DECLARE_READ16_MEMBER(lhb2_igs011_prot2_r);
146   DECLARE_READ16_MEMBER(vbowl_igs011_prot2_r);
147   DECLARE_WRITE16_MEMBER(igs012_prot_reset_w);
148   DECLARE_READ16_MEMBER(igs012_prot_fake_r);
149   DECLARE_WRITE16_MEMBER(igs012_prot_mode_w);
150   DECLARE_WRITE16_MEMBER(igs012_prot_inc_w);
151   DECLARE_WRITE16_MEMBER(igs012_prot_dec_inc_w);
152   DECLARE_WRITE16_MEMBER(igs012_prot_dec_copy_w);
153   DECLARE_WRITE16_MEMBER(igs012_prot_copy_w);
154   DECLARE_WRITE16_MEMBER(igs012_prot_swap_w);
155   DECLARE_READ16_MEMBER(igs012_prot_r);
156   DECLARE_WRITE16_MEMBER(drgnwrld_igs003_w);
157   DECLARE_READ16_MEMBER(drgnwrld_igs003_r);
158   DECLARE_WRITE16_MEMBER(lhb_inputs_w);
159   DECLARE_READ16_MEMBER(lhb_inputs_r);
160   DECLARE_WRITE16_MEMBER(lhb2_igs003_w);
161   DECLARE_READ16_MEMBER(lhb2_igs003_r);
162   DECLARE_WRITE16_MEMBER(wlcc_igs003_w);
163   DECLARE_READ16_MEMBER(wlcc_igs003_r);
164   DECLARE_WRITE16_MEMBER(xymg_igs003_w);
165   DECLARE_READ16_MEMBER(xymg_igs003_r);
166   DECLARE_WRITE16_MEMBER(vbowl_igs003_w);
167   DECLARE_READ16_MEMBER(vbowl_igs003_r);
168   DECLARE_WRITE16_MEMBER(lhb_irq_enable_w);
169   DECLARE_READ16_MEMBER(vbowl_unk_r);
170   DECLARE_WRITE16_MEMBER(vbowl_pen_hi_w);
171   DECLARE_WRITE16_MEMBER(vbowl_link_0_w);
172   DECLARE_WRITE16_MEMBER(vbowl_link_1_w);
173   DECLARE_WRITE16_MEMBER(vbowl_link_2_w);
174   DECLARE_WRITE16_MEMBER(vbowl_link_3_w);
175   UINT16 igs_dips_r(int NUM);
111176};
112177
113178
r14845r14846
132197
133198
134199
135static WRITE16_HANDLER( igs011_priority_w )
200WRITE16_MEMBER(igs011_state::igs011_priority_w)
136201{
137   igs011_state *state = space->machine().driver_data<igs011_state>();
138   COMBINE_DATA(&state->m_priority);
202   COMBINE_DATA(&m_priority);
139203
140//  logerror("%06x: priority = %02x\n", cpu_get_pc(&space->device()), state->m_priority);
204//  logerror("%06x: priority = %02x\n", cpu_get_pc(&space.device()), m_priority);
141205
142206   if (data & ~0x7)
143      logerror("%06x: warning, unknown bits written to priority = %02x\n", cpu_get_pc(&space->device()), state->m_priority);
207      logerror("%06x: warning, unknown bits written to priority = %02x\n", cpu_get_pc(&space.device()), m_priority);
144208}
145209
146210
r14845r14846
234298
235299***************************************************************************/
236300
237static READ16_HANDLER( igs011_layers_r )
301READ16_MEMBER(igs011_state::igs011_layers_r)
238302{
239   igs011_state *state = space->machine().driver_data<igs011_state>();
240303   int layer0 = ((offset & (0x80000/2)) ? 4 : 0) + ((offset & 1) ? 0 : 2);
241304
242   UINT8 *l0 = state->m_layer[layer0];
243   UINT8 *l1 = state->m_layer[layer0+1];
305   UINT8 *l0 = m_layer[layer0];
306   UINT8 *l1 = m_layer[layer0+1];
244307
245308   offset >>= 1;
246309   offset &= 0x1ffff;
r14845r14846
248311   return (l0[offset] << 8) | l1[offset];
249312}
250313
251static WRITE16_HANDLER( igs011_layers_w )
314WRITE16_MEMBER(igs011_state::igs011_layers_w)
252315{
253   igs011_state *state = space->machine().driver_data<igs011_state>();
254316   UINT16 word;
255317
256318   int layer0 = ((offset & (0x80000/2)) ? 4 : 0) + ((offset & 1) ? 0 : 2);
257319
258   UINT8 *l0 = state->m_layer[layer0];
259   UINT8 *l1 = state->m_layer[layer0+1];
320   UINT8 *l0 = m_layer[layer0];
321   UINT8 *l1 = m_layer[layer0+1];
260322
261323   offset >>= 1;
262324   offset &= 0x1ffff;
r14845r14846
276338
277339***************************************************************************/
278340
279static WRITE16_HANDLER( igs011_palette )
341WRITE16_MEMBER(igs011_state::igs011_palette)
280342{
281343   int rgb;
282344
283   COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]);
345   COMBINE_DATA(&machine().generic.paletteram.u16[offset]);
284346
285   rgb = (space->machine().generic.paletteram.u16[offset & 0x7ff] & 0xff) | ((space->machine().generic.paletteram.u16[offset | 0x800] & 0xff) << 8);
286   palette_set_color_rgb(space->machine(),offset & 0x7ff,pal5bit(rgb >> 0),pal5bit(rgb >> 5),pal5bit(rgb >> 10));
347   rgb = (machine().generic.paletteram.u16[offset & 0x7ff] & 0xff) | ((machine().generic.paletteram.u16[offset | 0x800] & 0xff) << 8);
348   palette_set_color_rgb(machine(),offset & 0x7ff,pal5bit(rgb >> 0),pal5bit(rgb >> 5),pal5bit(rgb >> 10));
287349}
288350
289351/***************************************************************************
r14845r14846
293355***************************************************************************/
294356
295357
296static WRITE16_HANDLER( igs011_blit_x_w )
358WRITE16_MEMBER(igs011_state::igs011_blit_x_w)
297359{
298   igs011_state *state = space->machine().driver_data<igs011_state>();
299   struct blitter_t &blitter = state->m_blitter;
360   struct blitter_t &blitter = m_blitter;
300361   COMBINE_DATA(&blitter.x);
301362}
302363
303static WRITE16_HANDLER( igs011_blit_y_w )
364WRITE16_MEMBER(igs011_state::igs011_blit_y_w)
304365{
305   igs011_state *state = space->machine().driver_data<igs011_state>();
306   struct blitter_t &blitter = state->m_blitter;
366   struct blitter_t &blitter = m_blitter;
307367   COMBINE_DATA(&blitter.y);
308368}
309369
310static WRITE16_HANDLER( igs011_blit_gfx_lo_w )
370WRITE16_MEMBER(igs011_state::igs011_blit_gfx_lo_w)
311371{
312   igs011_state *state = space->machine().driver_data<igs011_state>();
313   struct blitter_t &blitter = state->m_blitter;
372   struct blitter_t &blitter = m_blitter;
314373   COMBINE_DATA(&blitter.gfx_lo);
315374}
316375
317static WRITE16_HANDLER( igs011_blit_gfx_hi_w )
376WRITE16_MEMBER(igs011_state::igs011_blit_gfx_hi_w)
318377{
319   igs011_state *state = space->machine().driver_data<igs011_state>();
320   struct blitter_t &blitter = state->m_blitter;
378   struct blitter_t &blitter = m_blitter;
321379   COMBINE_DATA(&blitter.gfx_hi);
322380}
323381
324static WRITE16_HANDLER( igs011_blit_w_w )
382WRITE16_MEMBER(igs011_state::igs011_blit_w_w)
325383{
326   igs011_state *state = space->machine().driver_data<igs011_state>();
327   struct blitter_t &blitter = state->m_blitter;
384   struct blitter_t &blitter = m_blitter;
328385   COMBINE_DATA(&blitter.w);
329386}
330387
331static WRITE16_HANDLER( igs011_blit_h_w )
388WRITE16_MEMBER(igs011_state::igs011_blit_h_w)
332389{
333   igs011_state *state = space->machine().driver_data<igs011_state>();
334   struct blitter_t &blitter = state->m_blitter;
390   struct blitter_t &blitter = m_blitter;
335391   COMBINE_DATA(&blitter.h);
336392}
337393
338static WRITE16_HANDLER( igs011_blit_depth_w )
394WRITE16_MEMBER(igs011_state::igs011_blit_depth_w)
339395{
340   igs011_state *state = space->machine().driver_data<igs011_state>();
341   struct blitter_t &blitter = state->m_blitter;
396   struct blitter_t &blitter = m_blitter;
342397   COMBINE_DATA(&blitter.depth);
343398}
344399
345static WRITE16_HANDLER( igs011_blit_pen_w )
400WRITE16_MEMBER(igs011_state::igs011_blit_pen_w)
346401{
347   igs011_state *state = space->machine().driver_data<igs011_state>();
348   struct blitter_t &blitter = state->m_blitter;
402   struct blitter_t &blitter = m_blitter;
349403   COMBINE_DATA(&blitter.pen);
350404}
351405
352406
353static WRITE16_HANDLER( igs011_blit_flags_w )
407WRITE16_MEMBER(igs011_state::igs011_blit_flags_w)
354408{
355   igs011_state *state = space->machine().driver_data<igs011_state>();
356   struct blitter_t &blitter = state->m_blitter;
409   struct blitter_t &blitter = m_blitter;
357410   int x, xstart, xend, xinc, flipx;
358411   int y, ystart, yend, yinc, flipy;
359412   int depth4, clear, opaque, z;
360413   UINT8 trans_pen, clear_pen, pen_hi, *dest;
361414   UINT8 pen = 0;
362415
363   UINT8 *gfx      =   space->machine().region("blitter")->base();
364   UINT8 *gfx2      =   space->machine().region("blitter_hi")->base();
365   int gfx_size   =   space->machine().region("blitter")->bytes();
366   int gfx2_size   =   space->machine().region("blitter_hi")->bytes();
416   UINT8 *gfx      =   machine().region("blitter")->base();
417   UINT8 *gfx2      =   machine().region("blitter_hi")->base();
418   int gfx_size   =   machine().region("blitter")->bytes();
419   int gfx2_size   =   machine().region("blitter_hi")->bytes();
367420
368   const rectangle &clip = space->machine().primary_screen->visible_area();
421   const rectangle &clip = machine().primary_screen->visible_area();
369422
370423   COMBINE_DATA(&blitter.flags);
371424
372425#if LOG_BLITTER
373   logerror("%06x: blit x %03x, y %03x, w %03x, h %03x, gfx %03x%04x, depth %02x, pen %02x, flags %03x\n", cpu_get_pc(&space->device()),
426   logerror("%06x: blit x %03x, y %03x, w %03x, h %03x, gfx %03x%04x, depth %02x, pen %02x, flags %03x\n", cpu_get_pc(&space.device()),
374427               blitter.x,blitter.y,blitter.w,blitter.h,blitter.gfx_hi,blitter.gfx_lo,blitter.depth,blitter.pen,blitter.flags);
375428#endif
376429
377   dest   =   state->m_layer[      blitter.flags & 0x0007   ];
430   dest   =   m_layer[      blitter.flags & 0x0007   ];
378431   opaque   =          !(blitter.flags & 0x0008);
379432   clear   =            blitter.flags & 0x0010;
380433   flipx   =            blitter.flags & 0x0020;
381434   flipy   =            blitter.flags & 0x0040;
382435   if               (!(blitter.flags & 0x0400)) return;
383436
384   pen_hi   =   (state->m_lhb2_pen_hi & 0x07) << 5;
437   pen_hi   =   (m_lhb2_pen_hi & 0x07) << 5;
385438
386439   // pixel address
387440   z      =   blitter.gfx_lo  + (blitter.gfx_hi << 16);
r14845r14846
449502
450503   #ifdef MAME_DEBUG
451504#if 1
452   if (space->machine().input().code_pressed(KEYCODE_Z))
505   if (machine().input().code_pressed(KEYCODE_Z))
453506   {   char buf[20];
454507      sprintf(buf, "%02X%02X",blitter.depth,blitter.flags&0xff);
455508//      ui_draw_text(buf, blitter.x, blitter.y);    // crashes mame!
r14845r14846
473526   return (state->m_igs_hopper && ((field.machine().primary_screen->frame_number()/5)&1)) ? 0x0000 : 0x0001;
474527}
475528
476static WRITE16_HANDLER( igs_dips_w )
529WRITE16_MEMBER(igs011_state::igs_dips_w)
477530{
478   igs011_state *state = space->machine().driver_data<igs011_state>();
479   COMBINE_DATA(&state->m_igs_dips_sel);
531   COMBINE_DATA(&m_igs_dips_sel);
480532}
481533
482INLINE UINT16 igs_dips_r(address_space *space, int NUM)
534UINT16 igs011_state::igs_dips_r(int NUM)
483535{
484   igs011_state *state = space->machine().driver_data<igs011_state>();
485536   int i;
486537   UINT16 ret=0;
487538   static const char *const dipnames[] = { "DSW1", "DSW2", "DSW3", "DSW4", "DSW5" };
488539
489540   for (i = 0; i < NUM; i++)
490      if ((~state->m_igs_dips_sel) & (1 << i) )
491         ret = input_port_read(space->machine(), dipnames[i]);
541      if ((~m_igs_dips_sel) & (1 << i) )
542         ret = input_port_read(machine(), dipnames[i]);
492543   /* 0x0100 is blitter busy */
493544   return   (ret & 0xff) | 0x0000;
494545}
495546
496547// Games have 3 to 5 dips
497static READ16_HANDLER( igs_3_dips_r ) { return igs_dips_r(space, 3); }
498static READ16_HANDLER( igs_4_dips_r ) { return igs_dips_r(space, 4); }
499static READ16_HANDLER( igs_5_dips_r ) { return igs_dips_r(space, 5); }
548READ16_MEMBER(igs011_state::igs_3_dips_r){ return igs_dips_r(3); }
549READ16_MEMBER(igs011_state::igs_4_dips_r){ return igs_dips_r(4); }
550READ16_MEMBER(igs011_state::igs_5_dips_r){ return igs_dips_r(5); }
500551
501552/***************************************************************************
502553
r14845r14846
903954
904955
905956
906static WRITE16_HANDLER( igs011_prot1_w )
957WRITE16_MEMBER(igs011_state::igs011_prot1_w)
907958{
908   igs011_state *state = space->machine().driver_data<igs011_state>();
909959   offset *= 2;
910960
911961   switch (offset)
r14845r14846
913963      case 0:   // COPY
914964         if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300)
915965         {
916            state->m_prot1 = state->m_prot1_swap;
966            m_prot1 = m_prot1_swap;
917967            return;
918968         }
919969         break;
r14845r14846
921971      case 2:   // INC
922972         if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0xff00)
923973         {
924            state->m_prot1++;
974            m_prot1++;
925975            return;
926976         }
927977         break;
r14845r14846
929979      case 4:   // DEC
930980         if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0xaa00)
931981         {
932            state->m_prot1--;
982            m_prot1--;
933983            return;
934984         }
935985         break;
r14845r14846
938988         if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x5500)
939989         {
940990            // b1 . (b2|b3) . b2 . (b0&b3)
941            UINT8 x = state->m_prot1;
942            state->m_prot1_swap = (BIT(x,1)<<3) | ((BIT(x,2)|BIT(x,3))<<2) | (BIT(x,2)<<1) | (BIT(x,0)&BIT(x,3));
991            UINT8 x = m_prot1;
992            m_prot1_swap = (BIT(x,1)<<3) | ((BIT(x,2)|BIT(x,3))<<2) | (BIT(x,2)<<1) | (BIT(x,0)&BIT(x,3));
943993            return;
944994         }
945995         break;
946996   }
947997
948   logerror("%s: warning, unknown igs011_prot1_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
998   logerror("%s: warning, unknown igs011_prot1_w( %04x, %04x )\n", machine().describe_context(), offset, data);
949999}
950static READ16_HANDLER( igs011_prot1_r )
1000READ16_MEMBER(igs011_state::igs011_prot1_r)
9511001{
952   igs011_state *state = space->machine().driver_data<igs011_state>();
9531002   // !(b1&b2) . 0 . 0 . (b0^b3) . 0 . 0
954   UINT8 x = state->m_prot1;
1003   UINT8 x = m_prot1;
9551004   return (((BIT(x,1)&BIT(x,2))^1)<<5) | ((BIT(x,0)^BIT(x,3))<<2);
9561005}
9571006
9581007
959static WRITE16_HANDLER( igs011_prot_addr_w )
1008WRITE16_MEMBER(igs011_state::igs011_prot_addr_w)
9601009{
961   igs011_state *state = space->machine().driver_data<igs011_state>();
962   state->m_prot1 = 0x00;
963   state->m_prot1_swap = 0x00;
1010   m_prot1 = 0x00;
1011   m_prot1_swap = 0x00;
9641012
965//  state->m_prot2 = 0x00;
1013//  m_prot2 = 0x00;
9661014
967   address_space *sp = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
968   UINT8 *rom = space->machine().region("maincpu")->base();
1015   address_space *sp = machine().device("maincpu")->memory().space(AS_PROGRAM);
1016   UINT8 *rom = machine().region("maincpu")->base();
9691017
9701018   // Plug previous address range with ROM access
971   sp->install_rom(state->m_prot1_addr + 0, state->m_prot1_addr + 9, rom + state->m_prot1_addr);
1019   sp->install_rom(m_prot1_addr + 0, m_prot1_addr + 9, rom + m_prot1_addr);
9721020
973   state->m_prot1_addr = (data << 4) ^ 0x8340;
1021   m_prot1_addr = (data << 4) ^ 0x8340;
9741022
9751023   // Add protection memory range
976   sp->install_legacy_write_handler(state->m_prot1_addr + 0, state->m_prot1_addr + 7, FUNC(igs011_prot1_w));
977   sp->install_legacy_read_handler (state->m_prot1_addr + 8, state->m_prot1_addr + 9, FUNC(igs011_prot1_r));
1024   sp->install_write_handler(m_prot1_addr + 0, m_prot1_addr + 7, write16_delegate(FUNC(igs011_state::igs011_prot1_w), this));
1025   sp->install_read_handler (m_prot1_addr + 8, m_prot1_addr + 9, read16_delegate(FUNC(igs011_state::igs011_prot1_r), this));
9781026}
9791027/*
980static READ16_HANDLER( igs011_prot_fake_r )
1028READ16_MEMBER(igs011_state::igs011_prot_fake_r)
9811029{
982    igs011_state *state = space->machine().driver_data<igs011_state>();
9831030    switch (offset)
9841031    {
985        case 0: return state->m_prot1;
986        case 1: return state->m_prot1_swap;
987        case 2: return state->m_prot2;
1032        case 0: return m_prot1;
1033        case 1: return m_prot1_swap;
1034        case 2: return m_prot2;
9881035    }
9891036    return 0;
9901037}
r14845r14846
9981045// Prot2
9991046
10001047// drgnwrld (33)
1001static WRITE16_HANDLER( igs011_prot2_reset_w )
1048WRITE16_MEMBER(igs011_state::igs011_prot2_reset_w)
10021049{
1003   igs011_state *state = space->machine().driver_data<igs011_state>();
1004   state->m_prot2 = 0x00;
1050   m_prot2 = 0x00;
10051051}
10061052
10071053// wlcc
1008static READ16_HANDLER( igs011_prot2_reset_r )
1054READ16_MEMBER(igs011_state::igs011_prot2_reset_r)
10091055{
1010   igs011_state *state = space->machine().driver_data<igs011_state>();
1011   state->m_prot2 = 0x00;
1056   m_prot2 = 0x00;
10121057   return 0;
10131058}
10141059
10151060
10161061
10171062// lhb2 (55), lhb/dbc/ryukobou (33)
1018static WRITE16_HANDLER( igs011_prot2_inc_w )
1063WRITE16_MEMBER(igs011_state::igs011_prot2_inc_w)
10191064{
1020   igs011_state *state = space->machine().driver_data<igs011_state>();
10211065//  if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x5500) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0055)) )
10221066   {
1023      state->m_prot2++;
1067      m_prot2++;
10241068   }
10251069//  else
1026//      logerror("%s: warning, unknown igs011_prot2_inc_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
1070//      logerror("%s: warning, unknown igs011_prot2_inc_w( %04x, %04x )\n", machine().describe_context(), offset, data);
10271071}
10281072
10291073// vbowl (33)
1030static WRITE16_HANDLER( igs011_prot2_dec_w )
1074WRITE16_MEMBER(igs011_state::igs011_prot2_dec_w)
10311075{
1032   igs011_state *state = space->machine().driver_data<igs011_state>();
10331076//  if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) )
10341077   {
1035      state->m_prot2--;
1078      m_prot2--;
10361079   }
10371080//  else
1038//      logerror("%s: warning, unknown igs011_prot2_dec_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
1081//      logerror("%s: warning, unknown igs011_prot2_dec_w( %04x, %04x )\n", machine().describe_context(), offset, data);
10391082}
10401083
10411084
10421085
1043static WRITE16_HANDLER( drgnwrld_igs011_prot2_swap_w )
1086WRITE16_MEMBER(igs011_state::drgnwrld_igs011_prot2_swap_w)
10441087{
1045   igs011_state *state = space->machine().driver_data<igs011_state>();
10461088   offset *= 2;
10471089
10481090//  if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) )
10491091   {
10501092      // (b3&b0) . b2 . (b0|b1) . (b2^!b4) . (!b1^b3)
1051      UINT8 x = state->m_prot2;
1052      state->m_prot2 = ((BIT(x,3)&BIT(x,0))<<4) | (BIT(x,2)<<3) | ((BIT(x,0)|BIT(x,1))<<2) | ((BIT(x,2)^BIT(x,4)^1)<<1) | (BIT(x,1)^1^BIT(x,3));
1093      UINT8 x = m_prot2;
1094      m_prot2 = ((BIT(x,3)&BIT(x,0))<<4) | (BIT(x,2)<<3) | ((BIT(x,0)|BIT(x,1))<<2) | ((BIT(x,2)^BIT(x,4)^1)<<1) | (BIT(x,1)^1^BIT(x,3));
10531095   }
10541096//  else
1055//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
1097//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", machine().describe_context(), offset, data);
10561098}
10571099
10581100// lhb, xymg, lhb2
1059static WRITE16_HANDLER( lhb_igs011_prot2_swap_w )
1101WRITE16_MEMBER(igs011_state::lhb_igs011_prot2_swap_w)
10601102{
1061   igs011_state *state = space->machine().driver_data<igs011_state>();
10621103   offset *= 2;
10631104
10641105//  if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) )
10651106   {
10661107      // (!b0|b1) . b2 . (b0&b1)
1067      UINT8 x = state->m_prot2;
1068      state->m_prot2 = (((BIT(x,0)^1)|BIT(x,1))<<2) | (BIT(x,2)<<1) | (BIT(x,0)&BIT(x,1));
1108      UINT8 x = m_prot2;
1109      m_prot2 = (((BIT(x,0)^1)|BIT(x,1))<<2) | (BIT(x,2)<<1) | (BIT(x,0)&BIT(x,1));
10691110   }
10701111//  else
1071//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
1112//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", machine().describe_context(), offset, data);
10721113}
10731114
10741115// wlcc
1075static WRITE16_HANDLER( wlcc_igs011_prot2_swap_w )
1116WRITE16_MEMBER(igs011_state::wlcc_igs011_prot2_swap_w)
10761117{
1077   igs011_state *state = space->machine().driver_data<igs011_state>();
10781118   offset *= 2;
10791119
10801120//  if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) )
10811121   {
10821122      // (b3 ^ b2) . (b2 ^ b1) . (b1 ^ b0) . !(b4 ^ b0) . !(b4 ^ b3)
1083      UINT8 x = state->m_prot2;
1084      state->m_prot2 = ((BIT(x,3)^BIT(x,2))<<4) | ((BIT(x,2)^BIT(x,1))<<3) | ((BIT(x,1)^BIT(x,0))<<2) | ((BIT(x,4)^BIT(x,0)^1)<<1) | (BIT(x,4)^BIT(x,3)^1);
1123      UINT8 x = m_prot2;
1124      m_prot2 = ((BIT(x,3)^BIT(x,2))<<4) | ((BIT(x,2)^BIT(x,1))<<3) | ((BIT(x,1)^BIT(x,0))<<2) | ((BIT(x,4)^BIT(x,0)^1)<<1) | (BIT(x,4)^BIT(x,3)^1);
10851125   }
10861126//  else
1087//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
1127//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", machine().describe_context(), offset, data);
10881128}
10891129
10901130// vbowl
1091static WRITE16_HANDLER( vbowl_igs011_prot2_swap_w )
1131WRITE16_MEMBER(igs011_state::vbowl_igs011_prot2_swap_w)
10921132{
1093   igs011_state *state = space->machine().driver_data<igs011_state>();
10941133   offset *= 2;
10951134
10961135//  if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) )
10971136   {
10981137      // (b3 ^ b2) . (b2 ^ b1) . (b1 ^ b0) . (b4 ^ b0) . (b4 ^ b3)
1099      UINT8 x = state->m_prot2;
1100      state->m_prot2 = ((BIT(x,3)^BIT(x,2))<<4) | ((BIT(x,2)^BIT(x,1))<<3) | ((BIT(x,1)^BIT(x,0))<<2) | ((BIT(x,4)^BIT(x,0))<<1) | (BIT(x,4)^BIT(x,3));
1138      UINT8 x = m_prot2;
1139      m_prot2 = ((BIT(x,3)^BIT(x,2))<<4) | ((BIT(x,2)^BIT(x,1))<<3) | ((BIT(x,1)^BIT(x,0))<<2) | ((BIT(x,4)^BIT(x,0))<<1) | (BIT(x,4)^BIT(x,3));
11011140   }
11021141//  else
1103//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data);
1142//      logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", machine().describe_context(), offset, data);
11041143}
11051144
11061145
11071146
11081147// drgnwrld
1109static READ16_HANDLER( drgnwrldv21_igs011_prot2_r )
1148READ16_MEMBER(igs011_state::drgnwrldv21_igs011_prot2_r)
11101149{
1111   igs011_state *state = space->machine().driver_data<igs011_state>();
11121150   // b9 = (!b4) | (!b0 & b2) | (!(b3 ^ b1) & !(!(b4 & b0) | b2))
1113   UINT8 x = state->m_prot2;
1151   UINT8 x = m_prot2;
11141152   UINT8 b9 = (BIT(x,4)^1) | ((BIT(x,0)^1) & BIT(x,2)) | ( (BIT(x,3)^BIT(x,1)^1) & ((((BIT(x,4)^1) & BIT(x,0)) | BIT(x,2))^1) );
11151153   return (b9 << 9);
11161154}
1117static READ16_HANDLER( drgnwrldv20j_igs011_prot2_r )
1155READ16_MEMBER(igs011_state::drgnwrldv20j_igs011_prot2_r)
11181156{
1119   igs011_state *state = space->machine().driver_data<igs011_state>();
11201157   // b9 = (!b4 | !b0) | !(b3 | b1) | !(b2 & b0)
1121   UINT8 x = state->m_prot2;
1158   UINT8 x = m_prot2;
11221159   UINT8 b9 = ((BIT(x,4)^1) | (BIT(x,0)^1)) | ((BIT(x,3) | BIT(x,1))^1) | ((BIT(x,2) & BIT(x,0))^1);
11231160   return (b9 << 9);
11241161}
11251162
11261163// lhb, xymg
1127static READ16_HANDLER( lhb_igs011_prot2_r )
1164READ16_MEMBER(igs011_state::lhb_igs011_prot2_r)
11281165{
1129   igs011_state *state = space->machine().driver_data<igs011_state>();
11301166   // b9 = !b2 | (b1 & b0)
1131   UINT8 x = state->m_prot2;
1167   UINT8 x = m_prot2;
11321168   UINT8 b9 = (BIT(x,2)^1) | (BIT(x,1) & BIT(x,0));
11331169   return (b9 << 9);
11341170}
11351171
11361172// dbc
1137static READ16_HANDLER( dbc_igs011_prot2_r )
1173READ16_MEMBER(igs011_state::dbc_igs011_prot2_r)
11381174{
1139   igs011_state *state = space->machine().driver_data<igs011_state>();
11401175   // b9 = !b1 | (!b0 & b2)
1141   UINT8 x = state->m_prot2;
1176   UINT8 x = m_prot2;
11421177   UINT8 b9 = (BIT(x,1)^1) | ((BIT(x,0)^1) & BIT(x,2));
11431178   return (b9 << 9);
11441179}
11451180
11461181// ryukobou
1147static READ16_HANDLER( ryukobou_igs011_prot2_r )
1182READ16_MEMBER(igs011_state::ryukobou_igs011_prot2_r)
11481183{
1149   igs011_state *state = space->machine().driver_data<igs011_state>();
11501184   // b9 = (!b1 | b2) & b0
1151   UINT8 x = state->m_prot2;
1185   UINT8 x = m_prot2;
11521186   UINT8 b9 = ((BIT(x,1)^1) | BIT(x,2)) & BIT(x,0);
11531187   return (b9 << 9);
11541188}
11551189
11561190// lhb2
1157static READ16_HANDLER( lhb2_igs011_prot2_r )
1191READ16_MEMBER(igs011_state::lhb2_igs011_prot2_r)
11581192{
1159   igs011_state *state = space->machine().driver_data<igs011_state>();
11601193   // b3 = !b2 | !b1 | b0
1161   UINT8 x = state->m_prot2;
1194   UINT8 x = m_prot2;
11621195   UINT8 b3 = (BIT(x,2)^1) | (BIT(x,1)^1) | BIT(x,0);
11631196   return (b3 << 3);
11641197}
11651198
11661199// vbowl
1167static READ16_HANDLER( vbowl_igs011_prot2_r )
1200READ16_MEMBER(igs011_state::vbowl_igs011_prot2_r)
11681201{
1169   igs011_state *state = space->machine().driver_data<igs011_state>();
1170   UINT8 x = state->m_prot2;
1202   UINT8 x = m_prot2;
11711203   UINT8 b9 = ((BIT(x,4)^1) & (BIT(x,3)^1)) | ((BIT(x,2) & BIT(x,1))^1) | ((BIT(x,4) | BIT(x,0))^1);
11721204   return (b9 << 9);
11731205}
r14845r14846
11941226***************************************************************************/
11951227
11961228
1197static WRITE16_HANDLER( igs012_prot_reset_w )
1229WRITE16_MEMBER(igs011_state::igs012_prot_reset_w)
11981230{
1199   igs011_state *state = space->machine().driver_data<igs011_state>();
1200   state->m_igs012_prot = 0x00;
1201   state->m_igs012_prot_swap = 0x00;
1231   m_igs012_prot = 0x00;
1232   m_igs012_prot_swap = 0x00;
12021233
1203   state->m_igs012_prot_mode = 0;
1234   m_igs012_prot_mode = 0;
12041235}
12051236/*
1206static READ16_HANDLER( igs012_prot_fake_r )
1237READ16_MEMBER(igs011_state::igs012_prot_fake_r)
12071238{
1208    igs011_state *state = space->machine().driver_data<igs011_state>();
12091239    switch (offset)
12101240    {
1211        case 0: return state->m_igs012_prot;
1212        case 1: return state->m_igs012_prot_swap;
1213        case 2: return state->m_igs012_prot_mode;
1241        case 0: return m_igs012_prot;
1242        case 1: return m_igs012_prot_swap;
1243        case 2: return m_igs012_prot_mode;
12141244    }
12151245    return 0;
12161246}
12171247*/
12181248
12191249// Macro that checks whether the current mode and data byte written match the arguments
1220#define MODE_AND_DATA(_MODE,_DATA)   (state->m_igs012_prot_mode == (_MODE) && ( (ACCESSING_BITS_8_15 && (data & 0xff00) == ((_DATA)<<8)) || (ACCESSING_BITS_0_7 && ((data & 0x00ff) == (_DATA))) ) )
1250#define MODE_AND_DATA(_MODE,_DATA)   (m_igs012_prot_mode == (_MODE) && ( (ACCESSING_BITS_8_15 && (data & 0xff00) == ((_DATA)<<8)) || (ACCESSING_BITS_0_7 && ((data & 0x00ff) == (_DATA))) ) )
12211251
1222static WRITE16_HANDLER( igs012_prot_mode_w )
1252WRITE16_MEMBER(igs011_state::igs012_prot_mode_w)
12231253{
1224   igs011_state *state = space->machine().driver_data<igs011_state>();
12251254   if ( MODE_AND_DATA(0, 0xcc) || MODE_AND_DATA(1, 0xdd) )
12261255   {
1227      state->m_igs012_prot_mode = state->m_igs012_prot_mode ^ 1;
1256      m_igs012_prot_mode = m_igs012_prot_mode ^ 1;
12281257   }
12291258   else
1230      logerror("%s: warning, unknown igs012_prot_mode_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode);
1259      logerror("%s: warning, unknown igs012_prot_mode_w( %04x, %04x ), mode %x\n", machine().describe_context(), offset, data, m_igs012_prot_mode);
12311260}
12321261
1233static WRITE16_HANDLER( igs012_prot_inc_w )
1262WRITE16_MEMBER(igs011_state::igs012_prot_inc_w)
12341263{
1235   igs011_state *state = space->machine().driver_data<igs011_state>();
12361264   if ( MODE_AND_DATA(0, 0xff) )
12371265   {
1238      state->m_igs012_prot = (state->m_igs012_prot + 1) & 0x1f;
1266      m_igs012_prot = (m_igs012_prot + 1) & 0x1f;
12391267   }
12401268   else
1241      logerror("%s: warning, unknown igs012_prot_inc_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode);
1269      logerror("%s: warning, unknown igs012_prot_inc_w( %04x, %04x ), mode %x\n", machine().describe_context(), offset, data, m_igs012_prot_mode);
12421270}
12431271
1244static WRITE16_HANDLER( igs012_prot_dec_inc_w )
1272WRITE16_MEMBER(igs011_state::igs012_prot_dec_inc_w)
12451273{
1246   igs011_state *state = space->machine().driver_data<igs011_state>();
12471274   if ( MODE_AND_DATA(0, 0xaa) )
12481275   {
1249      state->m_igs012_prot = (state->m_igs012_prot - 1) & 0x1f;
1276      m_igs012_prot = (m_igs012_prot - 1) & 0x1f;
12501277   }
12511278   else if ( MODE_AND_DATA(1, 0xfa) )
12521279   {
1253      state->m_igs012_prot = (state->m_igs012_prot + 1) & 0x1f;
1280      m_igs012_prot = (m_igs012_prot + 1) & 0x1f;
12541281   }
12551282   else
1256      logerror("%s: warning, unknown igs012_prot_dec_inc_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode);
1283      logerror("%s: warning, unknown igs012_prot_dec_inc_w( %04x, %04x ), mode %x\n", machine().describe_context(), offset, data, m_igs012_prot_mode);
12571284}
12581285
1259static WRITE16_HANDLER( igs012_prot_dec_copy_w )
1286WRITE16_MEMBER(igs011_state::igs012_prot_dec_copy_w)
12601287{
1261   igs011_state *state = space->machine().driver_data<igs011_state>();
12621288   if ( MODE_AND_DATA(0, 0x33) )
12631289   {
1264      state->m_igs012_prot = state->m_igs012_prot_swap;
1290      m_igs012_prot = m_igs012_prot_swap;
12651291   }
12661292   else if ( MODE_AND_DATA(1, 0x5a) )
12671293   {
1268      state->m_igs012_prot = (state->m_igs012_prot - 1) & 0x1f;
1294      m_igs012_prot = (m_igs012_prot - 1) & 0x1f;
12691295   }
12701296   else
1271      logerror("%s: warning, unknown igs012_prot_dec_copy_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode);
1297      logerror("%s: warning, unknown igs012_prot_dec_copy_w( %04x, %04x ), mode %x\n", machine().describe_context(), offset, data, m_igs012_prot_mode);
12721298}
12731299
1274static WRITE16_HANDLER( igs012_prot_copy_w )
1300WRITE16_MEMBER(igs011_state::igs012_prot_copy_w)
12751301{
1276   igs011_state *state = space->machine().driver_data<igs011_state>();
12771302   if ( MODE_AND_DATA(1, 0x22) )
12781303   {
1279      state->m_igs012_prot = state->m_igs012_prot_swap;
1304      m_igs012_prot = m_igs012_prot_swap;
12801305   }
12811306   else
1282      logerror("%s: warning, unknown igs012_prot_copy_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode);
1307      logerror("%s: warning, unknown igs012_prot_copy_w( %04x, %04x ), mode %x\n", machine().describe_context(), offset, data, m_igs012_prot_mode);
12831308}
12841309
1285static WRITE16_HANDLER( igs012_prot_swap_w )
1310WRITE16_MEMBER(igs011_state::igs012_prot_swap_w)
12861311{
1287   igs011_state *state = space->machine().driver_data<igs011_state>();
12881312   if ( MODE_AND_DATA(0, 0x55) || MODE_AND_DATA(1, 0xa5) )
12891313   {
12901314      // !(3 | 1)..(2 & 1)..(3 ^ 0)..(!2)
1291      UINT8 x = state->m_igs012_prot;
1292      state->m_igs012_prot_swap = (((BIT(x,3)|BIT(x,1))^1)<<3) | ((BIT(x,2)&BIT(x,1))<<2) | ((BIT(x,3)^BIT(x,0))<<1) | (BIT(x,2)^1);
1315      UINT8 x = m_igs012_prot;
1316      m_igs012_prot_swap = (((BIT(x,3)|BIT(x,1))^1)<<3) | ((BIT(x,2)&BIT(x,1))<<2) | ((BIT(x,3)^BIT(x,0))<<1) | (BIT(x,2)^1);
12931317   }
12941318   else
1295      logerror("%s: warning, unknown igs012_prot_swap_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode);
1319      logerror("%s: warning, unknown igs012_prot_swap_w( %04x, %04x ), mode %x\n", machine().describe_context(), offset, data, m_igs012_prot_mode);
12961320}
12971321
1298static READ16_HANDLER( igs012_prot_r )
1322READ16_MEMBER(igs011_state::igs012_prot_r)
12991323{
1300   igs011_state *state = space->machine().driver_data<igs011_state>();
13011324   // FIXME: mode 0 and mode 1 are mapped to different memory ranges
1302   UINT8 x = state->m_igs012_prot;
1325   UINT8 x = m_igs012_prot;
13031326
13041327   UINT8 b1 = (BIT(x,3) | BIT(x,1))^1;
13051328   UINT8 b0 = BIT(x,3) ^ BIT(x,0);
r14845r14846
13141337***************************************************************************/
13151338
13161339
1317static WRITE16_HANDLER( drgnwrld_igs003_w )
1340WRITE16_MEMBER(igs011_state::drgnwrld_igs003_w)
13181341{
1319   igs011_state *state = space->machine().driver_data<igs011_state>();
1320   COMBINE_DATA(&state->m_igs003_reg[offset]);
1342   COMBINE_DATA(&m_igs003_reg[offset]);
13211343
13221344   if (offset == 0)
13231345      return;
13241346
1325   switch(state->m_igs003_reg[0])
1347   switch(m_igs003_reg[0])
13261348   {
13271349
13281350      case 0x00:
13291351         if (ACCESSING_BITS_0_7)
1330            coin_counter_w(space->machine(), 0,data & 2);
1352            coin_counter_w(machine(), 0,data & 2);
13311353
13321354         if (data & ~0x2)
1333            logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space->device()), data);
1355            logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space.device()), data);
13341356
13351357         break;
13361358
r14845r14846
13421364//      case 0x05:
13431365
13441366      default:
1345//          popmessage("igs003 %x <- %04x",state->m_igs003_reg[0],data);
1346         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data);
1367//          popmessage("igs003 %x <- %04x",m_igs003_reg[0],data);
1368         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0], data);
13471369   }
13481370}
1349static READ16_HANDLER( drgnwrld_igs003_r )
1371READ16_MEMBER(igs011_state::drgnwrld_igs003_r)
13501372{
1351   igs011_state *state = space->machine().driver_data<igs011_state>();
1352   switch(state->m_igs003_reg[0])
1373   switch(m_igs003_reg[0])
13531374   {
1354      case 0x00:   return input_port_read(space->machine(), "IN0");
1355      case 0x01:   return input_port_read(space->machine(), "IN1");
1356      case 0x02:   return input_port_read(space->machine(), "IN2");
1375      case 0x00:   return input_port_read(machine(), "IN0");
1376      case 0x01:   return input_port_read(machine(), "IN1");
1377      case 0x02:   return input_port_read(machine(), "IN2");
13571378
13581379      case 0x20:   return 0x49;
13591380      case 0x21:   return 0x47;
r14845r14846
13781399      case 0x34:   return 0x32;
13791400
13801401      default:
1381         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]);
1402         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0]);
13821403   }
13831404
13841405   return 0;
r14845r14846
13861407
13871408
13881409
1389static WRITE16_HANDLER( lhb_inputs_w )
1410WRITE16_MEMBER(igs011_state::lhb_inputs_w)
13901411{
1391   igs011_state *state = space->machine().driver_data<igs011_state>();
1392   COMBINE_DATA(&state->m_igs_input_sel);
1412   COMBINE_DATA(&m_igs_input_sel);
13931413
13941414   if (ACCESSING_BITS_0_7)
13951415   {
1396      coin_counter_w(space->machine(), 0,   data & 0x20   );
1416      coin_counter_w(machine(), 0,   data & 0x20   );
13971417      //  coin out        data & 0x40
1398      state->m_igs_hopper      =   data & 0x80;
1418      m_igs_hopper      =   data & 0x80;
13991419   }
14001420
1401   if ( state->m_igs_input_sel & (~0xff) )
1402      logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel);
1421   if ( m_igs_input_sel & (~0xff) )
1422      logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space.device()), m_igs_input_sel);
14031423
1404//  popmessage("sel2 %02x",state->m_igs_input_sel&~0x1f);
1424//  popmessage("sel2 %02x",m_igs_input_sel&~0x1f);
14051425}
1406static READ16_HANDLER( lhb_inputs_r )
1426READ16_MEMBER(igs011_state::lhb_inputs_r)
14071427{
1408   igs011_state *state = space->machine().driver_data<igs011_state>();
14091428   switch(offset)
14101429   {
1411      case 0:      return state->m_igs_input_sel;
1430      case 0:      return m_igs_input_sel;
14121431
14131432      case 1:
1414         if (~state->m_igs_input_sel & 0x01)   return input_port_read(space->machine(), "KEY0");
1415         if (~state->m_igs_input_sel & 0x02)   return input_port_read(space->machine(), "KEY1");
1416         if (~state->m_igs_input_sel & 0x04)   return input_port_read(space->machine(), "KEY2");
1417         if (~state->m_igs_input_sel & 0x08)   return input_port_read(space->machine(), "KEY3");
1418         if (~state->m_igs_input_sel & 0x10)   return input_port_read(space->machine(), "KEY4");
1433         if (~m_igs_input_sel & 0x01)   return input_port_read(machine(), "KEY0");
1434         if (~m_igs_input_sel & 0x02)   return input_port_read(machine(), "KEY1");
1435         if (~m_igs_input_sel & 0x04)   return input_port_read(machine(), "KEY2");
1436         if (~m_igs_input_sel & 0x08)   return input_port_read(machine(), "KEY3");
1437         if (~m_igs_input_sel & 0x10)   return input_port_read(machine(), "KEY4");
14191438
1420         logerror("%06x: warning, reading with igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel);
1439         logerror("%06x: warning, reading with igs_input_sel = %02x\n", cpu_get_pc(&space.device()), m_igs_input_sel);
14211440         break;
14221441   }
14231442   return 0;
r14845r14846
14251444
14261445
14271446
1428static WRITE16_HANDLER( lhb2_igs003_w )
1447WRITE16_MEMBER(igs011_state::lhb2_igs003_w)
14291448{
1430   igs011_state *state = space->machine().driver_data<igs011_state>();
1431   COMBINE_DATA(&state->m_igs003_reg[offset]);
1449   COMBINE_DATA(&m_igs003_reg[offset]);
14321450
14331451   if (offset == 0)
14341452      return;
14351453
1436   switch(state->m_igs003_reg[0])
1454   switch(m_igs003_reg[0])
14371455   {
14381456      case 0x00:
1439         COMBINE_DATA(&state->m_igs_input_sel);
1457         COMBINE_DATA(&m_igs_input_sel);
14401458
14411459         if (ACCESSING_BITS_0_7)
14421460         {
1443            coin_counter_w(space->machine(), 0,   data & 0x20);
1461            coin_counter_w(machine(), 0,   data & 0x20);
14441462            //  coin out        data & 0x40
1445            state->m_igs_hopper      =   data & 0x80;
1463            m_igs_hopper      =   data & 0x80;
14461464         }
14471465
1448         if ( state->m_igs_input_sel & ~0x7f )
1449            logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel);
1466         if ( m_igs_input_sel & ~0x7f )
1467            logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space.device()), m_igs_input_sel);
14501468
1451//          popmessage("sel2 %02x",state->m_igs_input_sel&~0x1f);
1469//          popmessage("sel2 %02x",m_igs_input_sel&~0x1f);
14521470         break;
14531471
14541472      case 0x02:
14551473         if (ACCESSING_BITS_0_7)
14561474         {
1457            state->m_lhb2_pen_hi = data & 0x07;
1475            m_lhb2_pen_hi = data & 0x07;
14581476
1459            okim6295_device *oki = space->machine().device<okim6295_device>("oki");
1477            okim6295_device *oki = machine().device<okim6295_device>("oki");
14601478            oki->set_bank_base((data & 0x08) ? 0x40000 : 0);
14611479         }
14621480
1463         if ( state->m_lhb2_pen_hi & ~0xf )
1464            logerror("%06x: warning, unknown bits written in lhb2_pen_hi = %02x\n", cpu_get_pc(&space->device()), state->m_lhb2_pen_hi);
1481         if ( m_lhb2_pen_hi & ~0xf )
1482            logerror("%06x: warning, unknown bits written in lhb2_pen_hi = %02x\n", cpu_get_pc(&space.device()), m_lhb2_pen_hi);
14651483
1466//          popmessage("oki %02x",state->m_lhb2_pen_hi & 0x08);
1484//          popmessage("oki %02x",m_lhb2_pen_hi & 0x08);
14671485         break;
14681486
14691487      default:
1470         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data);
1488         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0], data);
14711489   }
14721490}
1473static READ16_HANDLER( lhb2_igs003_r )
1491READ16_MEMBER(igs011_state::lhb2_igs003_r)
14741492{
1475   igs011_state *state = space->machine().driver_data<igs011_state>();
1476   switch(state->m_igs003_reg[0])
1493   switch(m_igs003_reg[0])
14771494   {
14781495      case 0x01:
1479         if (~state->m_igs_input_sel & 0x01)   return input_port_read(space->machine(), "KEY0");
1480         if (~state->m_igs_input_sel & 0x02)   return input_port_read(space->machine(), "KEY1");
1481         if (~state->m_igs_input_sel & 0x04)   return input_port_read(space->machine(), "KEY2");
1482         if (~state->m_igs_input_sel & 0x08)   return input_port_read(space->machine(), "KEY3");
1483         if (~state->m_igs_input_sel & 0x10)   return input_port_read(space->machine(), "KEY4");
1496         if (~m_igs_input_sel & 0x01)   return input_port_read(machine(), "KEY0");
1497         if (~m_igs_input_sel & 0x02)   return input_port_read(machine(), "KEY1");
1498         if (~m_igs_input_sel & 0x04)   return input_port_read(machine(), "KEY2");
1499         if (~m_igs_input_sel & 0x08)   return input_port_read(machine(), "KEY3");
1500         if (~m_igs_input_sel & 0x10)   return input_port_read(machine(), "KEY4");
14841501         /* fall through */
14851502      default:
1486         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]);
1503         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0]);
14871504         break;
14881505
14891506//      case 0x03:
r14845r14846
15211538
15221539
15231540
1524static WRITE16_HANDLER( wlcc_igs003_w )
1541WRITE16_MEMBER(igs011_state::wlcc_igs003_w)
15251542{
1526   igs011_state *state = space->machine().driver_data<igs011_state>();
1527   COMBINE_DATA(&state->m_igs003_reg[offset]);
1543   COMBINE_DATA(&m_igs003_reg[offset]);
15281544
15291545   if (offset == 0)
15301546      return;
15311547
1532   switch(state->m_igs003_reg[0])
1548   switch(m_igs003_reg[0])
15331549   {
15341550      case 0x02:
15351551         if (ACCESSING_BITS_0_7)
15361552         {
1537            coin_counter_w(space->machine(), 0,   data & 0x01);
1553            coin_counter_w(machine(), 0,   data & 0x01);
15381554            //  coin out        data & 0x02
15391555
1540            okim6295_device *oki = space->machine().device<okim6295_device>("oki");
1556            okim6295_device *oki = machine().device<okim6295_device>("oki");
15411557            oki->set_bank_base((data & 0x10) ? 0x40000 : 0);
1542            state->m_igs_hopper      =   data & 0x20;
1558            m_igs_hopper      =   data & 0x20;
15431559         }
15441560
15451561         if (data & ~0x33)
1546            logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space->device()), data);
1562            logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space.device()), data);
15471563
15481564//          popmessage("coin %02x",data);
15491565         break;
15501566
15511567      default:
1552         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data);
1568         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0], data);
15531569   }
15541570}
1555static READ16_HANDLER( wlcc_igs003_r )
1571READ16_MEMBER(igs011_state::wlcc_igs003_r)
15561572{
1557   igs011_state *state = space->machine().driver_data<igs011_state>();
1558   switch(state->m_igs003_reg[0])
1573   switch(m_igs003_reg[0])
15591574   {
1560      case 0x00:   return input_port_read(space->machine(), "IN0");
1575      case 0x00:   return input_port_read(machine(), "IN0");
15611576
15621577      case 0x20:   return 0x49;
15631578      case 0x21:   return 0x47;
r14845r14846
15821597      case 0x34:   return 0x32;
15831598
15841599      default:
1585         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]);
1600         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0]);
15861601   }
15871602
15881603   return 0;
r14845r14846
15901605
15911606
15921607
1593static WRITE16_HANDLER( xymg_igs003_w )
1608WRITE16_MEMBER(igs011_state::xymg_igs003_w)
15941609{
1595   igs011_state *state = space->machine().driver_data<igs011_state>();
1596   COMBINE_DATA(&state->m_igs003_reg[offset]);
1610   COMBINE_DATA(&m_igs003_reg[offset]);
15971611
15981612   if (offset == 0)
15991613      return;
16001614
1601   switch(state->m_igs003_reg[0])
1615   switch(m_igs003_reg[0])
16021616   {
16031617      case 0x01:
1604         COMBINE_DATA(&state->m_igs_input_sel);
1618         COMBINE_DATA(&m_igs_input_sel);
16051619
16061620         if (ACCESSING_BITS_0_7)
16071621         {
1608            coin_counter_w(space->machine(), 0,   data & 0x20);
1622            coin_counter_w(machine(), 0,   data & 0x20);
16091623            //  coin out        data & 0x40
1610            state->m_igs_hopper      =   data & 0x80;
1624            m_igs_hopper      =   data & 0x80;
16111625         }
16121626
1613         if ( state->m_igs_input_sel & 0x40 )
1614            logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel);
1627         if ( m_igs_input_sel & 0x40 )
1628            logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space.device()), m_igs_input_sel);
16151629
1616//          popmessage("sel2 %02x",state->m_igs_input_sel&~0x1f);
1630//          popmessage("sel2 %02x",m_igs_input_sel&~0x1f);
16171631         break;
16181632
16191633      default:
1620         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data);
1634         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0], data);
16211635   }
16221636}
1623static READ16_HANDLER( xymg_igs003_r )
1637READ16_MEMBER(igs011_state::xymg_igs003_r)
16241638{
1625   igs011_state *state = space->machine().driver_data<igs011_state>();
1626   switch(state->m_igs003_reg[0])
1639   switch(m_igs003_reg[0])
16271640   {
1628      case 0x00:   return input_port_read(space->machine(), "COIN");
1641      case 0x00:   return input_port_read(machine(), "COIN");
16291642
16301643      case 0x02:
1631         if (~state->m_igs_input_sel & 0x01)   return input_port_read(space->machine(), "KEY0");
1632         if (~state->m_igs_input_sel & 0x02)   return input_port_read(space->machine(), "KEY1");
1633         if (~state->m_igs_input_sel & 0x04)   return input_port_read(space->machine(), "KEY2");
1634         if (~state->m_igs_input_sel & 0x08)   return input_port_read(space->machine(), "KEY3");
1635         if (~state->m_igs_input_sel & 0x10)   return input_port_read(space->machine(), "KEY4");
1644         if (~m_igs_input_sel & 0x01)   return input_port_read(machine(), "KEY0");
1645         if (~m_igs_input_sel & 0x02)   return input_port_read(machine(), "KEY1");
1646         if (~m_igs_input_sel & 0x04)   return input_port_read(machine(), "KEY2");
1647         if (~m_igs_input_sel & 0x08)   return input_port_read(machine(), "KEY3");
1648         if (~m_igs_input_sel & 0x10)   return input_port_read(machine(), "KEY4");
16361649         /* fall through */
16371650
16381651      case 0x20:   return 0x49;
r14845r14846
16581671      case 0x34:   return 0x32;
16591672
16601673      default:
1661         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]);
1674         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0]);
16621675         break;
16631676   }
16641677
r14845r14846
16671680
16681681
16691682
1670static WRITE16_HANDLER( vbowl_igs003_w )
1683WRITE16_MEMBER(igs011_state::vbowl_igs003_w)
16711684{
1672   igs011_state *state = space->machine().driver_data<igs011_state>();
1673   COMBINE_DATA(&state->m_igs003_reg[offset]);
1685   COMBINE_DATA(&m_igs003_reg[offset]);
16741686
16751687   if (offset == 0)
16761688      return;
16771689
1678   switch(state->m_igs003_reg[0])
1690   switch(m_igs003_reg[0])
16791691   {
16801692      case 0x02:
16811693         if (ACCESSING_BITS_0_7)
16821694         {
1683            coin_counter_w(space->machine(), 0, data & 1);
1684            coin_counter_w(space->machine(), 1, data & 2);
1695            coin_counter_w(machine(), 0, data & 1);
1696            coin_counter_w(machine(), 1, data & 2);
16851697         }
16861698
16871699         if (data & ~0x3)
1688            logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space->device()), data);
1700            logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space.device()), data);
16891701
16901702         break;
16911703
16921704      default:
1693//          popmessage("igs003 %x <- %04x",state->m_igs003_reg[0],data);
1694         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data);
1705//          popmessage("igs003 %x <- %04x",m_igs003_reg[0],data);
1706         logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0], data);
16951707   }
16961708}
1697static READ16_HANDLER( vbowl_igs003_r )
1709READ16_MEMBER(igs011_state::vbowl_igs003_r)
16981710{
1699   igs011_state *state = space->machine().driver_data<igs011_state>();
1700   switch(state->m_igs003_reg[0])
1711   switch(m_igs003_reg[0])
17011712   {
1702      case 0x00:   return input_port_read(space->machine(), "IN0");
1703      case 0x01:   return input_port_read(space->machine(), "IN1");
1713      case 0x00:   return input_port_read(machine(), "IN0");
1714      case 0x01:   return input_port_read(machine(), "IN1");
17041715
17051716//      case 0x03:
17061717//          return 0xff;    // parametric bitswaps?
r14845r14846
17281739      case 0x34:   return 0x32;
17291740
17301741      default:
1731         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]);
1742         logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space.device()), m_igs003_reg[0]);
17321743   }
17331744
17341745   return 0;
r14845r14846
18001811
18011812   drgnwrld_type2_decrypt(machine);
18021813   drgnwrld_gfx_decrypt(machine);
1803
1804   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xd4c0, 0xd4ff, FUNC(drgnwrldv21_igs011_prot2_r));
1814   igs011_state *state = machine.driver_data<igs011_state>();
1815   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xd4c0, 0xd4ff, read16_delegate(FUNC(igs011_state::drgnwrldv21_igs011_prot2_r), state));
18051816/*
18061817    // PROTECTION CHECKS
18071818    // bp 32ee; bp 11ca8; bp 23d5e; bp 23fd0; bp 24170; bp 24348; bp 2454e; bp 246cc; bp 24922; bp 24b66; bp 24de2; bp 2502a; bp 25556; bp 269de; bp 2766a; bp 2a830
r14845r14846
19411952
19421953   dbc_decrypt(machine);
19431954
1944   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x10600, 0x107ff, FUNC(dbc_igs011_prot2_r));
1955   igs011_state *state = machine.driver_data<igs011_state>();
1956   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x10600, 0x107ff, read16_delegate(FUNC(igs011_state::dbc_igs011_prot2_r), state));
19451957/*
19461958    // PROTECTION CHECKS
19471959    rom[0x04c42/2]  =   0x602e;     // 004C42: 6604         bne 4c48  (rom test error otherwise)
r14845r14846
19701982
19711983   ryukobou_decrypt(machine);
19721984
1973   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x10600, 0x107ff, FUNC(ryukobou_igs011_prot2_r));
1985   igs011_state *state = machine.driver_data<igs011_state>();
1986   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x10600, 0x107ff, read16_delegate(FUNC(igs011_state::ryukobou_igs011_prot2_r), state));
19741987
19751988   // PROTECTION CHECKS
19761989//  rom[0x2df68/2]  =   0x4e75;     // 02DF68: 4E56 FE00    link A6, #-$200  (fills palette with pink otherwise)
r14845r14846
21202133
21212134static ADDRESS_MAP_START( drgnwrld, AS_PROGRAM, 16, igs011_state )
21222135//  drgnwrld: IGS011 protection dynamically mapped at 1dd7x
2123//  AM_RANGE( 0x01dd70, 0x01dd77 ) AM_WRITE_LEGACY(igs011_prot1_w )
2136//  AM_RANGE( 0x01dd70, 0x01dd77 ) AM_WRITE(igs011_prot1_w )
21242137//  AM_RANGE( 0x01dd78, 0x01dd79 ) AM_READ ( igs011_prot1_r )
21252138
21262139   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
21272140   AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram")
21282141   AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE(m_priority_ram )
2129   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE_LEGACY(igs011_palette ) AM_BASE_GENERIC( paletteram )
2142   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE(igs011_palette ) AM_BASE_GENERIC( paletteram )
21302143   AM_RANGE( 0x500000, 0x500001 ) AM_READ_PORT( "COIN" )
21312144   AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
21322145   AM_RANGE( 0x700000, 0x700003 ) AM_DEVWRITE8_LEGACY("ymsnd", ym3812_w, 0x00ff )
21332146
2134   AM_RANGE( 0x800000, 0x800003 ) AM_WRITE_LEGACY(drgnwrld_igs003_w )
2135   AM_RANGE( 0x800002, 0x800003 ) AM_READ_LEGACY(drgnwrld_igs003_r )
2147   AM_RANGE( 0x800000, 0x800003 ) AM_WRITE(drgnwrld_igs003_w )
2148   AM_RANGE( 0x800002, 0x800003 ) AM_READ(drgnwrld_igs003_r )
21362149
2137   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE_LEGACY(igs011_priority_w )
2138   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE_LEGACY(igs_dips_w )
2150   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE(igs011_priority_w )
2151   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE(igs_dips_w )
21392152
2140   AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE_LEGACY(igs011_prot_addr_w )
2141//  AM_RANGE( 0xa50000, 0xa50005 ) AM_READ_LEGACY(igs011_prot_fake_r )
2153   AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE(igs011_prot_addr_w )
2154//  AM_RANGE( 0xa50000, 0xa50005 ) AM_READ(igs011_prot_fake_r )
21422155
2143   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE_LEGACY(igs011_blit_x_w )
2144   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE_LEGACY(igs011_blit_y_w )
2145   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE_LEGACY(igs011_blit_w_w )
2146   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE_LEGACY(igs011_blit_h_w )
2147   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE_LEGACY(igs011_blit_gfx_lo_w )
2148   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE_LEGACY(igs011_blit_gfx_hi_w )
2149   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE_LEGACY(igs011_blit_flags_w )
2150   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE_LEGACY(igs011_blit_pen_w )
2151   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE_LEGACY(igs011_blit_depth_w )
2152   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ_LEGACY(igs_3_dips_r )
2156   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE(igs011_blit_x_w )
2157   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE(igs011_blit_y_w )
2158   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE(igs011_blit_w_w )
2159   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE(igs011_blit_h_w )
2160   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE(igs011_blit_gfx_lo_w )
2161   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE(igs011_blit_gfx_hi_w )
2162   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE(igs011_blit_flags_w )
2163   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE(igs011_blit_pen_w )
2164   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE(igs011_blit_depth_w )
2165   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ(igs_3_dips_r )
21532166ADDRESS_MAP_END
21542167
21552168static ADDRESS_MAP_START( drgnwrld_igs012, AS_PROGRAM, 16, igs011_state )
21562169   // IGS012
2157   AM_RANGE( 0x001600, 0x00160f ) AM_WRITE_LEGACY(igs012_prot_swap_w      )   AM_MIRROR(0x01c000)   // swap (a5 / 55)
2158   AM_RANGE( 0x001610, 0x00161f ) AM_READ_LEGACY(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 0)
2159   AM_RANGE( 0x001620, 0x00162f ) AM_WRITE_LEGACY(igs012_prot_dec_inc_w   )   AM_MIRROR(0x01c000)   // dec  (aa), inc  (fa)
2160   AM_RANGE( 0x001630, 0x00163f ) AM_WRITE_LEGACY(igs012_prot_inc_w      )   AM_MIRROR(0x01c000)   // inc  (ff)
2161   AM_RANGE( 0x001640, 0x00164f ) AM_WRITE_LEGACY(igs012_prot_copy_w      )   AM_MIRROR(0x01c000)   // copy (22)
2162   AM_RANGE( 0x001650, 0x00165f ) AM_WRITE_LEGACY(igs012_prot_dec_copy_w   )   AM_MIRROR(0x01c000)   // dec  (5a), copy (33)
2163   AM_RANGE( 0x001660, 0x00166f ) AM_READ_LEGACY(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 1)
2164   AM_RANGE( 0x001670, 0x00167f ) AM_WRITE_LEGACY(igs012_prot_mode_w      )   AM_MIRROR(0x01c000)   // mode (cc / dd)
2170   AM_RANGE( 0x001600, 0x00160f ) AM_WRITE(igs012_prot_swap_w      )   AM_MIRROR(0x01c000)   // swap (a5 / 55)
2171   AM_RANGE( 0x001610, 0x00161f ) AM_READ(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 0)
2172   AM_RANGE( 0x001620, 0x00162f ) AM_WRITE(igs012_prot_dec_inc_w   )   AM_MIRROR(0x01c000)   // dec  (aa), inc  (fa)
2173   AM_RANGE( 0x001630, 0x00163f ) AM_WRITE(igs012_prot_inc_w      )   AM_MIRROR(0x01c000)   // inc  (ff)
2174   AM_RANGE( 0x001640, 0x00164f ) AM_WRITE(igs012_prot_copy_w      )   AM_MIRROR(0x01c000)   // copy (22)
2175   AM_RANGE( 0x001650, 0x00165f ) AM_WRITE(igs012_prot_dec_copy_w   )   AM_MIRROR(0x01c000)   // dec  (5a), copy (33)
2176   AM_RANGE( 0x001660, 0x00166f ) AM_READ(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 1)
2177   AM_RANGE( 0x001670, 0x00167f ) AM_WRITE(igs012_prot_mode_w      )   AM_MIRROR(0x01c000)   // mode (cc / dd)
21652178
2166   AM_RANGE( 0x00d400, 0x00d43f ) AM_WRITE_LEGACY(igs011_prot2_dec_w            )   // dec   (33)
2167   AM_RANGE( 0x00d440, 0x00d47f ) AM_WRITE_LEGACY(drgnwrld_igs011_prot2_swap_w   )   // swap  (33)
2168   AM_RANGE( 0x00d480, 0x00d4bf ) AM_WRITE_LEGACY(igs011_prot2_reset_w         )   // reset (33)
2169   AM_RANGE( 0x00d4c0, 0x00d4ff ) AM_READ_LEGACY(drgnwrldv20j_igs011_prot2_r   )   // read
2179   AM_RANGE( 0x00d400, 0x00d43f ) AM_WRITE(igs011_prot2_dec_w            )   // dec   (33)
2180   AM_RANGE( 0x00d440, 0x00d47f ) AM_WRITE(drgnwrld_igs011_prot2_swap_w   )   // swap  (33)
2181   AM_RANGE( 0x00d480, 0x00d4bf ) AM_WRITE(igs011_prot2_reset_w         )   // reset (33)
2182   AM_RANGE( 0x00d4c0, 0x00d4ff ) AM_READ(drgnwrldv20j_igs011_prot2_r   )   // read
21702183
2171   AM_RANGE( 0x902000, 0x902fff ) AM_WRITE_LEGACY(igs012_prot_reset_w   )   // reset?
2172//  AM_RANGE( 0x902000, 0x902005 ) AM_WRITE_LEGACY(igs012_prot_fake_r )
2184   AM_RANGE( 0x902000, 0x902fff ) AM_WRITE(igs012_prot_reset_w   )   // reset?
2185//  AM_RANGE( 0x902000, 0x902005 ) AM_WRITE(igs012_prot_fake_r )
21732186
21742187   AM_IMPORT_FROM(drgnwrld)
21752188ADDRESS_MAP_END
r14845r14846
21772190
21782191
21792192// Only values 0 and 7 are written (1 bit per irq source?)
2180static WRITE16_HANDLER( lhb_irq_enable_w )
2193WRITE16_MEMBER(igs011_state::lhb_irq_enable_w)
21812194{
2182   igs011_state *state = space->machine().driver_data<igs011_state>();
2183   COMBINE_DATA( &state->m_lhb_irq_enable );
2195   COMBINE_DATA( &m_lhb_irq_enable );
21842196}
21852197
21862198static WRITE16_DEVICE_HANDLER( lhb_okibank_w )
r14845r14846
21992211
22002212static ADDRESS_MAP_START( lhb, AS_PROGRAM, 16, igs011_state )
22012213//  lhb: IGS011 protection dynamically mapped at 834x
2202//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE_LEGACY(igs011_prot1_w )
2214//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE(igs011_prot1_w )
22032215//  AM_RANGE( 0x008348, 0x008349 ) AM_READ ( igs011_prot1_r )
22042216
22052217   AM_RANGE( 0x010000, 0x010001 ) AM_DEVWRITE_LEGACY("oki", lhb_okibank_w )
22062218
2207   AM_RANGE( 0x010200, 0x0103ff ) AM_WRITE_LEGACY(igs011_prot2_inc_w         )
2208   AM_RANGE( 0x010400, 0x0105ff ) AM_WRITE_LEGACY(lhb_igs011_prot2_swap_w   )
2209   AM_RANGE( 0x010600, 0x0107ff ) AM_READ_LEGACY(lhb_igs011_prot2_r         )
2219   AM_RANGE( 0x010200, 0x0103ff ) AM_WRITE(igs011_prot2_inc_w         )
2220   AM_RANGE( 0x010400, 0x0105ff ) AM_WRITE(lhb_igs011_prot2_swap_w   )
2221   AM_RANGE( 0x010600, 0x0107ff ) AM_READ(lhb_igs011_prot2_r         )
22102222   // no reset
22112223
22122224   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
22132225   AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram")
22142226   AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE(m_priority_ram )
2215   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE_LEGACY(igs011_layers_r, igs011_layers_w )
2216   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE_LEGACY(igs011_palette ) AM_BASE_GENERIC( paletteram )
2227   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE(igs011_layers_r, igs011_layers_w )
2228   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE(igs011_palette ) AM_BASE_GENERIC( paletteram )
22172229   AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
22182230   AM_RANGE( 0x700000, 0x700001 ) AM_READ_PORT( "COIN" )
2219   AM_RANGE( 0x700002, 0x700005 ) AM_READ_LEGACY(lhb_inputs_r )
2220   AM_RANGE( 0x700002, 0x700003 ) AM_WRITE_LEGACY(lhb_inputs_w )
2221   AM_RANGE( 0x820000, 0x820001 ) AM_WRITE_LEGACY(igs011_priority_w )
2222   AM_RANGE( 0x838000, 0x838001 ) AM_WRITE_LEGACY(lhb_irq_enable_w )
2223   AM_RANGE( 0x840000, 0x840001 ) AM_WRITE_LEGACY(igs_dips_w )
2231   AM_RANGE( 0x700002, 0x700005 ) AM_READ(lhb_inputs_r )
2232   AM_RANGE( 0x700002, 0x700003 ) AM_WRITE(lhb_inputs_w )
2233   AM_RANGE( 0x820000, 0x820001 ) AM_WRITE(igs011_priority_w )
2234   AM_RANGE( 0x838000, 0x838001 ) AM_WRITE(lhb_irq_enable_w )
2235   AM_RANGE( 0x840000, 0x840001 ) AM_WRITE(igs_dips_w )
22242236
2225   AM_RANGE( 0x850000, 0x850001 ) AM_WRITE_LEGACY(igs011_prot_addr_w )
2226//  AM_RANGE( 0x850000, 0x850005 ) AM_WRITE_LEGACY(igs011_prot_fake_r )
2237   AM_RANGE( 0x850000, 0x850001 ) AM_WRITE(igs011_prot_addr_w )
2238//  AM_RANGE( 0x850000, 0x850005 ) AM_WRITE(igs011_prot_fake_r )
22272239
2228   AM_RANGE( 0x858000, 0x858001 ) AM_WRITE_LEGACY(igs011_blit_x_w )
2229   AM_RANGE( 0x858800, 0x858801 ) AM_WRITE_LEGACY(igs011_blit_y_w )
2230   AM_RANGE( 0x859000, 0x859001 ) AM_WRITE_LEGACY(igs011_blit_w_w )
2231   AM_RANGE( 0x859800, 0x859801 ) AM_WRITE_LEGACY(igs011_blit_h_w )
2232   AM_RANGE( 0x85a000, 0x85a001 ) AM_WRITE_LEGACY(igs011_blit_gfx_lo_w )
2233   AM_RANGE( 0x85a800, 0x85a801 ) AM_WRITE_LEGACY(igs011_blit_gfx_hi_w )
2234   AM_RANGE( 0x85b000, 0x85b001 ) AM_WRITE_LEGACY(igs011_blit_flags_w )
2235   AM_RANGE( 0x85b800, 0x85b801 ) AM_WRITE_LEGACY(igs011_blit_pen_w )
2236   AM_RANGE( 0x85c000, 0x85c001 ) AM_WRITE_LEGACY(igs011_blit_depth_w )
2237   AM_RANGE( 0x888000, 0x888001 ) AM_READ_LEGACY(igs_5_dips_r )
2240   AM_RANGE( 0x858000, 0x858001 ) AM_WRITE(igs011_blit_x_w )
2241   AM_RANGE( 0x858800, 0x858801 ) AM_WRITE(igs011_blit_y_w )
2242   AM_RANGE( 0x859000, 0x859001 ) AM_WRITE(igs011_blit_w_w )
2243   AM_RANGE( 0x859800, 0x859801 ) AM_WRITE(igs011_blit_h_w )
2244   AM_RANGE( 0x85a000, 0x85a001 ) AM_WRITE(igs011_blit_gfx_lo_w )
2245   AM_RANGE( 0x85a800, 0x85a801 ) AM_WRITE(igs011_blit_gfx_hi_w )
2246   AM_RANGE( 0x85b000, 0x85b001 ) AM_WRITE(igs011_blit_flags_w )
2247   AM_RANGE( 0x85b800, 0x85b801 ) AM_WRITE(igs011_blit_pen_w )
2248   AM_RANGE( 0x85c000, 0x85c001 ) AM_WRITE(igs011_blit_depth_w )
2249   AM_RANGE( 0x888000, 0x888001 ) AM_READ(igs_5_dips_r )
22382250ADDRESS_MAP_END
22392251
22402252static ADDRESS_MAP_START( xymg, AS_PROGRAM, 16, igs011_state )
22412253//  xymg: IGS011 protection dynamically mapped at 834x
2242//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE_LEGACY(igs011_prot1_w )
2254//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE(igs011_prot1_w )
22432255//  AM_RANGE( 0x008348, 0x008349 ) AM_READ ( igs011_prot1_r )
22442256
22452257   AM_RANGE( 0x010000, 0x010001 ) AM_DEVWRITE_LEGACY("oki", lhb_okibank_w )
22462258
2247   AM_RANGE( 0x010200, 0x0103ff ) AM_WRITE_LEGACY(igs011_prot2_inc_w         )   // inc  (33)
2248   AM_RANGE( 0x010400, 0x0105ff ) AM_WRITE_LEGACY(lhb_igs011_prot2_swap_w   )   // swap (33)
2249   AM_RANGE( 0x010600, 0x0107ff ) AM_READ_LEGACY(lhb_igs011_prot2_r         )   // read
2259   AM_RANGE( 0x010200, 0x0103ff ) AM_WRITE(igs011_prot2_inc_w         )   // inc  (33)
2260   AM_RANGE( 0x010400, 0x0105ff ) AM_WRITE(lhb_igs011_prot2_swap_w   )   // swap (33)
2261   AM_RANGE( 0x010600, 0x0107ff ) AM_READ(lhb_igs011_prot2_r         )   // read
22502262   // no reset
22512263
22522264   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
22532265   AM_RANGE( 0x100000, 0x103fff ) AM_RAM
22542266   AM_RANGE( 0x1f0000, 0x1f3fff ) AM_RAM AM_SHARE("nvram") // extra ram
22552267   AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE(m_priority_ram )
2256   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE_LEGACY(igs011_layers_r, igs011_layers_w )
2257   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE_LEGACY(igs011_palette ) AM_BASE_GENERIC( paletteram )
2268   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE(igs011_layers_r, igs011_layers_w )
2269   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE(igs011_palette ) AM_BASE_GENERIC( paletteram )
22582270   AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
2259   AM_RANGE( 0x700000, 0x700003 ) AM_WRITE_LEGACY(xymg_igs003_w )
2260   AM_RANGE( 0x700002, 0x700003 ) AM_READ_LEGACY(xymg_igs003_r )
2261   AM_RANGE( 0x820000, 0x820001 ) AM_WRITE_LEGACY(igs011_priority_w )
2262   AM_RANGE( 0x840000, 0x840001 ) AM_WRITE_LEGACY(igs_dips_w )
2271   AM_RANGE( 0x700000, 0x700003 ) AM_WRITE(xymg_igs003_w )
2272   AM_RANGE( 0x700002, 0x700003 ) AM_READ(xymg_igs003_r )
2273   AM_RANGE( 0x820000, 0x820001 ) AM_WRITE(igs011_priority_w )
2274   AM_RANGE( 0x840000, 0x840001 ) AM_WRITE(igs_dips_w )
22632275
2264   AM_RANGE( 0x850000, 0x850001 ) AM_WRITE_LEGACY(igs011_prot_addr_w )
2265//  AM_RANGE( 0x850000, 0x850005 ) AM_WRITE_LEGACY(igs011_prot_fake_r )
2276   AM_RANGE( 0x850000, 0x850001 ) AM_WRITE(igs011_prot_addr_w )
2277//  AM_RANGE( 0x850000, 0x850005 ) AM_WRITE(igs011_prot_fake_r )
22662278
2267   AM_RANGE( 0x858000, 0x858001 ) AM_WRITE_LEGACY(igs011_blit_x_w )
2268   AM_RANGE( 0x858800, 0x858801 ) AM_WRITE_LEGACY(igs011_blit_y_w )
2269   AM_RANGE( 0x859000, 0x859001 ) AM_WRITE_LEGACY(igs011_blit_w_w )
2270   AM_RANGE( 0x859800, 0x859801 ) AM_WRITE_LEGACY(igs011_blit_h_w )
2271   AM_RANGE( 0x85a000, 0x85a001 ) AM_WRITE_LEGACY(igs011_blit_gfx_lo_w )
2272   AM_RANGE( 0x85a800, 0x85a801 ) AM_WRITE_LEGACY(igs011_blit_gfx_hi_w )
2273   AM_RANGE( 0x85b000, 0x85b001 ) AM_WRITE_LEGACY(igs011_blit_flags_w )
2274   AM_RANGE( 0x85b800, 0x85b801 ) AM_WRITE_LEGACY(igs011_blit_pen_w )
2275   AM_RANGE( 0x85c000, 0x85c001 ) AM_WRITE_LEGACY(igs011_blit_depth_w )
2276   AM_RANGE( 0x888000, 0x888001 ) AM_READ_LEGACY(igs_3_dips_r )
2279   AM_RANGE( 0x858000, 0x858001 ) AM_WRITE(igs011_blit_x_w )
2280   AM_RANGE( 0x858800, 0x858801 ) AM_WRITE(igs011_blit_y_w )
2281   AM_RANGE( 0x859000, 0x859001 ) AM_WRITE(igs011_blit_w_w )
2282   AM_RANGE( 0x859800, 0x859801 ) AM_WRITE(igs011_blit_h_w )
2283   AM_RANGE( 0x85a000, 0x85a001 ) AM_WRITE(igs011_blit_gfx_lo_w )
2284   AM_RANGE( 0x85a800, 0x85a801 ) AM_WRITE(igs011_blit_gfx_hi_w )
2285   AM_RANGE( 0x85b000, 0x85b001 ) AM_WRITE(igs011_blit_flags_w )
2286   AM_RANGE( 0x85b800, 0x85b801 ) AM_WRITE(igs011_blit_pen_w )
2287   AM_RANGE( 0x85c000, 0x85c001 ) AM_WRITE(igs011_blit_depth_w )
2288   AM_RANGE( 0x888000, 0x888001 ) AM_READ(igs_3_dips_r )
22772289ADDRESS_MAP_END
22782290
22792291static ADDRESS_MAP_START( wlcc, AS_PROGRAM, 16, igs011_state )
22802292//  wlcc: IGS011 protection dynamically mapped at 834x
2281//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE_LEGACY(igs011_prot1_w )
2282//  AM_RANGE( 0x008348, 0x008349 ) AM_READ_LEGACY(igs011_prot1_r )
2293//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE(igs011_prot1_w )
2294//  AM_RANGE( 0x008348, 0x008349 ) AM_READ(igs011_prot1_r )
22832295
2284   AM_RANGE( 0x518000, 0x5181ff ) AM_WRITE_LEGACY(igs011_prot2_inc_w         )   // inc   (33)
2285   AM_RANGE( 0x518200, 0x5183ff ) AM_WRITE_LEGACY(wlcc_igs011_prot2_swap_w   )   // swap  (33)
2286   AM_RANGE( 0x518800, 0x5189ff ) AM_READ_LEGACY(igs011_prot2_reset_r      )   // reset
2287   AM_RANGE( 0x519000, 0x5195ff ) AM_READ_LEGACY(lhb_igs011_prot2_r         )   // read
2296   AM_RANGE( 0x518000, 0x5181ff ) AM_WRITE(igs011_prot2_inc_w         )   // inc   (33)
2297   AM_RANGE( 0x518200, 0x5183ff ) AM_WRITE(wlcc_igs011_prot2_swap_w   )   // swap  (33)
2298   AM_RANGE( 0x518800, 0x5189ff ) AM_READ(igs011_prot2_reset_r      )   // reset
2299   AM_RANGE( 0x519000, 0x5195ff ) AM_READ(lhb_igs011_prot2_r         )   // read
22882300
22892301   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
22902302   AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram")
22912303   AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE(m_priority_ram )
2292   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE_LEGACY(igs011_layers_r, igs011_layers_w )
2293   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE_LEGACY(igs011_palette ) AM_BASE_GENERIC( paletteram )
2304   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE(igs011_layers_r, igs011_layers_w )
2305   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE(igs011_palette ) AM_BASE_GENERIC( paletteram )
22942306   AM_RANGE( 0x520000, 0x520001 ) AM_READ_PORT( "COIN" )
22952307   AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
2296   AM_RANGE( 0x800000, 0x800003 ) AM_WRITE_LEGACY(wlcc_igs003_w )
2297   AM_RANGE( 0x800002, 0x800003 ) AM_READ_LEGACY(wlcc_igs003_r )
2298   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE_LEGACY(igs011_priority_w )
2299   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE_LEGACY(igs_dips_w )
2308   AM_RANGE( 0x800000, 0x800003 ) AM_WRITE(wlcc_igs003_w )
2309   AM_RANGE( 0x800002, 0x800003 ) AM_READ(wlcc_igs003_r )
2310   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE(igs011_priority_w )
2311   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE(igs_dips_w )
23002312
2301   AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE_LEGACY(igs011_prot_addr_w )
2302//  AM_RANGE( 0xa50000, 0xa50005 ) AM_READ_LEGACY(igs011_prot_fake_r )
2313   AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE(igs011_prot_addr_w )
2314//  AM_RANGE( 0xa50000, 0xa50005 ) AM_READ(igs011_prot_fake_r )
23032315
2304   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE_LEGACY(igs011_blit_x_w )
2305   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE_LEGACY(igs011_blit_y_w )
2306   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE_LEGACY(igs011_blit_w_w )
2307   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE_LEGACY(igs011_blit_h_w )
2308   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE_LEGACY(igs011_blit_gfx_lo_w )
2309   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE_LEGACY(igs011_blit_gfx_hi_w )
2310   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE_LEGACY(igs011_blit_flags_w )
2311   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE_LEGACY(igs011_blit_pen_w )
2312   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE_LEGACY(igs011_blit_depth_w )
2313   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ_LEGACY(igs_4_dips_r )
2316   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE(igs011_blit_x_w )
2317   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE(igs011_blit_y_w )
2318   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE(igs011_blit_w_w )
2319   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE(igs011_blit_h_w )
2320   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE(igs011_blit_gfx_lo_w )
2321   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE(igs011_blit_gfx_hi_w )
2322   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE(igs011_blit_flags_w )
2323   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE(igs011_blit_pen_w )
2324   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE(igs011_blit_depth_w )
2325   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ(igs_4_dips_r )
23142326ADDRESS_MAP_END
23152327
23162328
23172329
23182330static ADDRESS_MAP_START( lhb2, AS_PROGRAM, 16, igs011_state )
23192331//  lhb2: IGS011 protection dynamically mapped at 1ff8x
2320//  AM_RANGE( 0x01ff80, 0x01ff87 ) AM_WRITE_LEGACY(igs011_prot1_w )
2332//  AM_RANGE( 0x01ff80, 0x01ff87 ) AM_WRITE(igs011_prot1_w )
23212333//  AM_RANGE( 0x01ff88, 0x01ff89 ) AM_READ ( igs011_prot1_r )
23222334
2323   AM_RANGE( 0x020000, 0x0201ff ) AM_WRITE_LEGACY(igs011_prot2_inc_w         )   // inc   (55)
2324   AM_RANGE( 0x020200, 0x0203ff ) AM_WRITE_LEGACY(lhb_igs011_prot2_swap_w   )   // swap  (33)
2325   AM_RANGE( 0x020400, 0x0205ff ) AM_READ_LEGACY(lhb2_igs011_prot2_r      )   // read
2326   AM_RANGE( 0x020600, 0x0207ff ) AM_WRITE_LEGACY(igs011_prot2_reset_w      )   // reset (55)
2335   AM_RANGE( 0x020000, 0x0201ff ) AM_WRITE(igs011_prot2_inc_w         )   // inc   (55)
2336   AM_RANGE( 0x020200, 0x0203ff ) AM_WRITE(lhb_igs011_prot2_swap_w   )   // swap  (33)
2337   AM_RANGE( 0x020400, 0x0205ff ) AM_READ(lhb2_igs011_prot2_r      )   // read
2338   AM_RANGE( 0x020600, 0x0207ff ) AM_WRITE(igs011_prot2_reset_w      )   // reset (55)
23272339
23282340   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
23292341   AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram")
23302342   AM_RANGE( 0x200000, 0x200001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
23312343   AM_RANGE( 0x204000, 0x204003 ) AM_DEVWRITE8_LEGACY("ymsnd", ym2413_w, 0x00ff )
2332   AM_RANGE( 0x208000, 0x208003 ) AM_WRITE_LEGACY(lhb2_igs003_w )
2333   AM_RANGE( 0x208002, 0x208003 ) AM_READ_LEGACY(lhb2_igs003_r )
2344   AM_RANGE( 0x208000, 0x208003 ) AM_WRITE(lhb2_igs003_w )
2345   AM_RANGE( 0x208002, 0x208003 ) AM_READ(lhb2_igs003_r )
23342346   AM_RANGE( 0x20c000, 0x20cfff ) AM_RAM AM_BASE(m_priority_ram)
2335   AM_RANGE( 0x210000, 0x211fff ) AM_RAM_WRITE_LEGACY(igs011_palette ) AM_BASE_GENERIC( paletteram )
2347   AM_RANGE( 0x210000, 0x211fff ) AM_RAM_WRITE(igs011_palette ) AM_BASE_GENERIC( paletteram )
23362348   AM_RANGE( 0x214000, 0x214001 ) AM_READ_PORT( "COIN" )
2337   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE_LEGACY(igs011_layers_r, igs011_layers_w )
2338   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE_LEGACY(igs011_priority_w )
2339   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE_LEGACY(igs_dips_w )
2349   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE(igs011_layers_r, igs011_layers_w )
2350   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE(igs011_priority_w )
2351   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE(igs_dips_w )
23402352
2341   AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE_LEGACY(igs011_prot_addr_w )
2342//  AM_RANGE( 0xa50000, 0xa50005 ) AM_READ_LEGACY(igs011_prot_fake_r )
2353   AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE(igs011_prot_addr_w )
2354//  AM_RANGE( 0xa50000, 0xa50005 ) AM_READ(igs011_prot_fake_r )
23432355
2344   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE_LEGACY(igs011_blit_x_w )
2345   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE_LEGACY(igs011_blit_y_w )
2346   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE_LEGACY(igs011_blit_w_w )
2347   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE_LEGACY(igs011_blit_h_w )
2348   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE_LEGACY(igs011_blit_gfx_lo_w )
2349   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE_LEGACY(igs011_blit_gfx_hi_w )
2350   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE_LEGACY(igs011_blit_flags_w )
2351   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE_LEGACY(igs011_blit_pen_w )
2352   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE_LEGACY(igs011_blit_depth_w )
2353   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ_LEGACY(igs_3_dips_r )
2356   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE(igs011_blit_x_w )
2357   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE(igs011_blit_y_w )
2358   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE(igs011_blit_w_w )
2359   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE(igs011_blit_h_w )
2360   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE(igs011_blit_gfx_lo_w )
2361   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE(igs011_blit_gfx_hi_w )
2362   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE(igs011_blit_flags_w )
2363   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE(igs011_blit_pen_w )
2364   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE(igs011_blit_depth_w )
2365   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ(igs_3_dips_r )
23542366ADDRESS_MAP_END
23552367
23562368/* trap15's note:
r14845r14846
23832395   }
23842396}
23852397
2386static READ16_HANDLER( vbowl_unk_r )
2398READ16_MEMBER(igs011_state::vbowl_unk_r)
23872399{
23882400   return 0xffff;
23892401}
r14845r14846
23992411   }
24002412}
24012413
2402static WRITE16_HANDLER( vbowl_pen_hi_w )
2414WRITE16_MEMBER(igs011_state::vbowl_pen_hi_w)
24032415{
2404   igs011_state *state = space->machine().driver_data<igs011_state>();
24052416   if (ACCESSING_BITS_0_7)
24062417   {
2407      state->m_lhb2_pen_hi = data & 0x07;
2418      m_lhb2_pen_hi = data & 0x07;
24082419   }
24092420
24102421   if (data & ~0x7)
2411      logerror("%06x: warning, unknown bits written to pen_hi = %04x\n", cpu_get_pc(&space->device()), state->m_priority);
2422      logerror("%06x: warning, unknown bits written to pen_hi = %04x\n", cpu_get_pc(&space.device()), m_priority);
24122423}
24132424
2414static WRITE16_HANDLER( vbowl_link_0_w )   { }
2415static WRITE16_HANDLER( vbowl_link_1_w )   { }
2416static WRITE16_HANDLER( vbowl_link_2_w )   { }
2417static WRITE16_HANDLER( vbowl_link_3_w )   { }
2425WRITE16_MEMBER(igs011_state::vbowl_link_0_w){ }
2426WRITE16_MEMBER(igs011_state::vbowl_link_1_w){ }
2427WRITE16_MEMBER(igs011_state::vbowl_link_2_w){ }
2428WRITE16_MEMBER(igs011_state::vbowl_link_3_w){ }
24182429
24192430static ADDRESS_MAP_START( vbowl, AS_PROGRAM, 16, igs011_state )
24202431//  vbowl: IGS011 protection dynamically mapped at 834x
2421//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE_LEGACY(igs011_prot1_w )
2422//  AM_RANGE( 0x008348, 0x008349 ) AM_READ_LEGACY(igs011_prot1_r )
2432//  AM_RANGE( 0x008340, 0x008347 ) AM_WRITE(igs011_prot1_w )
2433//  AM_RANGE( 0x008348, 0x008349 ) AM_READ(igs011_prot1_r )
24232434
24242435   // IGS012
2425   AM_RANGE( 0x001600, 0x00160f ) AM_WRITE_LEGACY(igs012_prot_swap_w      )   AM_MIRROR(0x01c000)   // swap (a5 / 55)
2426   AM_RANGE( 0x001610, 0x00161f ) AM_READ_LEGACY(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 0)
2427   AM_RANGE( 0x001620, 0x00162f ) AM_WRITE_LEGACY(igs012_prot_dec_inc_w   )   AM_MIRROR(0x01c000)   // dec  (aa), inc  (fa)
2428   AM_RANGE( 0x001630, 0x00163f ) AM_WRITE_LEGACY(igs012_prot_inc_w      )   AM_MIRROR(0x01c000)   // inc  (ff)
2429   AM_RANGE( 0x001640, 0x00164f ) AM_WRITE_LEGACY(igs012_prot_copy_w      )   AM_MIRROR(0x01c000)   // copy (22)
2430   AM_RANGE( 0x001650, 0x00165f ) AM_WRITE_LEGACY(igs012_prot_dec_copy_w   )   AM_MIRROR(0x01c000)   // dec  (5a), copy (33)
2431   AM_RANGE( 0x001660, 0x00166f ) AM_READ_LEGACY(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 1)
2432   AM_RANGE( 0x001670, 0x00167f ) AM_WRITE_LEGACY(igs012_prot_mode_w      )   AM_MIRROR(0x01c000)   // mode (cc / dd)
2436   AM_RANGE( 0x001600, 0x00160f ) AM_WRITE(igs012_prot_swap_w      )   AM_MIRROR(0x01c000)   // swap (a5 / 55)
2437   AM_RANGE( 0x001610, 0x00161f ) AM_READ(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 0)
2438   AM_RANGE( 0x001620, 0x00162f ) AM_WRITE(igs012_prot_dec_inc_w   )   AM_MIRROR(0x01c000)   // dec  (aa), inc  (fa)
2439   AM_RANGE( 0x001630, 0x00163f ) AM_WRITE(igs012_prot_inc_w      )   AM_MIRROR(0x01c000)   // inc  (ff)
2440   AM_RANGE( 0x001640, 0x00164f ) AM_WRITE(igs012_prot_copy_w      )   AM_MIRROR(0x01c000)   // copy (22)
2441   AM_RANGE( 0x001650, 0x00165f ) AM_WRITE(igs012_prot_dec_copy_w   )   AM_MIRROR(0x01c000)   // dec  (5a), copy (33)
2442   AM_RANGE( 0x001660, 0x00166f ) AM_READ(igs012_prot_r         )   AM_MIRROR(0x01c000)   // read (mode 1)
2443   AM_RANGE( 0x001670, 0x00167f ) AM_WRITE(igs012_prot_mode_w      )   AM_MIRROR(0x01c000)   // mode (cc / dd)
24332444
2434   AM_RANGE( 0x00d400, 0x00d43f ) AM_WRITE_LEGACY(igs011_prot2_dec_w            )   // dec   (33)
2435   AM_RANGE( 0x00d440, 0x00d47f ) AM_WRITE_LEGACY(drgnwrld_igs011_prot2_swap_w   )   // swap  (33)
2436   AM_RANGE( 0x00d480, 0x00d4bf ) AM_WRITE_LEGACY(igs011_prot2_reset_w         )   // reset (33)
2437   AM_RANGE( 0x00d4c0, 0x00d4ff ) AM_READ_LEGACY(drgnwrldv20j_igs011_prot2_r   )   // read
2445   AM_RANGE( 0x00d400, 0x00d43f ) AM_WRITE(igs011_prot2_dec_w            )   // dec   (33)
2446   AM_RANGE( 0x00d440, 0x00d47f ) AM_WRITE(drgnwrld_igs011_prot2_swap_w   )   // swap  (33)
2447   AM_RANGE( 0x00d480, 0x00d4bf ) AM_WRITE(igs011_prot2_reset_w         )   // reset (33)
2448   AM_RANGE( 0x00d4c0, 0x00d4ff ) AM_READ(drgnwrldv20j_igs011_prot2_r   )   // read
24382449
2439   AM_RANGE( 0x50f000, 0x50f1ff ) AM_WRITE_LEGACY(igs011_prot2_dec_w         )   // dec   (33)
2440   AM_RANGE( 0x50f200, 0x50f3ff ) AM_WRITE_LEGACY(vbowl_igs011_prot2_swap_w   )   // swap  (33)
2441   AM_RANGE( 0x50f400, 0x50f5ff ) AM_WRITE_LEGACY(igs011_prot2_reset_w      )   // reset (33)
2442   AM_RANGE( 0x50f600, 0x50f7ff ) AM_READ_LEGACY(vbowl_igs011_prot2_r      )   // read
2450   AM_RANGE( 0x50f000, 0x50f1ff ) AM_WRITE(igs011_prot2_dec_w         )   // dec   (33)
2451   AM_RANGE( 0x50f200, 0x50f3ff ) AM_WRITE(vbowl_igs011_prot2_swap_w   )   // swap  (33)
2452   AM_RANGE( 0x50f400, 0x50f5ff ) AM_WRITE(igs011_prot2_reset_w      )   // reset (33)
2453   AM_RANGE( 0x50f600, 0x50f7ff ) AM_READ(vbowl_igs011_prot2_r      )   // read
24432454
2444   AM_RANGE( 0x902000, 0x902fff ) AM_WRITE_LEGACY(igs012_prot_reset_w   )   // reset?
2445//  AM_RANGE( 0x902000, 0x902005 ) AM_WRITE_LEGACY(igs012_prot_fake_r )
2455   AM_RANGE( 0x902000, 0x902fff ) AM_WRITE(igs012_prot_reset_w   )   // reset?
2456//  AM_RANGE( 0x902000, 0x902005 ) AM_WRITE(igs012_prot_fake_r )
24462457
24472458   AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
24482459   AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram")
24492460   AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE(m_priority_ram )
2450   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE_LEGACY(igs011_layers_r, igs011_layers_w )
2451   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE_LEGACY(igs011_palette ) AM_BASE_GENERIC( paletteram )
2461   AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE(igs011_layers_r, igs011_layers_w )
2462   AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE(igs011_palette ) AM_BASE_GENERIC( paletteram )
24522463   AM_RANGE( 0x520000, 0x520001 ) AM_READ_PORT( "COIN" )
24532464   AM_RANGE( 0x600000, 0x600007 ) AM_DEVREADWRITE_LEGACY("ics", ics2115_word_r, ics2115_word_w )
24542465   AM_RANGE( 0x700000, 0x700003 ) AM_RAM AM_BASE(m_vbowl_trackball )
2455   AM_RANGE( 0x700004, 0x700005 ) AM_WRITE_LEGACY(vbowl_pen_hi_w )
2456   AM_RANGE( 0x800000, 0x800003 ) AM_WRITE_LEGACY(vbowl_igs003_w )
2457   AM_RANGE( 0x800002, 0x800003 ) AM_READ_LEGACY(vbowl_igs003_r )
2466   AM_RANGE( 0x700004, 0x700005 ) AM_WRITE(vbowl_pen_hi_w )
2467   AM_RANGE( 0x800000, 0x800003 ) AM_WRITE(vbowl_igs003_w )
2468   AM_RANGE( 0x800002, 0x800003 ) AM_READ(vbowl_igs003_r )
24582469
2459   AM_RANGE( 0xa00000, 0xa00001 ) AM_WRITE_LEGACY(vbowl_link_0_w )
2460   AM_RANGE( 0xa08000, 0xa08001 ) AM_WRITE_LEGACY(vbowl_link_1_w )
2461   AM_RANGE( 0xa10000, 0xa10001 ) AM_WRITE_LEGACY(vbowl_link_2_w )
2462   AM_RANGE( 0xa18000, 0xa18001 ) AM_WRITE_LEGACY(vbowl_link_3_w )
2470   AM_RANGE( 0xa00000, 0xa00001 ) AM_WRITE(vbowl_link_0_w )
2471   AM_RANGE( 0xa08000, 0xa08001 ) AM_WRITE(vbowl_link_1_w )
2472   AM_RANGE( 0xa10000, 0xa10001 ) AM_WRITE(vbowl_link_2_w )
2473   AM_RANGE( 0xa18000, 0xa18001 ) AM_WRITE(vbowl_link_3_w )
24632474
2464   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE_LEGACY(igs011_priority_w )
2465   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE_LEGACY(igs_dips_w )
2475   AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE(igs011_priority_w )
2476   AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE(igs_dips_w )
24662477
2467   AM_RANGE( 0xa48000, 0xa48001 ) AM_WRITE_LEGACY(igs011_prot_addr_w )
2468//  AM_RANGE( 0xa48000, 0xa48005 ) AM_WRITE_LEGACY(igs011_prot_fake_r )
2478   AM_RANGE( 0xa48000, 0xa48001 ) AM_WRITE(igs011_prot_addr_w )
2479//  AM_RANGE( 0xa48000, 0xa48005 ) AM_WRITE(igs011_prot_fake_r )
24692480
2470   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE_LEGACY(igs011_blit_x_w )
2471   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE_LEGACY(igs011_blit_y_w )
2472   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE_LEGACY(igs011_blit_w_w )
2473   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE_LEGACY(igs011_blit_h_w )
2474   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE_LEGACY(igs011_blit_gfx_lo_w )
2475   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE_LEGACY(igs011_blit_gfx_hi_w )
2476   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE_LEGACY(igs011_blit_flags_w )
2477   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE_LEGACY(igs011_blit_pen_w )
2478   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE_LEGACY(igs011_blit_depth_w )
2481   AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE(igs011_blit_x_w )
2482   AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE(igs011_blit_y_w )
2483   AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE(igs011_blit_w_w )
2484   AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE(igs011_blit_h_w )
2485   AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE(igs011_blit_gfx_lo_w )
2486   AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE(igs011_blit_gfx_hi_w )
2487   AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE(igs011_blit_flags_w )
2488   AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE(igs011_blit_pen_w )
2489   AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE(igs011_blit_depth_w )
24792490
2480   AM_RANGE( 0xa80000, 0xa80001 ) AM_READ_LEGACY(vbowl_unk_r )
2481   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ_LEGACY(igs_4_dips_r )
2482   AM_RANGE( 0xa90000, 0xa90001 ) AM_READ_LEGACY(vbowl_unk_r )
2483   AM_RANGE( 0xa98000, 0xa98001 ) AM_READ_LEGACY(vbowl_unk_r )
2491   AM_RANGE( 0xa80000, 0xa80001 ) AM_READ(vbowl_unk_r )
2492   AM_RANGE( 0xa88000, 0xa88001 ) AM_READ(igs_4_dips_r )
2493   AM_RANGE( 0xa90000, 0xa90001 ) AM_READ(vbowl_unk_r )
2494   AM_RANGE( 0xa98000, 0xa98001 ) AM_READ(vbowl_unk_r )
24842495ADDRESS_MAP_END
24852496
24862497
src/mame/drivers/srmp6.c
r14845r14846
9090   unsigned short m_lastb;
9191   unsigned short m_lastb2;
9292   int m_destl;
93   DECLARE_WRITE16_MEMBER(srmp6_input_select_w);
94   DECLARE_READ16_MEMBER(srmp6_inputs_r);
95   DECLARE_WRITE16_MEMBER(video_regs_w);
96   DECLARE_READ16_MEMBER(video_regs_r);
97   DECLARE_WRITE16_MEMBER(srmp6_dma_w);
98   DECLARE_READ16_MEMBER(tileram_r);
99   DECLARE_WRITE16_MEMBER(tileram_w);
100   DECLARE_WRITE16_MEMBER(paletteram_w);
101   DECLARE_READ16_MEMBER(srmp6_irq_ack_r);
93102};
94103
95104#define VERBOSE 0
r14845r14846
288297    Main CPU memory handlers
289298***************************************************************************/
290299
291static WRITE16_HANDLER( srmp6_input_select_w )
300WRITE16_MEMBER(srmp6_state::srmp6_input_select_w)
292301{
293   srmp6_state *state = space->machine().driver_data<srmp6_state>();
294302
295   state->m_input_select = data & 0x0f;
303   m_input_select = data & 0x0f;
296304}
297305
298static READ16_HANDLER( srmp6_inputs_r )
306READ16_MEMBER(srmp6_state::srmp6_inputs_r)
299307{
300   srmp6_state *state = space->machine().driver_data<srmp6_state>();
301308
302309   if (offset == 0)         // DSW
303      return input_port_read(space->machine(), "DSW");
310      return input_port_read(machine(), "DSW");
304311
305   switch (state->m_input_select)   // inputs
312   switch (m_input_select)   // inputs
306313   {
307      case 1<<0: return input_port_read(space->machine(), "KEY0");
308      case 1<<1: return input_port_read(space->machine(), "KEY1");
309      case 1<<2: return input_port_read(space->machine(), "KEY2");
310      case 1<<3: return input_port_read(space->machine(), "KEY3");
314      case 1<<0: return input_port_read(machine(), "KEY0");
315      case 1<<1: return input_port_read(machine(), "KEY1");
316      case 1<<2: return input_port_read(machine(), "KEY2");
317      case 1<<3: return input_port_read(machine(), "KEY3");
311318   }
312319
313320   return 0;
314321}
315322
316323
317static WRITE16_HANDLER( video_regs_w )
324WRITE16_MEMBER(srmp6_state::video_regs_w)
318325{
319   srmp6_state *state = space->machine().driver_data<srmp6_state>();
320326
321327   switch(offset)
322328   {
323329
324330      case 0x5e/2: // bank switch, used by ROM check
325331      {
326         const UINT8 *rom = space->machine().region("nile")->base();
332         const UINT8 *rom = machine().region("nile")->base();
327333         LOG(("%x\n",data));
328         memory_set_bankptr(space->machine(), "bank1",(UINT16 *)(rom + (data & 0x0f)*0x200000));
334         memory_set_bankptr(machine(), "bank1",(UINT16 *)(rom + (data & 0x0f)*0x200000));
329335         break;
330336      }
331337
r14845r14846
333339      case 0x5c/2: // either 0x40 explicitely in many places, or according $2083b0 (IT4)
334340         //Fade in/out (0x40(dark)-0x60(normal)-0x7e?(bright) reset by 0x00?
335341         data = (!data)?0x60:(data == 0x5e)?0x60:data;
336         if (state->m_brightness != data) {
337            state->m_brightness = data;
338            update_palette(space->machine());
342         if (m_brightness != data) {
343            m_brightness = data;
344            update_palette(machine());
339345         }
340346         break;
341347
r14845r14846
350356      case 0x56/2: // written 8,9,8,9 successively
351357
352358      default:
353         logerror("video_regs_w (PC=%06X): %04x = %04x & %04x\n", cpu_get_previouspc(&space->device()), offset*2, data, mem_mask);
359         logerror("video_regs_w (PC=%06X): %04x = %04x & %04x\n", cpu_get_previouspc(&space.device()), offset*2, data, mem_mask);
354360         break;
355361   }
356   COMBINE_DATA(&state->m_video_regs[offset]);
362   COMBINE_DATA(&m_video_regs[offset]);
357363}
358364
359static READ16_HANDLER( video_regs_r )
365READ16_MEMBER(srmp6_state::video_regs_r)
360366{
361   srmp6_state *state = space->machine().driver_data<srmp6_state>();
362367
363   logerror("video_regs_r (PC=%06X): %04x\n", cpu_get_previouspc(&space->device()), offset*2);
364   return state->m_video_regs[offset];
368   logerror("video_regs_r (PC=%06X): %04x\n", cpu_get_previouspc(&space.device()), offset*2);
369   return m_video_regs[offset];
365370}
366371
367372
r14845r14846
402407}
403408
404409
405static WRITE16_HANDLER(srmp6_dma_w)
410WRITE16_MEMBER(srmp6_state::srmp6_dma_w)
406411{
407   srmp6_state *state = space->machine().driver_data<srmp6_state>();
408   UINT16* dmaram = state->m_dmaram;
412   UINT16* dmaram = m_dmaram;
409413
410414   COMBINE_DATA(&dmaram[offset]);
411415   if (offset==13 && dmaram[offset]==0x40)
412416   {
413      const UINT8 *rom = space->machine().region("nile")->base();
417      const UINT8 *rom = machine().region("nile")->base();
414418      UINT32 srctab=2*((((UINT32)dmaram[5])<<16)|dmaram[4]);
415419      UINT32 srcdata=2*((((UINT32)dmaram[11])<<16)|dmaram[10]);
416420      UINT32 len=4*(((((UINT32)dmaram[7]&3)<<16)|dmaram[6])+1); //??? WRONG!
r14845r14846
433437            dmaram[0x18/2],
434438            dmaram[0x1a/2]));
435439
436      state->m_destl = dmaram[9]*0x40000;
440      m_destl = dmaram[9]*0x40000;
437441
438      state->m_lastb = 0xfffe;
439      state->m_lastb2 = 0xffff;
442      m_lastb = 0xfffe;
443      m_lastb2 = 0xffff;
440444
441445      while(1)
442446      {
r14845r14846
452456            {
453457               UINT8 real_byte;
454458               real_byte = rom[srctab+p*2];
455               tempidx+=process(space->machine(),real_byte,tempidx);
459               tempidx+=process(machine(),real_byte,tempidx);
456460               real_byte = rom[srctab+p*2+1];//px[DMA_XOR((current_table_address+p*2+1))];
457               tempidx+=process(space->machine(),real_byte,tempidx);
461               tempidx+=process(machine(),real_byte,tempidx);
458462            }
459463            else
460464            {
461               tempidx+=process(space->machine(),p,tempidx);
465               tempidx+=process(machine(),p,tempidx);
462466            }
463467
464468            ctrl<<=1;
r14845r14846
476480}
477481
478482/* if tileram is actually bigger than the mapped area, how do we access the rest? */
479static READ16_HANDLER(tileram_r)
483READ16_MEMBER(srmp6_state::tileram_r)
480484{
481   srmp6_state *state = space->machine().driver_data<srmp6_state>();
482485
483   return state->m_chrram[offset];
486   return m_chrram[offset];
484487}
485488
486static WRITE16_HANDLER(tileram_w)
489WRITE16_MEMBER(srmp6_state::tileram_w)
487490{
488   srmp6_state *state = space->machine().driver_data<srmp6_state>();
489491
490492   //UINT16 tmp;
491   COMBINE_DATA(&state->m_chrram[offset]);
493   COMBINE_DATA(&m_chrram[offset]);
492494
493495   /* are the DMA registers enabled some other way, or always mapped here, over RAM? */
494496   if (offset >= 0xfff00/2 && offset <= 0xfff1a/2 )
r14845r14846
498500   }
499501}
500502
501static WRITE16_HANDLER(paletteram_w)
503WRITE16_MEMBER(srmp6_state::paletteram_w)
502504{
503   srmp6_state *state = space->machine().driver_data<srmp6_state>();
504505   INT8 r, g, b;
505   int brg = state->m_brightness - 0x60;
506   int brg = m_brightness - 0x60;
506507
507508   paletteram16_xBBBBBGGGGGRRRRR_word_w(space, offset, data, mem_mask);
508509
r14845r14846
529530         if(b > 0x1F) b = 0x1F;
530531      }
531532
532      palette_set_color(space->machine(), offset, MAKE_RGB(r << 3, g << 3, b << 3));
533      palette_set_color(machine(), offset, MAKE_RGB(r << 3, g << 3, b << 3));
533534   }
534535}
535536
536static READ16_HANDLER( srmp6_irq_ack_r )
537READ16_MEMBER(srmp6_state::srmp6_irq_ack_r)
537538{
538   cputag_set_input_line(space->machine(), "maincpu", 4, CLEAR_LINE);
539   cputag_set_input_line(machine(), "maincpu", 4, CLEAR_LINE);
539540   return 0; // value read doesn't matter
540541}
541542
r14845r14846
545546   AM_RANGE(0x600000, 0x7fffff) AM_ROMBANK("bank1")      // banked ROM (used by ROM check)
546547   AM_RANGE(0x800000, 0x9fffff) AM_ROM AM_REGION("user1", 0)
547548
548   AM_RANGE(0x300000, 0x300005) AM_READWRITE_LEGACY(srmp6_inputs_r, srmp6_input_select_w)      // inputs
549   AM_RANGE(0x480000, 0x480fff) AM_RAM_WRITE_LEGACY(paletteram_w) AM_BASE_GENERIC(paletteram)
550   AM_RANGE(0x4d0000, 0x4d0001) AM_READ_LEGACY(srmp6_irq_ack_r)
549   AM_RANGE(0x300000, 0x300005) AM_READWRITE(srmp6_inputs_r, srmp6_input_select_w)      // inputs
550   AM_RANGE(0x480000, 0x480fff) AM_RAM_WRITE(paletteram_w) AM_BASE_GENERIC(paletteram)
551   AM_RANGE(0x4d0000, 0x4d0001) AM_READ(srmp6_irq_ack_r)
551552
552553   // OBJ RAM: checked [$400000-$47dfff]
553554   AM_RANGE(0x400000, 0x47ffff) AM_RAM AM_BASE(m_sprram)
554555
555556   // CHR RAM: checked [$500000-$5fffff]
556   AM_RANGE(0x500000, 0x5fffff) AM_READWRITE_LEGACY(tileram_r,tileram_w) AM_BASE(m_chrram)
557   AM_RANGE(0x500000, 0x5fffff) AM_READWRITE(tileram_r,tileram_w) AM_BASE(m_chrram)
557558   //AM_RANGE(0x5fff00, 0x5fffff) AM_WRITE_LEGACY(dma_w) AM_BASE(m_dmaram)
558559
559   AM_RANGE(0x4c0000, 0x4c006f) AM_READWRITE_LEGACY(video_regs_r, video_regs_w) AM_BASE(m_video_regs)   // ? gfx regs ST-0026 NiLe
560   AM_RANGE(0x4c0000, 0x4c006f) AM_READWRITE(video_regs_r, video_regs_w) AM_BASE(m_video_regs)   // ? gfx regs ST-0026 NiLe
560561   AM_RANGE(0x4e0000, 0x4e00ff) AM_DEVREADWRITE_LEGACY("nile", nile_snd_r, nile_snd_w)
561562   AM_RANGE(0x4e0100, 0x4e0101) AM_DEVREADWRITE_LEGACY("nile", nile_sndctrl_r, nile_sndctrl_w)
562563   //AM_RANGE(0x4e0110, 0x4e0111) AM_NOP // ? accessed once ($268dc, written $b.w)
src/mame/drivers/konamim2.c
r14845r14846
226226   int m_cde_qchannel_offset;
227227   cdrom_toc m_cde_toc;
228228   CDE_DMA m_cde_dma[2];
229   DECLARE_READ64_MEMBER(irq_enable_r);
230   DECLARE_WRITE64_MEMBER(irq_enable_w);
231   DECLARE_READ64_MEMBER(irq_active_r);
232   DECLARE_READ64_MEMBER(unk1_r);
233   DECLARE_READ64_MEMBER(unk2_r);
234   DECLARE_READ64_MEMBER(unk3_r);
235   DECLARE_READ64_MEMBER(unk4_r);
236   DECLARE_WRITE64_MEMBER(unk4_w);
237   DECLARE_READ64_MEMBER(unk30000_r);
238   DECLARE_READ64_MEMBER(unk30030_r);
239   DECLARE_WRITE64_MEMBER(video_w);
240   DECLARE_WRITE64_MEMBER(video_irq_ack_w);
241   DECLARE_READ64_MEMBER(unk4000280_r);
242   DECLARE_WRITE64_MEMBER(unk4000010_w);
243   DECLARE_WRITE64_MEMBER(unk4000418_w);
244   DECLARE_WRITE64_MEMBER(reset_w);
245   DECLARE_READ64_MEMBER(cde_r);
246   DECLARE_WRITE64_MEMBER(cde_w);
247   DECLARE_READ64_MEMBER(device2_r);
248   DECLARE_READ64_MEMBER(cpu_r);
229249};
230250
231251
r14845r14846
264284   return 0;
265285}
266286
267static READ64_HANDLER(irq_enable_r)
287READ64_MEMBER(konamim2_state::irq_enable_r)
268288{
269   konamim2_state *state = space->machine().driver_data<konamim2_state>();
270289   UINT64 r = 0;
271290
272291   if (ACCESSING_BITS_32_63)
273292   {
274      r |= (UINT64)(state->m_irq_enable) << 32;
293      r |= (UINT64)(m_irq_enable) << 32;
275294   }
276295
277296   return r;
278297}
279298
280static WRITE64_HANDLER(irq_enable_w)
299WRITE64_MEMBER(konamim2_state::irq_enable_w)
281300{
282   konamim2_state *state = space->machine().driver_data<konamim2_state>();
283301   if (ACCESSING_BITS_32_63)
284302   {
285      state->m_irq_enable |= (UINT32)(data >> 32);
303      m_irq_enable |= (UINT32)(data >> 32);
286304   }
287305}
288306
289static READ64_HANDLER(irq_active_r)
307READ64_MEMBER(konamim2_state::irq_active_r)
290308{
291   konamim2_state *state = space->machine().driver_data<konamim2_state>();
292309   UINT64 r = 0;
293310
294311   if (ACCESSING_BITS_32_63)
295312   {
296      r |= (UINT64)(state->m_irq_active) << 32;
313      r |= (UINT64)(m_irq_active) << 32;
297314   }
298315
299316   return r;
r14845r14846
301318
302319
303320
304static READ64_HANDLER(unk1_r)
321READ64_MEMBER(konamim2_state::unk1_r)
305322{
306323   return U64(0xffffffffffffffff);
307324   //return 0;
308325}
309326
310327#ifdef UNUSED_FUNCTION
311static READ64_HANDLER(unk2_r)
328READ64_MEMBER(konamim2_state::unk2_r)
312329{
313330   if (ACCESSING_BITS_32_63)
314331   {
r14845r14846
318335}
319336#endif
320337
321static READ64_HANDLER(unk3_r)
338READ64_MEMBER(konamim2_state::unk3_r)
322339{
323   konamim2_state *state = space->machine().driver_data<konamim2_state>();
324340   //return U64(0xffffffffffffffff);
325   return state->m_unk3;
341   return m_unk3;
326342}
327343
328static READ64_HANDLER(unk4_r)
344READ64_MEMBER(konamim2_state::unk4_r)
329345{
330   konamim2_state *state = space->machine().driver_data<konamim2_state>();
331346   UINT64 r = 0;
332//  logerror("unk4_r: %08X, %08X%08X at %08X\n", offset, (UINT32)(mem_mask>>32), (UINT32)(mem_mask), cpu_get_pc(&space->device()));
347//  logerror("unk4_r: %08X, %08X%08X at %08X\n", offset, (UINT32)(mem_mask>>32), (UINT32)(mem_mask), cpu_get_pc(&space.device()));
333348
334349   if (ACCESSING_BITS_32_63)
335350   {
r14845r14846
338353   }
339354   if (ACCESSING_BITS_0_31)
340355   {
341      r |= state->m_unk20004 & ~0x800000;
356      r |= m_unk20004 & ~0x800000;
342357   }
343358   return r;
344359}
345360
346static WRITE64_HANDLER(unk4_w)
361WRITE64_MEMBER(konamim2_state::unk4_w)
347362{
348   konamim2_state *state = space->machine().driver_data<konamim2_state>();
349363//  logerror("unk4_w: %08X%08X, %08X, %08X%08X at %08X\n", (UINT32)(data >> 32), (UINT32)(data),
350//      offset, (UINT32)(mem_mask>>32), (UINT32)(mem_mask), cpu_get_pc(&space->device()));
364//      offset, (UINT32)(mem_mask>>32), (UINT32)(mem_mask), cpu_get_pc(&space.device()));
351365
352366   if (ACCESSING_BITS_0_31)
353367   {
354368      if (data & 0x800000)
355369      {
356//          mame_printf_debug("CPU '%s': CPU1 IRQ at %08X\n", space->device().tag(), cpu_get_pc(&space->device()));
357         cputag_set_input_line(space->machine(), "sub", INPUT_LINE_IRQ0, ASSERT_LINE);
370//          mame_printf_debug("CPU '%s': CPU1 IRQ at %08X\n", device().tag(), cpu_get_pc(&space.device()));
371         cputag_set_input_line(machine(), "sub", INPUT_LINE_IRQ0, ASSERT_LINE);
358372      }
359373
360      state->m_unk20004 = (UINT32)(data);
374      m_unk20004 = (UINT32)(data);
361375      return;
362376   }
363377}
364378
365static READ64_HANDLER(unk30000_r)
379READ64_MEMBER(konamim2_state::unk30000_r)
366380{
367   konamim2_state *state = space->machine().driver_data<konamim2_state>();
368   state->m_counter1++;
369   return (UINT64)(state->m_counter1 & 0x7f) << 32;
381   m_counter1++;
382   return (UINT64)(m_counter1 & 0x7f) << 32;
370383}
371384
372static READ64_HANDLER(unk30030_r)
385READ64_MEMBER(konamim2_state::unk30030_r)
373386{
374387   if (ACCESSING_BITS_0_31)
375388   {
r14845r14846
378391   return 0;
379392}
380393
381static WRITE64_HANDLER(video_w)
394WRITE64_MEMBER(konamim2_state::video_w)
382395{
383   konamim2_state *state = space->machine().driver_data<konamim2_state>();
384396   if (ACCESSING_BITS_32_63)
385397   {
386      state->m_vdl0_address = (UINT32)(data >> 32);
398      m_vdl0_address = (UINT32)(data >> 32);
387399   }
388400   if (ACCESSING_BITS_0_31)
389401   {
390      state->m_vdl1_address = (UINT32)(data);
402      m_vdl1_address = (UINT32)(data);
391403   }
392404}
393405
394static WRITE64_HANDLER(video_irq_ack_w)
406WRITE64_MEMBER(konamim2_state::video_irq_ack_w)
395407{
396   konamim2_state *state = space->machine().driver_data<konamim2_state>();
397408   if (ACCESSING_BITS_32_63)
398409   {
399410      if ((data >> 32) & 0x8000)
400411      {
401         state->m_irq_active &= ~0x800000;
412         m_irq_active &= ~0x800000;
402413      }
403414   }
404415}
405416
406417
407418
408static READ64_HANDLER(unk4000280_r)
419READ64_MEMBER(konamim2_state::unk4000280_r)
409420{
410421   // SysCfg
411422
r14845r14846
429440
430441}
431442
432static WRITE64_HANDLER(unk4000010_w)
443WRITE64_MEMBER(konamim2_state::unk4000010_w)
433444{
434445   if ((data & 0xff) == 0xd)
435446   {
r14845r14846
441452   }
442453}
443454
444static WRITE64_HANDLER(unk4000418_w)
455WRITE64_MEMBER(konamim2_state::unk4000418_w)
445456{
446457}
447458
448static WRITE64_HANDLER(reset_w)
459WRITE64_MEMBER(konamim2_state::reset_w)
449460{
450   konamim2_state *state = space->machine().driver_data<konamim2_state>();
451461   if (ACCESSING_BITS_32_63)
452462   {
453463      if (data & U64(0x100000000))
454464      {
455         cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE);
456         state->m_unk3 = 0;
465         cputag_set_input_line(machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE);
466         m_unk3 = 0;
457467      }
458468   }
459469}
r14845r14846
832842   }
833843}
834844
835static READ64_HANDLER(cde_r)
845READ64_MEMBER(konamim2_state::cde_r)
836846{
837   konamim2_state *state = space->machine().driver_data<konamim2_state>();
838847   UINT32 r = 0;
839848   int reg = offset * 2;
840849
r14845r14846
852861      {
853862         r = 0x100038;
854863
855         r |= state->m_cde_dma[0].dma_done ? 0x400 : 0;
856         r |= state->m_cde_dma[1].dma_done ? 0x800 : 0;
864         r |= m_cde_dma[0].dma_done ? 0x400 : 0;
865         r |= m_cde_dma[1].dma_done ? 0x800 : 0;
857866         break;
858867      }
859868      case 0x02c/4:
860869      {
861         r = state->m_cde_status_bytes[state->m_cde_status_byte_ptr++];
870         r = m_cde_status_bytes[m_cde_status_byte_ptr++];
862871
863         if (state->m_cde_status_byte_ptr <= state->m_cde_num_status_bytes)
872         if (m_cde_status_byte_ptr <= m_cde_num_status_bytes)
864873         {
865874            r |= 0x100;
866875         }
867876         else
868877         {
869878            //if (cde_enable_reports &&
870            //  !state->m_cde_response &&
871            //  state->m_cde_command_bytes[0] != ((cde_report_type >> 8) & 0xff))
879            //  !m_cde_response &&
880            //  m_cde_command_bytes[0] != ((cde_report_type >> 8) & 0xff))
872881
873            if (!state->m_cde_response)
882            if (!m_cde_response)
874883            {
875               cde_handle_reports(space->machine());
884               cde_handle_reports(machine());
876885
877         //      state->m_cde_command_byte_ptr = 0;
878         //      state->m_cde_command_bytes[state->m_cde_command_byte_ptr++] = 0x1c;
886         //      m_cde_command_byte_ptr = 0;
887         //      m_cde_command_bytes[m_cde_command_byte_ptr++] = 0x1c;
879888
880         //      state->m_cde_response = 1;
889         //      m_cde_response = 1;
881890            }
882891         }
883892
884   //      printf("status byte %d\n", state->m_cde_status_byte_ptr);
893   //      printf("status byte %d\n", m_cde_status_byte_ptr);
885894         break;
886895      }
887896
r14845r14846
893902
894903      default:
895904      {
896//                      mame_printf_debug("cde_r: %08X at %08X\n", reg*4, cpu_get_pc(&space->device()));
905//                      mame_printf_debug("cde_r: %08X at %08X\n", reg*4, cpu_get_pc(&space.device()));
897906         break;
898907      }
899908   }
r14845r14846
908917   }
909918}
910919
911static WRITE64_HANDLER(cde_w)
920WRITE64_MEMBER(konamim2_state::cde_w)
912921{
913   konamim2_state *state = space->machine().driver_data<konamim2_state>();
914922   int reg = offset * 2;
915923   UINT32 d;
916924
r14845r14846
928936   {
929937      case 0x028/4:      // Command write
930938      {
931         //printf("cde_w: %08X, %08X at %08X\n", d, reg*4, cpu_get_pc(&space->device()));
939         //printf("cde_w: %08X, %08X at %08X\n", d, reg*4, cpu_get_pc(&space.device()));
932940
933941         if (d == 0x0180)
934942         {
935            if (state->m_cde_response)
943            if (m_cde_response)
936944            {
937               cde_handle_command(space->machine());
945               cde_handle_command(machine());
938946
939               state->m_cde_response = 0;
947               m_cde_response = 0;
940948            }
941949
942            state->m_cde_command_byte_ptr = 0;
950            m_cde_command_byte_ptr = 0;
943951         }
944         else if (state->m_cde_command_byte_ptr == 0)
952         else if (m_cde_command_byte_ptr == 0)
945953         {
946            state->m_cde_num_status_bytes = 1;
954            m_cde_num_status_bytes = 1;
947955
948            state->m_cde_status_bytes[0] = d & 0xff;
949            state->m_cde_status_byte_ptr = 0;
956            m_cde_status_bytes[0] = d & 0xff;
957            m_cde_status_byte_ptr = 0;
950958
951            state->m_cde_response = 1;
959            m_cde_response = 1;
952960         }
953961
954962         if (d != 0x180)
955963         {
956            state->m_cde_command_bytes[state->m_cde_command_byte_ptr++] = d;
964            m_cde_command_bytes[m_cde_command_byte_ptr++] = d;
957965         }
958966
959967         break;
r14845r14846
965973
966974         if (d & 0x20)
967975         {
968            state->m_cde_dma[0].dma_done = 1;
976            m_cde_dma[0].dma_done = 1;
969977
970            cde_dma_transfer(space, 0, 0);
978            cde_dma_transfer(&space, 0, 0);
971979         }
972980         if (d & 0x40)
973981         {
974            state->m_cde_dma[0].dma_done = 1;
982            m_cde_dma[0].dma_done = 1;
975983
976            cde_dma_transfer(space, 0, 1);
984            cde_dma_transfer(&space, 0, 1);
977985         }
978986         break;
979987      }
r14845r14846
981989      {
982990//          mame_printf_debug("CDE: DMA0 dst addr %08X\n", d);
983991
984         state->m_cde_dma[0].dst_addr = d;
992         m_cde_dma[0].dst_addr = d;
985993         break;
986994      }
987995      case 0x30c/4:      // DMA Channel 0 length?
988996      {
989997//          mame_printf_debug("CDE: DMA0 length %08X\n", d);
990998
991         state->m_cde_dma[0].length = d;
999         m_cde_dma[0].length = d;
9921000         break;
9931001      }
9941002      case 0x318/4:      // DMA Channel 0 next destination address
9951003      {
9961004//          mame_printf_debug("CDE: DMA0 next dst addr %08X\n", d);
9971005
998         state->m_cde_dma[0].next_dst_addr = d;
1006         m_cde_dma[0].next_dst_addr = d;
9991007         break;
10001008      }
10011009      case 0x31c/4:      // DMA Channel 0 next length?
10021010      {
10031011//          mame_printf_debug("CDE: DMA0 next length %08X\n", d);
10041012
1005         state->m_cde_dma[0].next_length = d;
1013         m_cde_dma[0].next_length = d;
10061014         break;
10071015      }
10081016
r14845r14846
10151023      {
10161024//          mame_printf_debug("CDE: DMA1 dst addr %08X\n", d);
10171025
1018         state->m_cde_dma[1].dst_addr = d;
1026         m_cde_dma[1].dst_addr = d;
10191027         break;
10201028      }
10211029      case 0x32c/4:      // DMA Channel 1 length?
10221030      {
10231031//          mame_printf_debug("CDE: DMA1 length %08X\n", d);
10241032
1025         state->m_cde_dma[1].length = d;
1033         m_cde_dma[1].length = d;
10261034         break;
10271035      }
10281036      case 0x338/4:      // DMA Channel 1 next destination address
10291037      {
10301038//          mame_printf_debug("CDE: DMA1 next dst addr %08X\n", d);
10311039
1032         state->m_cde_dma[1].next_dst_addr = d;
1040         m_cde_dma[1].next_dst_addr = d;
10331041         break;
10341042      }
10351043      case 0x33c/4:      // DMA Channel 1 next length?
10361044      {
10371045//          mame_printf_debug("CDE: DMA1 next length %08X\n", d);
10381046
1039         state->m_cde_dma[1].next_length = d;
1047         m_cde_dma[1].next_length = d;
10401048         break;
10411049      }
10421050
r14845r14846
10441052      {
10451053         if (d & 0x80000000)
10461054         {
1047            state->m_irq_active &= ~0x8;
1055            m_irq_active &= ~0x8;
10481056         }
10491057         if (d & 0x60000000)
10501058         {
1051            state->m_cde_dma[0].dma_done = 0;
1052            state->m_cde_dma[1].dma_done = 0;
1059            m_cde_dma[0].dma_done = 0;
1060            m_cde_dma[1].dma_done = 0;
10531061         }
10541062         break;
10551063      }
10561064
10571065      default:
10581066      {
1059//                      mame_printf_debug("cde_w: %08X, %08X at %08X\n", d, reg*4, cpu_get_pc(&space->device()));
1067//                      mame_printf_debug("cde_w: %08X, %08X at %08X\n", d, reg*4, cpu_get_pc(&space.device()));
10601068         break;
10611069      }
10621070   }
10631071}
10641072
1065static READ64_HANDLER(device2_r)
1073READ64_MEMBER(konamim2_state::device2_r)
10661074{
10671075   UINT32 r = 0;
10681076   int reg = offset * 2;
r14845r14846
10931101   }
10941102}
10951103
1096static READ64_HANDLER(cpu_r)
1104READ64_MEMBER(konamim2_state::cpu_r)
10971105{
10981106   UINT64 r = 0;
10991107
11001108   if (ACCESSING_BITS_32_63)
11011109   {
1102      r = (UINT64)((&space->device() != space->machine().device("maincpu")) ? 0x80000000 : 0);
1110      r = (UINT64)((&space.device() != machine().device("maincpu")) ? 0x80000000 : 0);
11031111      //r |= 0x40000000;  // sets Video-LowRes !?
11041112      return r << 32;
11051113   }
r14845r14846
11081116}
11091117
11101118static ADDRESS_MAP_START( m2_main, AS_PROGRAM, 64, konamim2_state )
1111   AM_RANGE(0x00010040, 0x00010047) AM_READWRITE_LEGACY(irq_enable_r, irq_enable_w)
1112   AM_RANGE(0x00010050, 0x00010057) AM_READ_LEGACY(irq_active_r)
1113   AM_RANGE(0x00020000, 0x00020007) AM_READWRITE_LEGACY(unk4_r, unk4_w)
1114   AM_RANGE(0x00030000, 0x00030007) AM_READ_LEGACY(unk30000_r)
1115   AM_RANGE(0x00030010, 0x00030017) AM_WRITE_LEGACY(video_w)
1116   AM_RANGE(0x00030030, 0x00030037) AM_READ_LEGACY(unk30030_r)
1117   AM_RANGE(0x00030400, 0x00030407) AM_WRITE_LEGACY(video_irq_ack_w)
1118   AM_RANGE(0x01000000, 0x01000fff) AM_READWRITE_LEGACY(cde_r, cde_w)
1119   AM_RANGE(0x02000000, 0x02000fff) AM_READ_LEGACY(device2_r)
1120   AM_RANGE(0x04000010, 0x04000017) AM_WRITE_LEGACY(unk4000010_w)
1121   AM_RANGE(0x04000018, 0x0400001f) AM_READ_LEGACY(unk1_r)
1122   AM_RANGE(0x04000020, 0x04000027) AM_WRITE_LEGACY(reset_w)
1123   AM_RANGE(0x04000418, 0x0400041f) AM_WRITE_LEGACY(unk4000418_w)
1124   AM_RANGE(0x04000208, 0x0400020f) AM_READ_LEGACY(unk3_r)
1125   AM_RANGE(0x04000280, 0x04000287) AM_READ_LEGACY(unk4000280_r)
1126   AM_RANGE(0x10000000, 0x10000007) AM_READ_LEGACY(cpu_r)
1119   AM_RANGE(0x00010040, 0x00010047) AM_READWRITE(irq_enable_r, irq_enable_w)
1120   AM_RANGE(0x00010050, 0x00010057) AM_READ(irq_active_r)
1121   AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(unk4_r, unk4_w)
1122   AM_RANGE(0x00030000, 0x00030007) AM_READ(unk30000_r)
1123   AM_RANGE(0x00030010, 0x00030017) AM_WRITE(video_w)
1124   AM_RANGE(0x00030030, 0x00030037) AM_READ(unk30030_r)
1125   AM_RANGE(0x00030400, 0x00030407) AM_WRITE(video_irq_ack_w)
1126   AM_RANGE(0x01000000, 0x01000fff) AM_READWRITE(cde_r, cde_w)
1127   AM_RANGE(0x02000000, 0x02000fff) AM_READ(device2_r)
1128   AM_RANGE(0x04000010, 0x04000017) AM_WRITE(unk4000010_w)
1129   AM_RANGE(0x04000018, 0x0400001f) AM_READ(unk1_r)
1130   AM_RANGE(0x04000020, 0x04000027) AM_WRITE(reset_w)
1131   AM_RANGE(0x04000418, 0x0400041f) AM_WRITE(unk4000418_w)
1132   AM_RANGE(0x04000208, 0x0400020f) AM_READ(unk3_r)
1133   AM_RANGE(0x04000280, 0x04000287) AM_READ(unk4000280_r)
1134   AM_RANGE(0x10000000, 0x10000007) AM_READ(cpu_r)
11271135   AM_RANGE(0x10000008, 0x10001007) AM_NOP      // ???
11281136   AM_RANGE(0x20000000, 0x201fffff) AM_ROM AM_SHARE("share2")
11291137   AM_RANGE(0x40000000, 0x407fffff) AM_RAM AM_SHARE("share3") AM_BASE(m_main_ram)
src/mame/drivers/cball.c
r14845r14846
2222
2323   /* devices */
2424   device_t *m_maincpu;
25   DECLARE_WRITE8_MEMBER(cball_vram_w);
26   DECLARE_READ8_MEMBER(cball_wram_r);
27   DECLARE_WRITE8_MEMBER(cball_wram_w);
2528};
2629
2730
r14845r14846
3437}
3538
3639
37static WRITE8_HANDLER( cball_vram_w )
40WRITE8_MEMBER(cball_state::cball_vram_w)
3841{
39   cball_state *state = space->machine().driver_data<cball_state>();
4042
41   state->m_video_ram[offset] = data;
42   state->m_bg_tilemap->mark_tile_dirty(offset);
43   m_video_ram[offset] = data;
44   m_bg_tilemap->mark_tile_dirty(offset);
4345}
4446
4547
r14845r14846
107109}
108110
109111
110static READ8_HANDLER( cball_wram_r )
112READ8_MEMBER(cball_state::cball_wram_r)
111113{
112   cball_state *state = space->machine().driver_data<cball_state>();
113114
114   return state->m_video_ram[0x380 + offset];
115   return m_video_ram[0x380 + offset];
115116}
116117
117118
118static WRITE8_HANDLER( cball_wram_w )
119WRITE8_MEMBER(cball_state::cball_wram_w)
119120{
120   cball_state *state = space->machine().driver_data<cball_state>();
121121
122   state->m_video_ram[0x380 + offset] = data;
122   m_video_ram[0x380 + offset] = data;
123123}
124124
125125
r14845r14846
127127static ADDRESS_MAP_START( cpu_map, AS_PROGRAM, 8, cball_state )
128128   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
129129
130   AM_RANGE(0x0000, 0x03ff) AM_READ_LEGACY(cball_wram_r) AM_MASK(0x7f)
130   AM_RANGE(0x0000, 0x03ff) AM_READ(cball_wram_r) AM_MASK(0x7f)
131131   AM_RANGE(0x0400, 0x07ff) AM_READONLY
132132   AM_RANGE(0x1001, 0x1001) AM_READ_PORT("1001")
133133   AM_RANGE(0x1003, 0x1003) AM_READ_PORT("1003")
r14845r14846
137137   AM_RANGE(0x2000, 0x2001) AM_NOP
138138   AM_RANGE(0x2800, 0x2800) AM_READ_PORT("2800")
139139
140   AM_RANGE(0x0000, 0x03ff) AM_WRITE_LEGACY(cball_wram_w) AM_MASK(0x7f)
141   AM_RANGE(0x0400, 0x07ff) AM_WRITE_LEGACY(cball_vram_w) AM_BASE(m_video_ram)
140   AM_RANGE(0x0000, 0x03ff) AM_WRITE(cball_wram_w) AM_MASK(0x7f)
141   AM_RANGE(0x0400, 0x07ff) AM_WRITE(cball_vram_w) AM_BASE(m_video_ram)
142142   AM_RANGE(0x1800, 0x1800) AM_NOP /* watchdog? */
143143   AM_RANGE(0x1810, 0x1811) AM_NOP
144144   AM_RANGE(0x1820, 0x1821) AM_NOP
src/mame/drivers/slotcarn.c
r14845r14846
4141   UINT8 *m_ram_video;
4242   UINT8 *m_ram_palette;
4343   UINT8 *m_backup_ram;
44   DECLARE_READ8_MEMBER(palette_r);
45   DECLARE_WRITE8_MEMBER(palette_w);
4446};
4547
4648
r14845r14846
5456
5557*/
5658
57static READ8_HANDLER( palette_r )
59READ8_MEMBER(slotcarn_state::palette_r)
5860{
59   slotcarn_state *state = space->machine().driver_data<slotcarn_state>();
6061   int co;
6162
62   co = ((state->m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
63   return state->m_ram_palette[co];
63   co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
64   return m_ram_palette[co];
6465}
6566
66static WRITE8_HANDLER( palette_w )
67WRITE8_MEMBER(slotcarn_state::palette_w)
6768{
68   slotcarn_state *state = space->machine().driver_data<slotcarn_state>();
6969   int co;
7070
71   space->machine().primary_screen->update_now();
71   machine().primary_screen->update_now();
7272   data &= 0x0f;
7373
74   co = ((state->m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
75   state->m_ram_palette[co] = data;
74   co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
75   m_ram_palette[co] = data;
7676
7777}
7878
r14845r14846
203203
204204   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(m_ram_attr)
205205   AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_BASE(m_ram_video)
206   AM_RANGE(0xf800, 0xfbff) AM_READWRITE_LEGACY(palette_r, palette_w)
206   AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w)
207207ADDRESS_MAP_END
208208
209209// spielbud - is the ay mirrored, or are there now 2?
src/mame/drivers/rabbit.c
r14845r14846
111111   UINT32 *m_tilemap_ram[4];
112112   UINT32 *m_spriteram;
113113   tilemap_t *m_tilemap[4];
114   DECLARE_WRITE32_MEMBER(rabbit_tilemap0_w);
115   DECLARE_WRITE32_MEMBER(rabbit_tilemap1_w);
116   DECLARE_WRITE32_MEMBER(rabbit_tilemap2_w);
117   DECLARE_WRITE32_MEMBER(rabbit_tilemap3_w);
118   DECLARE_WRITE32_MEMBER(rabbit_paletteram_dword_w);
119   DECLARE_READ32_MEMBER(rabbit_tilemap0_r);
120   DECLARE_READ32_MEMBER(rabbit_tilemap1_r);
121   DECLARE_READ32_MEMBER(rabbit_tilemap2_r);
122   DECLARE_READ32_MEMBER(rabbit_tilemap3_r);
123   DECLARE_READ32_MEMBER(randomrabbits);
124   DECLARE_WRITE32_MEMBER(rabbit_rombank_w);
125   DECLARE_WRITE32_MEMBER(rabbit_audio_w);
126   DECLARE_WRITE32_MEMBER(rabbit_blitter_w);
114127};
115128
116129
r14845r14846
182195   get_rabbit_tilemap_info(machine,tileinfo,tile_index,3,0);
183196}
184197
185static WRITE32_HANDLER( rabbit_tilemap0_w )
198WRITE32_MEMBER(rabbit_state::rabbit_tilemap0_w)
186199{
187   rabbit_state *state = space->machine().driver_data<rabbit_state>();
188   COMBINE_DATA(&state->m_tilemap_ram[0][offset]);
189   state->m_tilemap[0]->mark_tile_dirty(offset);
200   COMBINE_DATA(&m_tilemap_ram[0][offset]);
201   m_tilemap[0]->mark_tile_dirty(offset);
190202}
191203
192static WRITE32_HANDLER( rabbit_tilemap1_w )
204WRITE32_MEMBER(rabbit_state::rabbit_tilemap1_w)
193205{
194   rabbit_state *state = space->machine().driver_data<rabbit_state>();
195   COMBINE_DATA(&state->m_tilemap_ram[1][offset]);
196   state->m_tilemap[1]->mark_tile_dirty(offset);
206   COMBINE_DATA(&m_tilemap_ram[1][offset]);
207   m_tilemap[1]->mark_tile_dirty(offset);
197208}
198209
199static WRITE32_HANDLER( rabbit_tilemap2_w )
210WRITE32_MEMBER(rabbit_state::rabbit_tilemap2_w)
200211{
201   rabbit_state *state = space->machine().driver_data<rabbit_state>();
202   COMBINE_DATA(&state->m_tilemap_ram[2][offset]);
203   state->m_tilemap[2]->mark_tile_dirty(offset);
212   COMBINE_DATA(&m_tilemap_ram[2][offset]);
213   m_tilemap[2]->mark_tile_dirty(offset);
204214}
205215
206216
207static WRITE32_HANDLER( rabbit_tilemap3_w )
217WRITE32_MEMBER(rabbit_state::rabbit_tilemap3_w)
208218{
209   rabbit_state *state = space->machine().driver_data<rabbit_state>();
210   COMBINE_DATA(&state->m_tilemap_ram[3][offset]);
211   state->m_tilemap[3]->mark_tile_dirty(offset);
219   COMBINE_DATA(&m_tilemap_ram[3][offset]);
220   m_tilemap[3]->mark_tile_dirty(offset);
212221}
213222
214223/*
r14845r14846
465474}
466475
467476
468static WRITE32_HANDLER( rabbit_paletteram_dword_w )
477WRITE32_MEMBER(rabbit_state::rabbit_paletteram_dword_w)
469478{
470479   int r,g,b;
471   COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
480   COMBINE_DATA(&machine().generic.paletteram.u32[offset]);
472481
473   b = ((space->machine().generic.paletteram.u32[offset] & 0x000000ff) >>0);
474   r = ((space->machine().generic.paletteram.u32[offset] & 0x0000ff00) >>8);
475   g = ((space->machine().generic.paletteram.u32[offset] & 0x00ff0000) >>16);
482   b = ((machine().generic.paletteram.u32[offset] & 0x000000ff) >>0);
483   r = ((machine().generic.paletteram.u32[offset] & 0x0000ff00) >>8);
484   g = ((machine().generic.paletteram.u32[offset] & 0x00ff0000) >>16);
476485
477   palette_set_color(space->machine(),offset,MAKE_RGB(r,g,b));
486   palette_set_color(machine(),offset,MAKE_RGB(r,g,b));
478487}
479488
480static READ32_HANDLER( rabbit_tilemap0_r )
489READ32_MEMBER(rabbit_state::rabbit_tilemap0_r)
481490{
482   rabbit_state *state = space->machine().driver_data<rabbit_state>();
483   return state->m_tilemap_ram[0][offset];
491   return m_tilemap_ram[0][offset];
484492}
485493
486static READ32_HANDLER( rabbit_tilemap1_r )
494READ32_MEMBER(rabbit_state::rabbit_tilemap1_r)
487495{
488   rabbit_state *state = space->machine().driver_data<rabbit_state>();
489   return state->m_tilemap_ram[1][offset];
496   return m_tilemap_ram[1][offset];
490497}
491498
492static READ32_HANDLER( rabbit_tilemap2_r )
499READ32_MEMBER(rabbit_state::rabbit_tilemap2_r)
493500{
494   rabbit_state *state = space->machine().driver_data<rabbit_state>();
495   return state->m_tilemap_ram[2][offset];
501   return m_tilemap_ram[2][offset];
496502}
497503
498static READ32_HANDLER( rabbit_tilemap3_r )
504READ32_MEMBER(rabbit_state::rabbit_tilemap3_r)
499505{
500   rabbit_state *state = space->machine().driver_data<rabbit_state>();
501   return state->m_tilemap_ram[3][offset];
506   return m_tilemap_ram[3][offset];
502507}
503508
504static READ32_HANDLER( randomrabbits )
509READ32_MEMBER(rabbit_state::randomrabbits)
505510{
506   return space->machine().rand();
511   return machine().rand();
507512}
508513
509514/* rom bank is used when testing roms, not currently hooked up */
510static WRITE32_HANDLER ( rabbit_rombank_w )
515WRITE32_MEMBER(rabbit_state::rabbit_rombank_w)
511516{
512   UINT8 *dataroms = space->machine().region("gfx1")->base();
517   UINT8 *dataroms = machine().region("gfx1")->base();
513518#if 0
514519   int bank;
515520   printf("rabbit rombank %08x\n",data);
516521   bank = data & 0x3ff;
517522
518   memory_set_bankptr(space->machine(), "bank1",&dataroms[0x40000*(bank&0x3ff)]);
523   memory_set_bankptr(machine(), "bank1",&dataroms[0x40000*(bank&0x3ff)]);
519524#else
520   memory_set_bankptr(space->machine(), "bank1",&dataroms[0]);
525   memory_set_bankptr(machine(), "bank1",&dataroms[0]);
521526#endif
522527
523528}
r14845r14846
540545    time (timer?  the game seems to "play music" fine with just the VBL).
541546*/
542547
543static WRITE32_HANDLER( rabbit_audio_w )
548WRITE32_MEMBER(rabbit_state::rabbit_audio_w)
544549{
545550   int reg, voice, base, i;
546551
r14845r14846
703708
704709
705710
706static WRITE32_HANDLER( rabbit_blitter_w )
711WRITE32_MEMBER(rabbit_state::rabbit_blitter_w)
707712{
708   rabbit_state *state = space->machine().driver_data<rabbit_state>();
709   COMBINE_DATA(&state->m_blitterregs[offset]);
713   COMBINE_DATA(&m_blitterregs[offset]);
710714
711715   if (offset == 0x0c/4)
712716   {
713      rabbit_do_blit(space->machine());
717      rabbit_do_blit(machine());
714718   }
715719}
716720
r14845r14846
739743   AM_RANGE(0x000024, 0x000027) AM_WRITENOP // bug in code / emulation?
740744   AM_RANGE(0x00719c, 0x00719f) AM_WRITENOP // bug in code / emulation?
741745   AM_RANGE(0x200000, 0x200003) AM_READ_PORT("INPUTS") AM_DEVWRITE_LEGACY("eeprom", rabbit_eeprom_write)
742   AM_RANGE(0x400010, 0x400013) AM_READ_LEGACY(randomrabbits) // gfx chip status?
743   AM_RANGE(0x400980, 0x400983) AM_READ_LEGACY(randomrabbits) // sound chip status?
744   AM_RANGE(0x400984, 0x400987) AM_READ_LEGACY(randomrabbits) // sound chip status?
746   AM_RANGE(0x400010, 0x400013) AM_READ(randomrabbits) // gfx chip status?
747   AM_RANGE(0x400980, 0x400983) AM_READ(randomrabbits) // sound chip status?
748   AM_RANGE(0x400984, 0x400987) AM_READ(randomrabbits) // sound chip status?
745749   /* this lot are probably gfxchip/blitter etc. related */
746750   AM_RANGE(0x400010, 0x400013) AM_WRITEONLY AM_BASE(m_viewregs0 )
747751   AM_RANGE(0x400100, 0x400117) AM_WRITEONLY AM_BASE(m_tilemap_regs[0] ) // tilemap regs1
r14845r14846
749753   AM_RANGE(0x400140, 0x400157) AM_WRITEONLY AM_BASE(m_tilemap_regs[2] ) // tilemap regs3
750754   AM_RANGE(0x400160, 0x400177) AM_WRITEONLY AM_BASE(m_tilemap_regs[3] ) // tilemap regs4
751755   AM_RANGE(0x400200, 0x40021b) AM_WRITEONLY AM_BASE(m_spriteregs ) // sprregs?
752   AM_RANGE(0x400300, 0x400303) AM_WRITE_LEGACY(rabbit_rombank_w) // used during rom testing, rombank/area select + something else?
756   AM_RANGE(0x400300, 0x400303) AM_WRITE(rabbit_rombank_w) // used during rom testing, rombank/area select + something else?
753757   AM_RANGE(0x400400, 0x400413) AM_WRITEONLY AM_BASE(m_viewregs6 ) // some global controls? (brightness etc.?)
754758   AM_RANGE(0x400500, 0x400503) AM_WRITEONLY AM_BASE(m_viewregs7 )
755   AM_RANGE(0x400700, 0x40070f) AM_WRITE_LEGACY(rabbit_blitter_w) AM_BASE(m_blitterregs )
759   AM_RANGE(0x400700, 0x40070f) AM_WRITE(rabbit_blitter_w) AM_BASE(m_blitterregs )
756760   AM_RANGE(0x400800, 0x40080f) AM_WRITEONLY AM_BASE(m_viewregs9 ) // never changes?
757   AM_RANGE(0x400900, 0x40098f) AM_WRITE_LEGACY(rabbit_audio_w)
761   AM_RANGE(0x400900, 0x40098f) AM_WRITE(rabbit_audio_w)
758762   /* hmm */
759763   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE(m_viewregs10 )
760764
761765   AM_RANGE(0x440000, 0x47ffff) AM_ROMBANK("bank1") // data (gfx / sound) rom readback for ROM testing
762766   /* tilemaps */
763   AM_RANGE(0x480000, 0x483fff) AM_READWRITE_LEGACY(rabbit_tilemap0_r,rabbit_tilemap0_w)
764   AM_RANGE(0x484000, 0x487fff) AM_READWRITE_LEGACY(rabbit_tilemap1_r,rabbit_tilemap1_w)
765   AM_RANGE(0x488000, 0x48bfff) AM_READWRITE_LEGACY(rabbit_tilemap2_r,rabbit_tilemap2_w)
766   AM_RANGE(0x48c000, 0x48ffff) AM_READWRITE_LEGACY(rabbit_tilemap3_r,rabbit_tilemap3_w)
767   AM_RANGE(0x480000, 0x483fff) AM_READWRITE(rabbit_tilemap0_r,rabbit_tilemap0_w)
768   AM_RANGE(0x484000, 0x487fff) AM_READWRITE(rabbit_tilemap1_r,rabbit_tilemap1_w)
769   AM_RANGE(0x488000, 0x48bfff) AM_READWRITE(rabbit_tilemap2_r,rabbit_tilemap2_w)
770   AM_RANGE(0x48c000, 0x48ffff) AM_READWRITE(rabbit_tilemap3_r,rabbit_tilemap3_w)
767771   AM_RANGE(0x494000, 0x497fff) AM_RAM AM_BASE(m_spriteram) // sprites?
768   AM_RANGE(0x4a0000, 0x4affff) AM_RAM_WRITE_LEGACY(rabbit_paletteram_dword_w) AM_BASE_GENERIC(paletteram)
772   AM_RANGE(0x4a0000, 0x4affff) AM_RAM_WRITE(rabbit_paletteram_dword_w) AM_BASE_GENERIC(paletteram)
769773   AM_RANGE(0xff0000, 0xffffff) AM_RAM
770774ADDRESS_MAP_END
771775
src/mame/drivers/hvyunit.c
r14845r14846
9999   device_t   *m_sound_cpu;
100100   device_t   *m_mermaid;
101101   device_t   *m_pandora;
102   DECLARE_WRITE8_MEMBER(trigger_nmi_on_slave_cpu);
103   DECLARE_WRITE8_MEMBER(master_bankswitch_w);
104   DECLARE_WRITE8_MEMBER(mermaid_data_w);
105   DECLARE_READ8_MEMBER(mermaid_data_r);
106   DECLARE_READ8_MEMBER(mermaid_status_r);
107   DECLARE_WRITE8_MEMBER(trigger_nmi_on_sound_cpu2);
108   DECLARE_WRITE8_MEMBER(hu_videoram_w);
109   DECLARE_WRITE8_MEMBER(hu_colorram_w);
110   DECLARE_WRITE8_MEMBER(slave_bankswitch_w);
111   DECLARE_WRITE8_MEMBER(hu_scrollx_w);
112   DECLARE_WRITE8_MEMBER(hu_scrolly_w);
113   DECLARE_WRITE8_MEMBER(coin_count_w);
114   DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
115   DECLARE_READ8_MEMBER(mermaid_p0_r);
116   DECLARE_WRITE8_MEMBER(mermaid_p0_w);
117   DECLARE_READ8_MEMBER(mermaid_p1_r);
118   DECLARE_WRITE8_MEMBER(mermaid_p1_w);
119   DECLARE_READ8_MEMBER(mermaid_p2_r);
120   DECLARE_WRITE8_MEMBER(mermaid_p2_w);
121   DECLARE_READ8_MEMBER(mermaid_p3_r);
122   DECLARE_WRITE8_MEMBER(mermaid_p3_w);
102123};
103124
104125
r14845r14846
186207 *
187208 *************************************/
188209
189static WRITE8_HANDLER( trigger_nmi_on_slave_cpu )
210WRITE8_MEMBER(hvyunit_state::trigger_nmi_on_slave_cpu)
190211{
191   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
192   device_set_input_line(state->m_slave_cpu, INPUT_LINE_NMI, PULSE_LINE);
212   device_set_input_line(m_slave_cpu, INPUT_LINE_NMI, PULSE_LINE);
193213}
194214
195static WRITE8_HANDLER( master_bankswitch_w )
215WRITE8_MEMBER(hvyunit_state::master_bankswitch_w)
196216{
197   unsigned char *ROM = space->machine().region("master")->base();
217   unsigned char *ROM = machine().region("master")->base();
198218   int bank = data & 7;
199219   ROM = &ROM[0x4000 * bank];
200   memory_set_bankptr(space->machine(), "bank1", ROM);
220   memory_set_bankptr(machine(), "bank1", ROM);
201221}
202222
203static WRITE8_HANDLER( mermaid_data_w )
223WRITE8_MEMBER(hvyunit_state::mermaid_data_w)
204224{
205   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
206225
207   state->m_data_to_mermaid = data;
208   state->m_z80_to_mermaid_full = 1;
209   state->m_mermaid_int0_l = 0;
210   device_set_input_line(state->m_mermaid, INPUT_LINE_IRQ0, ASSERT_LINE);
226   m_data_to_mermaid = data;
227   m_z80_to_mermaid_full = 1;
228   m_mermaid_int0_l = 0;
229   device_set_input_line(m_mermaid, INPUT_LINE_IRQ0, ASSERT_LINE);
211230}
212231
213static READ8_HANDLER( mermaid_data_r )
232READ8_MEMBER(hvyunit_state::mermaid_data_r)
214233{
215   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
216234
217   state->m_mermaid_to_z80_full = 0;
218   return state->m_data_to_z80;
235   m_mermaid_to_z80_full = 0;
236   return m_data_to_z80;
219237}
220238
221static READ8_HANDLER( mermaid_status_r )
239READ8_MEMBER(hvyunit_state::mermaid_status_r)
222240{
223   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
224241
225   return (!state->m_mermaid_to_z80_full << 2) | (state->m_z80_to_mermaid_full << 3);
242   return (!m_mermaid_to_z80_full << 2) | (m_z80_to_mermaid_full << 3);
226243}
227244
228245
r14845r14846
232249 *
233250 *************************************/
234251
235static WRITE8_HANDLER( trigger_nmi_on_sound_cpu2 )
252WRITE8_MEMBER(hvyunit_state::trigger_nmi_on_sound_cpu2)
236253{
237   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
238254
239255   soundlatch_w(space, 0, data);
240   device_set_input_line(state->m_sound_cpu, INPUT_LINE_NMI, PULSE_LINE);
256   device_set_input_line(m_sound_cpu, INPUT_LINE_NMI, PULSE_LINE);
241257}
242258
243static WRITE8_HANDLER( hu_videoram_w )
259WRITE8_MEMBER(hvyunit_state::hu_videoram_w)
244260{
245   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
246261
247   state->m_videoram[offset] = data;
248   state->m_bg_tilemap->mark_tile_dirty(offset);
262   m_videoram[offset] = data;
263   m_bg_tilemap->mark_tile_dirty(offset);
249264}
250265
251static WRITE8_HANDLER( hu_colorram_w )
266WRITE8_MEMBER(hvyunit_state::hu_colorram_w)
252267{
253   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
254268
255   state->m_colorram[offset] = data;
256   state->m_bg_tilemap->mark_tile_dirty(offset);
269   m_colorram[offset] = data;
270   m_bg_tilemap->mark_tile_dirty(offset);
257271}
258272
259static WRITE8_HANDLER( slave_bankswitch_w )
273WRITE8_MEMBER(hvyunit_state::slave_bankswitch_w)
260274{
261   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
262275
263   unsigned char *ROM = space->machine().region("slave")->base();
276   unsigned char *ROM = machine().region("slave")->base();
264277   int bank = (data & 0x03);
265   state->m_port0_data = data;
278   m_port0_data = data;
266279   ROM = &ROM[0x4000 * bank];
267280
268   memory_set_bankptr(space->machine(), "bank2", ROM);
281   memory_set_bankptr(machine(), "bank2", ROM);
269282}
270283
271static WRITE8_HANDLER( hu_scrollx_w )
284WRITE8_MEMBER(hvyunit_state::hu_scrollx_w)
272285{
273   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
274   state->m_scrollx = data;
286   m_scrollx = data;
275287}
276288
277static WRITE8_HANDLER( hu_scrolly_w )
289WRITE8_MEMBER(hvyunit_state::hu_scrolly_w)
278290{
279   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
280   state->m_scrolly = data;
291   m_scrolly = data;
281292}
282293
283static WRITE8_HANDLER( coin_count_w )
294WRITE8_MEMBER(hvyunit_state::coin_count_w)
284295{
285   coin_counter_w(space->machine(), 0, data & 1);
286   coin_counter_w(space->machine(), 1, data & 2);
296   coin_counter_w(machine(), 0, data & 1);
297   coin_counter_w(machine(), 1, data & 2);
287298}
288299
289300
r14845r14846
293304 *
294305 *************************************/
295306
296static WRITE8_HANDLER( sound_bankswitch_w )
307WRITE8_MEMBER(hvyunit_state::sound_bankswitch_w)
297308{
298   unsigned char *ROM = space->machine().region("soundcpu")->base();
309   unsigned char *ROM = machine().region("soundcpu")->base();
299310   int bank = data & 0x3;
300311   ROM = &ROM[0x4000 * bank];
301312
302   memory_set_bankptr(space->machine(), "bank3", ROM);
313   memory_set_bankptr(machine(), "bank3", ROM);
303314}
304315
305316
r14845r14846
309320 *
310321 *************************************/
311322
312static READ8_HANDLER( mermaid_p0_r )
323READ8_MEMBER(hvyunit_state::mermaid_p0_r)
313324{
314325   // ?
315326   return 0;
316327}
317328
318static WRITE8_HANDLER( mermaid_p0_w )
329WRITE8_MEMBER(hvyunit_state::mermaid_p0_w)
319330{
320   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
321331
322   if (!BIT(state->m_mermaid_p[0], 1) && BIT(data, 1))
332   if (!BIT(m_mermaid_p[0], 1) && BIT(data, 1))
323333   {
324      state->m_mermaid_to_z80_full = 1;
325      state->m_data_to_z80 = state->m_mermaid_p[1];
334      m_mermaid_to_z80_full = 1;
335      m_data_to_z80 = m_mermaid_p[1];
326336   }
327337
328338   if (BIT(data, 0) == 1)
329      state->m_z80_to_mermaid_full = 0;
339      m_z80_to_mermaid_full = 0;
330340
331   state->m_mermaid_p[0] = data;
341   m_mermaid_p[0] = data;
332342}
333343
334static READ8_HANDLER( mermaid_p1_r )
344READ8_MEMBER(hvyunit_state::mermaid_p1_r)
335345{
336   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
337346
338   if (BIT(state->m_mermaid_p[0], 0) == 0)
339      return state->m_data_to_mermaid;
347   if (BIT(m_mermaid_p[0], 0) == 0)
348      return m_data_to_mermaid;
340349   else
341350      return 0; // ?
342351}
343352
344static WRITE8_HANDLER( mermaid_p1_w )
353WRITE8_MEMBER(hvyunit_state::mermaid_p1_w)
345354{
346   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
347355
348356   if (data == 0xff)
349357   {
350      state->m_mermaid_int0_l = 1;
351      device_set_input_line(state->m_mermaid, INPUT_LINE_IRQ0, CLEAR_LINE);
358      m_mermaid_int0_l = 1;
359      device_set_input_line(m_mermaid, INPUT_LINE_IRQ0, CLEAR_LINE);
352360   }
353361
354   state->m_mermaid_p[1] = data;
362   m_mermaid_p[1] = data;
355363}
356364
357static READ8_HANDLER( mermaid_p2_r )
365READ8_MEMBER(hvyunit_state::mermaid_p2_r)
358366{
359   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
360367
361   switch ((state->m_mermaid_p[0] >> 2) & 3)
368   switch ((m_mermaid_p[0] >> 2) & 3)
362369   {
363      case 0: return input_port_read(space->machine(), "IN1");
364      case 1: return input_port_read(space->machine(), "IN2");
365      case 2: return input_port_read(space->machine(), "IN0");
370      case 0: return input_port_read(machine(), "IN1");
371      case 1: return input_port_read(machine(), "IN2");
372      case 2: return input_port_read(machine(), "IN0");
366373      default: return 0xff;
367374   }
368375}
369376
370static WRITE8_HANDLER( mermaid_p2_w )
377WRITE8_MEMBER(hvyunit_state::mermaid_p2_w)
371378{
372   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
373379
374   state->m_mermaid_p[2] = data;
380   m_mermaid_p[2] = data;
375381}
376382
377static READ8_HANDLER( mermaid_p3_r )
383READ8_MEMBER(hvyunit_state::mermaid_p3_r)
378384{
379   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
380385
381386   UINT8 dsw = 0;
382   UINT8 dsw1 = input_port_read(space->machine(), "DSW1");
383   UINT8 dsw2 = input_port_read(space->machine(), "DSW2");
387   UINT8 dsw1 = input_port_read(machine(), "DSW1");
388   UINT8 dsw2 = input_port_read(machine(), "DSW2");
384389
385   switch ((state->m_mermaid_p[0] >> 5) & 3)
390   switch ((m_mermaid_p[0] >> 5) & 3)
386391   {
387392      case 0: dsw = (BIT(dsw2, 4) << 3) | (BIT(dsw2, 0) << 2) | (BIT(dsw1, 4) << 1) | BIT(dsw1, 0); break;
388393      case 1: dsw = (BIT(dsw2, 5) << 3) | (BIT(dsw2, 1) << 2) | (BIT(dsw1, 5) << 1) | BIT(dsw1, 1); break;
r14845r14846
390395      case 3: dsw = (BIT(dsw2, 7) << 3) | (BIT(dsw2, 3) << 2) | (BIT(dsw1, 7) << 1) | BIT(dsw1, 3); break;
391396   }
392397
393   return (dsw << 4) | (state->m_mermaid_int0_l << 2) | (state->m_mermaid_to_z80_full << 3);
398   return (dsw << 4) | (m_mermaid_int0_l << 2) | (m_mermaid_to_z80_full << 3);
394399}
395400
396static WRITE8_HANDLER( mermaid_p3_w )
401WRITE8_MEMBER(hvyunit_state::mermaid_p3_w)
397402{
398   hvyunit_state *state = space->machine().driver_data<hvyunit_state>();
399403
400   state->m_mermaid_p[3] = data;
401   device_set_input_line(state->m_slave_cpu, INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
404   m_mermaid_p[3] = data;
405   device_set_input_line(m_slave_cpu, INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
402406}
403407
404408
r14845r14846
418422
419423static ADDRESS_MAP_START( master_io, AS_IO, 8, hvyunit_state )
420424   ADDRESS_MAP_GLOBAL_MASK(0xff)
421   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(master_bankswitch_w)
422   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(master_bankswitch_w) // correct?
423   AM_RANGE(0x02, 0x02) AM_WRITE_LEGACY(trigger_nmi_on_slave_cpu)
425   AM_RANGE(0x00, 0x00) AM_WRITE(master_bankswitch_w)
426   AM_RANGE(0x01, 0x01) AM_WRITE(master_bankswitch_w) // correct?
427   AM_RANGE(0x02, 0x02) AM_WRITE(trigger_nmi_on_slave_cpu)
424428ADDRESS_MAP_END
425429
426430
427431static ADDRESS_MAP_START( slave_memory, AS_PROGRAM, 8, hvyunit_state )
428432   AM_RANGE(0x0000, 0x7fff) AM_ROM
429433   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2")
430   AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE_LEGACY(hu_videoram_w) AM_BASE(m_videoram)
431   AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE_LEGACY(hu_colorram_w) AM_BASE(m_colorram)
434   AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(hu_videoram_w) AM_BASE(m_videoram)
435   AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(hu_colorram_w) AM_BASE(m_colorram)
432436   AM_RANGE(0xd000, 0xd1ff) AM_RAM_WRITE_LEGACY(paletteram_xxxxRRRRGGGGBBBB_split2_w) AM_BASE_GENERIC(paletteram2)
433437   AM_RANGE(0xd800, 0xd9ff) AM_RAM_WRITE_LEGACY(paletteram_xxxxRRRRGGGGBBBB_split1_w) AM_BASE_GENERIC(paletteram)
434438   AM_RANGE(0xd000, 0xdfff) AM_RAM
r14845r14846
437441
438442static ADDRESS_MAP_START( slave_io, AS_IO, 8, hvyunit_state )
439443   ADDRESS_MAP_GLOBAL_MASK(0xff)
440   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(slave_bankswitch_w)
441   AM_RANGE(0x02, 0x02) AM_WRITE_LEGACY(trigger_nmi_on_sound_cpu2)
442   AM_RANGE(0x04, 0x04) AM_READWRITE_LEGACY(mermaid_data_r, mermaid_data_w)
443   AM_RANGE(0x06, 0x06) AM_WRITE_LEGACY(hu_scrolly_w)
444   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(hu_scrollx_w)
445   AM_RANGE(0x0c, 0x0c) AM_READ_LEGACY(mermaid_status_r)
446   AM_RANGE(0x0e, 0x0e) AM_WRITE_LEGACY(coin_count_w)
444   AM_RANGE(0x00, 0x00) AM_WRITE(slave_bankswitch_w)
445   AM_RANGE(0x02, 0x02) AM_WRITE(trigger_nmi_on_sound_cpu2)
446   AM_RANGE(0x04, 0x04) AM_READWRITE(mermaid_data_r, mermaid_data_w)
447   AM_RANGE(0x06, 0x06) AM_WRITE(hu_scrolly_w)
448   AM_RANGE(0x08, 0x08) AM_WRITE(hu_scrollx_w)
449   AM_RANGE(0x0c, 0x0c) AM_READ(mermaid_status_r)
450   AM_RANGE(0x0e, 0x0e) AM_WRITE(coin_count_w)
447451
448452//  AM_RANGE(0x22, 0x22) AM_READ_LEGACY(hu_scrolly_hi_reset) //22/a2 taken from ram $f065
449453//  AM_RANGE(0xa2, 0xa2) AM_READ_LEGACY(hu_scrolly_hi_set)
r14845r14846
458462
459463static ADDRESS_MAP_START( sound_io, AS_IO, 8, hvyunit_state )
460464   ADDRESS_MAP_GLOBAL_MASK(0xff)
461   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(sound_bankswitch_w)
465   AM_RANGE(0x00, 0x00) AM_WRITE(sound_bankswitch_w)
462466   AM_RANGE(0x02, 0x03) AM_DEVREADWRITE_LEGACY("ymsnd", ym2203_r, ym2203_w)
463467   AM_RANGE(0x04, 0x04) AM_READ_LEGACY(soundlatch_r)
464468ADDRESS_MAP_END
465469
466470
467471static ADDRESS_MAP_START( mcu_io, AS_IO, 8, hvyunit_state )
468   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE_LEGACY(mermaid_p0_r, mermaid_p0_w)
469   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE_LEGACY(mermaid_p1_r, mermaid_p1_w)
470   AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE_LEGACY(mermaid_p2_r, mermaid_p2_w)
471   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE_LEGACY(mermaid_p3_r, mermaid_p3_w)
472   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE(mermaid_p0_r, mermaid_p0_w)
473   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE(mermaid_p1_r, mermaid_p1_w)
474   AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE(mermaid_p2_r, mermaid_p2_w)
475   AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(mermaid_p3_r, mermaid_p3_w)
472476ADDRESS_MAP_END
473477
474478
src/mame/drivers/royalmah.c
r14845r14846
123123   UINT8 m_mjifb_rom_enable;
124124
125125   required_device<cpu_device> m_maincpu;
126   DECLARE_WRITE8_MEMBER(royalmah_palbank_w);
127   DECLARE_WRITE8_MEMBER(mjderngr_coin_w);
128   DECLARE_WRITE8_MEMBER(mjderngr_palbank_w);
129   DECLARE_WRITE8_MEMBER(royalmah_rom_w);
130   DECLARE_WRITE8_MEMBER(input_port_select_w);
131   DECLARE_READ8_MEMBER(majs101b_dsw_r);
132   DECLARE_READ8_MEMBER(suzume_dsw_r);
133   DECLARE_WRITE8_MEMBER(suzume_bank_w);
134   DECLARE_WRITE8_MEMBER(mjapinky_bank_w);
135   DECLARE_WRITE8_MEMBER(mjapinky_palbank_w);
136   DECLARE_READ8_MEMBER(mjapinky_dsw_r);
137   DECLARE_WRITE8_MEMBER(tontonb_bank_w);
138   DECLARE_WRITE8_MEMBER(dynax_bank_w);
139   DECLARE_READ8_MEMBER(daisyari_dsw_r);
140   DECLARE_WRITE8_MEMBER(daisyari_bank_w);
141   DECLARE_READ8_MEMBER(mjclub_dsw_r);
142   DECLARE_WRITE8_MEMBER(mjclub_bank_w);
143   DECLARE_WRITE8_MEMBER(jansou_dsw_sel_w);
144   DECLARE_READ8_MEMBER(jansou_dsw_r);
145   DECLARE_WRITE8_MEMBER(jansou_colortable_w);
146   DECLARE_WRITE8_MEMBER(jansou_6400_w);
147   DECLARE_WRITE8_MEMBER(jansou_6401_w);
148   DECLARE_WRITE8_MEMBER(jansou_6402_w);
149   DECLARE_READ8_MEMBER(jansou_6403_r);
150   DECLARE_READ8_MEMBER(jansou_6404_r);
151   DECLARE_READ8_MEMBER(jansou_6405_r);
152   DECLARE_WRITE8_MEMBER(jansou_sound_w);
153   DECLARE_WRITE8_MEMBER(janptr96_dswsel_w);
154   DECLARE_READ8_MEMBER(janptr96_dswsel_r);
155   DECLARE_READ8_MEMBER(janptr96_dsw_r);
156   DECLARE_WRITE8_MEMBER(janptr96_rombank_w);
157   DECLARE_WRITE8_MEMBER(janptr96_rambank_w);
158   DECLARE_READ8_MEMBER(janptr96_unknown_r);
159   DECLARE_WRITE8_MEMBER(janptr96_coin_counter_w);
160   DECLARE_WRITE8_MEMBER(mjifb_coin_counter_w);
161   DECLARE_READ8_MEMBER(mjifb_rom_io_r);
162   DECLARE_WRITE8_MEMBER(mjifb_rom_io_w);
163   DECLARE_WRITE8_MEMBER(mjifb_videoram_w);
164   DECLARE_READ8_MEMBER(mjifb_p3_r);
165   DECLARE_READ8_MEMBER(mjifb_p5_r);
166   DECLARE_READ8_MEMBER(mjifb_p6_r);
167   DECLARE_READ8_MEMBER(mjifb_p7_r);
168   DECLARE_READ8_MEMBER(mjifb_p8_r);
169   DECLARE_WRITE8_MEMBER(mjifb_p3_w);
170   DECLARE_WRITE8_MEMBER(mjifb_p4_w);
171   DECLARE_WRITE8_MEMBER(mjifb_p8_w);
172   DECLARE_READ8_MEMBER(mjdejavu_rom_io_r);
173   DECLARE_WRITE8_MEMBER(mjdejavu_rom_io_w);
174   DECLARE_READ8_MEMBER(mjtensin_p3_r);
175   DECLARE_WRITE8_MEMBER(mjtensin_p4_w);
176   DECLARE_WRITE8_MEMBER(mjtensin_6ff3_w);
177   DECLARE_WRITE8_MEMBER(cafetime_p4_w);
178   DECLARE_WRITE8_MEMBER(cafetime_p3_w);
179   DECLARE_WRITE8_MEMBER(cafetime_dsw_w);
180   DECLARE_READ8_MEMBER(cafetime_dsw_r);
181   DECLARE_READ8_MEMBER(cafetime_7fe4_r);
182   DECLARE_WRITE8_MEMBER(cafetime_7fe3_w);
183   DECLARE_WRITE8_MEMBER(mjvegasa_p4_w);
184   DECLARE_WRITE8_MEMBER(mjvegasa_p3_w);
185   DECLARE_WRITE8_MEMBER(mjvegasa_rombank_w);
186   DECLARE_READ8_MEMBER(mjvegasa_rom_io_r);
187   DECLARE_WRITE8_MEMBER(mjvegasa_rom_io_w);
188   DECLARE_WRITE8_MEMBER(mjvegasa_coin_counter_w);
189   DECLARE_WRITE8_MEMBER(mjvegasa_12400_w);
190   DECLARE_READ8_MEMBER(mjvegasa_12500_r);
126191};
127192
128193
r14845r14846
183248}
184249
185250
186static WRITE8_HANDLER( royalmah_palbank_w )
251WRITE8_MEMBER(royalmah_state::royalmah_palbank_w)
187252{
188   royalmah_state *state = space->machine().driver_data<royalmah_state>();
189253   /* bit 1 = coin counter */
190   coin_counter_w(space->machine(), 0,data & 2);
254   coin_counter_w(machine(), 0,data & 2);
191255
192256   /* bit 2 always set? */
193257
194258   /* bit 3 = palette bank */
195   state->m_palette_base = (data >> 3) & 0x01;
259   m_palette_base = (data >> 3) & 0x01;
196260}
197261
198262
199static WRITE8_HANDLER( mjderngr_coin_w )
263WRITE8_MEMBER(royalmah_state::mjderngr_coin_w)
200264{
201265   /* bit 1 = coin counter */
202   coin_counter_w(space->machine(), 0,data & 2);
266   coin_counter_w(machine(), 0,data & 2);
203267
204268   /* bit 2 always set? */
205269}
206270
207271
208static WRITE8_HANDLER( mjderngr_palbank_w )
272WRITE8_MEMBER(royalmah_state::mjderngr_palbank_w)
209273{
210   royalmah_state *state = space->machine().driver_data<royalmah_state>();
211   state->m_palette_base = data;
274   m_palette_base = data;
212275}
213276
214277
r14845r14846
248311
249312
250313
251static WRITE8_HANDLER( royalmah_rom_w )
314WRITE8_MEMBER(royalmah_state::royalmah_rom_w)
252315{
253316   /* using this handler will avoid all the entries in the error log that are the result of
254317       the RLD and RRD instructions this games uses to print text on the screen */
255318}
256319
257320
258static WRITE8_HANDLER( input_port_select_w )
321WRITE8_MEMBER(royalmah_state::input_port_select_w)
259322{
260   royalmah_state *state = space->machine().driver_data<royalmah_state>();
261   state->m_input_port_select = data;
323   m_input_port_select = data;
262324}
263325
264326static READ8_DEVICE_HANDLER( royalmah_player_1_port_r )
r14845r14846
291353
292354
293355
294static READ8_HANDLER ( majs101b_dsw_r )
356READ8_MEMBER(royalmah_state::majs101b_dsw_r)
295357{
296   royalmah_state *state = space->machine().driver_data<royalmah_state>();
297   switch (state->m_dsw_select)
358   switch (m_dsw_select)
298359   {
299      case 0x00: return input_port_read(space->machine(), "DSW3");   /* DSW3 */
300      case 0x20: return input_port_read(space->machine(), "DSW4");   /* DSW4 */
301      case 0x40: return input_port_read(space->machine(), "DSW2");   /* DSW2 */
360      case 0x00: return input_port_read(machine(), "DSW3");   /* DSW3 */
361      case 0x20: return input_port_read(machine(), "DSW4");   /* DSW4 */
362      case 0x40: return input_port_read(machine(), "DSW2");   /* DSW2 */
302363   }
303364   return 0;
304365}
305366
306367
307368
308static READ8_HANDLER ( suzume_dsw_r )
369READ8_MEMBER(royalmah_state::suzume_dsw_r)
309370{
310   royalmah_state *state = space->machine().driver_data<royalmah_state>();
311   if (state->m_suzume_bank & 0x40)
371   if (m_suzume_bank & 0x40)
312372   {
313      return state->m_suzume_bank;
373      return m_suzume_bank;
314374   }
315375   else
316376   {
317      switch (state->m_suzume_bank)
377      switch (m_suzume_bank)
318378      {
319         case 0x08: return input_port_read(space->machine(), "DSW4");   /* DSW4 */
320         case 0x10: return input_port_read(space->machine(), "DSW3");   /* DSW3 */
321         case 0x18: return input_port_read(space->machine(), "DSW2");   /* DSW2 */
379         case 0x08: return input_port_read(machine(), "DSW4");   /* DSW4 */
380         case 0x10: return input_port_read(machine(), "DSW3");   /* DSW3 */
381         case 0x18: return input_port_read(machine(), "DSW2");   /* DSW2 */
322382      }
323383      return 0;
324384   }
325385}
326386
327static WRITE8_HANDLER ( suzume_bank_w )
387WRITE8_MEMBER(royalmah_state::suzume_bank_w)
328388{
329   royalmah_state *state = space->machine().driver_data<royalmah_state>();
330   UINT8 *rom = space->machine().region("maincpu")->base();
389   UINT8 *rom = machine().region("maincpu")->base();
331390   int address;
332391
333   state->m_suzume_bank = data;
392   m_suzume_bank = data;
334393
335logerror("%04x: bank %02x\n",cpu_get_pc(&space->device()),data);
394logerror("%04x: bank %02x\n",cpu_get_pc(&space.device()),data);
336395
337396   /* bits 6, 4 and 3 used for something input related? */
338397
339398   address = 0x10000 + (data & 0x07) * 0x8000;
340   memory_set_bankptr(space->machine(), "bank1",&rom[address]);
399   memory_set_bankptr(machine(), "bank1",&rom[address]);
341400}
342401
343402
344static WRITE8_HANDLER ( mjapinky_bank_w )
403WRITE8_MEMBER(royalmah_state::mjapinky_bank_w)
345404{
346   royalmah_state *state = space->machine().driver_data<royalmah_state>();
347   UINT8 *ROM = space->machine().region("maincpu")->base();
348   state->m_rombank = data;
349   memory_set_bankptr(space->machine(), "bank1",ROM + 0x10000 + 0x8000 * data);
405   UINT8 *ROM = machine().region("maincpu")->base();
406   m_rombank = data;
407   memory_set_bankptr(machine(), "bank1",ROM + 0x10000 + 0x8000 * data);
350408}
351409
352static WRITE8_HANDLER( mjapinky_palbank_w )
410WRITE8_MEMBER(royalmah_state::mjapinky_palbank_w)
353411{
354   royalmah_state *state = space->machine().driver_data<royalmah_state>();
355   flip_screen_set(space->machine(), ~data & 4);
356   state->m_palette_base = (data >> 3) & 0x01;
357   coin_counter_w(space->machine(), 0,data & 2);   // in
358   coin_counter_w(space->machine(), 1,data & 1);   // out
412   flip_screen_set(machine(), ~data & 4);
413   m_palette_base = (data >> 3) & 0x01;
414   coin_counter_w(machine(), 0,data & 2);   // in
415   coin_counter_w(machine(), 1,data & 1);   // out
359416}
360417
361static READ8_HANDLER( mjapinky_dsw_r )
418READ8_MEMBER(royalmah_state::mjapinky_dsw_r)
362419{
363   royalmah_state *state = space->machine().driver_data<royalmah_state>();
364   if (state->m_rombank == 0x0e)   return input_port_read(space->machine(), "DSW3");
365   else               return *(space->machine().region("maincpu")->base() + 0x10000 + 0x8000 * state->m_rombank);
420   if (m_rombank == 0x0e)   return input_port_read(machine(), "DSW3");
421   else               return *(machine().region("maincpu")->base() + 0x10000 + 0x8000 * m_rombank);
366422}
367423
368static WRITE8_HANDLER ( tontonb_bank_w )
424WRITE8_MEMBER(royalmah_state::tontonb_bank_w)
369425{
370   UINT8 *rom = space->machine().region("maincpu")->base();
426   UINT8 *rom = machine().region("maincpu")->base();
371427   int address;
372428
373logerror("%04x: bank %02x\n",cpu_get_pc(&space->device()),data);
429logerror("%04x: bank %02x\n",cpu_get_pc(&space.device()),data);
374430
375431   if (data == 0) return;   // tontonb fix?
376432
r14845r14846
378434
379435   address = 0x10000 + data * 0x8000;
380436
381   memory_set_bankptr(space->machine(), "bank1",&rom[address]);
437   memory_set_bankptr(machine(), "bank1",&rom[address]);
382438}
383439
384440
385441/* bits 5 and 6 seem to affect which Dip Switch to read in 'majs101b' */
386static WRITE8_HANDLER ( dynax_bank_w )
442WRITE8_MEMBER(royalmah_state::dynax_bank_w)
387443{
388   royalmah_state *state = space->machine().driver_data<royalmah_state>();
389   UINT8 *rom = space->machine().region("maincpu")->base();
444   UINT8 *rom = machine().region("maincpu")->base();
390445   int address;
391446
392//logerror("%04x: bank %02x\n",cpu_get_pc(&space->device()),data);
447//logerror("%04x: bank %02x\n",cpu_get_pc(&space.device()),data);
393448
394   state->m_dsw_select = data & 0x60;
449   m_dsw_select = data & 0x60;
395450
396451   data &= 0x1f;
397452
398453   address = 0x10000 + data * 0x8000;
399454
400   memory_set_bankptr(space->machine(), "bank1",&rom[address]);
455   memory_set_bankptr(machine(), "bank1",&rom[address]);
401456}
402457
403static READ8_HANDLER ( daisyari_dsw_r )
458READ8_MEMBER(royalmah_state::daisyari_dsw_r)
404459{
405   royalmah_state *state = space->machine().driver_data<royalmah_state>();
406   switch (state->m_dsw_select)
460   switch (m_dsw_select)
407461   {
408      case 0x00: return input_port_read(space->machine(), "DSW4");
409      case 0x04: return input_port_read(space->machine(), "DSW1");
410      case 0x08: return input_port_read(space->machine(), "DSW2");
411      case 0x0c: return input_port_read(space->machine(), "DSW3");
462      case 0x00: return input_port_read(machine(), "DSW4");
463      case 0x04: return input_port_read(machine(), "DSW1");
464      case 0x08: return input_port_read(machine(), "DSW2");
465      case 0x0c: return input_port_read(machine(), "DSW3");
412466   }
413467
414468   return 0;
415469}
416470
417static WRITE8_HANDLER ( daisyari_bank_w )
471WRITE8_MEMBER(royalmah_state::daisyari_bank_w)
418472{
419   royalmah_state *state = space->machine().driver_data<royalmah_state>();
420   UINT8 *rom = space->machine().region("maincpu")->base();
473   UINT8 *rom = machine().region("maincpu")->base();
421474   int address;
422475
423   state->m_dsw_select = (data & 0xc);
476   m_dsw_select = (data & 0xc);
424477
425478   address = 0x10000 + ((data & 0x30)>>4) * 0x10000 + (data & 0x1) * 0x8000;
426479//  printf("%08x %02x\n",address,data);
427480
428   memory_set_bankptr(space->machine(), "bank1",&rom[address]);
481   memory_set_bankptr(machine(), "bank1",&rom[address]);
429482
430483   /* bit 1 used too but unknown purpose. */
431484}
432485
433static READ8_HANDLER ( mjclub_dsw_r )
486READ8_MEMBER(royalmah_state::mjclub_dsw_r)
434487{
435   royalmah_state *state = space->machine().driver_data<royalmah_state>();
436   switch (state->m_dsw_select)
488   switch (m_dsw_select)
437489   {
438//      case 0x00: return input_port_read(space->machine(), "DSW4");
439      case 0x40: return input_port_read(space->machine(), "DSW2");
440      case 0x80: return input_port_read(space->machine(), "DSW3");
441      case 0xc0: return input_port_read(space->machine(), "DSW4");
490//      case 0x00: return input_port_read(machine(), "DSW4");
491      case 0x40: return input_port_read(machine(), "DSW2");
492      case 0x80: return input_port_read(machine(), "DSW3");
493      case 0xc0: return input_port_read(machine(), "DSW4");
442494   }
443495
444496   return 0;
445497}
446498
447static WRITE8_HANDLER ( mjclub_bank_w )
499WRITE8_MEMBER(royalmah_state::mjclub_bank_w)
448500{
449   royalmah_state *state = space->machine().driver_data<royalmah_state>();
450   UINT8 *rom = space->machine().region("maincpu")->base();
501   UINT8 *rom = machine().region("maincpu")->base();
451502   int address;
452503
453   state->m_dsw_select = data & 0xc0;
504   m_dsw_select = data & 0xc0;
454505
455506   data &= 0x0f;
456507
457508   address = 0x10000 + data * 0x8000;
458509//  printf("%08x\n",address);
459510
460   memory_set_bankptr(space->machine(), "bank1",&rom[address]);
511   memory_set_bankptr(machine(), "bank1",&rom[address]);
461512
462513   /* bit 5 used too but unknown purpose. */
463514}
464515
465516
466517static ADDRESS_MAP_START( royalmah_map, AS_PROGRAM, 8, royalmah_state )
467   AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE_LEGACY(royalmah_rom_w )
518   AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE(royalmah_rom_w )
468519   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
469520   AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )   // banked ROMs not present in royalmah
470521   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
r14845r14846
472523
473524
474525static ADDRESS_MAP_START( mjapinky_map, AS_PROGRAM, 8, royalmah_state )
475   AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE_LEGACY(royalmah_rom_w )
526   AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE(royalmah_rom_w )
476527   AM_RANGE( 0x7000, 0x77ff ) AM_RAM AM_SHARE("nvram")
477528   AM_RANGE( 0x7800, 0x7fff ) AM_RAM
478   AM_RANGE( 0x8000, 0x8000 ) AM_READ_LEGACY(mjapinky_dsw_r )
529   AM_RANGE( 0x8000, 0x8000 ) AM_READ(mjapinky_dsw_r )
479530   AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
480531   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
481532ADDRESS_MAP_END
r14845r14846
487538   ADDRESS_MAP_GLOBAL_MASK(0xff)
488539   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
489540   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
490   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
491   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
541   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
542   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
492543ADDRESS_MAP_END
493544
494545static ADDRESS_MAP_START( ippatsu_iomap, AS_IO, 8, royalmah_state )
495546   ADDRESS_MAP_GLOBAL_MASK(0xff)
496547   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
497548   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
498   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
499   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
549   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
550   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
500551   AM_RANGE( 0x12, 0x12 ) AM_READ_PORT("DSW2")
501552   AM_RANGE( 0x13, 0x13 ) AM_READ_PORT("DSW3")
502553ADDRESS_MAP_END
r14845r14846
505556   ADDRESS_MAP_GLOBAL_MASK(0xff)
506557   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
507558   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
508   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
509   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
510   AM_RANGE( 0x80, 0x80 ) AM_READ_LEGACY(suzume_dsw_r )
511   AM_RANGE( 0x81, 0x81 ) AM_WRITE_LEGACY(suzume_bank_w )
559   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
560   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
561   AM_RANGE( 0x80, 0x80 ) AM_READ(suzume_dsw_r )
562   AM_RANGE( 0x81, 0x81 ) AM_WRITE(suzume_bank_w )
512563ADDRESS_MAP_END
513564
514565static ADDRESS_MAP_START( dondenmj_iomap, AS_IO, 8, royalmah_state )
515566   ADDRESS_MAP_GLOBAL_MASK(0xff)
516567   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
517568   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
518   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
519   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
569   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
570   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
520571   AM_RANGE( 0x85, 0x85 ) AM_READ_PORT("DSW2")   // DSW2
521572   AM_RANGE( 0x86, 0x86 ) AM_READ_PORT("DSW3")   // DSW3
522   AM_RANGE( 0x87, 0x87 ) AM_WRITE_LEGACY(dynax_bank_w )
573   AM_RANGE( 0x87, 0x87 ) AM_WRITE(dynax_bank_w )
523574ADDRESS_MAP_END
524575
525576static ADDRESS_MAP_START( makaijan_iomap, AS_IO, 8, royalmah_state )
526577   ADDRESS_MAP_GLOBAL_MASK(0xff)
527578   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
528579   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
529   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
530   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
580   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
581   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
531582   AM_RANGE( 0x84, 0x84 ) AM_READ_PORT("DSW2")   // DSW2
532583   AM_RANGE( 0x85, 0x85 ) AM_READ_PORT("DSW3")   // DSW3
533   AM_RANGE( 0x86, 0x86 ) AM_WRITE_LEGACY(dynax_bank_w )
584   AM_RANGE( 0x86, 0x86 ) AM_WRITE(dynax_bank_w )
534585ADDRESS_MAP_END
535586
536587static ADDRESS_MAP_START( daisyari_iomap, AS_IO, 8, royalmah_state )
537588   ADDRESS_MAP_GLOBAL_MASK(0xff)
538589   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
539590   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
540   AM_RANGE( 0x10, 0x10 ) AM_WRITE_LEGACY(royalmah_palbank_w )
541   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
542   AM_RANGE( 0xc0, 0xc0 ) AM_READWRITE_LEGACY(daisyari_dsw_r, daisyari_bank_w )
591   AM_RANGE( 0x10, 0x10 ) AM_WRITE(royalmah_palbank_w )
592   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
593   AM_RANGE( 0xc0, 0xc0 ) AM_READWRITE(daisyari_dsw_r, daisyari_bank_w )
543594ADDRESS_MAP_END
544595
545596static ADDRESS_MAP_START( mjclub_iomap, AS_IO, 8, royalmah_state )
546597   ADDRESS_MAP_GLOBAL_MASK(0xff)
547   AM_RANGE( 0x00, 0x00 ) AM_READWRITE_LEGACY(mjclub_dsw_r, mjclub_bank_w )
598   AM_RANGE( 0x00, 0x00 ) AM_READWRITE(mjclub_dsw_r, mjclub_bank_w )
548599   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
549600   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
550   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
551   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
601   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
602   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
552603ADDRESS_MAP_END
553604
554605static ADDRESS_MAP_START( mjdiplob_iomap, AS_IO, 8, royalmah_state )
555606   ADDRESS_MAP_GLOBAL_MASK(0xff)
556607   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
557608   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
558   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
559   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
560   AM_RANGE( 0x61, 0x61 ) AM_WRITE_LEGACY(tontonb_bank_w)
609   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
610   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
611   AM_RANGE( 0x61, 0x61 ) AM_WRITE(tontonb_bank_w)
561612   AM_RANGE( 0x62, 0x62 ) AM_READ_PORT("DSW2")   // DSW2
562613   AM_RANGE( 0x63, 0x63 ) AM_READ_PORT("DSW3")   // DSW3
563614ADDRESS_MAP_END
r14845r14846
566617   ADDRESS_MAP_GLOBAL_MASK(0xff)
567618   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
568619   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
569   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
570   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
571   AM_RANGE( 0x44, 0x44 ) AM_WRITE_LEGACY(tontonb_bank_w )
620   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
621   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
622   AM_RANGE( 0x44, 0x44 ) AM_WRITE(tontonb_bank_w )
572623   AM_RANGE( 0x46, 0x46 ) AM_READ_PORT("DSW2")   // DSW2
573624   AM_RANGE( 0x47, 0x47 ) AM_READ_PORT("DSW3")   // DSW3
574625ADDRESS_MAP_END
r14845r14846
577628   ADDRESS_MAP_GLOBAL_MASK(0xff)
578629   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
579630   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
580   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(royalmah_palbank_w )
581   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
582   AM_RANGE( 0x00, 0x00 ) AM_READWRITE_LEGACY(majs101b_dsw_r, dynax_bank_w )
631   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
632   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
633   AM_RANGE( 0x00, 0x00 ) AM_READWRITE(majs101b_dsw_r, dynax_bank_w )
583634ADDRESS_MAP_END
584635
585636static ADDRESS_MAP_START( mjderngr_iomap, AS_IO, 8, royalmah_state )
r14845r14846
587638   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
588639   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
589640//  AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1")
590   AM_RANGE( 0x10, 0x10 ) AM_WRITE_LEGACY(mjderngr_coin_w )   // palette bank is set separately
591   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
592   AM_RANGE( 0x20, 0x20 ) AM_WRITE_LEGACY(dynax_bank_w )
641   AM_RANGE( 0x10, 0x10 ) AM_WRITE(mjderngr_coin_w )   // palette bank is set separately
642   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
643   AM_RANGE( 0x20, 0x20 ) AM_WRITE(dynax_bank_w )
593644   AM_RANGE( 0x40, 0x40 ) AM_READ_PORT("DSW3")
594645   AM_RANGE( 0x4c, 0x4c ) AM_READ_PORT("DSW2")
595   AM_RANGE( 0x60, 0x60 ) AM_WRITE_LEGACY(mjderngr_palbank_w )
646   AM_RANGE( 0x60, 0x60 ) AM_WRITE(mjderngr_palbank_w )
596647ADDRESS_MAP_END
597648
598649static ADDRESS_MAP_START( mjapinky_iomap, AS_IO, 8, royalmah_state )
599650   ADDRESS_MAP_GLOBAL_MASK(0xff)
600   AM_RANGE( 0x00, 0x00 ) AM_WRITE_LEGACY(mjapinky_bank_w )
651   AM_RANGE( 0x00, 0x00 ) AM_WRITE(mjapinky_bank_w )
601652   AM_RANGE( 0x01, 0x01 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
602653   AM_RANGE( 0x02, 0x03 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
603654   AM_RANGE( 0x04, 0x04 ) AM_READ_PORT("DSW2")
604   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(mjapinky_palbank_w )
605   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
655   AM_RANGE( 0x10, 0x10 ) AM_READ_PORT("DSW1") AM_WRITE(mjapinky_palbank_w )
656   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
606657ADDRESS_MAP_END
607658
608659
609660static ADDRESS_MAP_START( janoh_map, AS_PROGRAM, 8, royalmah_state )
610   AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE_LEGACY(royalmah_rom_w )
661   AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE(royalmah_rom_w )
611662   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
612663   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
613664ADDRESS_MAP_END
r14845r14846
634685
635686
636687
637static WRITE8_HANDLER( jansou_dsw_sel_w )
688WRITE8_MEMBER(royalmah_state::jansou_dsw_sel_w)
638689{
639   royalmah_state *state = space->machine().driver_data<royalmah_state>();
640   state->m_dsw_select = data;
690   m_dsw_select = data;
641691}
642692
643static READ8_HANDLER( jansou_dsw_r )
693READ8_MEMBER(royalmah_state::jansou_dsw_r)
644694{
645   royalmah_state *state = space->machine().driver_data<royalmah_state>();
646   switch (state->m_dsw_select & 7)
695   switch (m_dsw_select & 7)
647696   {
648      case 1: return input_port_read(space->machine(), "DSW1");
649      case 2: return input_port_read(space->machine(), "DSW2");
650      case 4: return input_port_read(space->machine(), "DSW3");
697      case 1: return input_port_read(machine(), "DSW1");
698      case 2: return input_port_read(machine(), "DSW2");
699      case 4: return input_port_read(machine(), "DSW3");
651700   }
652701
653702   return 0xff;
654703}
655704
656static WRITE8_HANDLER( jansou_colortable_w )
705WRITE8_MEMBER(royalmah_state::jansou_colortable_w)
657706{
658   royalmah_state *state = space->machine().driver_data<royalmah_state>();
659   state->m_jansou_colortable[offset] = data;
707   m_jansou_colortable[offset] = data;
660708}
661709
662static WRITE8_HANDLER( jansou_6400_w )
710WRITE8_MEMBER(royalmah_state::jansou_6400_w)
663711{
664   royalmah_state *state = space->machine().driver_data<royalmah_state>();
665   state->m_gfx_adr_l = data;
666   state->m_gfx_adr = state->m_gfx_adr_h*0x10000 + state->m_gfx_adr_m*0x100 + state->m_gfx_adr_l;
712   m_gfx_adr_l = data;
713   m_gfx_adr = m_gfx_adr_h*0x10000 + m_gfx_adr_m*0x100 + m_gfx_adr_l;
667714}
668715
669static WRITE8_HANDLER( jansou_6401_w )
716WRITE8_MEMBER(royalmah_state::jansou_6401_w)
670717{
671   royalmah_state *state = space->machine().driver_data<royalmah_state>();
672   state->m_gfx_adr_m = data;
673   state->m_gfx_adr = state->m_gfx_adr_h*0x10000 + state->m_gfx_adr_m*0x100 + state->m_gfx_adr_l;
718   m_gfx_adr_m = data;
719   m_gfx_adr = m_gfx_adr_h*0x10000 + m_gfx_adr_m*0x100 + m_gfx_adr_l;
674720}
675721
676static WRITE8_HANDLER( jansou_6402_w )
722WRITE8_MEMBER(royalmah_state::jansou_6402_w)
677723{
678   royalmah_state *state = space->machine().driver_data<royalmah_state>();
679   state->m_gfx_adr_h = data & 1;
680   state->m_gfx_adr = state->m_gfx_adr_h*0x10000 + state->m_gfx_adr_m*0x100 + state->m_gfx_adr_l;
724   m_gfx_adr_h = data & 1;
725   m_gfx_adr = m_gfx_adr_h*0x10000 + m_gfx_adr_m*0x100 + m_gfx_adr_l;
681726}
682727
683static READ8_HANDLER( jansou_6403_r )
728READ8_MEMBER(royalmah_state::jansou_6403_r)
684729{
685   royalmah_state *state = space->machine().driver_data<royalmah_state>();
686   UINT8 *GFXROM = space->machine().region("gfx1")->base();
687   int d0 = GFXROM[state->m_gfx_adr];
688   int d1 = GFXROM[state->m_gfx_adr+1];
689   int c0 = state->m_jansou_colortable[d1 & 0x0f] & 0x0f;
690   int c1 = state->m_jansou_colortable[(d1 & 0xf0) >> 4] >> 4;
691   int c2 = state->m_jansou_colortable[d0 & 0x0f] & 0x0f;
692   int c3 = state->m_jansou_colortable[(d0 & 0xf0) >> 4] >> 4;
730   UINT8 *GFXROM = machine().region("gfx1")->base();
731   int d0 = GFXROM[m_gfx_adr];
732   int d1 = GFXROM[m_gfx_adr+1];
733   int c0 = m_jansou_colortable[d1 & 0x0f] & 0x0f;
734   int c1 = m_jansou_colortable[(d1 & 0xf0) >> 4] >> 4;
735   int c2 = m_jansou_colortable[d0 & 0x0f] & 0x0f;
736   int c3 = m_jansou_colortable[(d0 & 0xf0) >> 4] >> 4;
693737
694   state->m_gfx_adr += 2;
738   m_gfx_adr += 2;
695739
696   state->m_gfxdata0 = (c3 & 1) << 0 | ((c2 & 1) << 1) | ((c1 & 1) << 2) | ((c0 & 1) << 3)
740   m_gfxdata0 = (c3 & 1) << 0 | ((c2 & 1) << 1) | ((c1 & 1) << 2) | ((c0 & 1) << 3)
697741           | ((c3 & 2) << 3) | ((c2 & 2) << 4) | ((c1 & 2) << 5) | ((c0 & 2) << 6);
698   state->m_gfxdata1 = (c3 & 4) >> 2 | ((c2 & 4) >> 1) | (c1 & 4) | ((c0 & 4) << 1)
742   m_gfxdata1 = (c3 & 4) >> 2 | ((c2 & 4) >> 1) | (c1 & 4) | ((c0 & 4) << 1)
699743           | ((c3 & 8) << 1) | ((c2 & 8) << 2) | ((c1 & 8) << 3) | ((c0 & 8) << 4);
700744
701745   return 0xff;
702746}
703747
704static READ8_HANDLER( jansou_6404_r )
748READ8_MEMBER(royalmah_state::jansou_6404_r)
705749{
706   royalmah_state *state = space->machine().driver_data<royalmah_state>();
707   return state->m_gfxdata0;
750   return m_gfxdata0;
708751}
709752
710static READ8_HANDLER( jansou_6405_r )
753READ8_MEMBER(royalmah_state::jansou_6405_r)
711754{
712   royalmah_state *state = space->machine().driver_data<royalmah_state>();
713   return state->m_gfxdata1;
755   return m_gfxdata1;
714756}
715757
716static WRITE8_HANDLER( jansou_sound_w )
758WRITE8_MEMBER(royalmah_state::jansou_sound_w)
717759{
718760   soundlatch_w(space, 0, data);
719   cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
761   cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
720762}
721763
722764
r14845r14846
724766static ADDRESS_MAP_START( jansou_map, AS_PROGRAM, 8, royalmah_state )
725767   AM_RANGE( 0x0000, 0x3fff ) AM_ROM
726768
727   AM_RANGE( 0x6000, 0x600f ) AM_WRITE_LEGACY(jansou_colortable_w)
728   AM_RANGE( 0x6400, 0x6400 ) AM_WRITE_LEGACY(jansou_6400_w)
729   AM_RANGE( 0x6401, 0x6401 ) AM_WRITE_LEGACY(jansou_6401_w)
730   AM_RANGE( 0x6402, 0x6402 ) AM_WRITE_LEGACY(jansou_6402_w)
731   AM_RANGE( 0x6403, 0x6403 ) AM_READ_LEGACY(jansou_6403_r)
732   AM_RANGE( 0x6404, 0x6404 ) AM_READ_LEGACY(jansou_6404_r)
733   AM_RANGE( 0x6405, 0x6405 ) AM_READ_LEGACY(jansou_6405_r)
734   AM_RANGE( 0x6406, 0x6406 ) AM_WRITE_LEGACY(jansou_dsw_sel_w)
735   AM_RANGE( 0x6407, 0x6407 ) AM_READ_LEGACY(jansou_dsw_r)
736   AM_RANGE( 0x6800, 0x6800 ) AM_WRITE_LEGACY(jansou_sound_w)
769   AM_RANGE( 0x6000, 0x600f ) AM_WRITE(jansou_colortable_w)
770   AM_RANGE( 0x6400, 0x6400 ) AM_WRITE(jansou_6400_w)
771   AM_RANGE( 0x6401, 0x6401 ) AM_WRITE(jansou_6401_w)
772   AM_RANGE( 0x6402, 0x6402 ) AM_WRITE(jansou_6402_w)
773   AM_RANGE( 0x6403, 0x6403 ) AM_READ(jansou_6403_r)
774   AM_RANGE( 0x6404, 0x6404 ) AM_READ(jansou_6404_r)
775   AM_RANGE( 0x6405, 0x6405 ) AM_READ(jansou_6405_r)
776   AM_RANGE( 0x6406, 0x6406 ) AM_WRITE(jansou_dsw_sel_w)
777   AM_RANGE( 0x6407, 0x6407 ) AM_READ(jansou_dsw_r)
778   AM_RANGE( 0x6800, 0x6800 ) AM_WRITE(jansou_sound_w)
737779
738780   AM_RANGE( 0x7000, 0x77ff ) AM_RAM AM_SHARE("nvram")
739781   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
r14845r14846
762804   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
763805ADDRESS_MAP_END
764806
765static WRITE8_HANDLER( janptr96_dswsel_w )
807WRITE8_MEMBER(royalmah_state::janptr96_dswsel_w)
766808{
767   royalmah_state *state = space->machine().driver_data<royalmah_state>();
768809   // 0x20 = 0 -> hopper on
769810   // 0x40 ?
770   state->m_dsw_select = data;
811   m_dsw_select = data;
771812}
772813
773static READ8_HANDLER( janptr96_dswsel_r )
814READ8_MEMBER(royalmah_state::janptr96_dswsel_r)
774815{
775   royalmah_state *state = space->machine().driver_data<royalmah_state>();
776   return state->m_dsw_select;
816   return m_dsw_select;
777817}
778818
779static READ8_HANDLER( janptr96_dsw_r )
819READ8_MEMBER(royalmah_state::janptr96_dsw_r)
780820{
781   royalmah_state *state = space->machine().driver_data<royalmah_state>();
782   if (~state->m_dsw_select & 0x01) return input_port_read(space->machine(), "DSW4");
783   if (~state->m_dsw_select & 0x02) return input_port_read(space->machine(), "DSW3");
784   if (~state->m_dsw_select & 0x04) return input_port_read(space->machine(), "DSW2");
785   if (~state->m_dsw_select & 0x08) return input_port_read(space->machine(), "DSW1");
786   if (~state->m_dsw_select & 0x10) return input_port_read(space->machine(), "DSWTOP");
821   if (~m_dsw_select & 0x01) return input_port_read(machine(), "DSW4");
822   if (~m_dsw_select & 0x02) return input_port_read(machine(), "DSW3");
823   if (~m_dsw_select & 0x04) return input_port_read(machine(), "DSW2");
824   if (~m_dsw_select & 0x08) return input_port_read(machine(), "DSW1");
825   if (~m_dsw_select & 0x10) return input_port_read(machine(), "DSWTOP");
787826   return 0xff;
788827}
789828
790static WRITE8_HANDLER( janptr96_rombank_w )
829WRITE8_MEMBER(royalmah_state::janptr96_rombank_w)
791830{
792   UINT8 *ROM = space->machine().region("maincpu")->base();
793   memory_set_bankptr(space->machine(), "bank1",ROM + 0x10000 + 0x8000 * data);
831   UINT8 *ROM = machine().region("maincpu")->base();
832   memory_set_bankptr(machine(), "bank1",ROM + 0x10000 + 0x8000 * data);
794833}
795834
796static WRITE8_HANDLER( janptr96_rambank_w )
835WRITE8_MEMBER(royalmah_state::janptr96_rambank_w)
797836{
798   royalmah_state *state = space->machine().driver_data<royalmah_state>();
799   memory_set_bankptr(space->machine(), "bank2", state->m_janptr96_nvram + 0x1000 + 0x1000 * data);
837   memory_set_bankptr(machine(), "bank2", m_janptr96_nvram + 0x1000 + 0x1000 * data);
800838}
801839
802static READ8_HANDLER( janptr96_unknown_r )
840READ8_MEMBER(royalmah_state::janptr96_unknown_r)
803841{
804842   // 0x08 = 0 makes the game crash (e.g. in the m-ram test: nested interrupts?)
805843   return 0xff;
806844}
807845
808static WRITE8_HANDLER( janptr96_coin_counter_w )
846WRITE8_MEMBER(royalmah_state::janptr96_coin_counter_w)
809847{
810   flip_screen_set(space->machine(), ~data & 4);
811   coin_counter_w(space->machine(), 0,data & 2);   // in
812   coin_counter_w(space->machine(), 1,data & 1);   // out
848   flip_screen_set(machine(), ~data & 4);
849   coin_counter_w(machine(), 0,data & 2);   // in
850   coin_counter_w(machine(), 1,data & 1);   // out
813851}
814852
815853static ADDRESS_MAP_START( janptr96_iomap, AS_IO, 8, royalmah_state )
816854   ADDRESS_MAP_GLOBAL_MASK(0xff)
817   AM_RANGE( 0x00, 0x00 ) AM_WRITE_LEGACY(janptr96_rombank_w )   // BANK ROM Select
818   AM_RANGE( 0x1e, 0x1e ) AM_READWRITE_LEGACY(janptr96_dswsel_r, janptr96_dswsel_w )
819   AM_RANGE( 0x1c, 0x1c ) AM_READ_LEGACY(janptr96_dsw_r )
820   AM_RANGE( 0x20, 0x20 ) AM_READWRITE_LEGACY(janptr96_unknown_r, janptr96_rambank_w )
821   AM_RANGE( 0x50, 0x50 ) AM_WRITE_LEGACY(mjderngr_palbank_w )
855   AM_RANGE( 0x00, 0x00 ) AM_WRITE(janptr96_rombank_w )   // BANK ROM Select
856   AM_RANGE( 0x1e, 0x1e ) AM_READWRITE(janptr96_dswsel_r, janptr96_dswsel_w )
857   AM_RANGE( 0x1c, 0x1c ) AM_READ(janptr96_dsw_r )
858   AM_RANGE( 0x20, 0x20 ) AM_READWRITE(janptr96_unknown_r, janptr96_rambank_w )
859   AM_RANGE( 0x50, 0x50 ) AM_WRITE(mjderngr_palbank_w )
822860   AM_RANGE( 0x60, 0x6f ) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
823861   AM_RANGE( 0x81, 0x81 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
824862   AM_RANGE( 0x82, 0x83 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
825   AM_RANGE( 0x93, 0x93 ) AM_WRITE_LEGACY(input_port_select_w )
826   AM_RANGE( 0xd8, 0xd8 ) AM_WRITE_LEGACY(janptr96_coin_counter_w )
863   AM_RANGE( 0x93, 0x93 ) AM_WRITE(input_port_select_w )
864   AM_RANGE( 0xd8, 0xd8 ) AM_WRITE(janptr96_coin_counter_w )
827865   AM_RANGE( 0xd9, 0xd9 ) AM_READ_PORT("SYSTEM")
828866ADDRESS_MAP_END
829867
r14845r14846
832870****************************************************************************/
833871
834872
835static WRITE8_HANDLER( mjifb_coin_counter_w )
873WRITE8_MEMBER(royalmah_state::mjifb_coin_counter_w)
836874{
837   flip_screen_set(space->machine(),  data & 4);
838   coin_counter_w(space->machine(), 0,data & 2);   // in
839   coin_counter_w(space->machine(), 1,data & 1);   // out
875   flip_screen_set(machine(),  data & 4);
876   coin_counter_w(machine(), 0,data & 2);   // in
877   coin_counter_w(machine(), 1,data & 1);   // out
840878}
841879
842static READ8_HANDLER( mjifb_rom_io_r )
880READ8_MEMBER(royalmah_state::mjifb_rom_io_r)
843881{
844   royalmah_state *state = space->machine().driver_data<royalmah_state>();
845   if (state->m_mjifb_rom_enable)
846      return ((UINT8*)(space->machine().region("maincpu")->base() + 0x10000 + state->m_rombank * 0x4000))[offset];
882   if (m_mjifb_rom_enable)
883      return ((UINT8*)(machine().region("maincpu")->base() + 0x10000 + m_rombank * 0x4000))[offset];
847884
848885   offset += 0x8000;
849886
850887   switch(offset)
851888   {
852      case 0x8000:   return input_port_read(space->machine(), "DSW4");      // dsw 4
853      case 0x8200:   return input_port_read(space->machine(), "DSW3");      // dsw 3
854      case 0x9001:   return ay8910_r(space->machine().device("aysnd"), 0);   // inputs
855      case 0x9011:   return input_port_read(space->machine(), "SYSTEM");
889      case 0x8000:   return input_port_read(machine(), "DSW4");      // dsw 4
890      case 0x8200:   return input_port_read(machine(), "DSW3");      // dsw 3
891      case 0x9001:   return ay8910_r(machine().device("aysnd"), 0);   // inputs
892      case 0x9011:   return input_port_read(machine(), "SYSTEM");
856893   }
857894
858   logerror("%04X: unmapped input read at %04X\n", cpu_get_pc(&space->device()), offset);
895   logerror("%04X: unmapped input read at %04X\n", cpu_get_pc(&space.device()), offset);
859896   return 0xff;
860897}
861898
862static WRITE8_HANDLER( mjifb_rom_io_w )
899WRITE8_MEMBER(royalmah_state::mjifb_rom_io_w)
863900{
864   royalmah_state *state = space->machine().driver_data<royalmah_state>();
865   UINT8 *videoram = state->m_videoram;
866   if (state->m_mjifb_rom_enable)
901   UINT8 *videoram = m_videoram;
902   if (m_mjifb_rom_enable)
867903   {
868904      videoram[offset] = data;
869905      return;
r14845r14846
873909
874910   switch(offset)
875911   {
876      case 0x8e00:   state->m_palette_base = data & 0x1f;   return;
877      case 0x9002:   ay8910_data_w(space->machine().device("aysnd"),0,data);         return;
878      case 0x9003:   ay8910_address_w(space->machine().device("aysnd"),0,data);      return;
912      case 0x8e00:   m_palette_base = data & 0x1f;   return;
913      case 0x9002:   ay8910_data_w(machine().device("aysnd"),0,data);         return;
914      case 0x9003:   ay8910_address_w(machine().device("aysnd"),0,data);      return;
879915      case 0x9010:
880916         mjifb_coin_counter_w(space,0,data);
881917         return;
r14845r14846
885921         return;
886922   }
887923
888   logerror("%04X: unmapped input write at %04X = %02X\n", cpu_get_pc(&space->device()), offset,data);
924   logerror("%04X: unmapped input write at %04X = %02X\n", cpu_get_pc(&space.device()), offset,data);
889925}
890926
891static WRITE8_HANDLER( mjifb_videoram_w )
927WRITE8_MEMBER(royalmah_state::mjifb_videoram_w)
892928{
893   royalmah_state *state = space->machine().driver_data<royalmah_state>();
894   UINT8 *videoram = state->m_videoram;
929   UINT8 *videoram = m_videoram;
895930   videoram[offset + 0x4000] = data;
896931}
897932
898933static ADDRESS_MAP_START( mjifb_map, AS_PROGRAM, 8, royalmah_state )
899934   AM_RANGE( 0x0000, 0x6fff ) AM_ROM
900935   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
901   AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE_LEGACY(mjifb_rom_io_r, mjifb_rom_io_w) AM_BASE(m_videoram)
902   AM_RANGE( 0xc000, 0xffff ) AM_ROM AM_WRITE_LEGACY(mjifb_videoram_w)
936   AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE(mjifb_rom_io_r, mjifb_rom_io_w) AM_BASE(m_videoram)
937   AM_RANGE( 0xc000, 0xffff ) AM_ROM AM_WRITE(mjifb_videoram_w)
903938//  AM_RANGE( 0xc000, 0xffff ) AM_ROM AM_WRITEONLY  This should, but doesn't work
904939ADDRESS_MAP_END
905940
906static READ8_HANDLER( mjifb_p3_r )
941READ8_MEMBER(royalmah_state::mjifb_p3_r)
907942{
908   return input_port_read(space->machine(), "PORT3_5") >> 6;
943   return input_port_read(machine(), "PORT3_5") >> 6;
909944}
910static READ8_HANDLER( mjifb_p5_r )
945READ8_MEMBER(royalmah_state::mjifb_p5_r)
911946{
912   return input_port_read(space->machine(), "PORT3_5");
947   return input_port_read(machine(), "PORT3_5");
913948}
914static READ8_HANDLER( mjifb_p6_r )
949READ8_MEMBER(royalmah_state::mjifb_p6_r)
915950{
916   return input_port_read(space->machine(), "PORT6_7");
951   return input_port_read(machine(), "PORT6_7");
917952}
918static READ8_HANDLER( mjifb_p7_r )
953READ8_MEMBER(royalmah_state::mjifb_p7_r)
919954{
920   return input_port_read(space->machine(), "PORT6_7") >> 4;
955   return input_port_read(machine(), "PORT6_7") >> 4;
921956}
922static READ8_HANDLER( mjifb_p8_r )
957READ8_MEMBER(royalmah_state::mjifb_p8_r)
923958{
924959   return 0xff;
925960}
926961
927static WRITE8_HANDLER( mjifb_p3_w )
962WRITE8_MEMBER(royalmah_state::mjifb_p3_w)
928963{
929   royalmah_state *state = space->machine().driver_data<royalmah_state>();
930   state->m_rombank = (state->m_rombank & 0x0f) | ((data & 0x0c) << 2);
964   m_rombank = (m_rombank & 0x0f) | ((data & 0x0c) << 2);
931965}
932static WRITE8_HANDLER( mjifb_p4_w )
966WRITE8_MEMBER(royalmah_state::mjifb_p4_w)
933967{
934   royalmah_state *state = space->machine().driver_data<royalmah_state>();
935   state->m_rombank = (state->m_rombank & 0xf0) | (data & 0x0f);
968   m_rombank = (m_rombank & 0xf0) | (data & 0x0f);
936969}
937static WRITE8_HANDLER( mjifb_p8_w )
970WRITE8_MEMBER(royalmah_state::mjifb_p8_w)
938971{
939   royalmah_state *state = space->machine().driver_data<royalmah_state>();
940   state->m_mjifb_rom_enable = (data & 0x08);
972   m_mjifb_rom_enable = (data & 0x08);
941973}
942974
943975static ADDRESS_MAP_START( mjifb_iomap, AS_IO, 8, royalmah_state )
944   AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE_LEGACY(mjifb_p3_r, mjifb_p3_w )
945   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE_LEGACY(mjifb_p4_w )
946   AM_RANGE( T90_P5, T90_P5 ) AM_READ_LEGACY(mjifb_p5_r )
947   AM_RANGE( T90_P6, T90_P6 ) AM_READ_LEGACY(mjifb_p6_r )
948   AM_RANGE( T90_P7, T90_P7 ) AM_READ_LEGACY(mjifb_p7_r )
949   AM_RANGE( T90_P8, T90_P8 ) AM_READWRITE_LEGACY(mjifb_p8_r, mjifb_p8_w )
976   AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE(mjifb_p3_r, mjifb_p3_w )
977   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE(mjifb_p4_w )
978   AM_RANGE( T90_P5, T90_P5 ) AM_READ(mjifb_p5_r )
979   AM_RANGE( T90_P6, T90_P6 ) AM_READ(mjifb_p6_r )
980   AM_RANGE( T90_P7, T90_P7 ) AM_READ(mjifb_p7_r )
981   AM_RANGE( T90_P8, T90_P8 ) AM_READWRITE(mjifb_p8_r, mjifb_p8_w )
950982ADDRESS_MAP_END
951983
952984
r14845r14846
954986                           Mahjong Shinkirou Deja Vu
955987****************************************************************************/
956988
957static READ8_HANDLER( mjdejavu_rom_io_r )
989READ8_MEMBER(royalmah_state::mjdejavu_rom_io_r)
958990{
959   royalmah_state *state = space->machine().driver_data<royalmah_state>();
960   if (state->m_mjifb_rom_enable)
961      return ((UINT8*)(space->machine().region("maincpu")->base() + 0x10000 + state->m_rombank * 0x4000))[offset];
991   if (m_mjifb_rom_enable)
992      return ((UINT8*)(machine().region("maincpu")->base() + 0x10000 + m_rombank * 0x4000))[offset];
962993
963994   offset += 0x8000;
964995
965996   switch(offset)
966997   {
967      case 0x8000:   return input_port_read(space->machine(), "DSW2");      // dsw 2
968      case 0x8001:   return input_port_read(space->machine(), "DSW1");      // dsw 1
969      case 0x9001:   return ay8910_r(space->machine().device("aysnd"), 0);   // inputs
970      case 0x9011:   return input_port_read(space->machine(), "SYSTEM");
998      case 0x8000:   return input_port_read(machine(), "DSW2");      // dsw 2
999      case 0x8001:   return input_port_read(machine(), "DSW1");      // dsw 1
1000      case 0x9001:   return ay8910_r(machine().device("aysnd"), 0);   // inputs
1001      case 0x9011:   return input_port_read(machine(), "SYSTEM");
9711002   }
9721003
973   logerror("%04X: unmapped input read at %04X\n", cpu_get_pc(&space->device()), offset);
1004   logerror("%04X: unmapped input read at %04X\n", cpu_get_pc(&space.device()), offset);
9741005   return 0xff;
9751006}
9761007
977static WRITE8_HANDLER( mjdejavu_rom_io_w )
1008WRITE8_MEMBER(royalmah_state::mjdejavu_rom_io_w)
9781009{
979   royalmah_state *state = space->machine().driver_data<royalmah_state>();
980   UINT8 *videoram = state->m_videoram;
981   if (state->m_mjifb_rom_enable)
1010   UINT8 *videoram = m_videoram;
1011   if (m_mjifb_rom_enable)
9821012   {
9831013      videoram[offset] = data;
9841014      return;
r14845r14846
9871017   offset += 0x8000;
9881018   switch(offset)
9891019   {
990      case 0x8802:   state->m_palette_base = data & 0x1f;               return;
991      case 0x9002:   ay8910_data_w(space->machine().device("aysnd"),0,data);      return;
992      case 0x9003:   ay8910_address_w(space->machine().device("aysnd"),0,data);   return;
1020      case 0x8802:   m_palette_base = data & 0x1f;               return;
1021      case 0x9002:   ay8910_data_w(machine().device("aysnd"),0,data);      return;
1022      case 0x9003:   ay8910_address_w(machine().device("aysnd"),0,data);   return;
9931023      case 0x9010:   mjifb_coin_counter_w(space,0,data);      return;
9941024      case 0x9011:   input_port_select_w(space,0,data);      return;
9951025      case 0x9013:
r14845r14846
9971027         return;
9981028   }
9991029
1000   logerror("%04X: unmapped input write at %04X = %02X\n", cpu_get_pc(&space->device()), offset,data);
1030   logerror("%04X: unmapped input write at %04X = %02X\n", cpu_get_pc(&space.device()), offset,data);
10011031}
10021032
10031033static ADDRESS_MAP_START( mjdejavu_map, AS_PROGRAM, 8, royalmah_state )
10041034   AM_RANGE( 0x0000, 0x6fff ) AM_ROM
10051035   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
1006   AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE_LEGACY(mjdejavu_rom_io_r, mjdejavu_rom_io_w) AM_BASE(m_videoram)
1007   AM_RANGE( 0xc000, 0xffff ) AM_ROM AM_WRITE_LEGACY(mjifb_videoram_w)
1036   AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE(mjdejavu_rom_io_r, mjdejavu_rom_io_w) AM_BASE(m_videoram)
1037   AM_RANGE( 0xc000, 0xffff ) AM_ROM AM_WRITE(mjifb_videoram_w)
10081038ADDRESS_MAP_END
10091039
10101040
r14845r14846
10121042                                Mahjong Tensinhai
10131043****************************************************************************/
10141044
1015static READ8_HANDLER( mjtensin_p3_r )
1045READ8_MEMBER(royalmah_state::mjtensin_p3_r)
10161046{
10171047   return 0xff;
10181048}
r14845r14846
10221052   royalmah_state *state = machine.driver_data<royalmah_state>();
10231053   memory_set_bankptr(machine,  "bank1", machine.region("maincpu")->base() + 0x10000 + state->m_rombank * 0x8000 );
10241054}
1025static WRITE8_HANDLER( mjtensin_p4_w )
1055WRITE8_MEMBER(royalmah_state::mjtensin_p4_w)
10261056{
1027   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1028   state->m_rombank = (state->m_rombank & 0xf0) | (data & 0x0f);
1029   mjtensin_update_rombank(space->machine());
1057   m_rombank = (m_rombank & 0xf0) | (data & 0x0f);
1058   mjtensin_update_rombank(machine());
10301059}
1031static WRITE8_HANDLER( mjtensin_6ff3_w )
1060WRITE8_MEMBER(royalmah_state::mjtensin_6ff3_w)
10321061{
1033   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1034   state->m_rombank = (data << 4) | (state->m_rombank & 0x0f);
1035   mjtensin_update_rombank(space->machine());
1062   m_rombank = (data << 4) | (m_rombank & 0x0f);
1063   mjtensin_update_rombank(machine());
10361064}
10371065
10381066static ADDRESS_MAP_START( mjtensin_map, AS_PROGRAM, 8, royalmah_state )
r14845r14846
10401068   AM_RANGE( 0x6000, 0x6fbf ) AM_RAM
10411069   AM_RANGE( 0x6fc1, 0x6fc1 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
10421070   AM_RANGE( 0x6fc2, 0x6fc3 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
1043   AM_RANGE( 0x6fd0, 0x6fd0 ) AM_WRITE_LEGACY(janptr96_coin_counter_w )
1044   AM_RANGE( 0x6fd1, 0x6fd1 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
1071   AM_RANGE( 0x6fd0, 0x6fd0 ) AM_WRITE(janptr96_coin_counter_w )
1072   AM_RANGE( 0x6fd1, 0x6fd1 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
10451073   AM_RANGE( 0x6fe0, 0x6fef ) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
1046   AM_RANGE( 0x6ff0, 0x6ff0 ) AM_READWRITE_LEGACY(janptr96_dsw_r, janptr96_dswsel_w )
1047   AM_RANGE( 0x6ff1, 0x6ff1 ) AM_WRITE_LEGACY(mjderngr_palbank_w )
1048   AM_RANGE( 0x6ff3, 0x6ff3 ) AM_WRITE_LEGACY(mjtensin_6ff3_w )
1074   AM_RANGE( 0x6ff0, 0x6ff0 ) AM_READWRITE(janptr96_dsw_r, janptr96_dswsel_w )
1075   AM_RANGE( 0x6ff1, 0x6ff1 ) AM_WRITE(mjderngr_palbank_w )
1076   AM_RANGE( 0x6ff3, 0x6ff3 ) AM_WRITE(mjtensin_6ff3_w )
10491077   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
10501078   AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
10511079   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
10521080ADDRESS_MAP_END
10531081
10541082static ADDRESS_MAP_START( mjtensin_iomap, AS_IO, 8, royalmah_state )
1055   AM_RANGE( T90_P3, T90_P3 ) AM_READ_LEGACY(mjtensin_p3_r )
1056   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE_LEGACY(mjtensin_p4_w )
1083   AM_RANGE( T90_P3, T90_P3 ) AM_READ(mjtensin_p3_r )
1084   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE(mjtensin_p4_w )
10571085ADDRESS_MAP_END
10581086
10591087
r14845r14846
10661094   royalmah_state *state = machine.driver_data<royalmah_state>();
10671095   memory_set_bankptr(machine,  "bank1", machine.region("maincpu")->base() + 0x10000 + state->m_rombank * 0x8000 );
10681096}
1069static WRITE8_HANDLER( cafetime_p4_w )
1097WRITE8_MEMBER(royalmah_state::cafetime_p4_w)
10701098{
1071   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1072   state->m_rombank = (state->m_rombank & 0xf0) | (data & 0x0f);
1073   cafetime_update_rombank(space->machine());
1099   m_rombank = (m_rombank & 0xf0) | (data & 0x0f);
1100   cafetime_update_rombank(machine());
10741101}
1075static WRITE8_HANDLER( cafetime_p3_w )
1102WRITE8_MEMBER(royalmah_state::cafetime_p3_w)
10761103{
1077   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1078   state->m_rombank = (state->m_rombank & 0x0f) | ((data & 0x0c) << 2);
1079   cafetime_update_rombank(space->machine());
1104   m_rombank = (m_rombank & 0x0f) | ((data & 0x0c) << 2);
1105   cafetime_update_rombank(machine());
10801106}
10811107
1082static WRITE8_HANDLER( cafetime_dsw_w )
1108WRITE8_MEMBER(royalmah_state::cafetime_dsw_w)
10831109{
1084   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1085   state->m_dsw_select = data;
1110   m_dsw_select = data;
10861111}
1087static READ8_HANDLER( cafetime_dsw_r )
1112READ8_MEMBER(royalmah_state::cafetime_dsw_r)
10881113{
1089   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1090   switch( state->m_dsw_select )
1114   switch( m_dsw_select )
10911115   {
1092      case 0x00: return input_port_read(space->machine(), "DSW1");
1093      case 0x01: return input_port_read(space->machine(), "DSW2");
1094      case 0x02: return input_port_read(space->machine(), "DSW3");
1095      case 0x03: return input_port_read(space->machine(), "DSW4");
1096      case 0x04: return input_port_read(space->machine(), "DSWTOP");
1116      case 0x00: return input_port_read(machine(), "DSW1");
1117      case 0x01: return input_port_read(machine(), "DSW2");
1118      case 0x02: return input_port_read(machine(), "DSW3");
1119      case 0x03: return input_port_read(machine(), "DSW4");
1120      case 0x04: return input_port_read(machine(), "DSWTOP");
10971121   }
1098   logerror("%04X: unmapped dsw read %02X\n", cpu_get_pc(&space->device()), state->m_dsw_select);
1122   logerror("%04X: unmapped dsw read %02X\n", cpu_get_pc(&space.device()), m_dsw_select);
10991123   return 0xff;
11001124}
11011125
1102static READ8_HANDLER( cafetime_7fe4_r )
1126READ8_MEMBER(royalmah_state::cafetime_7fe4_r)
11031127{
11041128   return 0xff;
11051129}
1106static WRITE8_HANDLER( cafetime_7fe3_w )
1130WRITE8_MEMBER(royalmah_state::cafetime_7fe3_w)
11071131{
11081132//  popmessage("%02x",data);
11091133}
r14845r14846
11131137   AM_RANGE( 0x6000, 0x7eff ) AM_RAM AM_SHARE("nvram")
11141138   AM_RANGE( 0x7fc1, 0x7fc1 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
11151139   AM_RANGE( 0x7fc2, 0x7fc3 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
1116   AM_RANGE( 0x7fd0, 0x7fd0 ) AM_WRITE_LEGACY(janptr96_coin_counter_w )
1140   AM_RANGE( 0x7fd0, 0x7fd0 ) AM_WRITE(janptr96_coin_counter_w )
11171141   AM_RANGE( 0x7fd1, 0x7fd1 ) AM_READ_PORT("SYSTEM") AM_WRITENOP
1118   AM_RANGE( 0x7fd3, 0x7fd3 ) AM_WRITE_LEGACY(input_port_select_w )
1119   AM_RANGE( 0x7fe0, 0x7fe0 ) AM_READ_LEGACY(cafetime_dsw_r )
1120   AM_RANGE( 0x7fe1, 0x7fe1 ) AM_WRITE_LEGACY(cafetime_dsw_w )
1121   AM_RANGE( 0x7fe2, 0x7fe2 ) AM_WRITE_LEGACY(mjderngr_palbank_w )
1122   AM_RANGE( 0x7fe3, 0x7fe3 ) AM_WRITE_LEGACY(cafetime_7fe3_w )
1123   AM_RANGE( 0x7fe4, 0x7fe4 ) AM_READ_LEGACY(cafetime_7fe4_r )
1142   AM_RANGE( 0x7fd3, 0x7fd3 ) AM_WRITE(input_port_select_w )
1143   AM_RANGE( 0x7fe0, 0x7fe0 ) AM_READ(cafetime_dsw_r )
1144   AM_RANGE( 0x7fe1, 0x7fe1 ) AM_WRITE(cafetime_dsw_w )
1145   AM_RANGE( 0x7fe2, 0x7fe2 ) AM_WRITE(mjderngr_palbank_w )
1146   AM_RANGE( 0x7fe3, 0x7fe3 ) AM_WRITE(cafetime_7fe3_w )
1147   AM_RANGE( 0x7fe4, 0x7fe4 ) AM_READ(cafetime_7fe4_r )
11241148   AM_RANGE( 0x7ff0, 0x7fff ) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
11251149   AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
11261150   AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_BASE(m_videoram)
r14845r14846
11281152
11291153
11301154static ADDRESS_MAP_START( cafetime_iomap, AS_IO, 8, royalmah_state )
1131   AM_RANGE( T90_P3, T90_P3 ) AM_WRITE_LEGACY(cafetime_p3_w )
1132   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE_LEGACY(cafetime_p4_w )
1155   AM_RANGE( T90_P3, T90_P3 ) AM_WRITE(cafetime_p3_w )
1156   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE(cafetime_p4_w )
11331157ADDRESS_MAP_END
11341158
11351159
r14845r14846
11371161                               Mahjong Vegas
11381162****************************************************************************/
11391163
1140static WRITE8_HANDLER( mjvegasa_p4_w )
1164WRITE8_MEMBER(royalmah_state::mjvegasa_p4_w)
11411165{
1142   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1143   state->m_rombank = (state->m_rombank & 0xf8) | ((data & 0x0e) >> 1);
1166   m_rombank = (m_rombank & 0xf8) | ((data & 0x0e) >> 1);
11441167}
1145static WRITE8_HANDLER( mjvegasa_p3_w )
1168WRITE8_MEMBER(royalmah_state::mjvegasa_p3_w)
11461169{
1147   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1148   state->m_rombank = (state->m_rombank & 0xf7) | ((data & 0x04) << 1);
1170   m_rombank = (m_rombank & 0xf7) | ((data & 0x04) << 1);
11491171}
1150static WRITE8_HANDLER( mjvegasa_rombank_w )
1172WRITE8_MEMBER(royalmah_state::mjvegasa_rombank_w)
11511173{
1152   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1153   state->m_rombank = (state->m_rombank & 0x0f) | ((data & 0x0f) << 4);
1174   m_rombank = (m_rombank & 0x0f) | ((data & 0x0f) << 4);
11541175}
11551176
1156static READ8_HANDLER( mjvegasa_rom_io_r )
1177READ8_MEMBER(royalmah_state::mjvegasa_rom_io_r)
11571178{
1158   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1159   if ((state->m_rombank & 0x70) != 0x70)
1160      return space->machine().region("maincpu")->base()[0x10000 + state->m_rombank * 0x8000 + offset];
1179   if ((m_rombank & 0x70) != 0x70)
1180      return machine().region("maincpu")->base()[0x10000 + m_rombank * 0x8000 + offset];
11611181
11621182   offset += 0x8000;
11631183
11641184   if((offset & 0xfff0) == 0x8000)
11651185   {
1166      msm6242_device *rtc = space->machine().device<msm6242_device>("rtc");
1186      msm6242_device *rtc = machine().device<msm6242_device>("rtc");
11671187
1168      return rtc->read(*space, offset & 0xf);
1188      return rtc->read(*&space, offset & 0xf);
11691189   }
11701190
1171   logerror("%04X: unmapped IO read at %04X\n", cpu_get_pc(&space->device()), offset);
1191   logerror("%04X: unmapped IO read at %04X\n", cpu_get_pc(&space.device()), offset);
11721192   return 0xff;
11731193}
11741194
1175static WRITE8_HANDLER( mjvegasa_rom_io_w )
1195WRITE8_MEMBER(royalmah_state::mjvegasa_rom_io_w)
11761196{
1177   royalmah_state *state = space->machine().driver_data<royalmah_state>();
1178   UINT8 *videoram = state->m_videoram;
1179   if ((state->m_rombank & 0x70) != 0x70)
1197   UINT8 *videoram = m_videoram;
1198   if ((m_rombank & 0x70) != 0x70)
11801199   {
11811200      videoram[offset] = data;
11821201      return;
r14845r14846
11861205
11871206   if((offset & 0xfff0) == 0x8000)
11881207   {
1189      msm6242_device *rtc = space->machine().device<msm6242_device>("rtc");
1208      msm6242_device *rtc = machine().device<msm6242_device>("rtc");
11901209
1191      rtc->write(*space, offset & 0xf,data);
1210      rtc->write(*&space, offset & 0xf,data);
11921211      return;
11931212   }
11941213
1195   logerror("%04X: unmapped IO write at %04X = %02X\n", cpu_get_pc(&space->device()), offset,data);
1214   logerror("%04X: unmapped IO write at %04X = %02X\n", cpu_get_pc(&space.device()), offset,data);
11961215}
11971216
1198static WRITE8_HANDLER( mjvegasa_coin_counter_w )
1217WRITE8_MEMBER(royalmah_state::mjvegasa_coin_counter_w)
11991218{
1200   flip_screen_set(space->machine(),  data & 4);
1201   coin_counter_w(space->machine(), 0,data & 2);   // in
1202   coin_counter_w(space->machine(), 1,data & 1);   // out
1219   flip_screen_set(machine(),  data & 4);
1220   coin_counter_w(machine(), 0,data & 2);   // in
1221   coin_counter_w(machine(), 1,data & 1);   // out
12031222}
12041223
12051224// hopper?
1206static WRITE8_HANDLER( mjvegasa_12400_w )
1225WRITE8_MEMBER(royalmah_state::mjvegasa_12400_w)
12071226{
12081227   // bits 0 & 1
12091228//  popmessage("UNK: %02x",data);
12101229}
1211static READ8_HANDLER( mjvegasa_12500_r )
1230READ8_MEMBER(royalmah_state::mjvegasa_12500_r)
12121231{
12131232   // bits 0 & 2
12141233   return 0xff;
r14845r14846
12181237
12191238   AM_RANGE( 0x00000, 0x05fff ) AM_ROM
12201239   AM_RANGE( 0x06000, 0x07fff ) AM_RAM AM_SHARE("nvram")
1221   AM_RANGE( 0x08000, 0x0ffff ) AM_READWRITE_LEGACY(mjvegasa_rom_io_r, mjvegasa_rom_io_w) AM_BASE(m_videoram)
1240   AM_RANGE( 0x08000, 0x0ffff ) AM_READWRITE(mjvegasa_rom_io_r, mjvegasa_rom_io_w) AM_BASE(m_videoram)
12221241
12231242   AM_RANGE( 0x10001, 0x10001 ) AM_DEVREAD_LEGACY("aysnd", ay8910_r )
12241243   AM_RANGE( 0x10002, 0x10003 ) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w )
1225   AM_RANGE( 0x10010, 0x10010 ) AM_WRITE_LEGACY(mjvegasa_coin_counter_w )
1226   AM_RANGE( 0x10011, 0x10011 ) AM_READ_PORT("SYSTEM") AM_WRITE_LEGACY(input_port_select_w )
1227   AM_RANGE( 0x10013, 0x10013 ) AM_WRITE_LEGACY(input_port_select_w )
1244   AM_RANGE( 0x10010, 0x10010 ) AM_WRITE(mjvegasa_coin_counter_w )
1245   AM_RANGE( 0x10011, 0x10011 ) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
1246   AM_RANGE( 0x10013, 0x10013 ) AM_WRITE(input_port_select_w )
12281247
1229   AM_RANGE( 0x12000, 0x12000 ) AM_WRITE_LEGACY(mjvegasa_rombank_w )
1230   AM_RANGE( 0x12100, 0x12100 ) AM_READ_LEGACY(cafetime_dsw_r )
1231   AM_RANGE( 0x12200, 0x12200 ) AM_WRITE_LEGACY(cafetime_dsw_w )
1232   AM_RANGE( 0x12300, 0x12300 ) AM_WRITE_LEGACY(mjderngr_palbank_w )
1233   AM_RANGE( 0x12400, 0x12400 ) AM_WRITE_LEGACY(mjvegasa_12400_w )
1234   AM_RANGE( 0x12500, 0x12500 ) AM_READ_LEGACY(mjvegasa_12500_r )
1248   AM_RANGE( 0x12000, 0x12000 ) AM_WRITE(mjvegasa_rombank_w )
1249   AM_RANGE( 0x12100, 0x12100 ) AM_READ(cafetime_dsw_r )
1250   AM_RANGE( 0x12200, 0x12200 ) AM_WRITE(cafetime_dsw_w )
1251   AM_RANGE( 0x12300, 0x12300 ) AM_WRITE(mjderngr_palbank_w )
1252   AM_RANGE( 0x12400, 0x12400 ) AM_WRITE(mjvegasa_12400_w )
1253   AM_RANGE( 0x12500, 0x12500 ) AM_READ(mjvegasa_12500_r )
12351254
12361255ADDRESS_MAP_END
12371256
12381257static ADDRESS_MAP_START( mjvegasa_iomap, AS_IO, 8, royalmah_state )
1239   AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE_LEGACY(mjtensin_p3_r, mjvegasa_p3_w )
1240   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE_LEGACY(mjvegasa_p4_w )
1258   AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE(mjtensin_p3_r, mjvegasa_p3_w )
1259   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE(mjvegasa_p4_w )
12411260ADDRESS_MAP_END
12421261
12431262
src/mame/drivers/nmk16.c
r14845r14846
39183918   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
39193919   MCFG_SCREEN_SIZE(256, 256)
39203920   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
3921   MCFG_SCREEN_UPDATE_STATIC(tdragon)
3921   MCFG_SCREEN_UPDATE_STATIC(macross)
39223922   MCFG_SCREEN_VBLANK_STATIC(nmk)
39233923
39243924   MCFG_GFXDECODE(macross)
r14845r14846
40344034   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
40354035   MCFG_SCREEN_SIZE(256, 256)
40364036   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
4037   MCFG_SCREEN_UPDATE_STATIC(hachamf)
4037   MCFG_SCREEN_UPDATE_STATIC(macross)
40384038   MCFG_SCREEN_VBLANK_STATIC(nmk)
40394039
40404040   MCFG_GFXDECODE(macross)
r14845r14846
42434243   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
42444244   MCFG_SCREEN_SIZE(512, 256)
42454245   MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1)
4246   MCFG_SCREEN_UPDATE_STATIC(gunnail)
4246   MCFG_SCREEN_UPDATE_STATIC(tdragon2)
42474247   MCFG_SCREEN_VBLANK_STATIC(nmk)
42484248
42494249   MCFG_GFXDECODE(macross2)
r14845r14846
42844284   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
42854285   MCFG_SCREEN_SIZE(512, 256)
42864286   MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1)
4287   MCFG_SCREEN_UPDATE_STATIC(gunnail)
4287   MCFG_SCREEN_UPDATE_STATIC(tdragon2)
42884288   MCFG_SCREEN_VBLANK_STATIC(nmk)
42894289
42904290   MCFG_GFXDECODE(macross2)
r14845r14846
71257125***************************************************************************/
71267126
71277127
7128GAME( 1989, tharrier, 0,        tharrier, tharrier, 0,        ROT270, "UPL (American Sammy license)", "Task Force Harrier", 0  )
7129GAME( 1989, tharrierj,tharrier, tharrier, tharrier, 0,        ROT270, "UPL",                          "Task Force Harrier (Japan)", 0 )
7128GAME( 1989, tharrier, 0,        tharrier, tharrier, 0,        ROT270, "UPL (American Sammy license)", "Task Force Harrier", GAME_IMPERFECT_GRAPHICS )
7129GAME( 1989, tharrierj,tharrier, tharrier, tharrier, 0,        ROT270, "UPL",                          "Task Force Harrier (Japan)", GAME_IMPERFECT_GRAPHICS )
71307130
7131GAME( 1990, mustang,  0,        mustang,  mustang,  0,        ROT0,   "UPL",                          "US AAF Mustang (25th May. 1990)", GAME_IMPERFECT_SOUND)
7132GAME( 1990, mustangs, mustang,  mustang,  mustang,  0,        ROT0,   "UPL (Seoul Trading license)",  "US AAF Mustang (25th May. 1990 / Seoul Trading)", GAME_IMPERFECT_SOUND )
7131GAME( 1990, mustang,  0,        mustang,  mustang,  0,        ROT0,   "UPL",                          "US AAF Mustang (25th May. 1990)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7132GAME( 1990, mustangs, mustang,  mustang,  mustang,  0,        ROT0,   "UPL (Seoul Trading license)",  "US AAF Mustang (25th May. 1990 / Seoul Trading)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
71337133
7134GAME( 1990, bioship,  0,        bioship,  bioship,  0,        ROT0,   "UPL (American Sammy license)", "Bio-ship Paladin", GAME_IMPERFECT_SOUND )
7135GAME( 1990, sbsgomo,  bioship,  bioship,  bioship,  0,        ROT0,   "UPL",                          "Space Battle Ship Gomorrah", GAME_IMPERFECT_SOUND )
7134GAME( 1990, bioship,  0,        bioship,  bioship,  0,        ROT0,   "UPL (American Sammy license)", "Bio-ship Paladin", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7135GAME( 1990, sbsgomo,  bioship,  bioship,  bioship,  0,        ROT0,   "UPL",                          "Space Battle Ship Gomorrah", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
71367136
7137GAME( 1990, vandyke,    0,       vandyke,  vandyke, 0,        ROT270, "UPL",                          "Vandyke (Japan)",  GAME_IMPERFECT_SOUND )
7138GAME( 1990, vandykejal, vandyke, vandyke,  vandyke, 0,        ROT270, "UPL (Jaleco license)",         "Vandyke (Jaleco, set 1)",  GAME_IMPERFECT_SOUND )
7139GAME( 1990, vandykejal2,vandyke, vandyke,  vandyke, 0,        ROT270, "UPL (Jaleco license)",         "Vandyke (Jaleco, set 2)",  GAME_IMPERFECT_SOUND )
7140GAME( 1990, vandykeb,  vandyke, vandykeb, vandykeb, vandykeb, ROT270, "bootleg",                      "Vandyke (bootleg with PIC16c57)",  GAME_NO_SOUND )
7137GAME( 1990, vandyke,    0,       vandyke,  vandyke, 0,        ROT270, "UPL",                          "Vandyke (Japan)",  GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7138GAME( 1990, vandykejal, vandyke, vandyke,  vandyke, 0,        ROT270, "UPL (Jaleco license)",         "Vandyke (Jaleco, set 1)",  GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7139GAME( 1990, vandykejal2,vandyke, vandyke,  vandyke, 0,        ROT270, "UPL (Jaleco license)",         "Vandyke (Jaleco, set 2)",  GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7140GAME( 1990, vandykeb,  vandyke, vandykeb, vandykeb, vandykeb, ROT270, "bootleg",                      "Vandyke (bootleg with PIC16c57)",  GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
71417141
7142GAME( 1991, blkheart, 0,        blkheart,  blkheart, 0,       ROT0,   "UPL",                          "Black Heart", GAME_IMPERFECT_SOUND  )
7143GAME( 1991, blkheartj,blkheart, blkheart,  blkheart, 0,       ROT0,   "UPL",                          "Black Heart (Japan)", GAME_IMPERFECT_SOUND )
7142GAME( 1991, blkheart, 0,        blkheart,  blkheart, 0,       ROT0,   "UPL",                          "Black Heart", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7143GAME( 1991, blkheartj,blkheart, blkheart,  blkheart, 0,       ROT0,   "UPL",                          "Black Heart (Japan)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
71447144
7145GAME( 1991, acrobatm, 0,        acrobatm, acrobatm, 0,        ROT270, "UPL (Taito license)",          "Acrobat Mission", GAME_IMPERFECT_SOUND )
7145GAME( 1991, acrobatm, 0,        acrobatm, acrobatm, 0,        ROT270, "UPL (Taito license)",          "Acrobat Mission", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
71467146
7147GAME( 1992, strahl,   0,        strahl,   strahl,   0,        ROT0,   "UPL",                          "Koutetsu Yousai Strahl (Japan set 1)", GAME_IMPERFECT_SOUND )
7148GAME( 1992, strahla,  strahl,   strahl,   strahl,   0,        ROT0,   "UPL",                          "Koutetsu Yousai Strahl (Japan set 2)", GAME_IMPERFECT_SOUND )
7147GAME( 1992, strahl,   0,        strahl,   strahl,   0,        ROT0,   "UPL",                          "Koutetsu Yousai Strahl (Japan set 1)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7148GAME( 1992, strahla,  strahl,   strahl,   strahl,   0,        ROT0,   "UPL",                          "Koutetsu Yousai Strahl (Japan set 2)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
71497149
7150GAME( 1991, tdragon,  0,        tdragon,  tdragon,  tdragon,  ROT270, "NMK (Tecmo license)",          "Thunder Dragon (9th Jan. 1992)", GAME_IMPERFECT_SOUND )
7151GAME( 1991, tdragon1, tdragon,  tdragon,  tdragon,  tdragon,  ROT270, "NMK (Tecmo license)",          "Thunder Dragon (4th Jun. 1991)", GAME_IMPERFECT_SOUND )
7150GAME( 1991, tdragon,  0,        tdragon,  tdragon,  tdragon,  ROT270, "NMK (Tecmo license)",          "Thunder Dragon (9th Jan. 1992)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7151GAME( 1991, tdragon1, tdragon,  tdragon,  tdragon,  tdragon,  ROT270, "NMK (Tecmo license)",          "Thunder Dragon (4th Jun. 1991)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
71527152
71537153GAME( 1991, hachamf,  0,        hachamf,  hachamf,  hachamf,  ROT0,   "NMK",                          "Hacha Mecha Fighter (19th Sep. 1991)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
7154GAME( 1992, macross,  0,        macross,  macross,  nmk,      ROT270, "Banpresto",                    "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", GAME_IMPERFECT_SOUND )
7155GAME( 1993, gunnail,  0,        gunnail,  gunnail,  nmk,      ROT270, "NMK / Tecmo",                  "GunNail (28th May. 1992)", GAME_IMPERFECT_SOUND )
7156GAME( 1993, macross2, 0,        macross2, macross2, 0,        ROT0,   "Banpresto",                    "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", GAME_NO_COCKTAIL )
7154GAME( 1992, macross,  0,        macross,  macross,  nmk,      ROT270, "Banpresto",                    "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7155GAME( 1993, gunnail,  0,        gunnail,  gunnail,  nmk,      ROT270, "NMK / Tecmo",                  "GunNail (28th May. 1992)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
7156GAME( 1993, macross2, 0,        macross2, macross2, 0,        ROT0,   "Banpresto",                    "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
71577157
7158GAME( 1993, tdragon2, 0,        tdragon2, tdragon2, 0,        ROT270, "NMK",                          "Thunder Dragon 2 (9th Nov. 1993)", GAME_NO_COCKTAIL )
7159GAME( 1993, tdragon2a,tdragon2, tdragon2, tdragon2, 0,        ROT270, "NMK",                          "Thunder Dragon 2 (1st Oct. 1993)", GAME_NO_COCKTAIL )
7160GAME( 1993, bigbang,  tdragon2, tdragon2, tdragon2, 0,        ROT270, "NMK",                          "Big Bang (9th Nov. 1993)", GAME_NO_COCKTAIL )
7158GAME( 1993, tdragon2, 0,        tdragon2, tdragon2, 0,        ROT270, "NMK",                          "Thunder Dragon 2 (9th Nov. 1993)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
7159GAME( 1993, tdragon2a,tdragon2, tdragon2, tdragon2, 0,        ROT270, "NMK",                          "Thunder Dragon 2 (1st Oct. 1993)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
7160GAME( 1993, bigbang,  tdragon2, tdragon2, tdragon2, 0,        ROT270, "NMK",                          "Big Bang (9th Nov. 1993)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
71617161
7162GAME( 1994, raphero,  0,        raphero,  raphero,  0,        ROT270, "NMK / Media Shoji",            "Rapid Hero", GAME_IMPERFECT_SOUND ) // 23rd July 1993 in test mode, (c)1994 on title screen
7162GAME( 1994, raphero,  0,        raphero,  raphero,  0,        ROT270, "NMK / Media Shoji",            "Rapid Hero", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 23rd July 1993 in test mode, (c)1994 on title screen
71637163
71647164/* both sets of both these games show a date of 9th Mar 1992 in the test mode, they look like different revisions so I doubt this is accurate */
71657165GAME( 1992, sabotenb, 0,        bjtwin,   sabotenb, nmk,      ROT0,   "NMK / Tecmo",                  "Saboten Bombers (set 1)", GAME_NO_COCKTAIL )
src/mame/drivers/miniboy7.c
r14845r14846
161161   UINT8 *m_videoram;
162162   UINT8 *m_colorram;
163163   tilemap_t *m_bg_tilemap;
164   DECLARE_WRITE8_MEMBER(miniboy7_videoram_w);
165   DECLARE_WRITE8_MEMBER(miniboy7_colorram_w);
164166};
165167
166168
r14845r14846
168170*          Video Hardware          *
169171***********************************/
170172
171static WRITE8_HANDLER( miniboy7_videoram_w )
173WRITE8_MEMBER(miniboy7_state::miniboy7_videoram_w)
172174{
173   miniboy7_state *state = space->machine().driver_data<miniboy7_state>();
174   state->m_videoram[offset] = data;
175   state->m_bg_tilemap->mark_tile_dirty(offset);
175   m_videoram[offset] = data;
176   m_bg_tilemap->mark_tile_dirty(offset);
176177}
177178
178static WRITE8_HANDLER( miniboy7_colorram_w )
179WRITE8_MEMBER(miniboy7_state::miniboy7_colorram_w)
179180{
180   miniboy7_state *state = space->machine().driver_data<miniboy7_state>();
181   state->m_colorram[offset] = data;
182   state->m_bg_tilemap->mark_tile_dirty(offset);
181   m_colorram[offset] = data;
182   m_bg_tilemap->mark_tile_dirty(offset);
183183}
184184
185185static TILE_GET_INFO( get_bg_tile_info )
r14845r14846
268268
269269static ADDRESS_MAP_START( miniboy7_map, AS_PROGRAM, 8, miniboy7_state )
270270   AM_RANGE(0x0000, 0x07ff) AM_RAM   AM_SHARE("nvram") /* battery backed RAM? */
271   AM_RANGE(0x0800, 0x0fff) AM_RAM_WRITE_LEGACY(miniboy7_videoram_w) AM_BASE(m_videoram)
272   AM_RANGE(0x1000, 0x17ff) AM_RAM_WRITE_LEGACY(miniboy7_colorram_w) AM_BASE(m_colorram)
271   AM_RANGE(0x0800, 0x0fff) AM_RAM_WRITE(miniboy7_videoram_w) AM_BASE(m_videoram)
272   AM_RANGE(0x1000, 0x17ff) AM_RAM_WRITE(miniboy7_colorram_w) AM_BASE(m_colorram)
273273   AM_RANGE(0x1800, 0x25ff) AM_RAM   /* looks like videoram */
274274   AM_RANGE(0x2600, 0x27ff) AM_RAM
275275   AM_RANGE(0x2800, 0x2800) AM_DEVWRITE("crtc", mc6845_device, address_w)
src/emu/sound/ymf271.c
r14845r14846
14521452               {
14531453                  chip->timerA |= (data & 0xff)<<8;
14541454               }
1455               else
1456                  chip->timerA |= 0x200;
14571455            }
14581456            break;
14591457
r14845r14846
14841482            {   // timer A reset
14851483               chip->irqstate &= ~1;
14861484               chip->status &= ~1;
1485               chip->timerAVal |= 0x300;
14871486
14881487               if (chip->irq_callback) chip->irq_callback(chip->device, 0);
14891488
1490               //period = (double)(256.0 - chip->timerAVal ) * ( 384.0 * 4.0 / (double)CLOCK);
1491               period = attotime::from_hz(chip->clock) * (384 * (1024 - chip->timerAVal));
1489               period = attotime::from_hz(chip->clock) * (384 * 4 * (1024 - chip->timerAVal));
14921490
14931491               chip->timA->adjust(period, 0, period);
14941492            }
src/emu/machine/i8155.c
r14845r14846
11/**********************************************************************
22
3    Intel 8155 - 2048-Bit Static MOS RAM with I/O Ports and Timer emulation
3    Intel 8155/8156 - 2048-Bit Static MOS RAM with I/O Ports and Timer emulation
44
55    Copyright MESS Team.
66    Visit http://mamedev.org for licensing and usage restrictions.
r14845r14846
1919#include "i8155.h"
2020
2121
22// device type definition
22// device type definitions
2323const device_type I8155 = &device_creator<i8155_device>;
24const device_type I8156 = &device_creator<i8155_device>;
2425
2526
2627//**************************************************************************
src/emu/machine/i8155.h
r14845r14846
11/**********************************************************************
22
3    Intel 8155 - 2048-Bit Static MOS RAM with I/O Ports and Timer emulation
3    Intel 8155/8156 - 2048-Bit Static MOS RAM with I/O Ports and Timer emulation
4    8156 is the same as 8155, except that chip enable is active high instead of low
45
56    Copyright MESS Team.
67    Visit http://mamedev.org for licensing and usage restrictions.
r14845r14846
5455   MCFG_DEVICE_ADD((_tag), I8155, _clock)   \
5556   MCFG_DEVICE_CONFIG(_config)
5657
58
59#define MCFG_I8156_ADD(_tag, _clock, _config) \
60   MCFG_DEVICE_ADD((_tag), I8156, _clock)   \
61   MCFG_DEVICE_CONFIG(_config)
62
63
5764#define I8155_INTERFACE(name) \
5865   const i8155_interface (name) =
5966
6067
68#define I8156_INTERFACE(name) \
69   const i8155_interface (name) =
6170
71
72
6273//**************************************************************************
6374//  TYPE DEFINITIONS
6475//**************************************************************************
r14845r14846
148159
149160// device type definition
150161extern const device_type I8155;
162extern const device_type I8156;
151163
152164
153165

Previous 15994 Revisions Next


© 1998-2018 The MESS Team